{"version":3,"sources":["components/Loader.js","constants/regex.js","constants/deal.js","constants/layout.js","helpers/contexts/layoutContext.js","helpers/contexts/featureContext.js","constants/project.js","helpers/contexts/appMenuContext.js","helpers/utilities/format.js","helpers/utilities/form.js","helpers/utilities/search.js","helpers/utilities/storage.js","helpers/utilities/constant.js","constants/user.js","store/index.js","store/posts/selectors.js","store/posts/saga.js","store/sagas.js","store/posts/reducer.js","store/reducers.js","helpers/utilities/index.js","constants/company.js","helpers/mapKeyConvert.js","routes/index.js","config/aws.js","config/amplify.js","helpers/contexts/paymentContext.js","routes/Routes.js","App.js","serviceWorker.js","index.tsx","store/posts/actions.js","helpers/contexts/authContext.js","constants/other.js","helpers/requests/fileResource.js","helpers/contexts/axiosContext.js","store/posts/actionTypes.js","helpers/builders/reqBuilder.js","helpers/requests/resourceCache.js","exceptions/resourceException.js","helpers/hooks/useRequest.js","helpers/requests/dataFetcher.js"],"names":["Loader","_ref","isOverlay","modifierClassList","useMemo","classes","push","_jsx","className","cx","join","children","_jsxs","regexAliasCode","regexEMail","regexUserInviteCode","regexKanaWithAlphabet","regexPhoneNumber","regexAccountPassword","regexAccountPasswordEnableCharacter","regexUrlAuthCode","regexZipCodeWithAbroad","regexUrl","dealPaginatinPerTypes","label","options","value","dealPaginatinSortByTypes","dealPaginatinSortOrderTypes","default","createdAt","joinedCompanyDealPaginatinPerTypes","joinedCompanyDealPaginatinSortByTypes","joinedCompanyDealPaginatinSortOrderTypes","dealSubscribeSurveyTypes","dealStatuses","LAYOUT_VERTICAL","LAYOUT_WIDTH_FLUID","LEFT_SIDEBAR_THEME_DEFAULT","LEFT_SIDEBAR_TYPE_FIXED","stub","Error","initialState","changeLayout","changeLayoutWidth","changeSidebarTheme","changeSidebarType","toggleRightSideBar","showRightSideBar","hideRightSidebar","layoutState","LayoutContext","createContext","Provider","LayoutProvider","_ref2","layoutType","layoutWidth","leftSideBarTheme","leftSideBarType","isShowRightSidebar","setLayoutState","initLayoutType","initLayoutWidth","initLeftTheme","initLeftType","initIsShowRight","setLayoutType","useState","setLayoutWidth","setLeftSideBarTheme","setLeftSideBarType","setIsShowRightSidebar","args","arguments","length","undefined","Object","keys","forEach","key","useLayout","layoutConstants","useEffect","manageBodyClass","cssClass","action","document","body","classList","add","remove","toggle","clientDevice","setClientDevice","_window","deviceDetect","rdd","window","navigator","userAgent","toLowerCase","mediaQuery","matchMedia","isMobile","isTablet","isBrowser","isDesktopView","matches","isMobileView","timer","setInterval","_window2","original","current","hash","assign","clearInterval","layout","width","theme","type","toggleRightSidebar","showRightSidebar","FeatureContext","enabledFeatures","featureDeal","featureGlobalAccess","FeatureProvider","_process$env","_process$env2","_process$env3","deal","parseInt","process","REACT_APP_IS_ENABLE_FEATURE_DEAL","globalAccess","REACT_APP_IS_ENABLE_FEATURE_GLOBAL_ACCESS","v2ChatApi","REACT_APP_IS_ENABLE_FEATURE_V2_CHAT_API","projectPaginatinPerTypes","projectPaginatinSortByTypes","projectPaginatinSortOrderTypes","publishedAt","startedFrom","expiredOn","joinedContractProjectPaginationPerTypes","joinedContractProjectPaginationSortByTypes","joinedContractProjectPaginationSortOrderTypes","id","status","referenceType","price","joinedOrdrerProjectPaginationPerTypes","joinedOrdrerProjectPaginationSortByTypes","joinedOrdrerProjectPaginationSortOrderTypes","joinedProjectRecruitPaginatinPerTypes","joinedProjectRecruitPaginatinSortByTypes","joinedProjectRecruitPaginatinSortOrderTypes","priceTypes","priceUnitTypes","interviewTypes","workTypes","projectTypes","description","priceEvaluateTypes","participationTypes","statuses","recruitStatuses","projectOwnerTypes","workAverageTypes","contractTypes","relateTypes","referenceTypes","stickerTypes","projectScheduledAtTimeTypes","Array","map","item","index","concat","String","slice","publishScopeTypes","publishScopeRangeTypes","initState","initMenu","changeActiveMenuFromLocation","menuItems","activatedMenuItemIds","activatedMenuChildItemIds","AppMenuContext","AppMenuProvider","Consumer","setMenuItems","setActivatedMenuItemIds","setActivatedMenuChildItemIds","isUserSettingMenu","setIsUserSettingMenu","isUserPostMenu","setIsUserPostMenu","isDealMenu","setIsDealMenu","isBillingMenu","setIsBillingMenu","addMenuItem","navigationDisplayRoutes","location","pathname","match","navigationSettingDisplayRoutes","navigationPostTagDisplayRoutes","navigationPostDisplayRoutes","navigationDealDisplayRoutes","assignIdAndParent","getActivatedMenuItemIds","getActivatedMenuChildItemIds","menuDisplayRoutes","uuid","parentId","active","matchingItems","menuItem","isDashboardRoutes","isFeatureAppRoutes","utilities","path","indexOf","isPostRoutes","params","URLSearchParams","search","get","Number","companyId","childMatchingItems","from","Set","isChildMenuItems","filterEmptyString","data","isArray","filter","getUploadValues","name","fileKey","preview","url","getCategories","getCategoriesByChildItems","reduce","prev","getSkillCategories","getSkillCategoriesByChildItems","getDealCategories","getDealCategoriesByChildItems","getLocations","getLocationsByChildItems","getLanguages","getUserWorkExperienceCareers","employmentType","userEmploymentTypes","find","e","affiliation","endDate","detail","isActive","role","startDate","getUserWorkExperienceSkills","categories","year","userSkillYearTypes","category","_item$category","getUserWorkExperienceCertificates","certifiedOn","dayjs","isValid","getUserWorkExperienceLanguages","languages","userLanguageYearTypes","isNative","getCompanyTags","getFormatNumberAsString","tmp","split","replace","getProjectConditionPrices","amountMin","amountMax","getUserWorkExperienceLastCareer","dataCopy","sort","a","b","values","valueOf","sortUserWorkExperienceLastCareer","startDates","endDates","isBefore","convertNumberToStyleValue","v","d","u","unit","defaultValue","getSuccessMessageList","messagePrefix","messages","prefix","message","actionName","getErrorMessageList","validDropDown","selected","required","master","some","entry","validDropDownMultiple","validDropDownCreatable","validDate","isExactCheck","beforeDate","format","validDateRange","to","messagePrefixes","validDocumentFile","maxByte","maxMegaByte","Math","pow","toFixed","size","regex","RegExp","validImageFile","_values$","_values$$type","validImage","_value$type","getSelectedFileInfo","file","_file$name","_file$preview","_file$formattedSize","isImage","fileIconClassName","fileTypeName","formattedSize","getUploadedFileValue","_value$id","_value$originalFileNa","_value$originalFileNa2","_value$url","isOriginal","originalFileName","extension","substring","lastIndexOf","getApiErrorMessages","res","ret","errorMessages","error","code","_res$data$error$messa","detailKeys","acc","parseQueryString","queryAsString","isFilter","filterList","startsWith","querystring","parse","buildQueryString","queries","httpBuildQuery","getSearchParameterArrayTypeValue","getSearchParameterMultipleArrayTypeValue","currentArray","getSearchCompanyQuery","employeeCountValues","minValues","employeeCountTypes","min","maxValues","max","getSearchParameterEmployeeCountType","employeeCountType","keyword","employeeCountMin","employeeCountMax","locationIds","mapKeysSnakeCase","getSearchProjectQuery","categoryIds","finishedBy","interviewType","participationType","priceAmountMax","priceAmountMin","projectOwner","priceType","projectType","workType","skillCategoryIds","stickerLabels","isWanted","getSearchUserQuery","workingStatus","getInitialSearchParameter","skillCategories","locations","mapKeysCamelCase","parameters","searchType","splitEmployeeCountTypeString","splitWorkingStatusString","userWorkStatusTypes","splitInterviewTypeString","splitParticipationTypeString","splitProjectTypeString","selectCategoryIds","selectSkillCategoryIds","selectLocationIds","isLocalStorageEnabled","isWriteCheck","localStorage","getItem","setItem","removeItem","setLocalStorageItem","JSON","stringify","getLocalStorageItem","clearLocalStorageOtherKey","clear","initFailedCount","config","isReset","_storageData$config$n","_storageData$config$n2","storageData","datetime","count","failedDateTime","currentDateTime","diff","getFailedCount","_storageData$config$n3","_storageData$config$n4","_storageData$config$n5","isInteger","updateFailedCount","_storageData$config$n6","_storageData$config$n7","_storageData$config$n8","_storageData$config$n9","_storageData$config$n10","getStorageAuthorizedDataAsBase64","Buffer","toString","_","getSelectOptions","list","title","getParticipationType","getPriceUnitType","getProjectType","getWorkType","getInterviewType","getWorkAverageType","workAverageType","getProjectStatus","getProjectRecruitStatus","getProjectReferenceType","getProjectPublishScopeType","publishScopeType","getProjectPublishScopeRangeType","publishScopeRangeType","userWorkStatusType","loginedStatusType","loginedStatusTypes","userSkillYearType","userLanguageYearType","userEmploymentType","getUserConnectionType","userConnectionType","userConnectionTypes","getUserParticipationType","userParticipationType","userParticipationTypes","getCompanyRole","roles","getCompanyMemberStatus","memberStatuses","getDealStatus","notificationType","notificationTypes","userPaginatinPerTypes","userPaginatinSortByTypes","userPaginatinSortOrderTypes","loginedAt","genderTypes","userCareersYearTypes","currentYear","userCertificatesYearTypes","userMonthTypes","userConnectionStatusTypes","isParticipationCompany","isAffiliationCompany","userInvitationTypes","userJoinedCompanySettingTypes","userJoinedCompanySettingExternalShowTypes","sagaMiddleware","createSagaMiddleware","store","configureStore","reducer","middleware","getDefaultMiddleware","_process","REACT_APP_ENV","logger","run","rootSaga","getPosts","state","PostReducer","posts","onGetPosts","payload","_payload$data","_payload$data$meta","_payload$data2","_payload$data2$meta","newPosts","select","put","getPostsSuccess","currentPage","meta","lastPage","getPostsFail","response","onCreatePost","currentPosts","resetPosts","createPostFail","onUpdatePost","_ref3","updatePostSuccess","post","updatePostFail","onPublicSaveDraft","_ref4","unshift","onDeletePost","_ref5","deletePostSuccess","deletePostFail","CartSaga","takeLatest","GET_POSTS","CREATE_POST","UPDATE_POST","DELETE_POST","PUBLIC_SAVE_DRAFT","all","fork","PostSaga","isLoadingPost","isLoading","isError","GET_POSTS_SUCCESS","GET_POSTS_FAIL","CREATE_POST_SUCCESS","CREATE_POST_FAIL","UPDATE_POST_SUCCESS","UPDATE_POST_FAIL","DELETE_POST_SUCCESS","DELETE_POST_FAIL","RESET_STATE","rootReducer","combineReducers","sleep","time","Promise","resolve","setTimeout","getPageTitle","props","numWithDelimiter","number","nl2br","msg","reactNl2br","React","Fragment","_Fragment","nl2brAndAnchorLink","reactStringReplace","href","target","rel","uuidv4","getGoogleTagId","getGoogleTagManagerId","_process2","_process2$env","isFullWidthPageContent","isPublicSharingPageContent","isChatGroupMessagePageContent","hasSidebarPagePath","getParentMenuItemPath","parseUrl","URL","getSearchType","getNextRedirectUrl","urls","origin","currentIndex","nextUrlIndex","getAppDomain","host","companyPaginatinPerTypes","companyPaginatinSortByTypes","companyPaginatinSortOrderTypes","activeProjectCount","joinedCompanyPaginatinPerTypes","joinedCompanyPaginatinSortByTypes","joinedCompanyPaginatinSortOrderTypes","joinedCompanyMemberPaginatinPerTypes","joinedCompanyMemberPaginatinSortByTypes","joinedCompanyMemberPaginatinSortOrderTypes","joinedAt","memberTypes","companyEstablishmentOnYearTypes","companyFinancialYearTypes","memberBirthDayYearTypes","companyMonthTypes","companyDayTypes","memberSettingTypes","memberSettingExternalShowTypes","_mapKeysDeep","_value","camelCase","test","snakeCase","callback","innerData","isPlainObject","mapValues","mapKeys","val","Route","component","Component","rest","authState","loading","useContext","AuthContext","locState","useLocation","BaseRoute","render","isAccountPath","isCallback","isStaticContentPath","isPublicPagePath","isPublicSharingPagePath","syncRedirect","syncRedirectUrls","REACT_APP_SYNC_URL_LIST","localstorageKeys","_window$location","base64Data","callbackUrl","encodeURIComponent","REACT_APP_URL","nextRedirectUrl","Redirect","redirectTimer","isInActive","isSignUp","isSignIn","isRegisteredlogin","isRegistered","redirectUrlAfterLogin","_location","_location$search","_location2","_location3","_location$search2","_location4","_process$env4","_process$env5","_process$env6","rootRoute","exact","route","dashboardRoutes","icon","header","lazy","featureAppRoutes","isEnabled","_enabledFeatures$deal","_item$isEnabled","featureHideAppRoutes","parentPath","_enabledFeatures$deal2","_enabledFeatures$deal3","_enabledFeatures$deal4","_enabledFeatures$deal5","_enabledFeatures$deal6","_item$isEnabled2","authRoutes","_item$isEnabled3","settingRoutes","_item$isEnabled4","billingRoutes","dealRoutes","isDealRoutes","_enabledFeatures$deal7","_enabledFeatures$deal8","_item$isEnabled5","postRoutes","_item$isEnabled6","postTagRoutes","_item$isEnabled7","linkRoutes","_item$isEnabled8","errorRoutes","_item$isEnabled9","flattenRoutes","crr","allRoutes","allFlattenRoutes","AmplifyConfig","Auth","region","userPoolId","userPoolWebClientId","storage","oauth","domain","scope","redirectSignIn","redirectSignOut","responseType","Amplify","configure","createPartsElement","elements","submit","PaymentContext","AuthLayout","Loadable","loader","loaded","BlankLayout","NoLoginLayout","BaseLayout","Layout","isLoaded","scrollTo","uuAuthCode","isAuth","isNoLogin","isPublicContent","isSync","App","Switch","routes","flatpickr","localize","Japanese","BrowserRouter","Routes","Boolean","hostname","axiosInstance","axios","create","baseURL","headers","Accept","rootNode","getElementById","ReactGTM","initialize","gtmId","ReactGA","ReactDOM","AxiosProvider","instance","AuthProvider","auth","hub","Hub","payjp","setPayjp","setElements","brand","setBrand","async","script","Payjp","retrieveAvailability","then","init","useCallback","_elements","cvc","expiry","el","_componentName","elementStyle","base","color","fontSize","style","placeholder","createToken","numberElement","token","catch","_e","serviceWorker","ready","registration","unregister","createPost","updatePost","publicSaveDraft","deletePost","isLoggedIn","appleSignIn","googleSignIn","facebookSignIn","signIn","signUp","signOut","setAuthState","authData","setAuthData","setLoading","setIsLoaded","userData","setUserData","configData","setConfigData","organizationData","setOrganizationData","updateAuthState","getSession","currentSession","userRequest","useRequest","configRequest","getUser","err","getConfig","currentAuthenticatedUser","hubCallback","event","user","listen","chargeOptions","tag","note","chargeProjectOptions","chargePlans","monthlyPrice","yearlyPrice","companyTags","paymentTypes","enLabel","enName","attachedCategories","attachedSkillCategories","parent","i","parentIndex","findIndex","dealCategories","updateConfigData","federatedSignIn","provider","username","pass","password","attributes","verifyCode","confirmSignUp","resendCode","resendSignUp","register","forgotPassword","forgotPasswordCode","newPassword","forgotPasswordSubmit","changeOrganization","organization","otherPaginatinPerTypes","otherPaginatinSortByTypes","otherPaginatinSortOrderTypes","consultationTypes","searchTypes","scriptSrc","reject","createElement","onload","onerror","src","getElementsByTagName","appendChild","AxiosContext","responseBuilder","caches","Map","resourceCache","apiFn","has","set","apiCache","_len","_key","dataFn","_len2","_key2","delete","_len3","_key3","ResourceException","constructor","super","this","defineProperty","configurable","enumerable","writable","captureStackTrace","useAsyncResource","apiFunction","option","isForce","fetcherRef","useRef","fetcherBuilder","newOpt","clearCache","reqFn","dataFetcher","apiFnCache","cachedResource","fetchingPromise","result","dataFetcherFn","modifier","_error","_error2","isCancel","request","forceRender","ct","getSessionFn","session","requestBuilder","Authorization","idToken","jwtToken","reqConfig","anonymouseRequest","paralellRequest","configArray","reqConf","requester","method","targetUrl","isAnonymouse","optBuilder","newUrl","arg","asyncGet","initParams","setParams","getFn","setGetFn","getter","updater","refetch","patch","axiosPost","axiosDelete"],"mappings":"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","file":"static/js/main.f2e15528.chunk.js","sourcesContent":["import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport cx from 'classnames';\n\n/**\n * Renders the preloader\n */\nconst Loader = ({ isOverlay }) => {\n const modifierClassList = useMemo(() => {\n const classes = [];\n if (typeof isOverlay !== 'undefined' && !isOverlay)\n classes.push('is-transparent');\n return classes;\n }, [isOverlay]);\n\n return (\n
\n
\n
\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default Loader;\n\nLoader.propTypes = {\n isOverlay: PropTypes.bool,\n};\n","export const regexCode = '^[a-zA-Z0-9]{1,100}$';\nexport const regexAliasCode =\n '^(?!\\\\d+$)[a-zA-Z0-9](?:[a-zA-Z0-9\\\\-_]{0,98}[a-zA-Z0-9])?$';\nexport const regexEMail = '^[!-~]+@[!-~]+$';\nexport const regexFormatNumber = '^[0-9,]{1,}$';\n// export const regexUserInviteCode = '^[a-zA-Z0-9]{1,100}$'\nexport const regexUserInviteCode = '^[a-zA-Z0-9]{1,}$';\nexport const regexKana = '^[ァ-ヶーヲ-゚]{1,}$';\nexport const regexKanaWithAlphabet = '^[a-zA-Zァ-ヶーヲ-゚]{1,}$';\nexport const regexPhoneNumber = '^[0-9+\\\\-]{1,}$';\n// export const regexAccountPassword =\n// '^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#%&_-])[a-zA-Z0-9!@#%&_-]{8,64}$'\nexport const regexAccountPassword =\n '^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])[a-zA-Z0-9!@#%&_\\\\-]{8,64}$';\nexport const regexAccountPasswordEnableCharacter =\n '^[a-zA-Z0-9!@#%&_\\\\-]{8,64}$';\nexport const regexUrlAuthCode = '^(UI-)[0-9a-zA-Z]{1,}$';\nexport const regexZipCode = '^[0-9]{3}[\\\\-]{0,1}[0-9]{4}$';\nexport const regexZipCodeWithAbroad = '^(?![\\\\s\\\\-]*$)[0-9a-zA-Z\\\\-\\\\s]{1,12}$';\nexport const regexUrl =\n '^(https?:\\\\/\\\\/[a-zA-Z0-9\\\\-\\\\.]+(?:\\\\.[a-zA-Z]{2,})(?::[0-9]{1,5})?(?:\\\\/[^\\\\s]*)?(?:\\\\?[^\\\\s]*)?)$';\n","// ページネーション設定: 表示件数\nexport const dealPaginatinPerTypes = {\n label: '表示件数',\n options: [\n // { label: '1', value: 1 },\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const dealPaginatinSortByTypes = {\n label: '並び順(キー)',\n options: [{ label: '登録日', value: 'createdAt' }],\n};\n\n// ページネーション設定: 並び順(タイプ)\nexport const dealPaginatinSortOrderTypes = {\n label: '並び順(タイプ)',\n default: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n createdAt: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n};\n\n// ページネーション設定: 表示件数\nexport const joinedCompanyDealPaginatinPerTypes = {\n label: '表示件数',\n options: [\n // { label: '1', value: 1 },\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const joinedCompanyDealPaginatinSortByTypes = {\n label: '並び順(キー)',\n options: [{ label: '登録日', value: 'createdAt' }],\n};\n\nexport const joinedCompanyDealPaginatinSortOrderTypes = {\n label: '並び順(タイプ)',\n default: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n createdAt: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n};\n\nexport const dealSubscribeSurveyTypes = {\n label: 'パートナー活用事例のシェア、インタビュー、などへ協力いただけますか?',\n options: [\n { label: 'Yes', value: 'YES' },\n { label: 'No', value: 'NO' },\n { label: 'その他', value: 'OTHER' },\n ],\n};\n\nexport const dealStatuses = {\n label: 'ステータス',\n options: [\n { label: '公開', value: 'ACTIVE' },\n { label: '下書き', value: 'DRAFT' },\n { label: '非公開', value: 'INACTIVE' },\n ],\n};\n","/* Layout types and other constants */\n\nexport const LAYOUT_VERTICAL = 'vertical';\nexport const LAYOUT_HORIZONTAL = 'topnav';\nexport const LAYOUT_DETACHED = 'detached';\n\nexport const LAYOUT_WIDTH_FLUID = 'fluid';\nexport const LAYOUT_WIDTH_BOXED = 'boxed';\n\nexport const LEFT_SIDEBAR_THEME_DEFAULT = 'default';\nexport const LEFT_SIDEBAR_THEME_LIGHT = 'light';\nexport const LEFT_SIDEBAR_THEME_DARK = 'dark';\n\nexport const LEFT_SIDEBAR_TYPE_FIXED = 'fixed';\nexport const LEFT_SIDEBAR_TYPE_CONDENSED = 'condensed';\nexport const LEFT_SIDEBAR_TYPE_SCROLLABLE = 'scrollable';\n\nexport const LAYOUT_BREAK_POINT = '750px';\n","import React, { createContext, useEffect, useState } from 'react';\nimport * as layoutConstants from '@constants/layout';\nimport * as rdd from 'react-device-detect';\nimport hash from 'object-hash';\nconst stub = () => {\n throw new Error('forgot to wrap provider');\n};\nconst initialState = {\n changeLayout: stub,\n changeLayoutWidth: stub,\n changeSidebarTheme: stub,\n changeSidebarType: stub,\n toggleRightSideBar: stub,\n showRightSideBar: stub,\n hideRightSidebar: stub,\n layoutState: null,\n};\nexport const LayoutContext = createContext(initialState);\nconst { Provider } = LayoutContext;\n\nconst useLayout = ({\n layoutType: initLayoutType,\n layoutWidth: initLayoutWidth,\n leftSideBarTheme: initLeftTheme,\n leftSideBarType: initLeftType,\n isShowRightSidebar: initIsShowRight,\n}) => {\n const [layoutType, setLayoutType] = useState(initLayoutType);\n const [layoutWidth, setLayoutWidth] = useState(initLayoutWidth);\n const [leftSideBarTheme, setLeftSideBarTheme] = useState(initLeftTheme);\n const [leftSideBarType, setLeftSideBarType] = useState(initLeftType);\n const [isShowRightSidebar, setIsShowRightSidebar] = useState(initIsShowRight);\n const updateState = (args = {}) => {\n Object.keys(args).forEach((key) => {\n switch (key) {\n case 'layoutType':\n setLayoutType(args[key]);\n break;\n case 'layoutWidth':\n setLayoutWidth(args[key]);\n break;\n case 'leftSideBarTheme':\n setLeftSideBarTheme(args[key]);\n break;\n case 'leftSideBarType':\n setLeftSideBarType(args[key]);\n break;\n case 'isShowRightSidebar':\n setIsShowRightSidebar(args[key]);\n break;\n }\n });\n };\n\n return [\n {\n layoutType,\n layoutWidth,\n leftSideBarTheme,\n leftSideBarType,\n isShowRightSidebar,\n },\n updateState,\n ];\n};\n\nexport const LayoutProvider = ({ children }) => {\n const [\n {\n layoutType,\n layoutWidth,\n leftSideBarTheme,\n leftSideBarType,\n isShowRightSidebar,\n },\n setLayoutState,\n ] = useLayout({\n layoutType: layoutConstants.LAYOUT_VERTICAL,\n layoutWidth: layoutConstants.LAYOUT_WIDTH_FLUID,\n leftSideBarTheme: layoutConstants.LEFT_SIDEBAR_THEME_DEFAULT,\n leftSideBarType: layoutConstants.LEFT_SIDEBAR_TYPE_FIXED,\n isShowRightSidebar: false,\n });\n const changeBodyAttribute = (_attribute, _value) => {\n // if (document.body) document.body.setAttribute(attribute, value)\n return true;\n };\n\n const manageBodyClass = (cssClass, action) => {\n switch (action) {\n case 'add':\n if (document.body) document.body.classList.add(cssClass);\n break;\n case 'remove':\n if (document.body) document.body.classList.remove(cssClass);\n break;\n default:\n if (document.body) document.body.classList.toggle(cssClass);\n break;\n }\n return true;\n };\n\n useEffect(() => {\n layoutType && changeBodyAttribute('data-layout', layoutType);\n if (layoutType === layoutConstants.LAYOUT_VERTICAL) {\n setLayoutState({\n leftSideBarTheme: layoutConstants.LEFT_SIDEBAR_THEME_DEFAULT,\n leftSideBarType: layoutConstants.LEFT_SIDEBAR_TYPE_FIXED,\n });\n }\n\n if (layoutType === layoutConstants.LAYOUT_HORIZONTAL) {\n setLayoutState({\n leftSideBarTheme: layoutConstants.LEFT_SIDEBAR_THEME_DEFAULT,\n leftSideBarType: layoutConstants.LEFT_SIDEBAR_TYPE_FIXED,\n });\n }\n\n if (layoutType === layoutConstants.LAYOUT_DETACHED) {\n setLayoutState({\n layoutWidth: layoutConstants.LAYOUT_WIDTH_FLUID,\n leftSideBarTheme: layoutConstants.LEFT_SIDEBAR_THEME_DEFAULT,\n leftSideBarType: layoutConstants.LEFT_SIDEBAR_TYPE_SCROLLABLE,\n });\n }\n }, [layoutType]);\n\n useEffect(() => {\n layoutWidth && changeBodyAttribute('data-layout-mode', layoutWidth);\n }, [layoutWidth]);\n\n useEffect(() => {\n leftSideBarTheme &&\n changeBodyAttribute('data-leftbar-theme', leftSideBarTheme);\n }, [leftSideBarTheme]);\n\n useEffect(() => {\n leftSideBarType &&\n changeBodyAttribute('data-leftbar-compact-mode', leftSideBarType);\n }, [leftSideBarType]);\n\n useEffect(() => {\n manageBodyClass('right-bar-enabled', isShowRightSidebar ? 'add' : 'remove');\n }, [isShowRightSidebar]);\n const changeLayout = (layout) => {\n setLayoutState({\n layoutType: layout,\n });\n };\n const changeLayoutWidth = (width) => {\n setLayoutState({\n layoutWidth: width,\n });\n };\n const changeSidebarTheme = (theme) => {\n setLayoutState({\n leftSideBarTheme: theme,\n });\n };\n const changeSidebarType = (type) => {\n setLayoutState({ leftSideBarType: type });\n };\n const toggleRightSidebar = () => {\n setLayoutState({\n isShowRightSidebar: !isShowRightSidebar,\n });\n };\n const showRightSidebar = () => {\n setLayoutState({\n isShowRightSidebar: true,\n });\n };\n const hideRightSidebar = () => {\n setLayoutState({\n isShowRightSidebar: false,\n });\n };\n\n const [clientDevice, setClientDevice] = useState(\n (() => {\n // uaからデバイス判定\n const deviceDetect = rdd.deviceDetect(\n window.navigator.userAgent.toLowerCase()\n );\n\n // メディアクエリ判定\n const mediaQuery = window?.matchMedia\n ? window.matchMedia('(max-width: 750px)')\n : {};\n\n return {\n isMobile: deviceDetect?.isMobile ? true : false,\n isTablet: deviceDetect?.isTablet ? true : false,\n isBrowser: deviceDetect?.isBrowser ? true : false,\n isDesktopView: !mediaQuery?.matches ? true : false,\n isMobileView: mediaQuery?.matches ? true : false,\n };\n })()\n );\n\n useEffect(() => {\n // 一定間隔でクライアントのデバイスを確認\n const timer = setInterval(() => {\n // uaからデバイス判定\n const deviceDetect = rdd.deviceDetect(\n window.navigator.userAgent.toLowerCase()\n );\n\n // メディアクエリ判定\n const mediaQuery = window?.matchMedia\n ? window.matchMedia('(max-width: 750px)')\n : {};\n\n // 保存済みデバイス情報を取得\n const original = clientDevice;\n\n // 最新デバイス情報を取得\n const current = {\n isMobile: deviceDetect?.isMobile ? true : false,\n isTablet: deviceDetect?.isTablet ? true : false,\n isBrowser: deviceDetect?.isBrowser ? true : false,\n isDesktopView: !mediaQuery?.matches ? true : false,\n isMobileView: mediaQuery?.matches ? true : false,\n };\n\n // デバイス情報が未設定 || 保存済みデバイスと最新デバイス情報に差分がある場合は更新\n if (!original || hash(original) != hash(current)) {\n setClientDevice(Object.assign({}, current));\n }\n }, 300);\n\n return () => clearInterval(timer);\n }, [clientDevice]);\n\n return (\n \n {children}\n \n );\n};\n","import React, { createContext } from 'react';\n\nconst initialState = {\n enabledFeatures: {\n featureDeal: false,\n featureGlobalAccess: false,\n },\n};\n\nexport const FeatureContext = createContext({ initialState });\nexport const FeatureProvider = ({ children }) => {\n const enabledFeatures = {\n deal:\n parseInt(process.env?.REACT_APP_IS_ENABLE_FEATURE_DEAL) == 1\n ? true\n : false,\n globalAccess:\n parseInt(process.env?.REACT_APP_IS_ENABLE_FEATURE_GLOBAL_ACCESS) == 1\n ? true\n : false,\n v2ChatApi:\n parseInt(process.env?.REACT_APP_IS_ENABLE_FEATURE_V2_CHAT_API) == 1\n ? true\n : false,\n };\n\n return (\n \n {children}\n \n );\n};\n","// ページネーション設定: 表示件数\nexport const projectPaginatinPerTypes = {\n label: '表示件数',\n options: [\n // { label: '1', value: 1 },\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const projectPaginatinSortByTypes = {\n label: '並び順(キー)',\n options: [\n { label: 'プロジェクト公開日', value: 'publishedAt' },\n { label: 'プロジェクト開始日', value: 'startedFrom' },\n { label: '募集締切日', value: 'expiredOn' },\n ],\n};\n\n// ページネーション設定: 並び順(タイプ)\nexport const projectPaginatinSortOrderTypes = {\n label: '並び順(タイプ)',\n default: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n publishedAt: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n startedFrom: {\n options: [\n { label: '早い', value: 'ASC' },\n { label: '遅い', value: 'DESC' },\n ],\n },\n expiredOn: {\n options: [\n { label: '早い', value: 'ASC' },\n { label: '遅い', value: 'DESC' },\n ],\n },\n};\n\n// ページネーション設定: 表示件数\nexport const joinedContractProjectPaginationPerTypes = {\n label: '表示件数',\n options: [\n // { label: '1', value: 1 },\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const joinedContractProjectPaginationSortByTypes = {\n label: '並び順(キー)',\n options: [\n { label: '作成時間', value: 'id' },\n { label: 'ステータス', value: 'status' },\n { label: '応募形式', value: 'referenceType' },\n { label: '募集締切', value: 'expiredOn' },\n { label: '報酬/給料', value: 'price' },\n ],\n};\n\n// ページネーション設定: 並び順(タイプ)\nexport const joinedContractProjectPaginationSortOrderTypes = {\n label: '並び順(タイプ)',\n default: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n id: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n status: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n referenceType: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n expiredOn: {\n options: [\n { label: '早い', value: 'ASC' },\n { label: '遅い', value: 'DESC' },\n ],\n },\n price: {\n options: [\n { label: '少ない', value: 'ASC' },\n { label: '多い', value: 'DESC' },\n ],\n },\n};\n\n// ページネーション設定: 表示件数\nexport const joinedOrdrerProjectPaginationPerTypes = {\n label: '表示件数',\n options: [\n // { label: '1', value: 1 },\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const joinedOrdrerProjectPaginationSortByTypes = {\n label: '並び順(キー)',\n options: [\n { label: '作成時間', value: 'id' },\n { label: 'ステータス', value: 'status' },\n { label: '募集締切', value: 'expiredOn' },\n { label: '報酬/給料', value: 'price' },\n ],\n};\n\n// ページネーション設定: 並び順(タイプ)\nexport const joinedOrdrerProjectPaginationSortOrderTypes = {\n label: '並び順(タイプ)',\n default: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n id: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n status: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n expiredOn: {\n options: [\n { label: '早い', value: 'ASC' },\n { label: '遅い', value: 'DESC' },\n ],\n },\n price: {\n options: [\n { label: '少ない', value: 'ASC' },\n { label: '多い', value: 'DESC' },\n ],\n },\n};\n\n// ページネーション設定: 表示件数\nexport const joinedProjectRecruitPaginatinPerTypes = {\n label: '表示件数',\n options: [\n // { label: '1', value: 1 },\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const joinedProjectRecruitPaginatinSortByTypes = {\n label: '並び順(キー)',\n options: [\n { label: '応募形式', value: 'referencetype' },\n { label: 'ステータス', value: 'status' },\n ],\n};\n\n// ページネーション設定: 並び順(タイプ)\nexport const joinedProjectRecruitPaginatinSortOrderTypes = {\n label: '並び順(タイプ)',\n default: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n status: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n referenceType: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n};\n\n// 最終的に、詳細画面で報酬/給料を表示する用のラベルと同じになってしまったが、一応マージはせず両方のこし\nexport const priceTypes = {\n label: '報酬/給料の単位',\n options: [\n { label: '時間', value: 'HOURLY' },\n { label: '日', value: 'DAILY' },\n { label: '月', value: 'MONTHLY' },\n { label: '年', value: 'YEARLY' },\n { label: '固定', value: 'CONTINGENCY_FEE' },\n { label: '応相談', value: 'OTHER' },\n { label: '単価(100%稼働時)', value: 'FULL_OPERATION' },\n ],\n};\n\n// 最終的に、セレクター用のラベルと同じになってしまったが、一応マージはせず両方のこし\nexport const priceUnitTypes = {\n label: '報酬/給料の単位',\n options: [\n { label: '時間', value: 'HOURLY' },\n { label: '日', value: 'DAILY' },\n { label: '月', value: 'MONTHLY' },\n { label: '年', value: 'YEARLY' },\n { label: '固定', value: 'CONTINGENCY_FEE' },\n { label: '応相談', value: 'OTHER' },\n { label: '月', value: 'FULL_OPERATION' },\n ],\n};\n\nexport const interviewTypes = {\n label: '面談形式',\n options: [\n { label: '対面', value: 'FACE_TO_FACE' },\n { label: 'オンライン', value: 'REMOTE' },\n ],\n};\n\nexport const workTypes = {\n label: '働き方',\n options: [\n { label: '常駐', value: 'ONSITE' },\n { label: '一部リモート', value: 'REMOTE' },\n { label: 'フルリモート', value: 'FULL_REMOTE' },\n ],\n};\n\nexport const projectTypes = {\n label: '商流',\n options: [\n {\n label: 'クライアント',\n value: 'CLIENT',\n description:\n 'エンドユーザーの立場としてあなたの会社や個人としてのプロジェクトにおいて人材を募集する場合',\n },\n {\n label: 'プライム',\n value: 'PRIME',\n description:\n 'クライアントとなる企業もしくは個人と元請けの立場として直接契約をしている。また、あなたの会社に所属する人材(または、あなた自身)が参画しており、その現場の増員や交代要員で人材を募集する場合。',\n },\n {\n label: 'エージェント',\n value: 'AGENT',\n description:\n 'クライアントやプライム/その他の立場の企業/個人から依頼をうけて、人材の仲介のみをする場合',\n },\n {\n label: 'その他',\n value: 'OTHER',\n description:\n 'プライムから請け負った業務の遂行において、あなたの会社に所属する人材(または、あなた自身)が参画しており、その現場の増員や交代要員で人材を募集する場合。',\n },\n ],\n};\n\nexport const priceEvaluateTypes = {\n label: '報酬/給料の比較条件',\n options: [\n { label: '以上', value: 'lt' },\n { label: '以下', value: 'gt' },\n ],\n};\n\nexport const participationTypes = {\n label: '想定参画形態',\n options: [\n // { label: '法人', value: 'BUSINESS' },\n { label: 'B2B', value: 'BUSINESS' },\n { label: '正社員', value: 'GENERAL' },\n { label: '副業', value: 'SIDE_BUSINESS' },\n { label: 'フリーランス/個人事業主', value: 'FREELANCE' },\n { label: 'インターン', value: 'INTERN' },\n { label: 'その他(契約社員、アルバイト等)', value: 'OTHER' },\n ],\n};\n\nexport const statuses = {\n label: 'ステータス',\n options: [\n { label: '公開', value: 'ACTIVE' },\n { label: '予定公開', value: 'RESERVE' },\n { label: '下書き', value: 'DRAFT' },\n { label: '非公開', value: 'INACTIVE' },\n { label: '掲載終了', value: 'COMPLETED' },\n ],\n};\n\nexport const recruitStatuses = {\n label: '採用ステータス',\n options: [\n { label: '返信待ち', value: 'WAITING' },\n { label: '進行中', value: 'IN_PROGRESS' },\n { label: 'アサイン', value: 'RECRUITED' },\n { label: '見送り', value: 'REJECTED' },\n { label: '辞退', value: 'DECLINED' },\n ],\n};\n\nexport const projectOwnerTypes = {\n label: 'プロジェクトオーナータイプ',\n options: [\n { label: '企業', value: 'COMPANY' },\n { label: '個人', value: 'USER' },\n ],\n};\n\nexport const workAverageTypes = {\n label: '希望稼働率',\n options: [\n { label: 'スポット/インタビュー', value: 'SPOT' },\n { label: '週1〜週2日', value: 'W1-2' },\n { label: '週3〜週5日', value: 'W3-5' },\n { label: '応相談', value: 'CONSULTATION' },\n ],\n};\n\nexport const contractTypes = {\n label: '契約形態',\n options: [\n { value: '1', label: '正社員' },\n { value: '2', label: 'アルバイト' },\n { value: '3', label: 'パート' },\n { value: '4', label: '派遣社員' },\n { value: '5', label: 'インターン' },\n { value: '6', label: '業務委託' },\n { value: '7', label: '請負' },\n { value: '8', label: '嘱託社員' },\n ],\n};\n\nexport const relateTypes = {\n label: '関連タイプ',\n options: [\n { label: '受注', value: 'CONTRACTOR' },\n { label: '発注', value: 'ORDERER' },\n ],\n};\n\nexport const referenceTypes = {\n label: '流入元',\n options: [\n { label: 'スカウト', value: 'SCOUT' },\n { label: '応募', value: 'SUBSCRIBE' },\n ],\n};\n\n// 画面上に表示する有料オプションsセレクター\nexport const stickerTypes = {\n label: 'オプション',\n options: [{ label: '急募', value: 'WANTED' }],\n};\n\nexport const projectScheduledAtTimeTypes = {\n label: '時間',\n options: [...Array(24)].map((item, index) => {\n return {\n label: `${('00' + String(index)).slice(-2)}:00`,\n value: `${('00' + String(index)).slice(-2)}:00`,\n };\n }),\n};\n\nexport const publishScopeTypes = {\n label: '公開範囲タイプ',\n options: [\n { label: '誰でも', value: 'ANY_ONE' },\n { label: 'メンバーのみ', value: 'MEMBER_ONLY' },\n ],\n};\n\nexport const publishScopeRangeTypes = {\n label: '公開範囲メンバータイプ',\n options: [\n { label: '社員', value: 'REGULAR' },\n { label: 'アルムナイ', value: 'ALUMNI' },\n { label: '外部パートナー', value: 'COLLABORATOR' },\n ],\n};\n","import {\n navigationDisplayRoutes,\n navigationDealDisplayRoutes,\n navigationPostDisplayRoutes,\n navigationSettingDisplayRoutes,\n navigationPostTagDisplayRoutes,\n} from '@routes';\nimport React, { createContext, useState } from 'react';\nimport * as utilities from '@helpers/utilities';\n\nconst stub = () => {\n throw new Error('forgot to wrap provider');\n};\n\nconst initState = {\n initMenu: stub,\n changeActiveMenuFromLocation: stub,\n menuItems: null,\n activatedMenuItemIds: null,\n activatedMenuChildItemIds: null,\n};\nexport const AppMenuContext = createContext(initState);\nexport const AppMenuConsumer = AppMenuContext.Consumer;\n\nexport const AppMenuProvider = ({ children }) => {\n const [menuItems, setMenuItems] = useState(null);\n const [activatedMenuItemIds, setActivatedMenuItemIds] = useState(null);\n const [activatedMenuChildItemIds, setActivatedMenuChildItemIds] =\n useState(null);\n const [isUserSettingMenu, setIsUserSettingMenu] = useState(false);\n const [isUserPostMenu, setIsUserPostMenu] = useState(false);\n const [isDealMenu, setIsDealMenu] = useState(false);\n // eslint-disable-next-line no-unused-vars\n const [isBillingMenu, setIsBillingMenu] = useState(false);\n\n // メニューリストの初期化\n const initMenu = () => {\n let menuDisplayRoutes = navigationDisplayRoutes;\n if (window.location.pathname.match(/^\\/settings/) != null) {\n menuDisplayRoutes = navigationSettingDisplayRoutes;\n }\n\n if (window.location.pathname.match(/^\\/posts/) != null) {\n menuDisplayRoutes = navigationPostDisplayRoutes;\n }\n\n if (window.location.pathname.match(/^\\/post-tags/) != null) {\n menuDisplayRoutes = navigationPostTagDisplayRoutes;\n }\n\n if (window.location.pathname.match(/^\\/search\\/deals/) != null) {\n menuDisplayRoutes = navigationDealDisplayRoutes;\n }\n\n // 今は、料金表以外は表示しないため、サイドバーを請求ページメニューに切り替えない\n // if (window.location.pathname.match(/^\\/billing/) != null) {\n // menuDisplayRoutes = navigationBillingDisplayRoutes\n // }\n\n // メニューリスト取得\n const menuItems = assignIdAndParent(menuDisplayRoutes);\n\n setIsUserSettingMenu(\n window.location.pathname.match(/^\\/settings/) != null ? true : false\n );\n\n setIsUserPostMenu(\n window.location.pathname.match(/^\\/posts/) != null ? true : false\n );\n\n setIsDealMenu(\n window.location.pathname.match(/^\\/search\\/deals/) != null ? true : false\n );\n\n // 今は、料金表以外は表示しないため、サイドバーを請求ページメニューに切り替えない\n // setIsBillingMenu(\n // window.location.pathname.match(/^\\/billing/) != null ? true : false\n // )\n\n // メニューリスト設定\n setMenuItems(menuItems);\n };\n\n // メニュー\n const changeActiveMenuFromLocation = () => {\n let addMenuItem = navigationDisplayRoutes;\n if (window.location.pathname.match(/^\\/settings/) !== null) {\n addMenuItem = navigationSettingDisplayRoutes;\n } else if (window.location.pathname.match(/^\\/post-tags/) !== null) {\n addMenuItem = navigationPostTagDisplayRoutes;\n } else if (window.location.pathname.match(/^\\/posts/) !== null) {\n addMenuItem = navigationPostDisplayRoutes;\n } else if (window.location.pathname.match(/^\\/search\\/deals/) != null) {\n addMenuItem = navigationDealDisplayRoutes;\n }\n\n const menuItems = assignIdAndParent(addMenuItem);\n\n setIsUserPostMenu(\n window.location.pathname.match(/^\\/posts/) != null ? true : false\n );\n\n setIsUserSettingMenu(\n window.location.pathname.match(/^\\/settings/) != null ? true : false\n );\n\n setIsDealMenu(\n window.location.pathname.match(/^\\/search\\/deals/) != null ? true : false\n );\n\n // 今は、料金表以外は表示しないため、サイドバーを請求ページメニューに切り替えない\n // setIsBillingMenu(\n // window.location.pathname.match(/^\\/billing/) != null ? true : false\n // )\n\n const activatedMenuItemIds = getActivatedMenuItemIds(menuItems);\n const activatedMenuChildItemIds = getActivatedMenuChildItemIds(menuItems);\n setActivatedMenuItemIds(activatedMenuItemIds);\n setActivatedMenuChildItemIds(activatedMenuChildItemIds);\n };\n\n return (\n \n {children}\n \n );\n};\n\nlet uuid = 1;\n\nconst assignIdAndParent = (menuItems, parentId) => {\n menuItems = menuItems || [];\n menuItems.forEach((item) => {\n const id = item.id || uuid;\n uuid += 1;\n item.id = id;\n item.parentId = item.parentId || parentId;\n item.active = false;\n\n if (typeof item.children !== 'undefined') {\n assignIdAndParent(item.children, id);\n }\n });\n\n return menuItems;\n};\n\nconst getActivatedMenuItemIds = (menuItems) => {\n let matchingItems = [];\n for (let menuItem of menuItems) {\n // グローバルメニュー(基本)に含まれるメニューの場合\n if (menuItem?.isDashboardRoutes || menuItem?.isFeatureAppRoutes) {\n // 現在のパスから親メニューパスを取得\n const parentPath = utilities.getParentMenuItemPath(\n window.location.pathname\n );\n // 親メニューパスと処理中のメニューパスが一致する場合は、マッチアイテム配列にIDを追加\n if (parentPath == menuItem?.path) matchingItems.push(menuItem.id);\n continue;\n }\n\n if (window.location.pathname.indexOf(menuItem.path) === 0) {\n if (!menuItem?.isPostRoutes) {\n matchingItems.push(menuItem.id);\n }\n }\n\n if (menuItem?.isPostRoutes) {\n const params = new URLSearchParams(window.location.search);\n if (\n !params.get('companyId') &&\n window.location.pathname.indexOf(menuItem.path) === 0\n ) {\n matchingItems.push(menuItem.id);\n } else {\n if (Number(params.get('companyId')) === Number(menuItem.companyId)) {\n matchingItems.push(menuItem.id);\n }\n }\n }\n\n if (typeof menuItem.children !== 'undefined') {\n const childMatchingItems = getActivatedMenuItemIds(menuItem.children);\n matchingItems = [...matchingItems, ...childMatchingItems];\n if (childMatchingItems.length > 0) matchingItems.push(menuItem.id);\n }\n }\n\n return Array.from(new Set(matchingItems));\n};\n\nconst getActivatedMenuChildItemIds = (menuItems, isChildMenuItems) => {\n let matchingItems = [];\n\n for (let menuItem of menuItems) {\n if (\n isChildMenuItems &&\n window.location.pathname.indexOf(menuItem.path) === 0\n ) {\n matchingItems.push(menuItem.id);\n }\n\n if (typeof menuItem.children === 'undefined') continue;\n const childMatchingItems = getActivatedMenuChildItemIds(\n menuItem.children,\n true\n );\n\n matchingItems = [...matchingItems, ...childMatchingItems];\n }\n\n return Array.from(new Set(matchingItems));\n};\n","import {\n userEmploymentTypes,\n userLanguageYearTypes,\n userSkillYearTypes,\n} from '@constants/user';\nimport dayjs from 'dayjs';\n\n// ---------------------------------------------------------------\n// データ加工・フォーマット系\n// * nullの可能性がある配列データをnullセーフで扱うための処理\n// ---------------------------------------------------------------\nexport const filterEmptyString = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data\n .filter((item) => {\n return String(item) != '';\n })\n .map((item) => {\n return item;\n });\n};\n\nexport const getUploadValues = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data.map((item) => {\n return {\n name: item.fileKey,\n preview: item.url,\n };\n });\n};\n\n// 指定のユーザー設定値を取得\nexport const getUserSettingValue = (data, key) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return null;\n }\n\n let setting = data.find((item) => item.key == key);\n return setting && typeof setting.value != 'undefined' ? setting.value : null;\n};\n\n// カテゴリーデータの親要素をそのまま使用した1次配列\nexport const getCategories = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data.map((item) => item);\n};\n\n// カテゴリーデータの子要素のみを抽出した1次配列\nexport const getCategoriesByChildItems = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data\n .filter(\n (item) =>\n item.options && Array.isArray(item.options) && item.options.length > 0\n )\n .reduce((prev, current) => {\n const items = current.options.map((item) => item);\n return [...prev, ...items];\n }, []);\n};\n\n// スキルカテゴリーデータの親要素をそのまま使用した1次配列\nexport const getSkillCategories = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data.map((item) => item);\n};\n\n// スキルカテゴリーデータの子要素のみを抽出した1次配列\nexport const getSkillCategoriesByChildItems = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data\n .filter(\n (item) =>\n item.options && Array.isArray(item.options) && item.options.length > 0\n )\n .reduce((prev, current) => {\n const items = current.options.map((item) => item);\n return [...prev, ...items];\n }, []);\n};\n\n// Dealカテゴリーデータの親要素をそのまま使用した1次配列\nexport const getDealCategories = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data.map((item) => item);\n};\n\n// Dealカテゴリーデータの子要素のみを抽出した1次配列\nexport const getDealCategoriesByChildItems = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data\n .filter(\n (item) =>\n item.options && Array.isArray(item.options) && item.options.length > 0\n )\n .reduce((prev, current) => {\n const items = current.options.map((item) => ({\n ...item,\n parentId: current?.value,\n }));\n return [...prev, ...items];\n }, []);\n};\n\n// ロケーションデータの親要素をそのまま使用した1次配列\nexport const getLocations = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data.map((item) => item);\n};\n\n// ロケーションデータの子要素のみを抽出した1次配列\nexport const getLocationsByChildItems = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data\n .filter(\n (item) =>\n item.options && Array.isArray(item.options) && item.options.length > 0\n )\n .reduce((prev, current) => {\n const items = current.options.map((item) => item);\n return [...prev, ...items];\n }, []);\n};\n\n// 言語データの親要素をそのまま使用した1次配列\nexport const getLanguages = (data) => {\n if (\n !data ||\n !data.options ||\n !Array.isArray(data.options) ||\n data.options.length < 1\n ) {\n return [];\n }\n\n return data.options.map((item) => item);\n};\n\n// ユーザー経歴情報配列の作成\nexport const getUserWorkExperienceCareers = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data.map((item) => {\n const employmentType = userEmploymentTypes.options.find(\n (e) => e.value == item.employmentType\n );\n\n return {\n affiliation: item.affiliation ? item.affiliation : '',\n employmentType: employmentType ? employmentType : null,\n endDate: item.endDate ? item.endDate : '',\n detail: item.detail ? item.detail : '',\n id: item.id ? item.id : null,\n isActive: !item.endDate ? true : false,\n role: item.role ? item.role : '',\n startDate: item.startDate ? item.startDate : '',\n };\n });\n};\n\n// ユーザースキル情報配列の作成\nexport const getUserWorkExperienceSkills = (data, categories) => {\n if (\n !data ||\n !Array.isArray(data) ||\n data.length < 1 ||\n !categories ||\n !Array.isArray(categories)\n ) {\n return [];\n }\n\n return data.map((item) => {\n const year = userSkillYearTypes.options.find((e) => e.value == item.year);\n const category = categories.find((e) => e.value == item?.category?.id);\n return {\n category: category ? category : null,\n detail: item.detail ? item.detail : '',\n year: year ? year : null,\n };\n });\n};\n\n// ユーザー資格情報配列の作成\nexport const getUserWorkExperienceCertificates = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return [];\n }\n\n return data.map((item) => {\n return {\n certifiedOn:\n item.certifiedOn && dayjs(item.certifiedOn).isValid()\n ? item.certifiedOn\n : null,\n name: item.name ? item.name : null,\n };\n });\n};\n\n// ユーザー言語情報配列の作成\nexport const getUserWorkExperienceLanguages = (data, languages) => {\n if (\n !data ||\n !Array.isArray(data) ||\n data.length < 1 ||\n !languages ||\n !Array.isArray(languages)\n ) {\n return [];\n }\n\n return data.map((item) => {\n const name = languages.find((e) => e.label == item.name);\n const year = userLanguageYearTypes.options.find(\n (e) => e.value == item.year\n );\n return {\n name: name ? name : null,\n year: year ? year : null,\n isNative: item.isNative ? item.isNative : null,\n };\n });\n};\n\n// 会社タグデータの親要素をそのまま使用した1次配列\nexport const getCompanyTags = (data) => {\n if (\n !data ||\n !data.options ||\n !Array.isArray(data.options) ||\n data.options.length < 1\n ) {\n return [];\n }\n\n return data.options.map((item) => item);\n};\n\nexport const getRandomThreeDataOnArray = (list) => {\n // 引数検証\n if (!list || !Array.isArray(list) || list.length < 0) {\n return [];\n }\n\n // 配列データの要素数が3つ以内の場合\n if (list.length <= 3) {\n // 2つ以上の要素が存在し、要素にidキーが存在する場合はソート処理実行\n if (list.length > 2) {\n if (list[0].id && list[1].id) {\n list.sort((a, b) => a.id - b.id);\n }\n }\n return list;\n }\n\n // ランダムデータ配列を初期化\n const randomThreeData = [];\n\n // 配列をspriceするため、元配列のコピーを作成\n const copy = list.slice();\n\n // 配列が空になるか、表示タグ数が3つになるまで処理実行\n while (randomThreeData.length < 3 && copy.length > 0) {\n // 参照配列の要素数を加味してからランダムなindex番号を作成\n const index = Math.floor(Math.random() * copy.length);\n // 作成したindex番号の値を表示タグ配列に追加\n randomThreeData.push(copy[index]);\n copy.splice(index, 1);\n }\n\n // ランダム取得のために並び順が崩れたカテゴリー情報をIDで昇順ソート\n if (randomThreeData.length > 1) {\n if (randomThreeData[0].id && randomThreeData[1].id) {\n randomThreeData.sort((a, b) => a.id - b.id);\n }\n }\n\n return randomThreeData;\n};\n\nexport const getFormatNumberAsString = (value) => {\n // 数字フォーマッター\n // const formatter = new Intl.NumberFormat('ja-JP')\n // フォーマッターだと桁数が大きくなりすぎた場合におかしくなるので、正規表現で対応\n // return String(value).match(/^[0-9]{1,}$/) &&\n // Number.parseInt(value) == Number.parseInt(value)\n // ? formatter.format(value)\n // : value\n\n if (\n String(value).match(/^[0-9.]{1,}$/) == null ||\n Number.parseInt(value) != Number.parseInt(value)\n ) {\n return value;\n }\n\n const tmp = String(value).split('.');\n return tmp.length > 1\n ? String(tmp[0]).replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,') + '.' + tmp[1]\n : String(tmp[0]).replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,');\n};\n\n// ユーザー言語情報配列の作成\nexport const getProjectConditionPrices = (data, priceTypes) => {\n if (\n !data ||\n !Array.isArray(data) ||\n data.length < 1 ||\n !priceTypes ||\n !Array.isArray(priceTypes)\n ) {\n return [];\n }\n\n return data.map((item) => {\n const type = priceTypes.find((e) => e.value == item.type);\n const amountMin = item.amountMin\n ? getFormatNumberAsString(item.amountMin)\n : 0;\n const amountMax = item.amountMax\n ? getFormatNumberAsString(item.amountMax)\n : 0;\n\n return {\n type,\n amountMax,\n amountMin,\n };\n });\n};\n\n// ユーザーの最終経歴取得\nexport const getUserWorkExperienceLastCareer = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) {\n return null;\n }\n\n // 元配列のindexを破壊しないように、新しい配列を作成\n const dataCopy = data.slice();\n\n // 最終候補履歴をソートして、一番上澄みを取得\n dataCopy.sort((a, b) => {\n // 片方だけが現在経歴の場合\n if (!a.endDate && b.endDate) {\n return -1;\n }\n\n if (a.endDate && !b.endDate) {\n return 1;\n }\n\n // 両方とも現在経歴の場合は、開始日の降順\n if (!a.endDate && !b.endDate) {\n const values = {\n a: dayjs(a.startDate).isValid() ? dayjs(a.startDate).valueOf() : 0,\n b: dayjs(b.startDate).isValid() ? dayjs(b.startDate).valueOf() : 0,\n };\n if (values.a > values.b) return -1;\n if (values.a < values.b) return 1;\n return 0;\n }\n\n const values = {\n a: dayjs(a.endDate).isValid() ? dayjs(a.endDate).valueOf() : 0,\n b: dayjs(b.endDate).isValid() ? dayjs(b.endDate).valueOf() : 0,\n };\n if (values.a > values.b) return -1;\n if (values.a < values.b) return 1;\n\n return 0;\n });\n\n return dataCopy[0];\n};\n\nexport const sortUserWorkExperienceLastCareer = (data) => {\n // 引数が配列型ではない場合は処理終了\n if (!data || !Array.isArray(data)) return;\n\n data.sort((a, b) => {\n // 日付オブジェクト作成: 経歴開始日\n const startDates = {\n a: a.startDate && a.startDate != '' ? dayjs(a.startDate) : null,\n b: b.startDate && b.startDate != '' ? dayjs(b.startDate) : null,\n };\n\n // 日付オブジェクト作成: 経歴終了日\n const endDates = {\n a: a.endDate && a.endDate != '' ? dayjs(a.endDate) : null,\n b: b.endDate && b.endDate != '' ? dayjs(b.endDate) : null,\n };\n\n // 第1ソート条件: 経歴開始日の降順\n if (!startDates.a || !startDates.b) return 0;\n if (startDates.b && startDates.b.isBefore(startDates.a)) return -1;\n if (startDates.a && startDates.a.isBefore(startDates.b)) return 1;\n\n // 第2ソート条件: 経歴開始日の降順\n // 日付指定があるものよりnullを先に並べる\n if (!endDates.a && !endDates.b) return 0;\n if (!endDates.a && endDates.b) return -1;\n if (endDates.a && !endDates.b) return 1;\n if (endDates.b && endDates.b.isBefore(endDates.a)) return -1;\n if (endDates.a && endDates.a.isBefore(endDates.b)) return 1;\n\n return 0;\n });\n};\n\nexport const convertNumberToStyleValue = (v, d, u) => {\n const unit =\n u && typeof u == 'string' && u.match(/^(px|%|rem|em)$/) ? u : 'px';\n\n const defaultValue =\n d && d != 0 ? (typeof d == 'number' ? `${d}${unit}` : d) : `0${unit}`;\n\n return v && v != 0\n ? typeof v == 'number'\n ? `${v}${unit}`\n : v\n : defaultValue;\n};\n","import React from 'react';\nimport dayjs from 'dayjs';\n\n// ---------------------------------------------------------------\n// フォーム補助\n// ---------------------------------------------------------------\nexport const getSuccessMessageList = (action, messagePrefix) => {\n const messages = [];\n const prefix = messagePrefix ? messagePrefix : '';\n\n if (action == 'other') {\n messages.push({\n message: `${prefix}が完了しました`,\n });\n }\n\n if (action == 'create' || action == 'update') {\n const actionName = action == 'create' ? '登録' : '更新';\n messages.push({\n message: `${prefix}の${actionName}が完了しました`,\n });\n }\n\n return messages;\n};\n\nexport const getErrorMessageList = (action, messagePrefix) => {\n const messages = [];\n const prefix = messagePrefix ? messagePrefix : '';\n\n if (action == 'valid') {\n messages.push({\n message: '入力値に誤りがあります。指定箇所を修正してください。',\n });\n }\n\n if (action == 'valid-confirm') {\n messages.push({\n message:\n '入力値に誤りがあります。指定箇所を修正の上、確認ボタンをクリックして下さい',\n });\n }\n\n if (action == 'change-password') {\n messages.push({\n message:\n 'パスワードの変更に失敗しました、IDとパスワードが正しいか確認してください',\n });\n }\n\n if (action == 'other') {\n messages.push({\n message: `${prefix}中にエラーが発生しました`,\n });\n }\n\n if (action == 'create' || action == 'update' || action == 'draft') {\n let actionName = '更新';\n if (action == 'create') actionName = '登録';\n if (action == 'draft') actionName = '下書き保存';\n messages.push({\n message: `${prefix}の${actionName}中にエラーが発生しました`,\n });\n messages.push({\n message: `もう一度、${actionName}をお試し頂き、同じエラーメッセージが表示される場合は、お問い合わせください。`,\n });\n }\n\n return messages;\n};\n\nexport const getPreviewUploadFile = (data) => {\n if (!data || !data.type || !data.name) {\n return <>-;\n }\n\n // アップロードファイルのタイプを取得\n const fileType = data.type;\n\n // 画像の場合はイメージタグを返却\n if (fileType.match(/^(image\\/gif|image\\/jpeg|image\\/png)$/)) {\n return (\n \n );\n }\n\n // ドキュメントファイル以外は、ファイル名を返却\n return <>{data.name};\n};\n\n// 値検証: ドロップダウンリスト\nexport const validDropDown = (selected, required, master, messagePrefix) => {\n if (!required && !selected) {\n return '';\n }\n\n if (required && !selected) {\n return messagePrefix\n ? `${messagePrefix}を選択してください`\n : '選択してください';\n }\n\n if (!master.some((entry) => entry.value == selected.value)) {\n return messagePrefix\n ? `${messagePrefix}を正しく選択してください`\n : '正しく選択してください';\n }\n\n return '';\n};\n\n// 値検証: ドロップダウンリスト(複数)\nexport const validDropDownMultiple = (\n selected,\n required,\n master,\n messagePrefix\n) => {\n if (!required && !selected && !Array.isArray(selected)) {\n return '';\n }\n\n if (required && selected.length < 1) {\n return messagePrefix\n ? `${messagePrefix}を選択してください`\n : '選択してください';\n }\n\n const invalidValues = selected.filter((item) => {\n return !master.some((entry) => entry.value == item.value) ? true : false;\n });\n\n if (invalidValues.length > 0) {\n return messagePrefix\n ? `${messagePrefix}を正しく選択してください`\n : '正しく選択してください';\n }\n\n return '';\n};\n\n// 値検証: ドロップダウンリスト(複数・選択項目の追加可能)\nexport const validDropDownCreatable = (\n selected,\n required,\n master,\n messagePrefix\n) => {\n if (!required && !selected && !Array.isArray(selected)) {\n return '';\n }\n\n if (required && selected.length < 1) {\n return messagePrefix\n ? `${messagePrefix}を選択してください`\n : '選択してください';\n }\n\n // CreatableSelectの場合、元々のマスター配列にない値が選択される可能性があるため、コメントアウト\n // const invalidValues = selected.filter((item) => {\n // return !master.some((entry) => entry.value == item.value) ? true : false\n // })\n // if (invalidValues.length > 0) {\n // return messagePrefix\n // ? `${messagePrefix}を正しく選択してください`\n // : '正しく選択してください'\n // }\n\n return '';\n};\n\n// 値検証: ラジオボタン\nexport const validRadio = (selected, required, master, messagePrefix) => {\n if (!required && !selected) {\n return '';\n }\n\n if (required && !selected) {\n return messagePrefix\n ? `${messagePrefix}を選択してください`\n : '性別を選択してください';\n }\n\n if (!master.some((entry) => entry.value == selected.value)) {\n return messagePrefix\n ? `${messagePrefix}を正しく選択してください`\n : '正しく選択してください';\n }\n\n return '';\n};\n\n// 値検証: 日付カレンダー\nexport const validDate = (selected, required, messagePrefix, isExactCheck) => {\n if (!required && !selected) {\n return '';\n }\n\n if (required && !selected) {\n return messagePrefix\n ? `${messagePrefix}を選択してください`\n : '選択してください';\n }\n\n if (selected && !dayjs(selected).isValid()) {\n return messagePrefix\n ? `${messagePrefix}を正しく選択してください`\n : '正しく選択してください';\n }\n\n //\n // dayjsでは、2月31日とか指定すると、3月2日といった自動変換を行うため\n // ※ とはいえ、momentは、乗り換えしていきたいので、処理でカバー\n //\n if (isExactCheck) {\n const beforeDate = selected.split('/').join('-');\n const afterDate = dayjs(beforeDate).format('YYYY-MM-DD');\n if (beforeDate != afterDate) {\n return messagePrefix\n ? `${messagePrefix}を正しく選択してください`\n : '正しく選択してください';\n }\n }\n\n return '';\n};\n\n// 日付期間選択\nexport const validDateRange = (data) => {\n const messages = {\n from: '',\n to: '',\n };\n\n const messagePrefixes = {\n from: data.from.messagePrefix ? data.from.messagePrefix : '',\n to: data.to.messagePrefix ? data.to.messagePrefix : '',\n };\n\n // 必要なデータが設定されていない場合は処理終了\n if (!data && !data.from && !data.to) {\n return messages;\n }\n\n // 空値検証: 開始日\n if (!data.from.value && data.from.required) {\n messages.from = `${messagePrefixes.from}を選択してください`;\n }\n\n // データ形式検証: 開始日\n if (\n data.from.value &&\n messages.from == '' &&\n !dayjs(`${data.from.value} 00:00:00`).isValid()\n ) {\n messages.from = `${messagePrefixes.from}を正しく選択してください`;\n }\n\n // 空値検証: 終了日\n if (!data.to.value && data.to.required) {\n messages.to = `${messagePrefixes.to}を選択してください`;\n }\n\n // データ形式検証: 終了日\n if (\n data.to.value &&\n messages.to == '' &&\n !dayjs(`${data.to.value} 00:00:00`).isValid()\n ) {\n messages.to = `${messagePrefixes.to}を正しく選択してください`;\n }\n\n if (\n data.from.value &&\n data.to.value &&\n messages.from == '' &&\n messages.to == ''\n ) {\n if (\n dayjs(`${data.to.value} 00:00:00`).valueOf() <\n dayjs(`${data.from.value} 00:00:00`).valueOf()\n ) {\n messages.to = `${messagePrefixes.to}を正しく選択してください`;\n }\n }\n\n return messages;\n};\n\n// 値検証: シングルチェックボックス\nexport const validSingleCheckbox = (selected, required, message) => {\n if (!required && !selected) {\n return '';\n }\n\n if (required && !selected) {\n return message ? message : '選択してください';\n }\n\n return '';\n};\n\n// 値検証: 書類 (単数アップロード用)\nexport const validDocumentFile = (values, maxByte, messagePrefix) => {\n // 最大容量の指定がない場合は、自動的に5MBを設定\n if (!maxByte || (Number, parseInt(maxByte) != Number, parseInt(maxByte))) {\n maxByte = 5242880;\n // maxByte = 2097152\n }\n\n // 最大バイト数をエラーメッセージ用にMB表記に変換\n const maxMegaByte = (maxByte / Math.pow(1024, 2)).toFixed(0);\n\n // アップロードファイル情報が存在しない場合は処理終了\n if (\n !values ||\n !Array.isArray(values) ||\n !values.length > 0 ||\n !values[0].size ||\n !values[0].type\n ) {\n return '';\n }\n\n // アップロード可能なファイル形式リスト作成\n const mimeTypes = [\n 'image/jpeg',\n 'image/gif',\n 'image/png',\n 'image/webp',\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ];\n\n // ファイル形式のマッチパターン作成\n const regex = new RegExp('(' + mimeTypes.join('|') + ')');\n\n // アップロードを許可する画像ファイル形式は右で共通: gif, jpeg, png\n // アップロードを許可する画像ファイルの最大バイト数は右で共通: 5242880 => 5MB\n // 画像形式チェック\n if (values[0].type.match(regex) == null) {\n return messagePrefix\n ? `${messagePrefix}は(gif,jpeg,png,webp,pdf,office)のファイルを選択してください`\n : '(gif,jpeg,png,webp,pdf,office)を選択してください';\n }\n\n if (values[0].size > Number.parseInt(maxByte)) {\n return messagePrefix\n ? `${messagePrefix}は${maxMegaByte}MB以内のファイルを選択してください`\n : 'ファイルは${maxMegaByte}MB以内のファイルを選択してください';\n }\n\n return '';\n};\n\n// 値検証: 画像アップロード (単数アップロード用)\nexport const validImageFile = (values, maxByte, messagePrefix) => {\n // 最大容量の指定がない場合は、自動的に5MBを設定\n if (!maxByte || (Number, parseInt(maxByte) != Number, parseInt(maxByte))) {\n maxByte = 5242880;\n // maxByte = 2097152\n }\n\n // 最大バイト数をエラーメッセージ用にMB表記に変換\n const maxMegaByte = (maxByte / Math.pow(1024, 2)).toFixed(0);\n\n // アップロードファイル情報が存在しない場合は処理終了\n if (\n !values ||\n !Array.isArray(values) ||\n !values.length > 0 ||\n !values[0].size ||\n !values[0].type\n ) {\n return '';\n }\n\n // アップロードを許可する画像ファイル形式は右で共通: gif, jpeg, png\n // アップロードを許可する画像ファイルの最大バイト数は右で共通: 5242880 => 5MB\n // 画像形式チェック\n if (\n values[0]?.type?.match(\n /^(image\\/gif|image\\/jpeg|image\\/png|image\\/webp)$/\n ) == null\n ) {\n return messagePrefix\n ? `${messagePrefix}は(gif,jpeg,png,webp)のファイルを選択してください`\n : '画像ファイル(gif,jpeg,png)のファイルを選択してください';\n }\n\n if (values[0].size > Number.parseInt(maxByte)) {\n return messagePrefix\n ? `${messagePrefix}は${maxMegaByte}MB以内のファイルを選択してください`\n : '画像は${maxMegaByte}MB以内のファイルを選択してください';\n }\n\n return '';\n};\n\n// 値検証: 画像アップロード (単数アップロード用)\nexport const validImage = (value, maxByte, messagePrefix) => {\n // 最大容量の指定がない場合は、自動的に5MBを設定\n if (!maxByte || (Number, parseInt(maxByte) != Number, parseInt(maxByte))) {\n maxByte = 5242880;\n // maxByte = 2097152\n }\n\n // 最大バイト数をエラーメッセージ用にMB表記に変換\n const maxMegaByte = (maxByte / Math.pow(1024, 2)).toFixed(0);\n\n // アップロードファイル情報が存在しない場合は処理終了\n if (!value) {\n return '';\n }\n\n // アップロードを許可する画像ファイル形式は右で共通: gif, jpeg, png\n // アップロードを許可する画像ファイルの最大バイト数は右で共通: 5242880 => 5MB\n // 画像形式チェック\n if (\n value?.type?.match(/^(image\\/gif|image\\/jpeg|image\\/png|image\\/webp)$/) ==\n null\n ) {\n return messagePrefix\n ? `${messagePrefix}は(gif,jpeg,png,webp)のファイルを選択してください`\n : '画像ファイル(gif,jpeg,png)のファイルを選択してください';\n }\n\n if (value?.size > Number.parseInt(maxByte)) {\n return messagePrefix\n ? `${messagePrefix}は${maxMegaByte}MB以内のファイルを選択してください`\n : '画像は${maxMegaByte}MB以内のファイルを選択してください';\n }\n\n return '';\n};\n\n// 選択したファイルのプレビュー用情報の取得\nexport const getSelectedFileInfo = (file) => {\n // プレビュー用情報の初期化\n const data = {\n name: null,\n preview: null,\n isImage: false,\n fileIconClassName: null,\n fileTypeName: null,\n formattedSize: null,\n };\n\n // ファイル情報が設定されていない場合は処理終了\n if (!file) return data;\n\n // 基本情報の設定\n data.name = file.name ?? null;\n data.preview = file.preview ?? null;\n data.formattedSize = file.formattedSize ?? null;\n\n // ファイルタイプ情報が設定されていない場合は処理終了\n if (!file.type) return data;\n\n // 画像と判定するmimeTypeリストを作成\n const imageMimeTypes = ['image/jpeg', 'image/gif', 'image/png', 'image/webp'];\n\n // アップロードファイルが画像か?判定\n data.isImage = file.type.match(\n new RegExp('(' + imageMimeTypes.join('|') + ')')\n )\n ? true\n : false;\n\n // アップロード画像がファイルの場合は処理終了\n if (data.isImage) {\n data.fileTypeName = file.type;\n return data;\n }\n\n // ドキュメント情報の初期値設定\n data.fileIconClassName = 'mdi mdi-file-cloud';\n data.fileTypeName = 'other';\n\n if (file.type == 'application/pdf') {\n data.fileIconClassName = 'mdi mdi-file-pdf';\n data.fileTypeName = 'pdf';\n }\n\n if (\n file.type == 'application/msword' ||\n file.type ==\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n ) {\n data.fileIconClassName = 'mdi mdi-file-word';\n data.fileTypeName = 'word';\n }\n\n if (\n file.type == 'application/vnd.ms-excel' ||\n file.type ==\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n ) {\n data.fileIconClassName = 'mdi mdi-file-excel';\n data.fileTypeName = 'excel';\n }\n\n if (\n file.type == 'application/vnd.ms-powerpoint' ||\n file.type ==\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n ) {\n data.fileIconClassName = 'mdi mdi-file-powerpoint';\n data.fileTypeName = 'powerpoint';\n }\n\n return data;\n};\n\n// APIから取得したファイル情報をフォーム値情報を取得\nexport const getUploadedFileValue = (value) => {\n // プレビュー用情報の初期化\n const data = {\n id: null,\n name: null,\n path: null,\n preview: null,\n type: null,\n size: null,\n isOriginal: false,\n fileKey: null,\n };\n\n // ファイル情報が設定されていない場合は処理終了\n if (!value) return data;\n\n data.id = value.id ?? null;\n data.name = value.originalFileName ?? null;\n data.path = value.originalFileName ?? null;\n data.preview = value.url ?? null;\n data.isOriginal = true;\n\n if (value.url) {\n const tmp = value.url.split('/');\n data.fileKey = tmp.length > 0 ? tmp[tmp.length - 1] : null;\n }\n\n const extension = value.url.substring(value.url.lastIndexOf('.') + 1);\n\n if (extension == 'png') data.type = 'image/png';\n if (extension == 'webp') data.type = 'image/webp';\n if (extension == 'jpg' || extension == 'jpeg') data.type = 'image/jpeg';\n if (extension == 'gif') data.type = 'image/gif';\n if (data.type) return data;\n\n // ドキュメント情報の初期値設定\n data.type = 'other';\n\n if (extension == 'pdf') data.type = 'application/pdf';\n if (extension == 'doc') data.type = 'application/msword';\n if (extension == 'docx')\n data.type =\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n\n if (extension == 'xls') data.type = 'application/vnd.ms-excel';\n if (extension == 'xlsx')\n data.type =\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n\n if (extension == 'ppt') data.type = 'application/vnd.ms-powerpoint';\n if (extension == 'pptx')\n data.type =\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n\n return data;\n};\n\n// APIリクエストエラー時のメッセージを抽出\nexport const getApiErrorMessages = (res) => {\n const ret = {\n status: res && res.status ? res.status : 500,\n errorMessages: [],\n };\n\n // レスポンスデータが想定外の場合は処理終了: 初期値を返却\n if (!res || !res.data || !res.data.error || !res.data.error.code) return ret;\n\n // 500エラーの場合は、APIから返却されるエラーメッセージが一定のため、抽出なし\n if (Number.parseInt(res.status) == 500) return ret;\n\n // 404エラーの場合は、APIから返却されるエラーメッセージが一定のため、抽出なし\n if (Number.parseInt(res.status) == 404) return ret;\n\n // 401エラーの場合は、APIから返却されるエラーメッセージが一定のため、抽出なし\n if (Number.parseInt(res.status) == 401) return ret;\n\n // 上記ステータス番号の場合で、レスポンスにerror.detailフィールドがない場合は処理終了\n if (!res.data.error) return ret;\n\n if (res.data.error.code == 'PJDB_APPLICATION_ERROR') {\n ret.errorMessages.push({\n message: res.data.error.message ?? 'エラーが発生しました',\n });\n } else if (res.data.error.detail) {\n // エラーメッセージを抽出\n const tmp = {\n detail: res.data.error.detail,\n detailKeys: Object.keys(res.data.error.detail),\n };\n tmp.detailKeys.reduce((acc, value) => {\n if (!Array.isArray(tmp.detail[value])) {\n acc.push({\n message: tmp.detail[value],\n });\n return acc;\n }\n\n tmp.detail[value].map((item) => {\n acc.push({\n message: item,\n });\n });\n return acc;\n }, ret.errorMessages);\n }\n\n return ret;\n};\n\nexport const validUrl = (url) => {\n if (!url) return false;\n try {\n new URL(url);\n return true;\n } catch (e) {\n return false;\n }\n};\n","import querystring from 'querystring';\nimport httpBuildQuery from 'http-build-query';\nimport { mapKeysCamelCase, mapKeysSnakeCase } from '../mapKeyConvert';\nimport { employeeCountTypes } from '@constants/company';\nimport {\n interviewTypes,\n participationTypes,\n priceTypes,\n projectTypes,\n} from '@constants/project';\nimport { userWorkStatusTypes } from '@constants/user';\n\nexport const parseQueryString = (queryAsString, isFilter, filterList) => {\n if (\n !queryAsString ||\n typeof queryAsString != 'string' ||\n queryAsString == ''\n ) {\n return {};\n }\n\n // 先頭に?がついている場合は削除\n if (queryAsString.startsWith('?', 0)) {\n queryAsString = queryAsString.slice(1);\n }\n\n // クエリ文字列をパース\n const ret = querystring.parse(queryAsString);\n\n // Filterフラグがtrueではない場合は、パース結果を返却\n if (!isFilter) {\n return ret;\n }\n\n // 空パラメーターを除外した結果を返却\n return Object.keys(querystring.parse(queryAsString))\n .filter((item) => {\n // フィルタリング処理1: 空文字のキーは削除\n if (!ret[item] || ret[item] == '') {\n return false;\n }\n\n // フィルタリング処理1: フィルターリストに指定されているキーは削除\n if (\n filterList &&\n Array.isArray(filterList) &&\n filterList.indexOf(item) != -1\n ) {\n return false;\n }\n\n return true;\n })\n .reduce((acc, value) => {\n acc[value] = ret[value];\n return acc;\n }, {});\n};\n\nexport const buildQueryString = (queries) => {\n if (!queries || typeof queries != 'object') {\n return '';\n }\n return httpBuildQuery(queries);\n};\n\nexport const getSearchParameterEmployeeCountType = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) return null;\n\n // 最小値配列を作成\n const minValues = data\n .filter((item) => {\n return employeeCountTypes.options.find((e) => e.value == item)\n ? true\n : false;\n })\n .map((item) => {\n const employeeCountType = employeeCountTypes.options.find(\n (e) => e.value == item\n );\n return employeeCountType.min;\n });\n\n // 最大値配列を作成\n const maxValues = data\n .filter((item) => {\n return employeeCountTypes.options.find((e) => e.value == item)\n ? true\n : false;\n })\n .map((item) => {\n const employeeCountType = employeeCountTypes.options.find(\n (e) => e.value == item\n );\n return employeeCountType.max;\n });\n\n // 最小値配列を昇順ソート\n minValues.sort((a, b) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n });\n\n // 最大値配列を降順ソート\n maxValues.sort((a, b) => {\n if (a > b) return -1;\n if (a < b) return 1;\n return 0;\n });\n\n // 最大値配列に-1が含まれている場合は、上限なしフラグを設定\n const isWithoutLimit = maxValues.find((item) => item == -1) ? true : false;\n\n // 最小値、最大値の実数オブジェクトを返却\n return {\n max: !isWithoutLimit && maxValues.length > 0 ? maxValues[0] : null,\n min: minValues.length > 0 ? minValues[0] : null,\n };\n};\n\nexport const getSearchParameterArrayTypeValue = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) return '';\n return data.join(',');\n};\n\nexport const getSearchParameterMultipleArrayTypeValue = (data) => {\n if (!data || !Array.isArray(data) || data.length < 1) return [];\n\n const ret = data.reduce((acc, value) => {\n if (!value || !Array.isArray(value) || value.length < 1) return acc;\n const currentArray = value\n .filter((item) => item.value)\n .map((item) => item.value);\n return [...acc, ...currentArray];\n }, []);\n\n // 重複値を除外した配列を返却\n return [...new Set(ret)];\n};\n\n// 検索クエリ文字列作成: 会社検索\nexport const getSearchCompanyQuery = (data) => {\n const employeeCountValues = getSearchParameterEmployeeCountType(\n data.employeeCountType\n );\n // プロジェクト検索パラメーター作成\n let params = {\n keyword: data.keyword ? data.keyword : '',\n employeeCountType: getSearchParameterArrayTypeValue(data.employeeCountType),\n employeeCountMin:\n employeeCountValues && employeeCountValues.min\n ? employeeCountValues.min\n : null,\n employeeCountMax:\n employeeCountValues && employeeCountValues.max\n ? employeeCountValues.max\n : null,\n locationIds: getSearchParameterMultipleArrayTypeValue(data.locationIds),\n };\n\n //\n // 作成したパラメーターのキー名をスネークケースに変換\n // クエリ文字列は、検索結果画面でURL文字列として取り扱うので、ここでスネークケースに変換しておく必要がある\n // axios.option.paramsに付与しないので、一括変換の処理を通過しないため\n //\n params = mapKeysSnakeCase(params);\n\n // 作成したパラメーターから、検索クエリを作成\n let queryAsString = buildQueryString(params);\n\n // 検索クエリから空値を除外したパラメーターリスト作成\n let tmp = parseQueryString(queryAsString, true);\n\n // 空値を除外したパラメーターから、検索クエリを作成\n queryAsString = buildQueryString(tmp);\n\n return queryAsString;\n};\n\n// 検索クエリ文字列作成: プロジェクト検索\nexport const getSearchProjectQuery = (data) => {\n // プロジェクト検索パラメーター作成\n let params = {\n categoryIds: getSearchParameterMultipleArrayTypeValue(data.categoryIds),\n finishedBy: data.finishedBy ? data.finishedBy : '',\n interviewType: getSearchParameterArrayTypeValue(data.interviewType),\n keyword: data.keyword ? data.keyword : '',\n locationIds: getSearchParameterMultipleArrayTypeValue(data.locationIds),\n participationType: getSearchParameterArrayTypeValue(data.participationType),\n priceAmountMax: data.priceAmountMax\n ? String(data.priceAmountMax).split(',').join('')\n : '',\n priceAmountMin: data.priceAmountMin\n ? String(data.priceAmountMin).split(',').join('')\n : '',\n projectOwner: data.projectOwner ? data.projectOwner : '',\n priceType:\n data.priceType && data.priceType.value ? data.priceType.value : '',\n projectType: getSearchParameterArrayTypeValue(data.projectType),\n workType: getSearchParameterArrayTypeValue(data.workType),\n skillCategoryIds: getSearchParameterMultipleArrayTypeValue(\n data.skillCategoryIds\n ),\n startedFrom: data.startedFrom ? data.startedFrom : '',\n stickerLabels: data.isWanted ? ['WANTED'] : [],\n };\n\n //\n // 作成したパラメーターのキー名をスネークケースに変換\n // クエリ文字列は、検索結果画面でURL文字列として取り扱うので、ここでスネークケースに変換しておく必要がある\n // axios.option.paramsに付与しないので、一括変換の処理を通過しないため\n //\n params = mapKeysSnakeCase(params);\n\n // 作成したパラメーターから、検索クエリを作成\n let queryAsString = buildQueryString(params);\n\n // 検索クエリから空値を除外したパラメーターリスト作成\n let tmp = parseQueryString(queryAsString, true);\n\n // 空値を除外したパラメーターから、検索クエリを作成\n queryAsString = buildQueryString(tmp);\n\n return queryAsString;\n};\n\n// 検索クエリ文字列作成: ユーザー検索\nexport const getSearchUserQuery = (data) => {\n // プロジェクト検索パラメーター作成\n let params = {\n keyword: data.keyword ? data.keyword : '',\n locationIds: getSearchParameterMultipleArrayTypeValue(data.locationIds),\n skillCategoryIds: getSearchParameterMultipleArrayTypeValue(\n data.skillCategoryIds\n ),\n workingStatus: getSearchParameterArrayTypeValue(data.workingStatus),\n };\n\n //\n // 作成したパラメーターのキー名をスネークケースに変換\n // クエリ文字列は、検索結果画面でURL文字列として取り扱うので、ここでスネークケースに変換しておく必要がある\n // axios.option.paramsに付与しないので、一括変換の処理を通過しないため\n //\n params = mapKeysSnakeCase(params);\n\n // 作成したパラメーターから、検索クエリを作成\n let queryAsString = buildQueryString(params);\n\n // 検索クエリから空値を除外したパラメーターリスト作成\n let tmp = parseQueryString(queryAsString, true);\n\n // 空値を除外したパラメーターから、検索クエリを作成\n queryAsString = buildQueryString(tmp);\n\n return queryAsString;\n};\n\n// 検索クエリ文字列作成: 会社検索\nexport const getInitialSearchParameter = (\n data,\n categories,\n skillCategories,\n locations\n) => {\n // クエリパラメーターのパース\n const queries = mapKeysCamelCase(parseQueryString(data));\n\n // 検索パラメーターオブジェクトを初期化\n const parameters = {\n categoryIds: [],\n employeeCountType: [],\n finishedBy: queries.finishedBy ? queries.finishedBy : null,\n interviewType: [],\n isWanted: false,\n keyword: queries.keyword ? queries.keyword : '',\n locationIds: [],\n searchType: null,\n priceAmountMax: queries.priceAmountMax ? queries.priceAmountMax : null,\n priceAmountMin: queries.priceAmountMin ? queries.priceAmountMin : null,\n participationType: [],\n priceType:\n queries.priceType &&\n priceTypes.options.find((e) => e.value == queries.priceType)\n ? priceTypes.options.find((e) => e.value == queries.priceType)\n : null,\n projectOwner: queries.projectOwner ? queries.projectOwner : '',\n projectType: [],\n skillCategoryIds: [],\n startedFrom: queries.startedFrom ? queries.startedFrom : null,\n workingStatus: [],\n workType: [],\n };\n\n // 特殊送信値(カンマ区切り文字列)を選択値に変換: 社員規模の送信値を\n const splitEmployeeCountTypeString = queries.employeeCountType\n ? String(queries.employeeCountType).split(',')\n : null;\n if (\n splitEmployeeCountTypeString &&\n Array.isArray(splitEmployeeCountTypeString) &&\n splitEmployeeCountTypeString.length > 0\n ) {\n parameters.employeeCountType = splitEmployeeCountTypeString.reduce(\n (acc, value) => {\n const item = employeeCountTypes.options.find((e) => e.value == value);\n if (item) acc.push(item);\n return acc;\n },\n []\n );\n }\n\n // 特殊送信値(カンマ区切り文字列)を選択値に変換: 稼働可否\n const splitWorkingStatusString = queries.workingStatus\n ? String(queries.workingStatus).split(',')\n : null;\n if (\n splitWorkingStatusString &&\n Array.isArray(splitWorkingStatusString) &&\n splitWorkingStatusString.length > 0\n ) {\n parameters.workingStatus = splitWorkingStatusString.reduce((acc, value) => {\n const item = userWorkStatusTypes.options.find((e) => e.value == value);\n if (item) acc.push(item);\n return acc;\n }, []);\n }\n\n // 特殊送信値(カンマ区切り文字列)を選択値に変換: 面談形式\n const splitInterviewTypeString = queries.interviewType\n ? String(queries.interviewType).split(',')\n : null;\n if (\n splitInterviewTypeString &&\n Array.isArray(splitInterviewTypeString) &&\n splitInterviewTypeString.length > 0\n ) {\n parameters.interviewType = splitInterviewTypeString.reduce((acc, value) => {\n const item = interviewTypes.options.find((e) => e.value == value);\n if (item) acc.push(item);\n return acc;\n }, []);\n }\n\n // 特殊送信値(カンマ区切り文字列)を選択値に変換: 想定参画タイプ\n const splitParticipationTypeString = queries.participationType\n ? String(queries.participationType).split(',')\n : null;\n if (\n splitParticipationTypeString &&\n Array.isArray(splitParticipationTypeString) &&\n splitParticipationTypeString.length > 0\n ) {\n parameters.participationType = splitParticipationTypeString.reduce(\n (acc, value) => {\n const item = participationTypes.options.find((e) => e.value == value);\n if (item) acc.push(item);\n return acc;\n },\n []\n );\n }\n\n // 特殊送信値(カンマ区切り文字列)を選択値に変換: 商流\n const splitProjectTypeString = queries.projectType\n ? String(queries.projectType).split(',')\n : null;\n if (\n splitProjectTypeString &&\n Array.isArray(splitProjectTypeString) &&\n splitProjectTypeString.length > 0\n ) {\n parameters.projectType = splitProjectTypeString.reduce((acc, value) => {\n const item = projectTypes.options.find((e) => e.value == value);\n if (item) acc.push(item);\n return acc;\n }, []);\n }\n\n // プロジェクトカテゴリー、スキルカテゴリー、地域カテゴリーの送信値配列初期化\n const selectCategoryIds = [];\n const selectSkillCategoryIds = [];\n const selectLocationIds = [];\n\n // 配列パラメーターの送信値抽出\n for (let index in queries) {\n // ステッカーラベルにWANTEDが設定されている場合は、該当パラメーターを設定\n if (index.startsWith('stickerLabels') && queries[index] == 'WANTED') {\n parameters.isWanted = true;\n continue;\n }\n\n // プロジェクトカテゴリーID\n if (index.startsWith('categoryIds')) {\n selectCategoryIds.push(queries[index]);\n continue;\n }\n\n // スキルカテゴリーID\n if (index.startsWith('skillCategoryIds')) {\n selectSkillCategoryIds.push(queries[index]);\n continue;\n }\n\n // 地域ID\n if (index.startsWith('locationIds')) {\n selectLocationIds.push(queries[index]);\n continue;\n }\n }\n\n // 特殊送信値(配列パラメーター)を選択値に変換: プロジェクトカテゴリーID\n if (categories && Array.isArray(categories) && categories.length > 0) {\n parameters.categoryIds = categories.reduce((acc, value) => {\n if (!value.options || !Array.isArray(value.options)) return acc;\n const selected = value.options.filter((item) => {\n return selectCategoryIds.find((e) => String(e) == String(item.value));\n });\n acc.push(selected);\n return acc;\n }, []);\n }\n\n // 特殊送信値(配列パラメーター)を選択値に変換: スキルカテゴリーID\n if (\n skillCategories &&\n Array.isArray(skillCategories) &&\n skillCategories.length > 0\n ) {\n parameters.skillCategoryIds = skillCategories.reduce((acc, value) => {\n if (!value.options || !Array.isArray(value.options)) return acc;\n const selected = value.options.filter((item) => {\n return selectSkillCategoryIds.find(\n (e) => String(e) == String(item.value)\n );\n });\n acc.push(selected);\n return acc;\n }, []);\n }\n\n // 特殊送信値(配列パラメーター)を選択値に変換: 地域ID\n if (locations && Array.isArray(locations) && locations.length > 0) {\n parameters.locationIds = locations.reduce((acc, value) => {\n if (!value.options || !Array.isArray(value.options)) return acc;\n const selected = value.options.filter((item) => {\n return selectLocationIds.find((e) => String(e) == String(item.value));\n });\n acc.push(selected);\n return acc;\n }, []);\n }\n\n return parameters;\n};\n","import dayjs from 'dayjs';\n\n/**\n * ローカルストレージが実行可能か?を検証する処理\n * @param {boolean} isWriteCheck\n * @return boolean\n */\nexport const isLocalStorageEnabled = (isWriteCheck) => {\n // 書き込みチェックも行うかフラグを取得\n isWriteCheck = typeof isWriteCheck == 'undefined' ? true : false;\n\n // ローカルストレージオブジェクトが存在しない場合は、falseを返却\n if (typeof localStorage == 'undefined') return false;\n\n // 書き込みチェックをしない場合は、ローカルストレージオブジェクトにsetItemプロパティが存在する時点で、trueを返却\n if (!isWriteCheck && localStorage.getItem && localStorage.setItem)\n return true;\n\n // ローカルストレージの書き込みチェック\n try {\n // 書き込みチェック用キーで値を書き込み\n localStorage.setItem('_7JJbxY3YbwNAEAYUKYYPLYNH9ZgpUMDd', '1');\n\n // 書き込んだ値を取得でき、取得値も書き込んだ値と同一の場合は、trueを返却\n if (localStorage.getItem('_7JJbxY3YbwNAEAYUKYYPLYNH9ZgpUMDd') === '1') {\n localStorage.removeItem('_7JJbxY3YbwNAEAYUKYYPLYNH9ZgpUMDd');\n return true;\n }\n\n // 書き込んだ値と違う場合は、falseを返却\n return false;\n } catch (e) {\n return false;\n }\n};\n\n/**\n * ローカルストレージへの保存処理\n * @param {string} key\n * @param {*} value\n * @returns\n */\nexport const setLocalStorageItem = (key, value) => {\n // ローカルストレージが使用できない環境の場合は、処理終了\n if (!isLocalStorageEnabled()) return;\n\n // 保存値がオブジェクト形式ではない場合、処理終了\n if (typeof value != 'object') return;\n\n try {\n // valueオブジェクトをJSON文字列に変換して保存\n localStorage.setItem(key, JSON.stringify(value));\n } catch (e) {\n // JSON文字列に変換できなかった場合は、保存しない\n return;\n }\n};\n\n/**\n * ローカルストレージの保存値を取得\n * @param {string} key\n * @return {*}\n */\nexport const removeLocalStorageItem = (key) => {\n // ローカルストレージが使用できない環境の場合は、処理終了\n if (!isLocalStorageEnabled()) return {};\n\n // ローカルストレージから指定キーの保存値を取得\n const data = localStorage.removeItem(key);\n\n // 指定キーのデータが空 or 存在しない場合は、空オブジェクトを返却\n if (!data) return {};\n\n try {\n // JSON文字列でデータを保存する仕組みなので、オブジェクト型に変換して返却\n return JSON.parse(data);\n } catch (e) {\n // オブジェクト型に変換できなかった場合は、空オブジェクトを返却\n return {};\n }\n};\n\n/**\n * ローカルストレージの保存値を削除\n * @param {string} key\n * @return {*}\n */\nexport const getLocalStorageItem = (key) => {\n // ローカルストレージが使用できない環境の場合は、処理終了\n if (!isLocalStorageEnabled()) return {};\n\n // ローカルストレージから指定キーの保存値を取得\n const data = localStorage.getItem(key);\n\n // 指定キーのデータが空 or 存在しない場合は、空オブジェクトを返却\n if (!data) return {};\n\n try {\n // JSON文字列でデータを保存する仕組みなので、オブジェクト型に変換して返却\n return JSON.parse(data);\n } catch (e) {\n // オブジェクト型に変換できなかった場合は、空オブジェクトを返却\n return {};\n }\n};\n\n/**\n * ローカルストレージのクリア処理\n * @param {string} key\n * @return {*}\n */\nexport const clearLocalStorageOtherKey = (key) => {\n // ローカルストレージが使用できない環境の場合は、処理終了\n if (!isLocalStorageEnabled()) return {};\n\n // ローカルストレージから指定キーの保存値を取得\n const data = localStorage.getItem(key);\n\n // ローカルストレージデータを全クリア\n window.localStorage.clear();\n\n // 指定キーのデータが空 or 存在しない場合は、空オブジェクトを返却\n if (!data) return {};\n\n try {\n // valueオブジェクトをJSON文字列に変換して保存\n localStorage.setItem(key, data);\n } catch (e) {\n // JSON文字列に変換できなかった場合は、保存しない\n return;\n }\n};\n\n// --------------------------------------------------------\n// ログイン、認証コード送信など、再試行回数に制限をかける時用のストレージ操作\n// --------------------------------------------------------\nexport const initFailedCount = (config, isReset) => {\n if (!config?.key || !config?.name) return false;\n\n // ローカルストレージデータ取得\n const storageData = getLocalStorageItem(config.key);\n\n // ログイン失敗回数が保存されていない場合は初期化\n if (!storageData?.[config.name]?.datetime || isReset) {\n storageData[config.name] = {\n count: 0,\n datetime: dayjs().valueOf(),\n };\n setLocalStorageItem(config.key, storageData);\n return;\n }\n\n // ログインの最終失敗日時を取得\n const failedDateTime = dayjs(storageData?.[config.name]?.datetime);\n const currentDateTime = dayjs();\n\n // ログイン日時が想定データではないか?24時間以上前の場合は、失敗履歴を初期化\n if (\n !failedDateTime.isValid() ||\n currentDateTime.diff(failedDateTime, 'minute') < 0 ||\n currentDateTime.diff(failedDateTime, 'minute') > 60 * 24\n ) {\n storageData[config.name] = {\n count: 0,\n datetime: dayjs().valueOf(),\n };\n setLocalStorageItem(config.key, storageData);\n }\n};\n\nexport const getFailedCount = (config) => {\n if (!config?.key || !config?.name) return false;\n\n // ローカルストレージデータ取得\n const storageData = getLocalStorageItem(config.key);\n\n // ログイン失敗回数が保存されていない場合は初期化\n return storageData?.[config.name]?.count &&\n Number.isInteger(storageData?.[config.name]?.count)\n ? storageData?.[config.name]?.count\n : 0;\n};\n\nexport const updateFailedCount = (config) => {\n if (!config?.key || !config?.name) return false;\n\n // ローカルストレージデータ取得\n const storageData = getLocalStorageItem(config.key);\n\n // ログイン失敗回数が保存されていない場合は初期化\n if (!storageData?.[config.name]?.datetime) {\n storageData[config.name] = {\n count: 1,\n datetime: dayjs().valueOf(),\n };\n setLocalStorageItem(config.key, storageData);\n return;\n }\n\n storageData[config.name] = {\n count:\n storageData?.[config.name]?.count &&\n Number.isInteger(storageData?.[config.name]?.count) &&\n storageData?.[config.name]?.count > 0\n ? storageData?.[config.name]?.count + 1\n : 1,\n datetime: dayjs().valueOf(),\n };\n\n setLocalStorageItem(config.key, storageData);\n};\n\nexport const getStorageDataAsBase64 = () => {\n // ローカルストレージが使用できない環境の場合は、処理終了\n if (!isLocalStorageEnabled())\n return Buffer.from(JSON.stringify({})).toString('base64');\n\n // get local storage data\n const data = {};\n [...Array(localStorage.length)].reduce((acc, _, index) => {\n const key = localStorage.key(index);\n const value = localStorage.getItem(key);\n acc[key] = value;\n return acc;\n }, data);\n\n return data && typeof data == 'object'\n ? Buffer.from(JSON.stringify(data)).toString('base64')\n : Buffer.from(JSON.stringify({})).toString('base64');\n};\n\nexport const getStorageAuthorizedDataAsBase64 = () => {\n // ローカルストレージが使用できない環境の場合は、処理終了\n if (!isLocalStorageEnabled())\n return Buffer.from(JSON.stringify({})).toString('base64');\n\n // get local storage data\n const data = {};\n [...Array(localStorage.length)].reduce((acc, _, index) => {\n const key = localStorage.key(index);\n const value = localStorage.getItem(key);\n\n // Cognito関係の情報以外は破棄\n if (key.indexOf('CognitoIdentityServiceProvider') == -1) return acc;\n\n // Cognito関係の情報でも、不要な情報は廃棄\n if (\n key.search(/(.*)LastAuthUser$/) == -1 &&\n key.search(/(.*)idToken$/) == -1 &&\n key.search(/(.*)refreshToken$/) == -1\n )\n return acc;\n\n // キー名から不要なpreffixを削除\n const shortKeyName = key.split('.').slice(-1)[0];\n acc[shortKeyName] = value;\n return acc;\n }, data);\n\n return data && typeof data == 'object'\n ? Buffer.from(JSON.stringify(data)).toString('base64')\n : Buffer.from(JSON.stringify({})).toString('base64');\n};\n","import {\n roles,\n employeeCountTypes,\n memberStatuses,\n memberTypes,\n} from '@constants/company';\nimport { statuses as paymentStatuses } from '@constants/payment';\nimport {\n interviewTypes,\n participationTypes,\n // priceEvaluateTypes,\n priceTypes,\n priceUnitTypes,\n projectOwnerTypes,\n projectTypes,\n publishScopeTypes,\n publishScopeRangeTypes,\n statuses,\n recruitStatuses,\n workAverageTypes,\n workTypes,\n contractTypes,\n relateTypes,\n referenceTypes,\n} from '@constants/project';\nimport {\n genderTypes,\n loginedStatusTypes,\n userConnectionStatusTypes,\n userConnectionTypes,\n userEmploymentTypes,\n userLanguageYearTypes,\n userWorkStatusTypes,\n userSkillYearTypes,\n userParticipationTypes,\n} from '@constants/user';\nimport { dealStatuses } from '@constants/deal';\nimport { notificationTypes } from '@constants/other';\nimport dayjs from 'dayjs';\n\nexport const getSelectOptions = (list) => {\n return list.map((item) => {\n return {\n label: item.name || item.title,\n value: item.id,\n };\n });\n};\n\nexport const getAllProjectLabels = () => {\n return {\n participationType: participationTypes.label,\n price: '報酬/給料',\n priceType: priceTypes.label,\n projectType: projectTypes.label,\n projectOwner: 'プロジェクトオーナー',\n workType: workTypes.label,\n };\n};\n\nexport const getAllUserLabels = () => {\n return {\n genderType: genderTypes.label,\n userWorkStatusTypes: userWorkStatusTypes.label,\n };\n};\n\nexport const getAllCompanyLabels = () => {\n return {\n employeeCountType: employeeCountTypes.label,\n role: roles.label,\n };\n};\n\nexport const getParticipationType = (participationType) => {\n const data = participationTypes.options.find(\n (v) => v.value === participationType\n );\n return data ? data.label : '-';\n};\n\nexport const getPriceType = (priceType) => {\n const data = priceTypes.options.find((v) => v.value === priceType);\n return data ? data.label : '-';\n};\n\nexport const getPriceUnitType = (priceType) => {\n const data = priceUnitTypes.options.find((v) => v.value === priceType);\n return data ? data.label : '-';\n};\n\nexport const getProjectType = (projectType) => {\n const data = projectTypes.options.find((v) => v.value === projectType);\n return data ? data.label : '-';\n};\n\nexport const getProjectOwnerType = (projectOwnerType) => {\n const data = projectOwnerTypes.options.find(\n (v) => v.value === projectOwnerType\n );\n return data ? data.label : '-';\n};\n\nexport const getWorkType = (workType) => {\n const data = workTypes.options.find((v) => v.value === workType);\n return data ? data.label : '-';\n};\n\nexport const getInterviewType = (interviewType) => {\n const data = interviewTypes.options.find((v) => v.value === interviewType);\n return data ? data.label : '-';\n};\n\nexport const getWorkAverageType = (workAverageType) => {\n const data = workAverageTypes.options.find(\n (v) => v.value === workAverageType\n );\n return data ? data.label : '-';\n};\n\nexport const getProjectStatus = (status) => {\n const data = statuses.options.find((v) => v.value === status);\n return data ? data.label : '-';\n};\n\nexport const getProjectRecruitStatus = (status) => {\n const data = recruitStatuses.options.find((v) => v.value === status);\n return data ? data.label : '-';\n};\n\nexport const getProjectRelateType = (relateType) => {\n const data = relateTypes.options.find((v) => v.value === relateType);\n return data ? data.label : '-';\n};\n\nexport const getProjectReferenceType = (referenceType) => {\n const data = referenceTypes.options.find((v) => v.value === referenceType);\n return data ? data.label : '-';\n};\nexport const getProjectPublishScopeType = (publishScopeType) => {\n const data = publishScopeTypes.options.find(\n (v) => v.value === publishScopeType\n );\n return data ? data.label : '-';\n};\nexport const getProjectPublishScopeRangeType = (publishScopeRangeType) => {\n const data = publishScopeRangeTypes.options.find(\n (v) => v.value === publishScopeRangeType\n );\n return data ? data.label : '-';\n};\n\n/**\n * ユーザー系\n */\nexport const getGenderType = (genderType) => {\n const data = genderTypes.options.find((v) => v.value === genderType);\n return data ? data.label : '-';\n};\n\nexport const userWorkStatusType = (userWorkStatusType) => {\n const data = userWorkStatusTypes.options.find(\n (v) => v.value === userWorkStatusType\n );\n return data ? data.label : '-';\n};\n\nexport const loginedStatusType = (loginedStatusType) => {\n const data = loginedStatusTypes.options.find(\n (v) => v.value === loginedStatusType\n );\n return data ? data.label : '-';\n};\n\nexport const userSkillYearType = (userSkillYearType) => {\n const data = userSkillYearTypes.options.find(\n (v) => v.value === userSkillYearType\n );\n return data ? data.label : '-';\n};\n\nexport const userLanguageYearType = (userLanguageYearType) => {\n const data = userLanguageYearTypes.options.find(\n (v) => v.value === userLanguageYearType\n );\n return data ? data.label : '-';\n};\n\nexport const userEmploymentType = (userEmploymentType) => {\n const data = userEmploymentTypes.options.find(\n (v) => v.value === userEmploymentType\n );\n return data ? data.label : '-';\n};\n\nexport const getUserConnectionStatusType = (userConnectionStatusType) => {\n const data = userConnectionStatusTypes.options.find(\n (v) => v.value === userConnectionStatusType\n );\n return data ? data.label : '-';\n};\n\nexport const getUserConnectionType = (userConnectionType) => {\n const data = userConnectionTypes.options.find(\n (v) => v.value === userConnectionType\n );\n return data ? data.label : '-';\n};\n\nexport const getUserParticipationType = (userParticipationType) => {\n const data = userParticipationTypes.options.find(\n (v) => v.value === userParticipationType\n );\n return data ? data.label : '-';\n};\n\n/**\n * 会社系\n */\nexport const getCompanyRole = (role) => {\n const data = roles.options.find((v) => v.value === role);\n return data ? data.label : '-';\n};\n\nexport const getEmployeeCount = (employeeCountMin, employeeCountMax) => {\n const data = employeeCountTypes.options.find((v) => {\n return v.min === employeeCountMin && v.max === employeeCountMax;\n });\n return data ? data.label : '-';\n};\nexport const getCompanyMemberStatus = (status) => {\n const data = memberStatuses.options.find((v) => v.value === status);\n return data ? data.label : '-';\n};\nexport const getCompanyMemberTypes = (type) => {\n const data = memberTypes.options.find((v) => v.value === type);\n return data ? data.label : '-';\n};\nexport const getCompanyMemberInvitationTypes = (invitationType) => {\n const data = memberTypes.options.find((v) => v.value === invitationType);\n return data ? data.label : '-';\n};\n\n/**\n * ユーザー系\n */\nexport const getUserStatus = (status) => {\n const data = statuses.options.find((v) => v.value === status);\n return data ? data.label : '-';\n};\n\n/**\n * 支払い系\n */\nexport const getPaymentStatus = (status) => {\n const data = paymentStatuses.options.find((v) => v.value === status);\n return data ? data.label : '-';\n};\n\n/**\n * デフォルト取得系\n */\nexport const getDefaultProjectStatus = () => {\n return 'DRAFT';\n};\n\nexport const getDefaultProjectExpiredOn = () => {\n return dayjs().add(14, 'days').format('YYYY-MM-DD');\n};\n\nexport const getDefaultProjectContractType = () => {\n return contractTypes.options[0];\n};\n\n/**\n * Deal系\n */\nexport const getDealStatus = (status) => {\n const data = dealStatuses.options.find((v) => v.value === status);\n return data ? data.label : '-';\n};\n\n/**\n * その他系\n */\nexport const notificationType = (notificationType) => {\n const data = notificationTypes.options.find(\n (v) => v.value === notificationType\n );\n return data ? data.label : '-';\n};\n","import dayjs from 'dayjs';\n\n// ページネーション設定: 表示件数\nexport const userPaginatinPerTypes = {\n label: '表示件数',\n options: [\n // { label: '1', value: 1 },\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const userPaginatinSortByTypes = {\n label: '並び順(キー)',\n options: [\n { label: '登録日', value: 'createdAt' },\n { label: '最終ログイン日時', value: 'loginedAt' },\n // { label: 'おすすめ順', value: 'recommend' },\n ],\n};\n\n// ページネーション設定: 並び順(タイプ)\nexport const userPaginatinSortOrderTypes = {\n label: '並び順(タイプ)',\n default: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n createdAt: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n loginedAt: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n};\n\nexport const loginedStatusTypes = {\n label: '最終ログイン時間',\n options: [\n { label: 'ログイン中', value: 'ONLINE' },\n { label: '1日以内', value: 'WITHIN_1_DAY' },\n { label: '3日以内', value: 'WITHIN_3_DAY' },\n { label: '1週間以内', value: 'WITHIN_1_WEEK' },\n { label: '1週間以上前', value: '1_WEEK_AGO' },\n { label: '1ヶ月以上前', value: '1_MONTH_AGO' },\n ],\n};\n\nexport const genderTypes = {\n label: '性別',\n options: [\n { label: '男性', value: 'MALE' },\n { label: '女性', value: 'FEMALE' },\n { label: 'その他', value: 'OTHER' },\n { label: '未回答', value: 'UNANSWERED' },\n ],\n};\n\nexport const userWorkStatusTypes = {\n label: '稼働状況',\n options: [\n { label: '稼働可(今スグ)', value: 'WORKABLE_NOW' },\n { label: '稼働可(日付指定)', value: 'WORKABLE_AM' },\n { label: '稼働不可', value: 'DISWORKABLE' },\n { label: 'その他(応相談)', value: 'OTHER' },\n ],\n};\n\n// 検索BOXでのみ使用するユーザー稼働状況\n// export const searchUserWorkStatusTypes = {\n// label: '稼働状況',\n// options: [\n// { label: '稼働可', value: 'WORKABLE_NOW' },\n// { label: 'その他', value: 'OTHER' },\n// { label: '稼働不可', value: 'DISWORKABLE' },\n// ],\n// }\n\nexport const userScoutStatusTypes = {\n label: 'スカウト可否',\n options: [\n { label: 'スカウト可', value: true },\n { label: 'スカウト不可', value: false },\n ],\n};\n\nexport const userSkillYearTypes = {\n label: '経験年数',\n options: [\n { label: '1年未満', value: 'Y1' },\n { label: '1年-3年未満', value: 'Y1_Y3' },\n { label: '3年-5年未満', value: 'Y3_Y5' },\n { label: '5年以上', value: 'Y5' },\n ],\n};\n\nexport const userLanguageYearTypes = {\n label: '経験年数',\n options: [\n { label: '1年未満', value: 'Y1' },\n { label: '1年-3年未満', value: 'Y1_Y3' },\n { label: '3年-5年未満', value: 'Y3_Y5' },\n { label: '5年以上', value: 'Y5' },\n ],\n};\n\nexport const userEmploymentTypes = {\n label: '就業状況',\n options: [\n { label: '会社所属', value: 'WORKER' },\n { label: 'フリーランス/個人事業主', value: 'FREELANCE' },\n { label: '学生', value: 'STUDENT' },\n { label: 'その他', value: 'OTHER' },\n ],\n};\n\nexport const userBirthdayYearTypes = (() => {\n const currentYear = dayjs().year();\n const options = [...Array(101)].map((item, index) => {\n return {\n label: currentYear - index,\n value: currentYear - index,\n };\n });\n return {\n label: '生年月日(西暦)',\n options,\n };\n})();\n\nexport const userCareersYearTypes = (() => {\n const currentYear = dayjs().year();\n const options = [...Array(101)].map((item, index) => {\n return {\n label: currentYear - index,\n value: currentYear - index,\n };\n });\n return {\n label: '経歴(西暦)',\n options,\n };\n})();\n\nexport const userCertificatesYearTypes = (() => {\n const currentYear = dayjs().year();\n const options = [...Array(101)].map((item, index) => {\n return {\n label: currentYear - index,\n value: currentYear - index,\n };\n });\n return {\n label: '資格取得日(西暦)',\n options,\n };\n})();\n\nexport const userMonthTypes = {\n label: '月',\n options: [...Array(12)].map((item, index) => {\n return {\n label: index + 1,\n value: index + 1,\n };\n }),\n};\n\nexport const userDayTypes = {\n label: '日',\n options: [...Array(31)].map((item, index) => {\n return {\n label: index + 1,\n value: index + 1,\n };\n }),\n};\n\nexport const userResidentStatusTypes = {\n label: '所属状況',\n options: [\n { label: '全て', value: 'ALL' },\n { label: '過去に所属', value: 'PAST' },\n { label: '現在所属', value: 'CURRENT' },\n ],\n};\n\nexport const userConnectionStatusTypes = {\n label: 'ネットワーク状態',\n options: [\n { label: '全て', value: 'ALL' },\n { label: 'リクエスト中', value: 'IN_PROGRESS' },\n { label: '承諾', value: 'ACCEPTED' },\n { label: '未承諾', value: 'DECLINED' },\n ],\n};\n\nexport const userConnectionTypes = {\n label: 'ネットワーク契機',\n options: [\n { label: '全て', value: 'ALL' },\n { label: '招待', value: 'INVITE' },\n { label: 'プロジェクト', value: 'PROJECT' },\n { label: '会社', value: 'COMPANY' },\n { label: 'リクエスト', value: 'REQUEST' },\n ],\n};\n\n// プロジェクト詳細画面の応募モーダル専用セレクター\nexport const userParticipationTypes = {\n label: '参画形態',\n options: [\n // 参画形態が、所属企業か?ビジネスページの場合は、OTHERにする\n // { label: '所属法人', value: 'AFFILIATION_COMPANY' },\n // { label: 'ビジネスページ', value: 'PARTICIPATION_COMPANY' },\n {\n label: '所属法人',\n isParticipationCompany: false,\n isAffiliationCompany: true,\n value: 'OTHER',\n },\n {\n label: 'ビジネスページ',\n isParticipationCompany: true,\n isAffiliationCompany: false,\n value: 'OTHER',\n },\n {\n label: '正社員',\n isParticipationCompany: false,\n isAffiliationCompany: false,\n value: 'GENERAL',\n },\n {\n label: '副業',\n isParticipationCompany: false,\n isAffiliationCompany: false,\n value: 'SIDE_BUSINESS',\n },\n {\n label: 'フリーランス/個人事業主',\n isParticipationCompany: false,\n isAffiliationCompany: false,\n value: 'FREELANCE',\n },\n {\n label: 'その他(契約社員、アルバイト等)',\n isParticipationCompany: false,\n isAffiliationCompany: false,\n value: 'OTHER',\n },\n ],\n};\n\nexport const userInvitationTypes = {\n label: 'ユーザー招待',\n options: [\n { label: 'メールアドレスで招待', value: 'EMAIL' },\n { label: 'URLで招待', value: 'URL' },\n ],\n};\n\nexport const userJoinedCompanySettingTypes = {\n label: '設定',\n options: [{ label: 'プロフィールに表示', value: 'isExternalShow' }],\n};\n\nexport const userJoinedCompanySettingExternalShowTypes = {\n label: '外部公開',\n options: [\n { label: '表示', value: true },\n { label: '非表示', value: false },\n ],\n};\n","import { configureStore } from '@reduxjs/toolkit';\nimport createSagaMiddleware from 'redux-saga';\nimport logger from 'redux-logger';\nimport reducer from './reducers';\nimport rootSaga from './sagas';\n\n// create the saga middleware\nconst sagaMiddleware = createSagaMiddleware();\n// mount it on the Store\nconst store = configureStore({\n reducer,\n middleware: (getDefaultMiddleware) => {\n return process?.env?.REACT_APP_ENV == 'production'\n ? getDefaultMiddleware().concat(sagaMiddleware)\n : getDefaultMiddleware().concat(sagaMiddleware).concat(logger);\n },\n});\n\nsagaMiddleware.run(rootSaga);\n\nexport default store;\n","export const getPosts = state => state.PostReducer.posts;\nexport const getCurrentPage = state => state.PostReducer.currentPage;\n","import { takeLatest, put, select } from 'redux-saga/effects';\nimport {\n CREATE_POST,\n GET_POSTS,\n UPDATE_POST,\n DELETE_POST,\n PUBLIC_SAVE_DRAFT,\n} from './actionTypes';\nimport {\n getPostsSuccess,\n getPostsFail,\n // createPostSuccess,\n createPostFail,\n updatePostSuccess,\n updatePostFail,\n deletePostSuccess,\n deletePostFail,\n resetPosts,\n} from './actions';\nimport { getPosts } from './selectors';\n\nfunction* onGetPosts({ payload }) {\n try {\n const newPosts = Array.isArray(payload?.data.data)\n ? payload?.data.data\n : [];\n const currentPosts = yield select(getPosts);\n const posts = [...currentPosts, ...newPosts];\n\n yield put(\n getPostsSuccess({\n posts,\n currentPage: Number(payload?.data?.meta?.currentPage),\n lastPage: Number(payload?.data?.meta?.lastPage),\n })\n );\n } catch (error) {\n yield put(getPostsFail(error.response));\n }\n}\n\nfunction* onCreatePost({ payload }) {\n try {\n const currentPosts = yield select(getPosts);\n // eslint-disable-next-line no-unused-vars\n const posts = [payload, ...currentPosts];\n yield put(resetPosts());\n\n // yield put(createPostSuccess({\n // post: payload,\n // posts\n // }));\n } catch (error) {\n yield put(createPostFail(error.response));\n }\n}\n\nfunction* onUpdatePost({ payload }) {\n try {\n const currentPosts = yield select(getPosts);\n const posts = currentPosts.map((value) => {\n if (value.id === payload.id) {\n return payload;\n }\n\n return value;\n });\n\n yield put(\n updatePostSuccess({\n post: payload,\n posts,\n })\n );\n } catch (error) {\n yield put(updatePostFail(error.response));\n }\n}\n\nfunction* onPublicSaveDraft({ payload }) {\n try {\n const currentPosts = yield select(getPosts);\n let posts = currentPosts.filter((value) => value.id !== payload.post.id);\n\n if (payload.filter != 'DRAFT') {\n posts.unshift(payload.post);\n }\n\n yield put(\n updatePostSuccess({\n post: payload.post,\n posts,\n })\n );\n } catch (error) {\n yield put(updatePostFail(error.response));\n }\n}\n\nfunction* onDeletePost({ payload }) {\n try {\n const currentPosts = yield select(getPosts);\n const posts = currentPosts.filter((value) => value.id !== payload.id);\n\n yield put(\n deletePostSuccess({\n post: {},\n posts,\n })\n );\n } catch (error) {\n yield put(deletePostFail(error.response));\n }\n}\n\nfunction* CartSaga() {\n yield takeLatest(GET_POSTS, onGetPosts);\n yield takeLatest(CREATE_POST, onCreatePost);\n yield takeLatest(UPDATE_POST, onUpdatePost);\n yield takeLatest(DELETE_POST, onDeletePost);\n yield takeLatest(PUBLIC_SAVE_DRAFT, onPublicSaveDraft);\n}\n\nexport default CartSaga;\n","import { all, fork } from \"redux-saga/effects\";\n\nimport PostSaga from \"./posts/saga\";\n\nexport default function* rootSaga() {\n yield all([fork(PostSaga)]);\n}\n","import {\n GET_POSTS,\n GET_POSTS_SUCCESS,\n GET_POSTS_FAIL,\n CREATE_POST,\n CREATE_POST_SUCCESS,\n CREATE_POST_FAIL,\n UPDATE_POST,\n UPDATE_POST_SUCCESS,\n UPDATE_POST_FAIL, RESET_STATE,\n DELETE_POST,\n DELETE_POST_SUCCESS,\n DELETE_POST_FAIL,\n PUBLIC_SAVE_DRAFT,\n} from \"./actionTypes\";\n\nconst initialState = {\n posts: [],\n currentPage: 0,\n lastPage: null,\n post: {},\n isLoadingPost: false,\n isLoading: true,\n isError: false,\n error: {\n message: \"\",\n },\n};\n\nconst PostReducer = (state = initialState, action) => {\n switch (action.type) {\n case GET_POSTS:\n state = { ...state, isLoading: true };\n break;\n case GET_POSTS_SUCCESS:\n state = { ...state, posts: action.payload.posts, currentPage: action.payload.currentPage,\n lastPage: action.payload.lastPage, isLoading: false };\n break;\n case GET_POSTS_FAIL:\n state = {\n ...state,\n error: {\n message: \"Error\",\n },\n isLoading: false,\n isError: true,\n };\n break;\n case CREATE_POST:\n state = { ...state, isLoading: true, isLoadingPost: true };\n break;\n case CREATE_POST_SUCCESS:\n state = { ...state, post: action.payload.post, posts: action.payload.posts, isLoading: false, isLoadingPost: false };\n break;\n case CREATE_POST_FAIL:\n state = {\n ...state,\n error: {\n message: \"Error\",\n },\n isLoading: false,\n isError: true,\n isLoadingPost: false\n };\n break;\n case PUBLIC_SAVE_DRAFT:\n case UPDATE_POST:\n state = { ...state, isLoading: true, isLoadingPost: true };\n break;\n case UPDATE_POST_SUCCESS:\n state = { ...state, post: action.payload.post, posts: action.payload.posts, isLoading: false, isLoadingPost: false };\n break;\n case UPDATE_POST_FAIL:\n state = {\n ...state,\n error: {\n message: \"Error\",\n },\n isLoading: false,\n isLoadingPost: false,\n isError: true,\n };\n break;\n case DELETE_POST:\n state = { ...state, isLoading: true, isLoadingPost: true };\n break;\n case DELETE_POST_SUCCESS:\n state = { ...state, post: action.payload.post, posts: action.payload.posts, isLoading: false, isLoadingPost: false };\n break;\n case DELETE_POST_FAIL:\n state = {\n ...state,\n error: {\n message: \"Error\",\n },\n isLoading: false,\n isLoadingPost: false,\n isError: true,\n };\n break;\n case RESET_STATE:\n state = { ...state, ...initialState };\n break;\n default:\n state = { ...state };\n break;\n }\n return state;\n};\n\nexport default PostReducer;\n","import { combineReducers } from \"redux\";\n\nimport PostReducer from \"./posts/reducer\";\n\nconst rootReducer = combineReducers({\n PostReducer,\n});\n\nexport default rootReducer;\n","import React from 'react';\n\nimport reactStringReplace from 'react-string-replace';\nimport * as reactNl2br from 'react-nl2br';\nimport { v4 as uuidv4 } from 'uuid';\nexport * from '@helpers/utilities/constant';\nexport * from '@helpers/utilities/format';\nexport * from '@helpers/utilities/form';\nexport * from '@helpers/utilities/search';\nexport * from '@helpers/utilities/storage';\n\n/**\n * 同期スリープ処理\n * @param {number} time\n */\nexport const sleep = (time) => {\n //\n // 引数に指定された秒数、空タイムアウト処理をasyncで実行する処理\n // → 呼び出し元でawait実行すると同期スリープ処理として利用できる\n //\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, time);\n });\n};\n\n/**\n * 指定文字列がJSON形式か?検証する処理\n * @param {string} value\n * @returns\n */\nexport const isValidJson = (value) => {\n try {\n // 引数の文字列が設定されていない場合は処理終了\n if (!value) return false;\n // JSONパースを実行して、成功すれば検証合格\n JSON.parse(value);\n return true;\n } catch (e) {\n return false;\n }\n};\n\nexport const getPageTitle = (list, location) => {\n if (\n !list ||\n !list.props ||\n !list.props.children ||\n !Array.isArray(list.props.children)\n ) {\n return '';\n }\n\n const item = list.props.children.find((item) => {\n if (!item || !item.props || !item.props.path) return false;\n return item.props.path == location.pathname;\n });\n\n return item && item.props && item.props.title ? item.props.title : '';\n};\n\nexport const numWithDelimiter = (number) => {\n return String(number).replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,');\n};\n\nexport const nl2br = (msg) => {\n // null, 空文字の場合は処理終了\n if (!msg) return <>;\n return reactNl2br(msg).map((item, index) => {\n // <> は key を設定できないので、 を使う\n return {item};\n });\n};\n\nexport const nl2brAndAnchorLink = (msg) => {\n // null, 空文字の場合は処理終了\n if (!msg) return <>;\n // nlbrは自作のものではなく、reactNl2brを使用\n return reactStringReplace(reactNl2br(msg), /(https?:\\/\\/\\S+)/g, (match) => {\n return (\n \n {match}\n \n );\n });\n};\n\n// GTM (GTMであって、GA4.TAGではない)\n// buildエラーを回避するためにjsだが、形指定をしています\nexport const getGoogleTagId = (): string => {\n return process?.env?.REACT_APP_ENV == 'production'\n ? 'G-RN40MEGJCK'\n : undefined;\n};\n\n// GA.TAG (Gtagであって、GTMではない)\nexport const getGoogleTagManagerId = (): string => {\n return process?.env?.REACT_APP_ENV == 'production'\n ? 'GTM-KNT2MBD'\n : 'GTM-MHFG5JH';\n};\n\nexport const getGoogleTagManagerScriptTagComponent = () => {\n //\n // gtag埋め込み済みの場合は処理終了\n // * 使用するLayoutが変更された場合、gtagが重複設置されるのを防ぐ\n //\n if (window?.google_tag_manager) return;\n\n // 使用タグIDを設定\n const tagId =\n process?.env?.REACT_APP_ENV == 'production' ? 'GTM-KNT2MBD' : 'GTM-MHFG5JH';\n\n // gtag出力\n return (\n \n );\n};\n\nexport const getGoogleTagManagerNoScriptTagDom = () => {\n // noscriptタグ用のIDを作成\n const id = 'idx-noscript-googletagmanager';\n\n // noscriptタグ用のIDを作成\n const tagId =\n process?.env?.REACT_APP_ENV == 'production' ? 'GTM-KNT2MBD' : 'GTM-MHFG5JH';\n\n // 指定IDでnoscriptタグが存在する場合は処理終了\n if (document.getElementById(id)) return null;\n\n // noscriptタグを作成\n let noscript = document.createElement('noscript');\n noscript.id = id;\n\n // iframeタグを作成\n let iframe = document.createElement('iframe');\n iframe.src = `https://www.googletagmanager.com/ns.html?id=${tagId}`;\n iframe.height = 0;\n iframe.width = 0;\n iframe.style = 'display:none;visibility:hidden';\n\n // noscriptタグにiframeタグを追加\n noscript.prepend(iframe);\n return noscript;\n};\n\nexport const isFullWidthPageContent = (pathname) => {\n // 横幅100%表示対象コンテンツ: ダッシュボード\n if (pathname.startsWith('/home')) return true;\n\n // 横幅100%表示対象コンテンツ: 検索画面\n if (pathname.startsWith('/pricing')) return true;\n\n // 横幅100%表示対象コンテンツ: 検索画面\n if (pathname.startsWith('/search/projects')) return false;\n if (\n pathname.startsWith('/search/companies') ||\n pathname.startsWith('/search/orgs')\n )\n return false;\n if (\n pathname.startsWith('/search/users') ||\n pathname.startsWith('/search/ids')\n )\n return false;\n\n if (pathname.startsWith('/search/deals')) return false;\n\n if (pathname.startsWith('/search')) return true;\n\n // 横幅100%表示対象コンテンツ: 希望プロジェクト\n if (pathname.startsWith('/matching')) return true;\n\n // 横幅100%表示対象コンテンツ: お気に入り管理\n if (pathname.startsWith('/favorites')) return true;\n\n // 横幅100%表示対象コンテンツ: 繋がり\n if (pathname.startsWith('/connections') || pathname.startsWith('/networks'))\n return true;\n\n // 横幅100%表示対象コンテンツ: 通知\n if (pathname.startsWith('/notifications')) return true;\n\n // 横幅100%表示対象コンテンツ: 会社メンバーの設定\n if (pathname.match(/^\\/(companies|orgs)\\/[0-9a-zA-Z]{1,}\\/members/))\n return true;\n\n // 横幅100%表示対象コンテンツ: 会社詳細 > 会社メンバー\n if (pathname.match(/^\\/(companies|orgs)\\/[0-9a-zA-Z]{1,}\\/joined-members/))\n return true;\n\n // 横幅100%表示対象コンテンツ: 会社が所有するDealの設定\n if (pathname.match(/^\\/(companies|orgs)\\/[0-9a-zA-Z]{1,}\\/deals/))\n return true;\n\n // 横幅100%表示対象コンテンツ: 会社管理一覧\n if (\n (pathname.startsWith('/companies') &&\n !pathname.match(/^\\/companies\\/[0-9a-zA-Z]{1,}/)) ||\n (pathname.startsWith('/orgs') &&\n !pathname.match(/^\\/orgs\\/[0-9a-zA-Z]{1,}/))\n )\n return true;\n\n // 横幅100%表示対象コンテンツ: プロジェクト管理一覧\n if (\n pathname.startsWith('/projects') &&\n !pathname.match(/^\\/projects\\/[0-9a-zA-Z]{1,}/)\n ) {\n return true;\n }\n\n // 横幅100%表示対象コンテンツ: プロジェクト採用管理一覧\n if (pathname.match(/^\\/projects\\/[0-9a-zA-Z]{1,}\\/recruit/)) {\n return true;\n }\n\n if (pathname.startsWith('/posts')) {\n return true;\n }\n\n if (pathname.startsWith('/post-tags')) {\n return true;\n }\n\n // 横幅100%表示対象コンテンツ: Public pots\n if (pathname.startsWith('/public-posts')) return false;\n\n // 横幅固定表示対象コンテンツ: アカウント設定\n if (pathname.startsWith('/settings')) return false;\n\n return false;\n};\n\nexport const isPublicSharingPageContent = (pathname) => {\n // 各種作成ページは、公開パスから除外\n if (pathname.match(/^\\/(companies|orgs)\\/create\\/?$/)) return false;\n if (pathname.match(/^\\/(projects)\\/create\\/?$/)) return false;\n if (pathname.match(/^\\/(deals)\\/create\\/?$/)) return false;\n\n // 各種詳細ページは、公開パスとして判定\n if (pathname.match(/^\\/(users|ids)\\/[0-9a-zA-Z]{1,}\\/?$/)) return true;\n if (pathname.match(/^\\/(companies|orgs)\\/[0-9a-zA-Z]{1,}\\/?$/)) return true;\n if (pathname.match(/^\\/(projects)\\/[0-9a-zA-Z]{1,}\\/?$/)) return true;\n if (pathname.match(/^\\/(deals)\\/[0-9a-zA-Z]{1,}\\/?$/)) return true;\n return false;\n};\n\nexport const isChatGroupMessagePageContent = (pathname) => {\n const regex = new RegExp('/(chats)/groups/[a-zA-Z0-9-]{1,}/messages');\n\n return pathname.match(regex) ? true : false;\n};\n\nexport const hasSidebarPagePath = (pathname) => {\n const enabledFeatures = {\n deal:\n parseInt(process.env?.REACT_APP_IS_ENABLE_FEATURE_DEAL) == 1\n ? true\n : false,\n };\n\n if (pathname.startsWith('/settings')) return true;\n if (pathname.startsWith('/posts')) return true;\n if (pathname.startsWith('/post-tags')) return true;\n if (pathname.startsWith('/search/deals') && enabledFeatures.deal) return true;\n return false;\n};\n\nexport const getParentMenuItemPath = (pathname) => {\n // 他のメニューパスと被らないパス文字列をもつメニュー\n if (pathname.startsWith('/home')) return '/home';\n if (pathname.startsWith('/favorites')) return '/favorites';\n if (pathname.startsWith('/networks')) return '/networks';\n\n // ------------------------------------------\n // 検索系\n // ------------------------------------------\n if (\n pathname.startsWith('/search/companies') ||\n pathname.startsWith('/search/orgs')\n )\n return '/search/orgs';\n if (\n pathname.startsWith('/search/users') ||\n pathname.startsWith('/search/ids')\n )\n return '/search/ids';\n if (pathname.startsWith('/search/projects')) return '/search/projects';\n\n // ------------------------------------------\n // 新規作成系: 詳細系ページのパスと文字列が被るので先にマッチさせる\n // ------------------------------------------\n if (\n pathname.startsWith('/companies/create') ||\n pathname.startsWith('/orgs/create')\n )\n return '/orgs';\n if (pathname.startsWith('/projects/create')) return '/projects';\n\n // ------------------------------------------\n // 詳細系\n // ------------------------------------------/\n if (pathname.match(/^\\/(companies|orgs)\\/[0-9a-zA-Z]{1,}$/))\n return '/search/orgs';\n if (pathname.match(/^\\/(users|ids)\\/[0-9a-zA-Z]{1,}$/)) return '/search/ids';\n if (pathname.match(/^\\/projects\\/[0-9a-zA-Z]{1,}$/))\n return '/search/projects';\n\n // ------------------------------------------\n // 管理系\n // ------------------------------------------\n if (pathname.startsWith('/orgs')) return '/\"orgs';\n // if (pathname.startsWith('/users')) return '/users'\n if (pathname.startsWith('/projects')) return '/projects';\n\n return null;\n};\n\nexport const isUrl = (url) => {\n if (!url) return null;\n try {\n new URL(url);\n return true;\n } catch (e) {\n return false;\n }\n};\n\nexport const parseUrl = (url) => {\n if (!url) return null;\n try {\n return new URL(url);\n } catch (e) {\n return null;\n }\n};\n\nexport const getSearchType = (pathname) => {\n // 検索クエリ取得\n // const search = window?.location?.search ? String(window?.location?.search) : '';\n\n // ページタイプ: プロジェクト系\n if (pathname.startsWith('/search/projects')) return 'project';\n if (pathname.startsWith('/projects')) return 'project';\n if (pathname.match(/^\\/projects\\/[0-9a-zA-Z]{1,}$/)) return 'project';\n\n // ページタイプ: ビジネスページ系\n if (\n pathname.startsWith('/search/companies') ||\n pathname.startsWith('/search/orgs')\n )\n return 'company';\n if (pathname.startsWith('/companies') || pathname.startsWith('/orgs'))\n return 'company';\n if (pathname.match(/^\\/(companies|orgs)\\/[0-9a-zA-Z]{1,}$/)) return 'company';\n\n // ページタイプ: ユーザー系\n if (\n pathname.startsWith('/search/users') ||\n pathname.startsWith('/search/ids')\n )\n return 'user';\n if (pathname.startsWith('/users') || pathname.startsWith('/ids'))\n return 'user';\n if (pathname.match(/^\\/(users|ids)\\/[0-9a-zA-Z]{1,}$/)) {\n return 'user';\n }\n\n // 投稿系のページは、どうするか?考える\n // if (\n // pathname.startsWith('/posts') &&\n // String(search) &&\n // String(search).indexOf('companyId=')\n // )\n // return 'company';\n\n return 'project';\n};\n\nexport const getNextRedirectUrl = (url, urls) => {\n // urls配列にデータが存在しない場合は、nullを返却\n if (!urls || !Array.isArray(urls) || urls.length < 1) return null;\n\n // 現在のURLをパース\n const parseUrl = url ? new URL(url) : null;\n\n // 現在のURLをパース\n if (!parseUrl?.origin) return null;\n\n // 現在閲覧中のURLのindex番号を収録\n const currentIndex = urls.indexOf(parseUrl?.origin);\n\n // 現在閲覧中のURLがリストに存在しない場合は、nullを返却\n if (currentIndex == -1) return null;\n\n // 次のURLのindex番号を作成\n const nextUrlIndex = currentIndex + 1;\n\n // 次のリダイレクト先が存在しない場合は、nullを返却\n if (!urls?.[nextUrlIndex]) return null;\n\n // 次のリダイレクトURLを返却\n return `${urls?.[nextUrlIndex]}`;\n};\n\nexport const getAppDomain = (url) => {\n if (!url) return 'pjdb.cc';\n\n const parseUrl = new URL(url);\n\n if (parseUrl?.host && parseUrl?.host.indexOf('pjdb.io') != -1)\n return 'pjdb.io';\n\n return 'pjdb.cc';\n};\n","import dayjs from 'dayjs';\n\n// ページネーション設定: 表示件数\nexport const companyPaginatinPerTypes = {\n label: '表示件数',\n options: [\n // { label: '1', value: 1 },\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const companyPaginatinSortByTypes = {\n label: '並び順(キー)',\n options: [\n { label: '登録日', value: 'createdAt' },\n { label: '募集中のプロジェクト数', value: 'activeProjectCount' },\n ],\n};\n\n// ページネーション設定: 並び順(タイプ)\nexport const companyPaginatinSortOrderTypes = {\n label: '並び順(タイプ)',\n default: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n createdAt: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n activeProjectCount: {\n options: [\n { label: '多い', value: 'DESC' },\n { label: '少ない', value: 'ASC' },\n ],\n },\n};\n\n// ページネーション設定: 表示件数\nexport const joinedCompanyPaginatinPerTypes = {\n label: '表示件数',\n options: [\n // { label: '1', value: 1 },\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const joinedCompanyPaginatinSortByTypes = {\n label: '並び順(キー)',\n options: [\n { label: '登録日', value: 'createdAt' },\n { label: '権限', value: 'role' },\n ],\n};\n\nexport const joinedCompanyPaginatinSortOrderTypes = {\n label: '並び順(タイプ)',\n default: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n createdAt: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n};\n\n// ページネーション設定: 表示件数\nexport const joinedCompanyMemberPaginatinPerTypes = {\n label: '表示件数',\n options: [\n // { label: '1', value: 1 },\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const joinedCompanyMemberPaginatinSortByTypes = {\n label: '並び順(キー)',\n options: [{ label: '参加日時', value: 'joinedAt' }],\n};\n\nexport const joinedCompanyMemberPaginatinSortOrderTypes = {\n label: '並び順(タイプ)',\n default: {\n options: [\n { label: '降順', value: 'DESC' },\n { label: '昇順', value: 'ASC' },\n ],\n },\n joinedAt: {\n options: [\n { label: '新しい', value: 'DESC' },\n { label: '古い', value: 'ASC' },\n ],\n },\n};\n\nexport const employeeCountTypes = {\n label: '社員規模',\n options: [\n { label: '1-5名', value: 1, min: 1, max: 5 },\n { label: '6-10名', value: 2, min: 6, max: 10 },\n { label: '11-20名', value: 3, min: 11, max: 20 },\n { label: '21-50名', value: 4, min: 21, max: 50 },\n { label: '51-100名', value: 5, min: 51, max: 100 },\n { label: '101-500名', value: 6, min: 101, max: 500 },\n { label: '501-1000名', value: 7, min: 501, max: 1000 },\n { label: '1000名以上', value: 8, min: 1001, max: -1 },\n ],\n};\n\nexport const roles = {\n label: '権限',\n options: [\n { label: '所有者', value: 'PRIMARY_OWNER' },\n { label: '管理者', value: 'ADMINISTRATOR' },\n { label: '編集者', value: 'EDITOR' },\n // 20250204_MTGでフロントでの廃止が決定_yuh\n // { label: '投稿者', value: 'CONTRIBUTOR' },\n { label: '閲覧者', value: 'GENERAL' },\n ],\n};\n\nexport const memberStatuses = {\n label: 'ステータス',\n options: [\n { label: '有効', value: 'ACTIVE' },\n { label: '一時休止', value: 'SUSPEND' },\n { label: '招待済', value: 'INVITED' },\n ],\n};\n\nexport const memberTypes = {\n label: 'メンバータイプ',\n options: [\n { label: '社員', value: 'REGULAR' },\n { label: 'アルムナイ', value: 'ALUMNI' },\n { label: '外部パートナー', value: 'COLLABORATOR' },\n ],\n};\n\nexport const companyEstablishmentOnYearTypes = {\n label: '設立年月',\n options: [...Array(255)]\n .filter((item, index) => {\n return index + 1900 <= dayjs().year() ? true : false;\n })\n .map((item, index) => {\n return {\n label: index + 1900,\n value: index + 1900,\n };\n }),\n};\n\nexport const companyFinancialYearTypes = {\n label: '年度',\n options: [...Array(255)]\n .filter((item, index) => {\n return index + 1900 <= dayjs().year() ? true : false;\n })\n .map((item, index) => {\n return {\n label: index + 1900,\n value: index + 1900,\n };\n }),\n};\n\nexport const memberBirthDayYearTypes = {\n label: '年度',\n options: [...Array(255)]\n .filter((item, index) => {\n return index + 1900 <= dayjs().year() ? true : false;\n })\n .map((item, index) => {\n return {\n label: index + 1900,\n value: index + 1900,\n };\n }),\n};\n\nexport const companyMonthTypes = {\n label: '月',\n options: [...Array(12)].map((item, index) => {\n return {\n label: index + 1,\n value: index + 1,\n };\n }),\n};\n\nexport const companyDayTypes = {\n label: '日',\n options: [...Array(31)].map((item, index) => {\n return {\n label: index + 1,\n value: index + 1,\n };\n }),\n};\n\nexport const memberInvitationTypes = {\n label: '招待方法',\n options: [\n { label: 'メールアドレスで招待', value: 'EMAIL' },\n { label: 'ユーザーコードで招待', value: 'USER_CODE' },\n ],\n};\n\nexport const memberSettingTypes = {\n label: '設定',\n options: [{ label: '一覧に表示', value: 'isExternalShow' }],\n};\n\nexport const memberSettingExternalShowTypes = {\n label: '外部公開',\n options: [\n { label: '表示', value: true },\n { label: '非表示', value: false },\n ],\n};\n\nexport const surveyTypes = {\n label: 'パートナー活用事例のシェア、インタビュー、などへ協力いただけますか?',\n options: [\n { label: 'Yes', value: 'YES' },\n { label: 'No', value: 'NO' },\n { label: 'その他', value: 'OTHER' },\n ],\n};\n","// @flow\nimport _ from 'lodash';\n\n/**\n * 配列内のオブジェクトのキーを再帰的にキャメルケースに変換する\n */\nexport const mapKeysCamelCase = (data) =>\n _mapKeysDeep(data, (_value, key) => _.camelCase(key));\n\n/**\n * 配列内のオブジェクトのキーを再帰的にスネークケースに変換する\n */\nexport const mapKeysSnakeCase = (data) =>\n _mapKeysDeep(data, (_value, key) => {\n return /^[a-z0-9]+$/.test(key) ? key : _.snakeCase(key);\n });\n\nconst _mapKeysDeep = (data, callback) => {\n if (_.isArray(data)) {\n return data.map((innerData) => _mapKeysDeep(innerData, callback));\n } else if (_.isPlainObject(data)) {\n return _.mapValues(_.mapKeys(data, callback), (val) =>\n _mapKeysDeep(val, callback)\n );\n } else {\n return data;\n }\n};\n","import { AuthContext } from '@contexts/authContext';\nimport { lazy, useContext } from 'react';\nimport { localstorageKeys } from '@constants/other';\nimport { Route as BaseRoute, Redirect, useLocation } from 'react-router-dom';\nimport * as utilities from '@helpers/utilities';\n\n// handle auth and authorization\nconst Route = ({ component: Component, ...rest }) => {\n const { authState, loading } = useContext(AuthContext);\n const { state: locState = false } = useLocation();\n\n // ------------------------------------------\n // ユーザー認証状態別の認証ステータスフラグ値の変化\n // logout (ログアウト状態) --> isSignUp: false, isSignIn: false, isRegistered: false, isInActive: false or true\n // signup (ログアウト状態, アカウント登録済みみ状態) --> isSignUp: true, isSignIn: false, isRegistered: false, isInActive: false\n // signin (ログイン状態, プロフィール未登録) --> isSignUp: true, isSignIn: true, isRegistered: false, isInActive: false\n // login (ログイン状態, プロフィール登録済み状態) --> isSignUp: true, isSignIn: true, isRegistered: true, isInActive: false\n // ------------------------------------------\n return (\n {\n const { pathname } = props.location;\n const isAccountPath = pathname.startsWith('/account') ? true : false;\n const isCallback = pathname.startsWith('/idpcallback');\n\n // ログインしていない状態でも閲覧可能なパスリスト\n const staticContentPaths = [\n '/pricing',\n '/contact',\n '/guideline',\n '/privacy-policy',\n '/terms',\n '/trade',\n '/error',\n '/sync',\n ];\n\n const publicPagePaths = ['/public-posts'];\n\n // ログインしていない状態でも閲覧可能なURLにアクセスしているか判定\n const isStaticContentPath =\n staticContentPaths.filter((path) => {\n return location.pathname.startsWith(path);\n }).length > 0\n ? true\n : false;\n\n // 閲覧中ページが公開ページのパスか?\n const isPublicPagePath =\n publicPagePaths.filter((path) => {\n return location.pathname.startsWith(path);\n }).length > 0;\n\n // 閲覧中ページが外部公開ページのパスか?\n const isPublicSharingPagePath =\n enabledFeatures?.globalAccess === true &&\n utilities.isPublicSharingPageContent(pathname);\n\n // ストレージ同期の為のリダイレクトフラグが設定されているか?\n const syncRedirect =\n localStorage.getItem('syncRedirect') &&\n (parseInt(localStorage.getItem('syncRedirect')) === 1 ||\n parseInt(localStorage.getItem('syncRedirect')) === 2)\n ? parseInt(localStorage.getItem('syncRedirect'))\n : 0;\n\n // 同期URLリストを取得\n const syncRedirectUrls = process.env?.REACT_APP_SYNC_URL_LIST\n ? String(process.env?.REACT_APP_SYNC_URL_LIST)\n .split(',')\n .map((item) => {\n // trim space\n return item.split(/^\\s+|\\s+$/g).join('');\n })\n : [];\n\n // ローカルストレージデータ取得\n const storageData = utilities.getLocalStorageItem(\n localstorageKeys.default\n );\n\n if (loading) {\n return <>;\n } else if (syncRedirect != 0 && syncRedirectUrls.length > 1) {\n // make local storage base64 data.\n // cloud frontへリクエストURLとして設定できるURL文字数は最大8192文字\n // 全てのストレージデータを同期すると、base64文字列にした時、超過する可能性があるため、認証データだけ抽出\n const base64Data = utilities.getStorageAuthorizedDataAsBase64();\n\n // make callback url\n const callbackUrl = encodeURIComponent(\n `${process.env?.REACT_APP_URL}`\n );\n\n // get next redirect url\n const nextRedirectUrl = utilities.getNextRedirectUrl(\n window.location?.href,\n syncRedirectUrls\n );\n\n // ログイン状態の同期フラグに無効に設定\n localStorage.setItem('syncRedirect', 0);\n\n // is next redirect url ?\n if (!nextRedirectUrl) {\n // リダイレクト先が存在しない場合、現在のURLにリダイレクト\n return (\n \n );\n }\n\n // 次のリダイレクト先が存在する場合は、URLの完全置き換え(リフレッシュ && リダイレクト)\n // タイミングによって、リダイレクトが実行されない場合があるので、setIntervalで実行されるまで繰り返す\n const redirectTimer = setInterval(() => {\n window.location.href =\n syncRedirect == 1\n ? `${nextRedirectUrl}/sync?data=${base64Data}&callback=${callbackUrl}`\n : `${nextRedirectUrl}/sync?data=${Buffer.from(\n JSON.stringify({})\n ).toString('base64')}&callback=${callbackUrl}`;\n clearInterval(redirectTimer);\n }, 300);\n\n return <>;\n } else if (\n !isStaticContentPath &&\n !isPublicPagePath &&\n !isPublicSharingPagePath\n ) {\n // アカウントの無効フラグが設定されている場合は、ログアウト画面以外はリダイレクト\n if (authState.isInActive && pathname !== '/account/logout') {\n return (\n \n );\n } else if (\n !authState.isSignUp &&\n !authState.isSignIn &&\n !authState.isRegisteredlogin &&\n pathname !== '/account/login' &&\n pathname !== '/account/signup' &&\n pathname !== '/account/forget-password' &&\n pathname !== '/account/reset-password'\n // pathname !== '/account/reset-password' &&\n // pathname !== '/account/verify'\n ) {\n // not logged in so redirect to login page with the return url\n return (\n \n );\n } else if (\n authState.isSignUp &&\n !authState.isSignIn &&\n !authState.isRegisteredlogin &&\n pathname !== '/account/verify' &&\n pathname !== '/account/logout'\n ) {\n return (\n \n );\n } else if (\n authState.isSignUp &&\n authState.isSignIn &&\n !authState.isRegistered &&\n pathname !== '/account/register' &&\n pathname !== '/account/idpcallback' &&\n pathname !== '/account/logout'\n ) {\n // Routerでidpcallback(ソーシャルログイン)時のURLも自動リダイレクトすると画面がガチャガチャするのが見えてしまうので、リダイレクトしない\n return (\n \n );\n }\n if (\n authState.isSignUp &&\n authState.isSignIn &&\n authState.isRegistered &&\n (isAccountPath || isCallback) &&\n pathname !== '/account/logout'\n ) {\n return (\n \n );\n }\n // ログイン状態 &&\n // 自動遷移先が存在する場合\n if (\n authState.isSignUp &&\n authState.isSignIn &&\n authState.isRegistered &&\n storageData.redirectUrlAfterLogin\n ) {\n // 自動遷移先をクリア\n const redirectUrlAfterLogin = storageData.redirectUrlAfterLogin;\n storageData.redirectUrlAfterLogin = null;\n utilities.setLocalStorageItem(\n localstorageKeys.default,\n storageData\n );\n return (\n \n );\n }\n }\n\n // もし、旧リンクが残っており、旧URLでアクセスされたら、新URLにリダイレクト\n // Googleは、jsのリダイレクトにも対応しているとの事だが、基本的に発生させないようにする\n // ※ ユーザーが使用できない状況を避けるための保険\n // v2で完全に削除予定\n if (\n pathname.indexOf('/search/users') != -1 ||\n pathname.match(/^\\/users\\/[0-9a-zA-Z]{1,}$/)\n ) {\n return (\n \n );\n }\n\n if (\n pathname.indexOf('/search/companies') != -1 ||\n pathname.match(/^\\/companies\\/[0-9a-zA-Z]{1,}$/)\n ) {\n return (\n \n );\n }\n\n // authorised so return component\n return ;\n }}\n />\n );\n};\n\nconst enabledFeatures = {\n deal:\n parseInt(process.env?.REACT_APP_IS_ENABLE_FEATURE_DEAL) == 1 ? true : false,\n globalAccess:\n parseInt(process.env?.REACT_APP_IS_ENABLE_FEATURE_GLOBAL_ACCESS) == 1\n ? true\n : false,\n v2ChatApi:\n parseInt(process.env?.REACT_APP_IS_ENABLE_FEATURE_V2_CHAT_API) == 1\n ? true\n : false,\n};\n\n// root routes\nconst rootRoute = {\n path: '/',\n exact: true,\n component: () => ,\n route: Route,\n};\n\nconst dashboardRoutes = [\n {\n path: '/home',\n name: 'ホーム',\n icon: 'mdi mdi-view-dashboard',\n isDashboardRoutes: true,\n header: 'Navigation',\n // component: lazy(() => import('@pages/dashboards/Project')),\n component: lazy(() => import('@pages/dashboards/index')),\n route: Route,\n },\n];\n\n// 各種機能\nconst featureAppRoutes = [\n {\n path: '/favorites',\n name: 'お気に入り',\n route: Route,\n icon: 'mdi mdi-bookmark',\n isFeatureAppRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/favorites')),\n },\n {\n path: '/search/projects',\n name: 'プロジェクト検索',\n route: Route,\n icon: 'mdi mdi-database-search',\n isFeatureAppRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/search/Project')),\n },\n {\n path: '/search/ids',\n name: 'ユーザー検索',\n route: Route,\n icon: 'mdi mdi-database-search',\n isFeatureAppRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/search/User')),\n },\n {\n path: '/search/orgs',\n name: '会社検索',\n route: Route,\n icon: 'mdi mdi-database-search',\n isFeatureAppRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/search/Company')),\n },\n {\n path: '/search/deals',\n name: 'Deals',\n route: Route,\n icon: 'mdi mdi-database-search',\n isFeatureAppRoutes: true,\n isEnabled: enabledFeatures?.deal ?? false,\n component: lazy(() => import('@pages/search/Deal')),\n },\n {\n path: '/projects',\n name: 'プロジェクト管理',\n route: Route,\n exact: true,\n icon: 'mdi mdi-database',\n isFeatureAppRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/projects')),\n },\n {\n path: '/orgs',\n name: 'ビジネスページ',\n route: Route,\n icon: 'mdi mdi-office-building',\n isFeatureAppRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/companies')),\n },\n]\n .filter((item) => {\n return item?.isEnabled ?? false;\n })\n .map((item) => item);\n\n// 各種機能\nconst featureHideAppRoutes = [\n // ---------------------------------------------------\n // マッチング系ページ\n // ---------------------------------------------------\n {\n path: '/matching/projects',\n name: 'プロジェクト作成',\n route: Route,\n isEnabled: true,\n component: lazy(() => import('@pages/matching/Project')),\n },\n\n // ---------------------------------------------------\n // プロジェクト管理系ページ\n // ---------------------------------------------------\n {\n path: '/projects/create',\n name: 'プロジェクト作成',\n route: Route,\n parentPath: '/projects',\n isEnabled: true,\n component: lazy(() => import('@pages/projects/Create')),\n },\n {\n path: '/projects/:id/settings',\n name: 'プロジェクト設定',\n route: Route,\n parentPath: '/projects',\n isEnabled: true,\n component: lazy(() => import('@pages/projects/Setting')),\n },\n {\n path: '/projects/:id/recruit',\n name: 'プロジェクト採用詳細',\n route: Route,\n parentPath: '/projects',\n isEnabled: true,\n component: lazy(() => import('@pages/projects/Recruit')),\n },\n\n // ---------------------------------------------------\n // 会社管理系ページ\n // ---------------------------------------------------\n {\n path: '/orgs/create',\n name: '会社作成',\n route: Route,\n parentPath: '/orgs',\n isEnabled: true,\n component: lazy(() => import('@pages/companies/Create')),\n },\n {\n path: '/orgs/:id/members',\n name: '会社メンバー設定',\n route: Route,\n icon: 'uil-store',\n isEnabled: true,\n component: lazy(() => import('@pages/companies/Member')),\n },\n {\n path: '/orgs/:id/settings',\n name: '会社設定',\n route: Route,\n icon: 'uil-store',\n isEnabled: true,\n component: lazy(() => import('@pages/companies/Setting')),\n },\n {\n path: '/orgs/:id/deals',\n name: '会社Deal設定',\n route: Route,\n parentPath: '/orgs',\n isEnabled: enabledFeatures?.deal ?? false,\n component: lazy(() => import('@pages/companies/Deal/index')),\n },\n\n // ---------------------------------------------------\n // 商材(Deal)系ページ\n // ---------------------------------------------------\n {\n path: '/deals/create',\n name: 'Deal作成',\n route: Route,\n isEnabled: enabledFeatures?.deal ?? false,\n component: lazy(() => import('@pages/deals/Create')),\n },\n {\n path: '/deals/:id/subscribe',\n name: 'Deal申し込み',\n route: Route,\n parentPath: '/deals/:id/',\n isEnabled: enabledFeatures?.deal ?? false,\n component: lazy(() => import('@pages/deals/Subscribe')),\n },\n {\n path: '/deals/:id/settings',\n name: 'Deal設定',\n route: Route,\n parentPath: '/deals/:id/',\n isEnabled: enabledFeatures?.deal ?? false,\n component: lazy(() => import('@pages/deals/Setting')),\n },\n {\n path: '/deals/:id',\n name: 'Deal詳細',\n route: Route,\n parentPath: '/deals/:id/',\n isEnabled: enabledFeatures?.deal ?? false,\n component: lazy(() => import('@pages/deals/Detail')),\n },\n\n // ---------------------------------------------------\n // 各種詳細系ページ\n // ---------------------------------------------------\n {\n path: '/projects/:id',\n name: 'プロジェクト詳細',\n route: Route,\n parentPath: '/search/projects',\n isEnabled: true,\n component: lazy(() => import('@pages/projects/Detail')),\n },\n {\n path: '/orgs/:id/joined-members',\n name: '会社詳細',\n route: Route,\n parentPath: '/orgs/:id/',\n isEnabled: true,\n component: lazy(() => import('@pages/companies/Detail/Member')),\n },\n {\n path: '/search/companies',\n name: '会社検索',\n route: Route,\n icon: 'mdi mdi-database-search',\n isFeatureAppRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/search/Company')),\n },\n {\n path: '/companies/:id',\n name: '会社詳細',\n route: Route,\n parentPath: '/search/companies',\n isEnabled: true,\n component: lazy(() => import('@pages/companies/Detail')),\n },\n {\n path: '/orgs/:id',\n name: '会社詳細',\n route: Route,\n parentPath: '/search/orgs',\n isEnabled: true,\n component: lazy(() => import('@pages/companies/Detail')),\n },\n\n {\n path: '/search/users',\n name: 'ユーザー検索',\n route: Route,\n icon: 'mdi mdi-database-search',\n isFeatureAppRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/search/User')),\n },\n {\n path: '/users/:id',\n name: 'ユーザー詳細',\n route: Route,\n parentPath: '/search/ids',\n isEnabled: true,\n component: lazy(() => import('@pages/users/Detail')),\n },\n {\n path: '/ids/:id',\n name: 'ユーザー詳細',\n route: Route,\n parentPath: '/search/ids',\n isEnabled: true,\n component: lazy(() => import('@pages/users/Detail')),\n },\n {\n path: '/connection/:id/members',\n name: 'Connection Members',\n route: Route,\n parentPath: '/search/ids',\n isEnabled: true,\n component: lazy(() => import('@pages/connections/Member/index')),\n },\n\n // ---------------------------------------------------\n // その他メニュー(サイドバーにはリンクがないメニュー\n // ---------------------------------------------------\n {\n path: '/networks',\n name: 'マイネットワーク',\n route: Route,\n icon: 'mdi mdi-link-variant',\n isFeatureAppRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/connections/index')),\n },\n {\n path: '/notifications',\n name: '通知',\n route: Route,\n isEnabled: true,\n component: lazy(() => import('@pages/notifications')),\n },\n {\n path: '/chats/groups/:id/messages',\n name: 'チャットメッセージ',\n route: Route,\n isEnabled: true,\n component: lazy(() => import('@pages/chats/Message')),\n },\n {\n path: '/chats/groups',\n name: 'チャットグループ',\n route: Route,\n isEnabled: true,\n component: lazy(() => import('@pages/chats/Group')),\n },\n {\n path: '/contracts/create',\n name: '契約書作成',\n route: Route,\n isEnabled: true,\n component: lazy(() => import('@pages/contracts/Create')),\n },\n {\n path: '/options/purchase',\n name: 'オプション購入',\n route: Route,\n isEnabled: true,\n component: lazy(() => import('@pages/options/Purchase')),\n },\n {\n path: '/options/checkout',\n name: 'オプション購入チェックアウト',\n route: Route,\n isEnabled: true,\n component: lazy(() => import('@pages/options/Checkout')),\n },\n {\n path: '/pricing',\n name: '料金プラン',\n route: Route,\n isEnabled: true,\n component: lazy(() => import('@pages/pricing')),\n },\n {\n path: '/invoices',\n name: '請求書',\n route: Route,\n isEnabled: true,\n component: lazy(() => import('@pages/invoices')),\n },\n {\n path: '/public-posts',\n name: 'Public Posts',\n icon: 'mdi mdi-post',\n isPostRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/posts/PublicList')),\n route: Route,\n },\n // {\n // path: '/options/order',\n // name: 'オプション購入',\n // route: Route,\n // component: lazy(() => import('@pages/options/Order')),\n // },\n // {\n // path: '/web_meetings/create',\n // name: 'webMTG作成',\n // route: Route,\n // component: lazy(() => import('@pages/webMeetings/Create')),\n // },\n // {\n // path: '/contracts/:id/update',\n // name: '契約書更新',\n // route: Route,\n // roles: ['Admin'],\n // icon: 'uil-store',\n // component: lazy(() => import('@pages/contracts/Edit')),\n // },\n // {\n // path: '/web_meetings',\n // name: 'webMTG管理',\n // route: Route,\n // icon: 'uil-meeting-board',\n // component: lazy(() => import('@pages/webMeetings')),\n // },\n // {\n // path: '/web_meetings/create',\n // name: 'webMTGルーム作成',\n // route: Route,\n // icon: 'uil-briefcase',\n // component: lazy(() => import('@pages/webMeetings/Order')),\n // },\n // {\n // path: '/web_meetings/:hash/update',\n // name: 'webMTGルーム更新',\n // route: Route,\n // icon: 'uil-briefcase',\n // component: lazy(() => import('@pages/webMeetings/Edit')),\n // },\n // {\n // path: '/contracts',\n // name: '契約書管理',\n // route: Route,\n // // icon: 'uil-file-contract-dollar',\n // icon: 'mdi mdi-folder-edit',\n // component: lazy(() => import('@pages/contracts')),\n // },\n // {\n // path: '/web_meetings',\n // name: 'webMTG管理',\n // route: Route,\n // // icon: 'uil-calendar-alt',\n // icon: 'mdi mdi-file-lock-outline',\n // component: lazy(() => import('@pages/webMeetings')),\n // },\n]\n .filter((item) => {\n return item?.isEnabled ?? false;\n })\n .map((item) => item);\n\n// auth\nconst authRoutes = {\n path: '/account',\n name: 'Auth',\n children: [\n {\n // title: 'ログイン',\n path: '/account/login',\n name: 'Login',\n isEnabled: true,\n component: lazy(() => import('@pages/auth/SignIn')),\n route: Route,\n },\n {\n // title: 'アカウントの新規登録',\n path: '/account/signup',\n name: 'Signup',\n isEnabled: true,\n component: lazy(() => import('@pages/auth/SignUp')),\n route: Route,\n },\n {\n // title: 'アカウントの新規登録',\n path: '/account/verify',\n name: 'Verify mail for sign up',\n isEnabled: true,\n component: lazy(() => import('@pages/auth/SignUpVerify')),\n route: Route,\n },\n {\n path: '/account/logout',\n name: 'Logout',\n isEnabled: true,\n component: lazy(() => import('@pages/auth/LogOut')),\n route: Route,\n },\n {\n // title: 'アカウントプロフィールの登録',\n path: '/account/register',\n name: 'Register',\n isEnabled: true,\n component: lazy(() => import('@pages/auth/Register')),\n route: Route,\n },\n {\n // title: 'パスワードのリセット',\n path: '/account/forget-password',\n name: 'Forget Password',\n isEnabled: true,\n component: lazy(() => import('@pages/auth/ForgetPassword')),\n route: Route,\n },\n {\n // title: 'パスワードのリセット',\n path: '/account/reset-password',\n name: 'Reset Password',\n isEnabled: true,\n component: lazy(() => import('@pages/auth/ResetPassword')),\n route: Route,\n },\n {\n path: '/account/idpcallback',\n name: 'Callback',\n isEnabled: true,\n component: lazy(() => import('@pages/auth/Callback')),\n route: Route,\n },\n ]\n .filter((item) => {\n return item?.isEnabled ?? false;\n })\n .map((item) => item),\n};\n\n// 設定\nconst settingRoutes = [\n {\n path: '/settings/profile',\n name: 'アカウント設定',\n icon: 'mdi mdi-account-edit-outline',\n isEnabled: true,\n component: lazy(() => import('@pages/settings/Profile')),\n children: [\n {\n path: '/settings/profile',\n name: 'プロフィール情報',\n // icon: 'mdi mdi-account-edit-outline',\n component: lazy(() => import('@pages/settings/Profile')),\n route: Route,\n },\n {\n path: '/settings/work-experience',\n name: 'スキル/経歴',\n // icon: 'mdi mdi-file-key-outline',\n component: lazy(() => import('@pages/settings/WorkExperience')),\n route: Route,\n },\n ],\n route: Route,\n },\n {\n path: '/settings/availability',\n name: 'アクティビティ',\n icon: 'mdi mdi-file-document-box-check-outline',\n isEnabled: true,\n component: lazy(() => import('@pages/settings/ProjectCondition')),\n children: [\n // {\n // path: '/settings/project-condition',\n // name: '希望プロジェクト',\n // // icon: 'mdi mdi-file-document-box-check-outline',\n // component: lazy(() => import('@pages/settings/ProjectCondition')),\n // route: Route,\n // },\n {\n path: '/settings/availability',\n name: 'アベイラビリティ',\n // icon: 'mdi mdi-file-document-box-check-outline',\n component: lazy(() => import('@pages/settings/Availability')),\n route: Route,\n },\n ],\n route: Route,\n },\n {\n path: '/settings/login',\n name: 'セキュリティ',\n icon: 'mdi mdi-security',\n isEnabled: true,\n component: lazy(() => import('@pages/settings/Login')),\n children: [\n {\n path: '/settings/login',\n name: 'ログイン設定',\n // icon: 'mdi mdi-security',\n component: lazy(() => import('@pages/settings/Login')),\n route: Route,\n },\n {\n path: '/settings/publish-profile',\n name: '公開設定',\n // icon: 'mdi mdi-publish',\n component: lazy(() => import('@pages/settings/PublishProfile')),\n route: Route,\n },\n {\n path: '/settings/notification',\n name: '通知設定',\n // icon: 'mdi mdi-bell-outline',\n component: lazy(() => import('@pages/settings/Notification')),\n route: Route,\n },\n ],\n route: Route,\n },\n {\n path: '/home',\n name: '戻る',\n icon: 'dripicons-return',\n header: 'Navigation',\n isEnabled: true,\n component: lazy(() => import('@pages/dashboards/index')),\n route: Route,\n },\n]\n .filter((item) => {\n return item?.isEnabled ?? false;\n })\n .map((item) => item);\n\n// 支払い\nconst billingRoutes = [\n // {\n // path: '/billing',\n // name: '請求とプラン',\n // icon: 'mdi mdi-account-edit-outline',\n // component: lazy(() => import('@pages/payments')),\n // route: Route,\n // },\n // {\n // path: '/billing/history',\n // name: '履歴',\n // icon: 'dripicons-return',\n // header: 'Navigation',\n // component: lazy(() => import('@pages/payments')),\n // route: Route,\n // },\n // {\n // path: '/dashboard',\n // name: '戻る',\n // icon: 'dripicons-return',\n // header: 'Navigation',\n // component: lazy(() => import('@pages/dashboards/index')),\n // route: Route,\n // },\n];\n\nconst dealRoutes = [\n {\n path: '/home',\n name: 'ホーム',\n icon: 'mdi mdi-view-dashboard',\n isDealRoutes: true,\n isEnabled: enabledFeatures?.deal ?? false,\n component: lazy(() => import('@pages/dashboards/index')),\n route: Route,\n },\n {\n path: '/search/deals',\n name: 'All Deals',\n icon: 'mdi mdi-database-search',\n isDealRoutes: true,\n isEnabled: enabledFeatures?.deal ?? false,\n component: lazy(() => import('@pages/search/Deal')),\n route: Route,\n },\n]\n .filter((item) => {\n return item?.isEnabled ?? false;\n })\n .map((item) => item);\n\nconst postRoutes = [\n {\n path: '/home',\n name: 'ホーム',\n icon: 'mdi mdi-view-dashboard',\n isPostRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/dashboards/index')),\n route: Route,\n },\n {\n path: '/posts',\n name: '投稿',\n icon: 'mdi mdi-post',\n isPostRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/posts/index')),\n route: Route,\n },\n]\n .filter((item) => {\n return item?.isEnabled ?? false;\n })\n .map((item) => item);\n\nconst postTagRoutes = [\n {\n path: '/post-tags',\n name: '投稿タグ',\n icon: 'mdi mdi-tag',\n isPostRoutes: true,\n isEnabled: true,\n component: lazy(() => import('@pages/posts/Tag/index')),\n route: Route,\n },\n]\n .filter((item) => {\n return item?.isEnabled ?? false;\n })\n .map((item) => item);\n\n// リンク\nconst linkRoutes = [\n {\n // title: '利用規約',\n path: '/terms',\n name: 'terms',\n isEnabled: true,\n component: lazy(() => import('@pages/terms')),\n route: Route,\n },\n {\n // title: 'プライバシーポリシー',\n path: '/privacy-policy',\n name: 'Privacy Policy',\n isEnabled: true,\n component: lazy(() => import('@pages/privacyPolicy')),\n route: Route,\n },\n {\n // title: 'ガイドライン',\n path: '/guideline',\n name: 'guideline',\n isEnabled: true,\n component: lazy(() => import('@pages/guideline')),\n route: Route,\n },\n {\n // title: '特定商取引法に基づく表記',\n path: '/trade',\n name: 'Trade',\n isEnabled: true,\n component: lazy(() => import('@pages/trade')),\n route: Route,\n },\n {\n // title: '問い合わせ',\n path: '/contact',\n name: 'Contact',\n isEnabled: true,\n component: lazy(() => import('@pages/contact')),\n route: Route,\n },\n {\n // title: '同期',\n path: '/sync',\n name: 'Storage Sync',\n isEnabled: true,\n component: lazy(() => import('@pages/sync')),\n route: Route,\n },\n]\n .filter((item) => {\n return item?.isEnabled ?? false;\n })\n .map((item) => item);\n\n// エラー画面 (* 複数画面必要になるかもしれないので、専用配列として用意\nconst errorRoutes = [\n {\n path: '/error/user-inactive',\n name: '410',\n isEnabled: true,\n component: lazy(() => import('@pages/error/UserInActive')),\n route: Route,\n },\n {\n path: '/error',\n name: 'error',\n isEnabled: true,\n component: lazy(() => import('@pages/error/InternalServerError')),\n route: Route,\n },\n {\n // 他にマッチするページがない場合は、404にしたいのでパスはワイルドカード指定しています\n // ただ、意図的に404ページにリダイレクトしたい場合は、/404というパスでリダイレクトして下さい\n // path: '/404',\n path: '*',\n name: '404',\n isEnabled: true,\n component: lazy(() => import('@pages/error/PageNotFound')),\n route: Route,\n },\n]\n .filter((item) => {\n return item?.isEnabled ?? false;\n })\n .map((item) => item);\n\n// flatten the list of all nested routes\nconst flattenRoutes = (routes = []) =>\n routes.reduce((acc, crr) => {\n return typeof crr.children !== 'undefined'\n ? [...acc, crr, ...flattenRoutes(crr.children)]\n : [...acc, crr];\n }, []);\n\n// 全てのルート\nconst allRoutes = [\n rootRoute,\n ...dashboardRoutes,\n ...featureHideAppRoutes,\n ...featureAppRoutes,\n authRoutes,\n ...settingRoutes,\n ...billingRoutes,\n ...dealRoutes,\n ...postRoutes,\n ...postTagRoutes,\n ...linkRoutes,\n ...errorRoutes,\n];\n\nconst allFlattenRoutes = flattenRoutes(allRoutes);\n\n// メニューに表示したいルート設定\nconst navigationDisplayRoutes = [...dashboardRoutes, ...featureAppRoutes];\nconst navigationSettingDisplayRoutes = [...settingRoutes];\nconst navigationBillingDisplayRoutes = [...billingRoutes];\nconst navigationDealDisplayRoutes = [...dealRoutes];\nconst navigationPostDisplayRoutes = [...postRoutes];\nconst navigationPostTagDisplayRoutes = [...postTagRoutes];\n\nexport {\n allFlattenRoutes,\n allRoutes,\n navigationBillingDisplayRoutes,\n navigationDisplayRoutes,\n navigationSettingDisplayRoutes,\n navigationDealDisplayRoutes,\n navigationPostDisplayRoutes,\n navigationPostTagDisplayRoutes,\n};\n","export const AmplifyConfig = {\n Auth: {\n // REQUIRED - Amazon Cognito Region\n region: 'ap-northeast-1',\n\n // OPTIONAL - Amazon Cognito User Pool ID\n userPoolId: process.env.REACT_APP_COGNITO_USER_POOL_ID,\n\n // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string)\n userPoolWebClientId: process.env.REACT_APP_COGNITO_CLIENT_ID,\n\n // OPTIONAL - customized storage object\n storage: window.localStorage,\n\n // OPTIONAL - Manually set the authentication flow type. Default is 'USER_SRP_AUTH'\n // authenticationFlowType: 'USER_SRP_AUTH',\n\n // OPTIONAL - Hosted UI configuration\n oauth: {\n domain: process.env.REACT_APP_AUTH_DOMAIN,\n scope: ['email', 'profile', 'openid', 'aws.cognito.signin.user.admin'],\n redirectSignIn: process.env.REACT_APP_URL + '/account/idpcallback',\n redirectSignOut: process.env.REACT_APP_URL + '/account/logout',\n responseType: 'code', // or 'token', note that REFRESH token will only be generated when the responseType is code\n },\n },\n};\n","import { AmplifyConfig } from '@config/aws';\nimport Amplify, { Auth, Hub } from 'aws-amplify';\n\nAmplify.configure(AmplifyConfig);\n\nexport { Auth, Hub };\n","import React, { createContext, useCallback, useEffect, useState } from 'react';\nimport { script } from '../requests/fileResource';\nconst stub = () => {\n throw new Error('forgot to wrap provider');\n};\n\nconst initState = {\n createPartsElement: stub,\n elements: null,\n submit: stub,\n};\nexport const PaymentContext = createContext(initState);\nexport const PaymentConsumer = PaymentContext.Consumer;\n\nexport const PaymentProvider = ({ children }) => {\n const [payjp, setPayjp] = useState(null);\n const [elements, setElements] = useState(null);\n const [brand, setBrand] = useState([]);\n\n useEffect(() => {\n const init = async () => {\n await script('https://js.pay.jp/v2/pay.js');\n const payjp = window.Payjp(process.env.REACT_APP_PAYJP_PUBLIC_KEY);\n setPayjp(payjp);\n const elements = payjp.elements();\n setElements(elements);\n payjp.retrieveAvailability().then((response) => {\n if (!response.error) {\n setBrand(response);\n }\n });\n };\n init();\n }, []);\n\n /**\n * カードトークンの取得処理を実行\n * @param {*} numberElement\n * @return {*}\n */\n const submit = async (numberElement) => {\n return await payjp\n .createToken(numberElement)\n .then((res) => {\n // レスポンスにカードトークンが含まれない場合 (* Payjpの障害時以外はありえない\n if (!res.id || res.error) {\n return {\n status: false,\n token: null,\n error: res.error,\n };\n }\n // 作成したカードトークン情報を返却\n return {\n status: true,\n token: res.id,\n error: null,\n };\n })\n .catch((_e) => {\n // 入力したカード情報に問題があり、カードトークンが取得出来なかった場合\n return {\n status: false,\n token: null,\n error: {\n status: null,\n message: 'カード情報の検証に失敗しました',\n },\n };\n });\n };\n\n /**\n * カード情報入力要素の作成処理\n * @return {*}\n */\n const createPartsElement = useCallback(() => {\n if (elements._elements.length > 0) {\n const ret = {\n cvc: null,\n expiry: null,\n number: null,\n brand: brand,\n };\n\n elements._elements.forEach((el) => {\n if (el._componentName == 'cardNumber') {\n ret.number = el;\n }\n if (el._componentName == 'cardExpiry') {\n ret.expiry = el;\n }\n if (el._componentName == 'cardCvc') {\n ret.cvc = el;\n }\n });\n return ret;\n }\n\n const elementStyle = {\n base: {\n color: '#333',\n fontSize: '14px',\n },\n };\n\n return {\n //card: elements.create('card'),\n brand: brand,\n cvc: elements.create('cardCvc', {\n style: elementStyle,\n placeholder: '123',\n }),\n\n expiry: elements.create('cardExpiry', {\n style: elementStyle,\n placeholder: 'MM / YY',\n }),\n\n number: elements.create('cardNumber', {\n style: elementStyle,\n placeholder: '0000 0000 0000 0000',\n }),\n };\n }, [elements, brand]);\n\n return (\n \n {children}\n \n );\n};\n","import React, { useEffect, useContext } from 'react';\nimport { Switch, useLocation } from 'react-router-dom';\nimport Loadable from 'react-loadable';\nimport { mapKeysCamelCase } from '@helpers/mapKeyConvert';\nimport { allFlattenRoutes as routes } from './index';\nimport { AuthContext } from '@contexts/authContext';\nimport Loader from '@components/Loader';\nimport { localstorageKeys } from '@constants/other';\nimport { regexUrlAuthCode } from '@constants/regex';\nimport * as utilities from '@helpers/utilities';\n\n// -------------------------------------------\n// 使用レイアウトの設定\n// -------------------------------------------\n// Lazy loading and code splitting -\n// Derieved idea from https://blog.logrocket.com/lazy-loading-components-in-react-16-6-6cea535c0b52\nconst loading = () =>
;\n\nconst AuthLayout = Loadable({\n loader: () => import('@layouts/Auth'),\n render(loaded, props) {\n let Component = loaded.default;\n return ;\n },\n loading,\n});\n\nconst BlankLayout = Loadable({\n loader: () => import('@layouts/Blank'),\n render(loaded, props) {\n let Component = loaded.default;\n return ;\n },\n loading,\n});\n\nconst NoLoginLayout = Loadable({\n loader: () => import('@layouts/NoLogin'),\n render(loaded, props) {\n let Component = loaded.default;\n return ;\n },\n loading,\n});\n\nconst BaseLayout = Loadable({\n loader: () => import('@layouts/Base'),\n render(loaded, props) {\n let Component = loaded.default;\n return ;\n },\n loading,\n});\n\n// -------------------------------------------\n// レンダリング対象のレイアウト判定\n// -------------------------------------------\nconst Layout = ({ children, ...rest }) => {\n const { authState, isLoaded } = useContext(AuthContext);\n const location = useLocation();\n\n // URLが変わったら、スクロールをトップ位置に戻す\n useEffect(() => {\n return () => {\n window.scrollTo(0, 0);\n };\n }, [location.pathname]);\n\n // URLパラメーターにuuAuthCodeが設定されていたら、ローカルストレージに保存する\n useEffect(() => {\n // URLパラメーター取得\n const queries = mapKeysCamelCase(\n utilities.parseQueryString(location.search)\n );\n\n // URL招待用コードが存在しない、不正な値の場合は処理終了\n if (\n typeof queries?.uuAuthCode != 'string' ||\n !queries?.uuAuthCode.match(regexUrlAuthCode)\n )\n return;\n\n // ローカルストレージにuuAuthCodeを保存\n const storageData = utilities.getLocalStorageItem(localstorageKeys.default);\n storageData.uuAuthCode = queries.uuAuthCode;\n utilities.setLocalStorageItem(localstorageKeys.default, storageData);\n }, []);\n\n // ------------------------------------------\n // 1. 使用レイアウト判定フラグの初期化\n // ------------------------------------------\n // ログイン系画面のパスか?検証\n const isAuth =\n location.pathname.startsWith('/account') &&\n !location.pathname.startsWith('/account/register');\n\n // 非ログイン状態か?検証\n const isNoLogin =\n !authState.isSignUp ||\n !authState.isSignIn ||\n !authState.isRegistered ||\n location.pathname.startsWith('/account/register');\n\n const isPublicContent =\n location.pathname.startsWith('/pricing') ||\n location.pathname.startsWith('/contact') ||\n location.pathname.startsWith('/privacy-policy') ||\n location.pathname.startsWith('/terms') ||\n location.pathname.startsWith('/public-posts') ||\n location.pathname.startsWith('/trade');\n\n const isSync = location.pathname.startsWith('/sync');\n\n // ------------------------------------------\n // 2. 使用レイアウトコンポーネント出力\n // ------------------------------------------\n //\n // authContextが1回もinit処理を完了していない場合は、画面を返さない\n // ※ authContextがinitを開始して、loadingフラグを設定する前に、実行される事が多いので対策しています\n //\n if (!isLoaded) return ;\n // ログインが必要のないコンテンツの場合\n\n // 「account/」以下のコンテンツ(サインイン、ログイン、ログアウト、初回登録)\n if (isAuth) {\n return {children};\n }\n\n // localStorageの同期\n if (isSync) {\n return {children};\n }\n\n // サインイン && ログイン && 初回設定が完了していない場合\n if (isNoLogin) {\n return {children};\n }\n\n // サインイン && ログイン && 初回設定が完了していない && 公開コンテンツにアクセスした場合\n // if (isPublicContent) {\n if (isNoLogin && isPublicContent) {\n return {children};\n }\n\n return {children};\n};\n\n// -------------------------------------------\n// レイアウトコンポーネント出力\n// -------------------------------------------\nconst App = (props) => {\n // レイアウト選択関数にコンテンツを設定して画面出力\n return (\n \n \n {routes.map((route, index) => {\n return (\n !route.children && (\n route.component}\n >\n )\n );\n })}\n \n \n );\n};\n\nexport default App;\n","import Routes from '@routes/Routes';\nimport flatpickr from 'flatpickr';\nimport { Japanese } from 'flatpickr/dist/l10n/ja.js';\nimport React from 'react';\nimport { BrowserRouter } from 'react-router-dom';\n// Themes\nimport './assets/scss/Saas.scss';\n\nflatpickr.localize(Japanese);\n\nclass App extends React.Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n /*\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n )\n */\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n /*\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n )\n */\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n //console.log('Content is cached for offline use.')\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((_error) => {\n //console.error('Error during service worker registration:', error)\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n /*\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n */\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport { Auth, Hub } from '@config/amplify';\nimport { AuthProvider } from '@contexts/authContext';\nimport { AxiosProvider } from '@contexts/axiosContext';\nimport { LayoutProvider } from '@contexts/layoutContext';\nimport { PaymentProvider } from '@contexts/paymentContext';\nimport { AppMenuProvider } from '@contexts/appMenuContext';\nimport { FeatureProvider } from '@contexts/featureContext';\nimport { Provider } from 'react-redux';\nimport axios, { AxiosInstance } from 'axios';\nimport ReactDOM from 'react-dom';\nimport ReactGTM from 'react-gtm-module';\nimport ReactGA from 'react-ga4';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport store from './store';\nimport { getGoogleTagId, getGoogleTagManagerId } from '@helpers/utilities';\n\nconst axiosInstance: AxiosInstance = axios.create({\n baseURL: process.env.REACT_APP_API_URL || 'http://localhost:8080',\n responseType: 'json',\n headers: {\n // api_key: 'special-key',\n Accept: 'Application/json',\n },\n});\n\nconst rootNode: HTMLElement | null = document.getElementById('root');\n\nReactGTM.initialize({ gtmId: getGoogleTagManagerId() });\nif (getGoogleTagId()) ReactGA.initialize(getGoogleTagId());\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ,\n rootNode\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import {\n GET_POSTS,\n GET_POSTS_SUCCESS,\n GET_POSTS_FAIL,\n CREATE_POST,\n CREATE_POST_SUCCESS,\n CREATE_POST_FAIL,\n PUBLIC_SAVE_DRAFT,\n UPDATE_POST,\n UPDATE_POST_SUCCESS,\n DELETE_POST,\n DELETE_POST_SUCCESS,\n DELETE_POST_FAIL,\n UPDATE_POST_FAIL,\n RESET_STATE,\n} from \"./actionTypes\";\n\nexport const resetPosts = () => {\n return {\n type: RESET_STATE,\n };\n};\n\n\nexport const getPosts = (res) => {\n return {\n type: GET_POSTS,\n payload: res,\n };\n};\n\nexport const getPostsSuccess = (data) => {\n return {\n type: GET_POSTS_SUCCESS,\n payload: data,\n };\n};\n\nexport const getPostsFail = (error) => {\n return {\n type: GET_POSTS_FAIL,\n payload: error,\n };\n};\n\nexport const createPost = (data) => {\n return {\n type: CREATE_POST,\n payload: data,\n };\n};\n\nexport const createPostSuccess = (data) => {\n return {\n type: CREATE_POST_SUCCESS,\n payload: data,\n };\n};\n\nexport const createPostFail = (error) => {\n return {\n type: CREATE_POST_FAIL,\n payload: error,\n };\n};\n\nexport const updatePost = (res) => {\n return {\n type: UPDATE_POST,\n payload: res,\n };\n};\n\nexport const publicSaveDraft = (res) => {\n return {\n type: PUBLIC_SAVE_DRAFT,\n payload: res,\n };\n};\n\nexport const updatePostSuccess = (data) => {\n return {\n type: UPDATE_POST_SUCCESS,\n payload: data,\n };\n};\n\nexport const updatePostFail = (error) => {\n return {\n type: UPDATE_POST_FAIL,\n payload: error,\n };\n};\n\nexport const deletePost = (res) => {\n return {\n type: DELETE_POST,\n payload: res,\n };\n};\n\nexport const deletePostSuccess = (data) => {\n return {\n type: DELETE_POST_SUCCESS,\n payload: data,\n };\n};\n\nexport const deletePostFail = (error) => {\n return {\n type: DELETE_POST_FAIL,\n payload: error,\n };\n};\n","import React, { createContext, useEffect, useState } from 'react';\nimport useRequest from '@hooks/useRequest';\nconst stub = () => {\n throw new Error('forgot to wrap provider');\n};\nconst initialState = {\n auth: stub,\n isLoggedIn: stub,\n appleSignIn: stub,\n googleSignIn: stub,\n facebookSignIn: stub,\n signIn: stub,\n signUp: stub,\n signOut: stub,\n};\nexport const AuthContext = createContext(initialState);\nconst { Provider } = AuthContext;\n\nexport const AuthProvider = ({ auth: Auth, hub: Hub, children }) => {\n // ------------------------------------------\n // ステータスフラグ説明\n // フラグ1. isSignUp = アカウント登録(cognito)が完了しているか?\n // フラグ2. isSignIn = アカウント認証(ログイン)が完了しているか?\n // フラグ3.isRegistered = プロフィール登録が完了しているか?\n // ※ 理論上、フラグは1から順番にしかtrueにならない、できない\n // ------------------------------------------\n const [authState, setAuthState] = useState({\n isSignUp: false,\n isSignIn: false,\n isRegistered: false,\n isInActive: false,\n });\n const [authData, setAuthData] = useState(null);\n const [loading, setLoading] = useState(false);\n const [isLoaded, setIsLoaded] = useState(false);\n const [userData, setUserData] = useState(null);\n const [configData, setConfigData] = useState(null);\n const [organizationData, setOrganizationData] = useState(null);\n\n const updateAuthState = (type) => {\n switch (type) {\n case 'signIn':\n setAuthState({ ...authState, isSignUp: true, isSignIn: true });\n break;\n case 'signUp':\n setAuthState({\n ...authState,\n isSignUp: true,\n isSignIn: false,\n });\n break;\n case 'logIn':\n setAuthState({\n ...authState,\n isSignUp: true,\n isSignIn: true,\n isRegistered: true,\n });\n break;\n case 'logOut':\n setAuthState({\n ...authState,\n isSignUp: false,\n isSignIn: false,\n isRegistered: false,\n });\n break;\n }\n };\n\n // Auth functions\n const getAuth = () => Auth.currentAuthenticatedUser();\n const getSession = () => Auth.currentSession();\n const googleSignIn = () => {\n Auth.federatedSignIn({ provider: 'Google' });\n localStorage.setItem('syncRedirect', 1);\n };\n const facebookSignIn = () => {\n Auth.federatedSignIn({ provider: 'Facebook' });\n localStorage.setItem('syncRedirect', 1);\n };\n const appleSignIn = () => {\n Auth.federatedSignIn({ provider: 'SignInWithApple' });\n localStorage.setItem('syncRedirect', 1);\n };\n const userRequest = useRequest('/v1/auth/user', getSession);\n const configRequest = useRequest('/v1/config', getSession);\n // const organizationRequest = useRequest(`/v1/private/companies`, getSession);\n\n /**\n * サインイン: アカウントログイン処理 --> cognitoのアカウント認証\n * @param string username\n * @param string pass\n */\n const signIn = async (username, pass) => {\n setAuthData({ username });\n await Auth.signIn(username, pass);\n };\n\n /**\n * サインアップ: アカウント登録 --> cognitoへのアカウント新規登録\n * @param string username\n * @param string pass\n * @param {*} attributes\n */\n const signUp = ({ username, password, attributes }) =>\n Auth.signUp({ username, password, attributes });\n\n /**\n * サインアウト: ログアウト\n */\n const signOut = () => Auth.signOut();\n\n /**\n * 認証ユーザーのPJDBへの登録情報取得\n * ※ cognito, PJDBへのプロフィール登録が完了して、PJDBが使用できるアプリログイン状態になる\n * このメソッドは、cognitoでアカウント認証された情報で、PJDBにプロフィール登録されているユーザー情報を検索する\n */\n const getUser = async () => {\n try {\n const res = await userRequest.get();\n setUserData(res.data);\n updateAuthState('logIn');\n return res;\n } catch (err) {\n // 410エラーの場合は、無効なアカウントの為、無効フラグを設定\n if (err.message.indexOf('410') !== -1) {\n setAuthState({\n ...authState,\n isSignUp: true,\n isSignIn: true,\n // isRegistered: true,\n isInActive: true,\n });\n }\n }\n return false;\n };\n\n /**\n * PJDBへのプロフィール登録(ユーザー登録)処理\n * @param object attributes\n */\n const register = async (payload) => {\n try {\n await userRequest.post(payload);\n await getUser();\n } catch (err) {\n // console.log(err)\n }\n };\n\n /**\n * cognitoの認証コード再送信\n * @param string username\n */\n const resendCode = (username) => Auth.resendSignUp(username);\n\n /**\n * cognitoの認証コードの正当性チェック\n * @param number code\n */\n const verifyCode = async (code, username) => {\n username =\n !username && authData && authData.username ? authData.username : username;\n\n await Auth.confirmSignUp(username, code);\n\n // ログイン画面に遷移させるために認証状態を更新 ( amplifyのサインインイベントにconfirmSinupがないみたいなので\n updateAuthState('logOut');\n setUserData(null);\n setAuthData(null);\n setConfigData(null);\n\n // コード認証画面に遷移した時、amplify上はログイン状態になっていない\n // await getAuth()\n };\n\n /**\n * パスワードを忘れた方へ用. 1\n * @param string username\n * @return boolean\n */\n const forgotPassword = async (username) => {\n await Auth.forgotPassword(username);\n };\n\n /**\n * パスワードを忘れた方へ用. 2\n * @param string username\n * @param number code\n * @param string newPassword\n * @return boolean\n */\n const forgotPasswordCode = async (username, code, newPassword) => {\n await Auth.forgotPasswordSubmit(username, code, newPassword);\n };\n\n /**\n * 閲覧組織モードの更新\n * @param {*} organization\n */\n const changeOrganization = (organization) => {\n setOrganizationData(Object.assign({}, organization));\n };\n\n // initialize\n const init = async () => {\n try {\n // ローディングフラグの設定: ON\n setLoading(true);\n\n // 全体設定を取得\n const config = await getConfig();\n setConfigData(config);\n\n // サインイン(cognito)の認証情報を取得\n const data = await getAuth();\n updateAuthState('signIn');\n setAuthData(data);\n\n // 登録情報を取得 (登録済みユーザーでログイン中に、画面を再読み込みした時用)\n await getUser();\n } catch (err) {\n // console.log('init error', err)\n } finally {\n // ローディングフラグの設定: OFF\n setLoading(false);\n // 1回でも読み込み完了したか?フラグON\n setIsLoaded(true);\n }\n };\n\n const updateConfigData = async () => {\n setConfigData(await getConfig());\n };\n\n // event listener\n useEffect(() => {\n const hubCallback = async ({ payload: { event, data } }) => {\n setLoading(true);\n switch (event) {\n case 'signIn':\n updateAuthState('signIn');\n setAuthData(data);\n await getUser();\n setConfigData(await getConfig());\n break;\n case 'signUp':\n updateAuthState('signUp');\n setAuthData(data.user);\n // setAuthData(data)\n break;\n case 'signOut':\n updateAuthState('logOut');\n setUserData(null);\n setAuthData(null);\n break;\n case 'signIn_failure':\n if (data.code === 'UserNotConfirmedException') {\n updateAuthState('signUp');\n } else {\n setAuthData(null);\n setUserData(null);\n }\n break;\n case 'tokenRefresh':\n case 'tokenRefresh_failure':\n if (typeof data == 'undefined' || typeof data.code == 'undefined') {\n // console.log('authContext tokenRefresh, tokenRefresh_failure')\n } else if (data.code === 'UserNotConfirmedException') {\n updateAuthState('signUp');\n setUserData(null);\n } else if (data.code === 'UserNotFoundException') {\n updateAuthState('logOut');\n setAuthData(null);\n setUserData(null);\n }\n break;\n }\n setLoading(false);\n };\n Hub.listen('auth', hubCallback);\n init();\n return () => Hub.remove('auth', hubCallback);\n }, []);\n\n // -----------------------------------------------------------------------\n // debug用\n // useEffect(() => {\n // console.log('state tracking in Auth context', authState, authData)\n // }, [authState, authData])\n // test\n // -----------------------------------------------------------------------\n\n /**\n * 各機能共通 & 変更性があるマスタデータを取得\n * @return Object|boolean\n */\n const getConfig = async () => {\n try {\n // 設定情報取得処理実行\n const res = await configRequest.get();\n\n // 設定情報オブジェクト初期化\n const config = {\n chargeOptions: {\n label: 'チャージオプション',\n options: res.data.chargeOptions\n ? res.data.chargeOptions.map((v) => {\n return {\n id: v.id,\n label: v.name,\n value: v.id,\n tag: v.tag,\n price: v.price,\n note: v.note,\n };\n })\n : [],\n },\n chargeProjectOptions: {\n label: 'チャージプロジェクトオプション',\n options: res.data.chargeProjectOptions\n ? res.data.chargeProjectOptions.map((v) => {\n return {\n label: v.name,\n value: v.id,\n tag: v.tag,\n price: v.price,\n note: v.note,\n };\n })\n : [],\n },\n chargePlans: {\n label: '定期プラン',\n options: res.data.chargePlans\n ? res.data.chargePlans.map((v) => {\n return {\n id: v.id,\n label: v.name,\n value: v.id,\n tag: v.tag,\n monthlyPrice: v.monthlyPrice,\n yearlyPrice: v.yearlyPrice,\n note: v.note,\n };\n })\n : [],\n },\n companyTags: {\n label: '企業タグ',\n options: res.data.companyTags\n ? res.data.companyTags.map((v) => {\n return {\n label: v.name,\n value: v.id,\n };\n })\n : [],\n },\n paymentTypes: {\n label: '決済方法',\n options: res.data.paymentTypes\n ? res.data.paymentTypes.map((v) => {\n return {\n label: v.name,\n value: v.id,\n };\n })\n : [],\n },\n languages: {\n label: '言語',\n options: res.data.languages\n ? res.data.languages.map((v) => {\n return {\n code: v.code,\n enLabel: v.enName,\n label: v.name,\n value: v.id,\n };\n })\n : [],\n },\n categories: [],\n locations: [],\n attachedCategories: [],\n attachedSkillCategories: [],\n };\n\n // ------------------------------------------\n // 特殊セレクター情報設定: categories ( プロジェクトカテゴリー )\n // ------------------------------------------\n if (res.data.categories && Array.isArray(res.data.categories)) {\n // 親カテゴリーデータを設定\n config.categories = res.data.categories\n .filter((v) => {\n return !v.parent.id ? true : false;\n })\n .map((v) => {\n return {\n label: v.name,\n value: v.id,\n options: [],\n };\n });\n\n // 子カテゴリーデータを設定\n for (let i = 0; i < res.data.categories.length; i++) {\n // 親カテゴリーが存在しないカテゴリーは処理スキップ\n if (!res.data.categories[i].parent.id) continue;\n\n // 親カテゴリーの配列キーを取得\n const parentIndex = config.categories.findIndex(\n (v) => v.value === res.data.categories[i].parent.id\n );\n\n // 親カテゴリーの配列キーが存在しない場合は処理スキップ (基本はありえないがAPI側のシステムバグ対策として\n if (parentIndex === -1) continue;\n\n // 親カテゴリーデータに小カテゴリーデータを設定\n config.categories[parentIndex].options.push({\n label: res.data.categories[i].name,\n value: res.data.categories[i].id,\n });\n }\n }\n\n // ------------------------------------------\n // 特殊セレクター情報設定: categories ( プロジェクトカテゴリー )\n // ------------------------------------------\n if (\n res.data.attachedCategories &&\n Array.isArray(res.data.attachedCategories)\n ) {\n // 親カテゴリーデータを設定\n config.attachedCategories = res.data.attachedCategories\n .filter((v) => {\n return !v.parent.id ? true : false;\n })\n .map((v) => {\n return {\n label: v.name,\n value: v.id,\n options: [],\n };\n });\n\n // 子カテゴリーデータを設定\n for (let i = 0; i < res.data.attachedCategories.length; i++) {\n // 親カテゴリーが存在しないカテゴリーは処理スキップ\n if (!res.data.attachedCategories[i].parent.id) continue;\n\n // 親カテゴリーの配列キーを取得\n const parentIndex = config.attachedCategories.findIndex(\n (v) => v.value === res.data.attachedCategories[i].parent.id\n );\n\n // 親カテゴリーの配列キーが存在しない場合は処理スキップ (基本はありえないがAPI側のシステムバグ対策として\n if (parentIndex === -1) continue;\n\n // 親カテゴリーデータに小カテゴリーデータを設定\n config.attachedCategories[parentIndex].options.push({\n label: res.data.attachedCategories[i].name,\n value: res.data.attachedCategories[i].id,\n });\n }\n }\n\n // ------------------------------------------\n // 特殊セレクター情報設定: skill categories ( スキルカテゴリー )\n // ------------------------------------------\n if (res.data.skillCategories && Array.isArray(res.data.skillCategories)) {\n // 親カテゴリーデータを設定\n config.skillCategories = res.data.skillCategories\n .filter((v) => {\n return !v.parent.id ? true : false;\n })\n .map((v) => {\n return {\n label: v.name,\n value: v.id,\n options: [],\n };\n });\n\n // 子カテゴリーデータを設定\n for (let i = 0; i < res.data.skillCategories.length; i++) {\n // 親カテゴリーが存在しないカテゴリーは処理スキップ\n if (!res.data.skillCategories[i].parent.id) continue;\n\n // 親カテゴリーの配列キーを取得\n const parentIndex = config.skillCategories.findIndex(\n (v) => v.value === res.data.skillCategories[i].parent.id\n );\n\n // 親カテゴリーの配列キーが存在しない場合は処理スキップ (基本はありえないがAPI側のシステムバグ対策として\n if (parentIndex === -1) continue;\n\n // 親カテゴリーデータに小カテゴリーデータを設定\n config.skillCategories[parentIndex].options.push({\n label: res.data.skillCategories[i].name,\n value: res.data.skillCategories[i].id,\n });\n }\n }\n\n // ------------------------------------------\n // 特殊セレクター情報設定: skill categories ( スキルカテゴリー )\n // ------------------------------------------\n if (\n res.data.attachedSkillCategories &&\n Array.isArray(res.data.attachedSkillCategories)\n ) {\n // 親カテゴリーデータを設定\n config.attachedSkillCategories = res.data.attachedSkillCategories\n .filter((v) => {\n return !v.parent.id ? true : false;\n })\n .map((v) => {\n return {\n label: v.name,\n value: v.id,\n options: [],\n };\n });\n\n // 子カテゴリーデータを設定\n for (let i = 0; i < res.data.attachedSkillCategories.length; i++) {\n // 親カテゴリーが存在しないカテゴリーは処理スキップ\n if (!res.data.attachedSkillCategories[i].parent.id) continue;\n\n // 親カテゴリーの配列キーを取得\n const parentIndex = config.attachedSkillCategories.findIndex(\n (v) => v.value === res.data.attachedSkillCategories[i].parent.id\n );\n\n // 親カテゴリーの配列キーが存在しない場合は処理スキップ (基本はありえないがAPI側のシステムバグ対策として\n if (parentIndex === -1) continue;\n\n // 親カテゴリーデータに小カテゴリーデータを設定\n config.attachedSkillCategories[parentIndex].options.push({\n label: res.data.attachedSkillCategories[i].name,\n value: res.data.attachedSkillCategories[i].id,\n });\n }\n }\n\n // ------------------------------------------\n // 特殊セレクター情報設定: dealCategories\n // ------------------------------------------\n if (res.data.dealCategories && Array.isArray(res.data.dealCategories)) {\n // 親カテゴリーデータを設定\n config.dealCategories = res.data.dealCategories\n .filter((v) => {\n return !v.parent.id ? true : false;\n })\n .map((v) => {\n return {\n label: v.name,\n value: v.id,\n options: [],\n };\n });\n\n // 子ロケーションデータを設定\n for (let i = 0; i < res.data.dealCategories.length; i++) {\n // 親カテゴリーが存在しないカテゴリーは処理スキップ\n if (!res.data.dealCategories[i].parent.id) continue;\n\n // 親カテゴリーの配列キーを取得\n const parentIndex = config.dealCategories.findIndex(\n (v) => v.value === res.data.dealCategories[i].parent.id\n );\n\n // 親カテゴリーの配列キーが存在しない場合は処理スキップ (基本はありえないがAPI側のシステムバグ対策として\n if (parentIndex === -1) continue;\n\n // 親カテゴリーデータに小カテゴリーデータを設定\n config.dealCategories[parentIndex].options.push({\n label: res.data.dealCategories[i].name,\n value: res.data.dealCategories[i].id,\n });\n }\n }\n\n // ------------------------------------------\n // 特殊セレクター情報設定: locations\n // ------------------------------------------\n if (res.data.locations && Array.isArray(res.data.locations)) {\n // 親ロケーションーデータを設定\n config.locations = res.data.locations\n .filter((v) => {\n return !v.parent.id ? true : false;\n })\n .map((v) => {\n return {\n label: v.name,\n value: v.id,\n options: [],\n };\n });\n\n // 子ロケーションデータを設定\n for (let i = 0; i < res.data.locations.length; i++) {\n // 親ロケーションが存在しないロケーションは処理スキップ\n if (!res.data.locations[i].parent.id) continue;\n\n // 親ロケーションの配列キーを取得\n const parentIndex = config.locations.findIndex(\n (v) => v.value === res.data.locations[i].parent.id\n );\n\n // 親ロケーションの配列キーが存在しない場合は処理スキップ (基本はありえないがAPI側のシステムバグ対策として\n if (parentIndex === -1) continue;\n\n // 親ロケーションデータに小ロケーションデータを設定\n config.locations[parentIndex].options.push({\n label: res.data.locations[i].name,\n value: res.data.locations[i].id,\n });\n }\n }\n\n return config;\n } catch (err) {\n // 基本は例外がスローされる事がないため、console.logを出力\n // eslint-disable-next-line no-console\n // console.log(err)\n }\n return false;\n };\n\n return (\n \n {children}\n \n );\n};\n","// ローカルストレージキー\nexport const localstorageKeys = {\n default: '_pjdb_a8y3bkmfw24aku48phmms9pcs3dne69f',\n};\n\n// ページネーション設定: 表示件数\nexport const otherPaginatinPerTypes = {\n label: '表示件数',\n options: [\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ],\n};\n\n// ページネーション設定: 並び順(キー)\nexport const otherPaginatinSortByTypes = {\n label: '並び順(キー)',\n options: [\n { label: '作成時間', value: 'createdAt' },\n { label: '更新時間', value: 'updatedAt' },\n ],\n};\n\n// ページネーション設定: 並び順(タイプ)\nexport const otherPaginatinSortOrderTypes = {\n label: '並び順(タイプ)',\n options: [\n { label: '昇順', value: 'ASC' },\n { label: '降順', value: 'DESC' },\n ],\n};\n\nexport const consultationTypes = {\n label: 'ご相談内容',\n options: [\n { label: '業務提携', value: '業務提携' },\n { label: '不具合について', value: '不具合について' },\n { label: 'その他のご相談', value: 'その他のご相談' },\n ],\n};\n\nexport const searchTypes = {\n label: '検索対象',\n options: [\n // 一括検索のAPIと画面が出来るまではAllは表示しない\n // { label: '全て', value: 'all' },\n { label: 'プロジェクト', value: 'project' },\n { label: 'ユーザー', value: 'user' },\n { label: '会社', value: 'company' },\n ],\n};\n\nexport const notificationTypes = {\n label: '通知タイプ',\n options: [\n { label: 'サービス通知', value: 'SERVICE' },\n { label: 'システム通知', value: 'SYSTEM' },\n ],\n};\n","// imageを先に読み込む用\nexport const image = (imageSrc) => {\n return new Promise((resolve, reject) => {\n const file = new Image();\n file.onload = () => {\n resolve(imageSrc);\n };\n\n file.onerror = reject;\n\n file.src = imageSrc;\n });\n};\n\n//scriptを読み込む用\nexport const script = (scriptSrc) => {\n return new Promise((resolve, reject) => {\n const file = document.createElement('script');\n file.onload = () => {\n resolve(scriptSrc);\n };\n\n file.onerror = reject;\n\n file.src = scriptSrc;\n\n document.getElementsByTagName('body')[0].appendChild(file);\n });\n};\n","import React, { createContext } from 'react';\nimport axios from 'axios';\n\nexport const AxiosContext = createContext({ instance: axios.create() });\nexport const AxiosConsumer = AxiosContext.Consumer;\n\nexport const AxiosProvider = ({ instance, children }) => (\n {children}\n);\n","export const GET_POSTS = \"GET_POSTS\";\nexport const GET_POSTS_SUCCESS = \"GET_POSTS_SUCCESS\";\nexport const GET_POSTS_FAIL = \"GET_POSTS_FAIL\";\n\nexport const GET_POST_DETAILS = \"GET_POST_DETAILS\";\nexport const GET_POST_DETAILS_SUCCESS = \"GET_POST_DETAILS_SUCCESS\";\nexport const GET_POST_DETAILS_FAIL = \"GET_POST_DETAILS_FAIL\";\n\nexport const CREATE_POST = \"CREATE_POST\";\nexport const CREATE_POST_SUCCESS = \"CREATE_POST_SUCCESS\";\nexport const CREATE_POST_FAIL = \"CREATE_POST_FAIL\";\n\nexport const UPDATE_POST = \"UPDATE_POST\";\nexport const UPDATE_POST_SUCCESS = \"UPDATE_POST_SUCCESS\";\nexport const UPDATE_POST_FAIL = \"UPDATE_POST_FAIL\";\n\nexport const DELETE_POST = \"DELETE_POST\";\nexport const DELETE_POST_SUCCESS = \"DELETE_POST_SUCCESS\";\nexport const DELETE_POST_FAIL = \"DELETE_POST_FAIL\";\n\nexport const PUBLIC_SAVE_DRAFT = \"PUBLIC_SAVE_DRAFT\";\n\nexport const RESET_STATE = \"RESET_STATE\";\n","import { mapKeysCamelCase, mapKeysSnakeCase } from '../mapKeyConvert';\n\nexport const requestBuilder = (session, option) => {\n if (!session) {\n throw Error('not auth');\n }\n\n if (option.data) {\n option.data = mapKeysSnakeCase(option.data);\n }\n if (option.params) {\n option.params = mapKeysSnakeCase(option.params);\n }\n\n option.headers = {\n ...option.headers,\n Authorization: session.idToken.jwtToken,\n 'Content-Type': 'application/json',\n };\n\n return option;\n};\n\n// お問い合わせなど、匿名リクエスト専用\nexport const anonymouseRequestBuilder = (option) => {\n if (option.data) {\n option.data = mapKeysSnakeCase(option.data);\n }\n if (option.params) {\n option.params = mapKeysSnakeCase(option.params);\n }\n\n option.headers = {\n ...option.headers,\n 'Content-Type': 'application/json',\n };\n\n return option;\n};\n\nexport const responseBuilder = (res) => {\n return {\n status: res.status,\n headers: res.headers,\n data: mapKeysCamelCase(res.data),\n };\n};\n","import hash from 'object-hash';\n\n// global cache\nconst caches = new Map();\n\nexport const resourceCache = (apiFn) => {\n // initialize\n if (!caches.has(apiFn)) {\n // weak mapのほうがいいかも\n caches.set(apiFn, new Map());\n }\n\n // get the cache\n const apiCache = caches.get(apiFn);\n\n // chacheを返す\n return {\n // getter\n get(...params) {\n return apiCache.get(hash(params));\n },\n // setter\n set(dataFn, ...params) {\n return apiCache.set(hash(params), dataFn);\n },\n // deletes the cached(paramに対応したやつだけ)\n delete(...params) {\n return apiCache.delete(hash(params));\n },\n // clears the entire cache(すべて削除)\n clear() {\n caches.delete(apiFn);\n return apiCache.clear();\n },\n };\n};\n","export default class ResourceException extends Error {\n constructor(message, code) {\n super(message);\n this.code = code;\n\n Object.defineProperty(this, 'name', {\n configurable: true,\n enumerable: false,\n value: this.constructor.name,\n writable: true,\n });\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ResourceException);\n }\n }\n}\n","import { useState, useContext, useRef, useEffect, useMemo } from 'react';\nimport { AxiosContext } from '@contexts/axiosContext';\nimport {\n anonymouseRequestBuilder,\n requestBuilder,\n responseBuilder,\n} from '@builders/reqBuilder';\nimport { dataFetcher, resourceCache } from '@helpers/requests';\nimport { AuthContext } from '@contexts/authContext';\n\n//requestBuilders\nconst useRequest = (url, getSessionFn = null) => {\n // global axios instance\n const { instance: axiosInstance } = useContext(AxiosContext);\n if (!axiosInstance) throw new Error('axios provider required');\n const { getSession } = useContext(AuthContext);\n\n // request: 認証トークンが必須のリクエスト\n const request = async (reqConfig) => {\n const session = getSessionFn ? await getSessionFn() : await getSession();\n return axiosInstance(requestBuilder(session, reqConfig)).then((res) =>\n responseBuilder(res)\n );\n };\n\n // request: 認証トークンが必要ないリクエスト\n const anonymouseRequest = async (reqConfig) => {\n return axiosInstance(anonymouseRequestBuilder(reqConfig)).then((res) =>\n responseBuilder(res)\n );\n };\n\n const paralellRequest = (configArray) => {\n return Promise.all(configArray.map((reqConf) => request(reqConf)));\n };\n\n // requestBuilder\n const requester = (method) => (data, targetUrl, isAnonymouse) => {\n const optBuilder = (args, newUrl) => {\n // 引数にURLが指定された場合は、引数のURLを優先使用\n if (newUrl) {\n return Array.isArray(args)\n ? args.map((arg) =>\n method === 'GET'\n ? { method, params: arg, url: newUrl }\n : { method, data: arg, url: newUrl }\n )\n : method === 'GET'\n ? { method, params: args, url: newUrl }\n : { method, data: args, url: newUrl };\n } else {\n return Array.isArray(args)\n ? args.map((arg) =>\n method === 'GET'\n ? { method, params: arg, url }\n : { method, data: arg, url }\n )\n : method === 'GET'\n ? { method, params: args, url }\n : { method, data: args, url };\n }\n };\n\n // 匿名リクエストの場合(* お問い合わせなど、認証が必要ない・Tokenを送信できないエンドポイント\n if (isAnonymouse) {\n return Array.isArray(data)\n ? paralellRequest(optBuilder(data, targetUrl))\n : anonymouseRequest(optBuilder(data, targetUrl));\n }\n\n return Array.isArray(data)\n ? paralellRequest(optBuilder(data, targetUrl))\n : request(optBuilder(data, targetUrl));\n };\n\n const fetcherWithCache =\n (method) =>\n (initParams = {}, isForce, isAnonymouse) => {\n const optBuilder = (params) =>\n Array.isArray(params)\n ? params.map((params) => ({ method, params, url }))\n : { method, params, url };\n\n const [params, setParams] = useState(initParams);\n const [getFn, setGetFn] = useState(() => {\n // anonymouseRequestは、paralellRequestモードは禁止\n if (isAnonymouse) return anonymouseRequest;\n return Array.isArray(initParams) ? paralellRequest : request;\n });\n\n const [getter, updater] = useAsyncResource(\n getFn,\n optBuilder(params),\n isForce\n );\n\n useEffect(() => {\n updater(optBuilder(params));\n setGetFn(() => {\n // 認証なしAPIリクエストの場合\n // anonymouseRequestは、paralellRequestモードは禁止\n if (isAnonymouse) return anonymouseRequest;\n\n return Array.isArray(params) ? paralellRequest : request;\n });\n }, [params]);\n\n const refetch = () => {\n updater(optBuilder(params));\n };\n\n return [getter, setParams, refetch];\n };\n\n return {\n get: requester('GET'),\n asyncGet: fetcherWithCache('GET'),\n put: requester('PUT'),\n post: requester('POST'),\n patch: requester('PATCH'),\n delete: requester('DELETE'),\n axiosPost: requester('POST'),\n axiosDelete: requester('DELETE'),\n };\n};\n\n// const existParams = (params) => {\n// return params.length\n// }\n\n// const isFnNoArgs = (fn, params) => {\n// return (\n// !fn.length &&\n// params.length === 1 &&\n// Array.isArray(params[0]) &&\n// params[0].length === 0\n// )\n// }\n\nexport const useAsyncResource = (apiFunction, option, isForce) => {\n // keep the data reader inside a mutable object ref\n // always initialize with a lazy data reader, as it can be overwritten by the useMemo immediately\n const fetcherRef = useRef(() => undefined);\n const clearCache = (reqFn, option) => {\n resourceCache(reqFn).delete(option);\n };\n\n const fetcherBuilder = (apiFunction, newOpt) => {\n isForce && clearCache(apiFunction, option);\n return dataFetcher(apiFunction, newOpt);\n };\n\n // like useEffect, but runs immediately\n useMemo(() => {\n fetcherRef.current = fetcherBuilder(apiFunction, option);\n }, [apiFunction, option]);\n\n // state to force re-render\n const [, forceRender] = useState(0);\n const updaterFn = (newOpt) => {\n // update the object ref\n fetcherRef.current = fetcherBuilder(apiFunction, newOpt);\n // update state to force a re-render\n forceRender((ct) => 1 - ct);\n };\n\n return [fetcherRef.current, updaterFn];\n};\nexport default useRequest;\n","import { resourceCache } from '@helpers/requests/resourceCache';\nimport ResourceException from '@exceptions/resourceException';\nimport axios from 'axios';\n\n// suspenseを使うためのdata読み取り関数\n// cacheされるので直接呼べばpreloadできる\n// apiFnはpromiseを返すこと\nexport const dataFetcher = (apiFn, option) => {\n const apiFnCache = resourceCache(apiFn);\n const cachedResource = apiFnCache.get(option);\n\n // todo 時間をキャッシュしてキャッシュの管理する\n // cacheがあればcacheを返す\n if (cachedResource) {\n return cachedResource;\n }\n\n let data;\n let status = 'init';\n let error;\n\n const fetchingPromise = apiFn(option)\n .then((result) => {\n data = result;\n status = 'done';\n })\n .catch((err) => {\n error = err;\n status = 'error';\n });\n\n // the return\n function dataFetcherFn(modifier) {\n if (status === 'init') {\n throw fetchingPromise;\n } else if (status === 'error') {\n if (axios.isCancel(error)) {\n error = {\n code: '400',\n message: 'request canceled',\n };\n }\n if (error.response) {\n error = error.response;\n } else if (error.request) {\n error = error.request;\n }\n throw new ResourceException(\n error?.message ? error.message : 'Unknown Error',\n error?.status ? error.status : 400\n );\n }\n\n return typeof modifier === 'function' ? modifier(data) : data;\n }\n\n apiFnCache.set(dataFetcherFn, option);\n\n return dataFetcherFn;\n};\n"],"sourceRoot":""}