{"version":3,"sources":["theme/breakpoints.ts","contexts/backend/HttpStatusCode.ts","@types/exam/ExamType.type.ts","contexts/backend/BackendApiRequest.type.ts","contexts/backend/BackendApiContext.tsx","layouts/dashboard/LanguagePopover.tsx","components/animate/variants/Wrap.ts","components/animate/variants/Actions.ts","components/animate/variants/background/BackgroundPan.ts","components/animate/variants/zoom/ZoomIn.ts","components/animate/variants/zoom/ZoomOut.ts","components/animate/variants/bounce/BounceIn.ts","components/animate/variants/bounce/BounceOut.ts","components/animate/MotionContainer.tsx","components/animate/ButtonAnimate.tsx","hooks/useBackendApi.tsx","components/LoadingScreen.tsx","contexts/backend/BackendApiError.type.ts","contexts/auth/AuthContext.tsx","components/Logo.tsx","hooks/useIsMountedRef.ts","components/MenuPopover.tsx","theme/mediaQuery.ts","styles/typography.ts","hooks/useWindowSize.tsx","components/BaseButton.tsx","components/Scrollbar.tsx","config.ts","utils/analytics.ts","components/Page.tsx","layouts/AuthHeader.tsx","utils/common.utils.tsx","styles/icon.ts","@types/PDFFormat.type.ts","routes/paths.ts","contexts/deeplink/DeepLinkContext.tsx","components/charts/BaseOptionChart.tsx","components/animate/DialogAnimate.tsx","pages/authentication/login/styles/index.tsx","pages/authentication/login/LoginForm.tsx","pages/authentication/login/Login.tsx","utils/locales/i18n.ts","hooks/useLocales.ts","hooks/useAuth.ts","theme/palette.ts","contexts/SettingsContext.tsx","hooks/useLocalStorage.ts","contexts/CollapseDrawerContext.tsx","utils/setMetatag.tsx","guards/AuthGuard.tsx","guards/GuestGuard.tsx","hooks/useCollapseDrawer.ts","layouts/dashboard/AccountPopover.tsx","layouts/dashboard/DashboardNavbar.tsx","components/MyAvatar.tsx","components/NavSection.tsx","layouts/dashboard/SidebarConfig.tsx","layouts/dashboard/DashboardSidebar.tsx","layouts/dashboard/index.tsx","routes/index.tsx","theme/shape.ts","theme/typography.ts","theme/overrides/Rating.tsx","theme/overrides/TreeView.tsx","theme/overrides/Checkbox.tsx","theme/overrides/index.ts","theme/overrides/Fab.ts","theme/overrides/Tabs.ts","theme/overrides/Chip.tsx","theme/overrides/Card.ts","theme/overrides/Menu.ts","theme/overrides/Grid.ts","theme/overrides/Link.ts","theme/overrides/Input.ts","theme/overrides/Radio.ts","theme/overrides/Badge.ts","theme/overrides/Lists.ts","theme/overrides/Table.ts","theme/overrides/Paper.ts","theme/overrides/Alert.tsx","theme/overrides/Switch.ts","theme/overrides/Select.ts","theme/overrides/Button.ts","theme/overrides/Dialog.ts","theme/overrides/Avatar.ts","theme/overrides/Slider.ts","theme/overrides/Drawer.ts","theme/overrides/Pickers.ts","theme/overrides/Stepper.ts","theme/overrides/Tooltip.ts","theme/overrides/Popover.ts","theme/overrides/SvgIcon.ts","theme/overrides/DataGrid.tsx","theme/overrides/Skeleton.ts","theme/overrides/Timeline.ts","theme/overrides/Backdrop.ts","theme/overrides/Snackbar.ts","theme/overrides/Progress.ts","theme/overrides/Container.ts","theme/overrides/Accordion.ts","theme/overrides/IconButton.ts","theme/overrides/Typography.ts","theme/overrides/Pagination.ts","theme/overrides/ButtonGroup.ts","theme/overrides/Breadcrumbs.ts","theme/overrides/Autocomplete.ts","theme/overrides/ControlLabel.ts","theme/overrides/ToggleButton.ts","theme/overrides/LoadingButton.ts","theme/shadows.ts","theme/index.tsx","theme/globalStyles.tsx","components/RtlLayout.tsx","components/NotistackProvider.tsx","hooks/useSettings.ts","components/ThemePrimaryColor.tsx","components/ThemeLocalization.tsx","App.tsx","serviceWorkerRegistration.ts","reportWebVitals.ts","index.tsx","components/@material-extend/MBreadcrumbs.tsx","components/@material-extend/MIconButton.tsx","components/@material-extend/MHidden.tsx"],"names":["breakpoints","values","xs","sm","md","lg","xl","HttpStatusCode","SupportedExamList","ApiEndPoint","BASE_URL","process","browserInfo","platform","description","axiosInstance","axios","create","baseURL","timeout","headers","StorageKey","isStaff","accessToken","refreshToken","BackendApiContext","createContext","isTokenRefreshing","requestArrayToBeExcuted","BackendApiProvider","children","processRequests","error","token","console","log","forEach","prom","reject","resolve","renewTokenPair","useCallback","a","localStorage","setItem","defaults","common","isAuthHeaderFree","url","shouldBypassAxiosInterceptor","useLayoutEffect","interceptors","request","use","config","Authorization","message","Promise","response","status","data","code","Error","BackendApiError","ServerResponseTimout","originalRequest","__isRetryRequest","Unauthorized","getItem","post","refresh_token","resp","OK","tokenPair","access_token","newAccessToken","length","push","then","TooManyRequests","APICallsOverFlow","getServerHealth","get","InternalServerError","ServerHealthSevere","login","param","email","password","BadRequest","is_active_account","is_staff","ExceedMaxNumOfConcurrentLogin","detail","SignUpRequiredToLogin","InvalidEmailOrPasswordToLogin","undefined","TokenPairExpired","NotEnoughToLogin","logout","RefreshTokenAlreadyExpired","RefreshTokenNotFound","removeItem","getServerTime","Date","ping","sendAuthLink","link","verifySerialNumber","serialNumber","InvalidSerialNumber","verifyEmail","InvalidEmail","verifyPassword","verifyNumber","number","InvalidNumber","getLastLogin","UnregisteredEmailToGetLastLogin","getUser","registerUser","temporaryToken","organization","patch","AlreadySignedUpEmailToRegisterUser","InvalidEmailOrTokenToRegisterUser","updateUser","attribute","value","unauth","EmailIsAlredayTaken","InvalidEmailOrTokenToUpdateUser","activateUser","deleteUser","getDeviceInfo","getSubjectList","limit","offset","query","baseUrl","registerSubject","subject","name","birthday","gender","Created","updateSubject","id","deleteSubject","subjectId","exportSubjectSPPBData","language","excludeId","queryString","index","responseType","NotFound","filename","split","fileData","fileName","ExportSubjectDataBadRequest","ExportSubjectDataUnauthorized","ExportSubjectDataNotFound","getExamResults","examType","ordering","startDate","endDate","searchQuery","subjectPk","isCountLimit","BadRequestError","getSingleExamResult","examId","results","getExamResultsInHistory","examPk","getExamSensorData","removeExamResult","updateExamNote","note","calculateSitToStandCountIndex","sitToStandSetting","weightArray","distanceArray","getCSVExamFileExport","pk","decodedFileName","base64","decode","getQRData","baseQuery","getAdminDataReport","exportAdminData","userId","exportAdminMainData","getLicenseManagementData","postLicenseManagementData","division","device","getQualityControlData","postQualityControlData","serial_number","release_date","deleteQualityControlData","objectId","NoContent","Provider","calculatePhysiologicalIndex","age","staticBalanceScore","sitToStandScore","gaitSpeedScore","LanguagePopover","anchorRef","useRef","useState","open","setOpen","useLocales","allLang","currentLang","onChangeLang","translate","ref","onClick","direction","alignItems","justifyContent","spacing","sx","padding","cursor","src","alt","label","style","fontWeight","onClose","anchorEl","current","py","map","option","selected","px","primaryTypographyProps","variant","varWrapEnter","animate","transition","staggerChildren","varSmallClick","hover","scale","tap","varMediumClick","TRANSITION","duration","ease","gradient","deg","DISTANCE","IN","opacity","OUT","TRANSITION_ENTER","TRANSITION_EXIT","translateY","translateX","varBounceIn","exit","y","scaleY","x","scaleX","MotionContainer","other","Box","component","motion","div","initial","variants","ButtonAnimate","mediumClick","whileTap","whileHover","display","useBackendApi","context","useContext","RootStyle","styled","height","width","backgroundColor","theme","palette","background","ProgressBarStyle","useTheme","styles","pointerEvents","top","left","position","zIndex","snackbar","primary","main","boxShadow","right","transform","ProgressBar","NProgress","configure","showSpinner","useMemo","start","useEffect","done","LoadingScreen","rotateY","repeatDelay","repeat","Infinity","rotate","borderRadius","border","alpha","dark","Types","initialState","isInitialized","isAuthenticated","user","devices","reducer","state","action","type","Initial","SetStaff","payload","SetDevices","SetUser","date_joined","timezone","ChangeUserInfo","userInfo","CheckSubject","AuthContext","AuthProvider","useReducer","dispatch","signIn","params","isActive","d","signOut","signUp","changeEmail","changeOrganization","result","changePassword","checkSubject","deleteUserAccount","setUser","Logo","useIsMountedRef","isMounted","ArrowStyle","up","content","paper","borderRight","grey","borderBottom","MenuPopover","anchorOrigin","vertical","horizontal","transformOrigin","PaperProps","mt","ml","overflow","customShadows","z20","uponMediaSize","bpType","bp","Heading","props","color","ContentHead","Title","ModalTitle","CardTitle","MuiStyled","Typography","fontSize","lineHeight","down","Subtitle","Subtitle1","BodyText","textAlign","Body2Text","SubBodyText","SubBodyText2","LinkText","Button","LabelText","Caption","ErrorText","useWindowSize","windowSize","setWindowSize","handleResize","window","innerWidth","innerHeight","addEventListener","removeEventListener","BaseButtonStyle","buttonsize","minWidth","textTransform","font","gray2","BaseButton","fullWidth","size","disabled","flexGrow","SimpleBarStyle","SimpleBarReact","maxHeight","Scrollbar","test","navigator","userAgent","overflowX","clickOnTrack","googleAnalyticsConfig","REACT_APP_FIREBASE_API_KEY","REACT_APP_FIREBASE_AUTH_DOMAIN","REACT_APP_FIREBASE_DATABASE_URL","REACT_APP_FIREBASE_PROJECT_ID","REACT_APP_FIREBASE_STORAGE_BUCKET","REACT_APP_FIREBASE_MESSAGING_SENDER_ID","REACT_APP_FIREBASE_APPID","REACT_APP_FIREBASE_MEASUREMENT_ID","REACT_APP_AWS_COGNITO_USER_POOL_ID","REACT_APP_AWS_COGNITO_CLIENT_ID","REACT_APP_AUTH0_CLIENT_ID","REACT_APP_AUTH0_DOMAIN","REACT_APP_MAP_MAPBOX","REACT_APP_GA_MEASUREMENT_ID","track","pageview","targetId","gtag","event","Page","forwardRef","title","pathname","useLocation","sendPageViewEvent","page_path","Header","ImgBox","AuthHeader","to","authCodeRandomGenerator","Math","floor","random","toString","isValidDateFormat","date","validator","isDate","format","strictMode","calculateAge","birthDay","birthYear","getFullYear","birthMonth","getMonth","birthDate","getDate","todayYear","todayMonth","todayDate","monthDiff","CustomErrorIcon","ErrorIcon","MediumIcon","WarningRoundedIcon","SmallIcon","XSmallIcon","PDF_STORAGE_KEY","fileFormat","userInput","path","root","sublink","ROOTS_AUTH","ROOTS_DASHBOARD","GUIDELINE","PATH_AUTH","findEmail","emailAuth","resetPassword","inactiveUser","privacyPolicy","termsOfUse","PATH_PAGE","maintenance","page401","page404","page500","PATH_DASHBOARD","exams","overview","SPPB","GaitSpeed","SitToStand","StaticBalance","AverageGaitSpeed","OneLegStanding","TUG","HandgripStrength","management","userAccountSetting","emailChange","passwordChange","subjectManagement","customerService","adminDashboard","reportDashboard","qualityControl","licenseManagement","BASE_AUTH_URL","linkedEmail","linkedCode","Set","DeepLinkContext","DeepLinkProvider","verifyLink","sendDeepLink","screenName","BaseOptionChartStyle","marginRight","filter","BaseOptionChart","colors","chart","blue","violet","green","red","toolbar","show","zoom","enabled","animations","foreColor","text","fontFamily","typography","states","normal","active","fill","shadeIntensity","opacityFrom","opacityTo","stops","stroke","curve","lineCap","xaxis","axisBorder","axisTicks","legend","showForSingleSeries","showForNullSeries","showForZeroSeries","String","horizontalAlign","markers","radius","itemMargin","labels","plotOptions","bar","columnWidth","dataLabels","strokeColors","tooltip","noData","offsetY","DialogAnimate","maxWidth","PaperComponent","AuthContent","margin","minHeight","flexDirection","SmallLogo","LogoStack","Stack","marginBottom","LogoImg","TextFieldStack","marginTop","paddingBottom","AuthRouteStack","SubRouteStack","gray4","LoginForm","navigate","useNavigate","useAuth","isMountedRef","showPassword","setShowPassword","LoginSchema","Yup","shape","required","formik","useFormik","initialValues","validationSchema","onSubmit","setErrors","setSubmitting","resetForm","afterSubmit","errors","touched","handleSubmit","getFieldProps","className","autoComplete","noValidate","Alert","severity","TextField","Boolean","helperText","InputProps","endAdornment","InputAdornment","IconButton","edge","icon","eyeFill","eyeOffFill","Login","loading","Container","i18n","LanguageDetector","initReactI18next","init","resources","ko","translations","koLocales","en","enLocales","ja","jaLocales","lng","substring","fallbackLng","debug","ns","defaultNS","interpolation","escapeValue","LANGS","systemValue","koKR","enUS","jaJP","useTranslation","t","langStorage","newlang","changeLanguage","find","_lang","createGradient","color1","color2","PRIMARY","lighter","light","darker","primary2","INFO","SUCCESS","WARNING","ERROR","GREY","GRADIENTS","info","success","warning","COMMON","black","white","gray1","gray3","gray5","contrastText","secondary","gradients","yellow","divider","disabledBackground","focus","hoverOpacity","disabledOpacity","default","neutral","PRIMARY_COLOR","SetColor","themeColor","DEFAULT","PURPLE","CYAN","BLUE","ORANGE","RED","themeMode","themeDirection","themeStretch","onChangeMode","onChangeDirection","onChangeColor","onToggleStretch","setColor","colorOption","SettingsContext","SettingsProvider","key","defaultValue","storedValue","JSON","parse","setValue","listener","e","storageArea","newValue","currentValue","stringify","useLocalStorage","settings","setSettings","mode","target","collapseClick","collapseHover","onToggleCollapse","onHoverEnter","onHoverLeave","CollapseDrawerContext","CollapseDrawerProvider","isMobile","useMediaQuery","click","collapse","setCollapse","isCollapse","AndanteFitMetaTag","AuthGuard","requestedLocation","setRequestedLocation","GuestGuard","location","href","includes","useCollapseDrawer","AccountPopover","imageSize","handleClose","handleLogout","marginLeft","bgcolor","my","noWrap","Divider","MenuItem","RouterLink","Icon","settings2Fill","mr","p","pt","AppBar","backdropFilter","WebkitBackdropFilter","DRAWER_WIDTH","ToolbarStyle","Toolbar","DashboardNavbar","onOpenSidebar","menu2Fill","MyAvatar","ListSubheaderStyle","ListSubheader","disableSticky","disableGutters","overline","paddingLeft","ListItemStyle","ListItemButton","body2","paddingRight","bottom","borderTopLeftRadius","borderBottomLeftRadius","NavItem","item","isShow","isActiveRoot","matchPath","end","activeRootStyle","selectedOpacity","ListItemText","disableTypography","slice","NavSection","navConfig","list","subheader","items","List","disablePadding","generateSidebarConfig","deviceCodeArray","managementArray","isHandGripDevice","findIndex","isSitToStandDevice","isGaitSpeedDevice","isStaticBalanceDevice","isAverageGaitSpeedDevice","COLLAPSE_WIDTH","flexShrink","transitions","complex","AccountStyle","borderRadiusSm","IconCollapse","Tooltip","CardActionArea","borderWidth","DashboardSidebar","isOpenSidebar","onCloseSidebar","renderContent","Link","underline","Drawer","onMouseEnter","onMouseLeave","MainStyle","paddingTop","DashboardLayout","Loadable","Component","isDashboard","fallback","Router","useRoutes","element","Guidelines","SignUp","FindEmail","ResetPassword","InActiveUser","PrivacyPolicy","TermsOfUse","replace","OverView","SPPBExamListMain","SPPBExamDetailResult","GaitSpeedExamListMain","ExamDetailResultNotSPPB","SitToStandExamListMain","StaticBalanceExamListMain","AverageGaitSpeedExamListMain","OneLegStandingExamListMain","TUGExamListMain","HandGripStrengthExamListMain","UserAccountSettingMain","EmailChangeTemp","PasswordChangeTemp","SubjectManagement","CustomerService","AdminDashboard","ReportDashboard","QualityControl","LicenseManagement","Maintenance","Page500","Page401","lazy","borderRadiusMd","pxToRem","responsiveFontSizes","fontWeightRegular","fontWeightMedium","fontWeightBold","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","caption","letterSpacing","button","ICON_SMALL","ICON_LARGE","ICON","SvgIcon","starFill","ICON_SIZE","CheckedIcon","IndeterminateIcon","ComponentsOverrides","merge","MuiFab","defaultProps","styleOverrides","z8","extended","Fab","MuiTab","borderTopRightRadius","labelIcon","wrapper","whiteSpace","textColorInherit","MuiTabPanel","MuiTabScrollButton","Tabs","MuiChip","deleteIcon","closeCircleFill","colorDefault","outlined","borderColor","avatarColorInfo","avatarColorSuccess","avatarColorWarning","avatarColorError","Chip","MuiCard","z16","MuiCardHeader","titleTypographyProps","subheaderTypographyProps","MuiCardContent","Card","MuiMenuItem","Menu","MuiGrid","MuiLink","MuiInputBase","input","MuiInput","borderBottomColor","MuiFilledInput","MuiOutlinedInput","Input","MuiRadio","svg","Radio","MuiBadge","dot","MuiListItemIcon","MuiListItemAvatar","MuiListItemText","multiline","Lists","MuiTableRow","MuiTableCell","head","borderBottomRightRadius","stickyHeader","backgroundImage","body","MuiTablePagination","borderTop","select","selectIcon","Table","MuiPaper","elevation","isLight","standardStyle","filledStyle","outlinedStyle","MuiAlert","iconMapping","infoFill","alertCircleFill","checkmarkCircle2Fill","alertTriangleFill","standardInfo","standardSuccess","standardWarning","standardError","filledInfo","filledSuccess","filledWarning","filledError","outlinedInfo","outlinedSuccess","outlinedWarning","outlinedError","MuiSwitch","thumb","z1","switchBase","Switch","MuiSelect","IconComponent","ExpandMoreRoundedIcon","MuiButton","sizeLarge","containedInherit","containedPrimary","containedSecondary","containedInfo","containedSuccess","containedWarning","containedError","outlinedInherit","textInherit","MuiRating","emptyIcon","iconEmpty","sizeSmall","Rating","MuiDialog","z24","paperFullWidth","MuiDialogTitle","MuiDialogContent","MuiDialogActions","Dialog","MuiAvatar","MuiAvatarGroup","avatar","Avatar","MuiSlider","markLabel","valueLabel","Slider","MuiDrawer","modal","MuiStepConnector","line","Stepper","MuiTooltip","arrow","MuiPopover","z12","Popover","MuiSvgIcon","fontSizeSmall","fontSizeLarge","MuiCheckbox","checkedIcon","indeterminateIcon","Checkbox","MuiDataGrid","MuiGridMenu","MuiGridFilterForm","MuiGridPanelFooter","DataGrid","MuiSkeleton","animation","Skeleton","MuiTimelineDot","MuiTimelineConnector","Timeline","MuiTreeView","defaultCollapseIcon","minusSquareOutline","defaultExpandIcon","plusSquareOutline","defaultEndIcon","closeSquareOutline","MuiTreeItem","iconContainer","TreeView","varLow","varHigh","MuiBackdrop","Backdrop","MuiSnackbarContent","MuiLinearProgress","colorPrimary","buffer","Progress","MuiContainer","MuiAccordion","MuiAccordionSummary","expandIconWrapper","Accordion","MuiIconButton","MuiTypography","paragraph","gutterBottom","MuiPaginationItem","textPrimary","outlinedPrimary","Pagination","styleContained","MuiButtonGroup","ButtonGroup","MuiBreadcrumbs","separator","Breadcrumbs","MuiAutocomplete","Autocomplete","MuiFormControlLabel","MuiFormHelperText","MuiFormLabel","ControlLabel","MuiToggleButton","ToggleButton","MuiLoadingButton","LIGHT_MODE","DARK_MODE","createShadow","transparent1","transparent2","transparent3","createCustomShadow","transparent","shadows","ThemeConfig","themeOptions","createTheme","components","componentsOverride","StyledEngineProvider","injectFirst","ThemeProvider","CssBaseline","GlobalStyles","boxSizing","html","WebkitOverflowScrolling","msOverflowStyle","WebkitTextSizeAdjust","WebkitTapHighlightColor","WebkitBoxShadow","MozAppearance","WebkitAppearance","textarea","img","WebkitFilter","overflowY","RtlLayout","document","dir","cacheRtl","createCache","stylisPlugins","rtlPlugin","compat","SnackbarStyles","SnackbarIcon","NotistackProvider","maxSnack","autoHideDuration","iconVariant","useSettings","ThemePrimaryColor","defaultTheme","ThemeLocalization","App","CircularProgress","hostname","match","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","time","rootElement","getElementById","ComponentsHierarchy","LocalizationProvider","dateAdapter","AdapterDateFns","hasChildNodes","hydrate","render","serviceWorker","ready","registration","unregister","Separator","LinkItem","MBreadcrumbs","links","activeLast","currentLink","last","listDefault","listActiveLast","textOverflow","MIconButton","MHidden","breakpoint","hiddenUp","hiddenDown"],"mappings":"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","file":"static/js/main.65d19548.chunk.js","sourcesContent":["const breakpoints = {\n values: {\n xs: 0,\n sm: 600, //mobile\n md: 900, //tablet\n lg: 1200, //desktop\n xl: 1536\n }\n};\n\nexport default breakpoints;\n","export enum HttpStatusCode {\n Continue = 100,\n SwitchingProtocols = 101,\n Processing = 102,\n EarlyHints = 103,\n OK = 200,\n Created = 201,\n Accepted = 202,\n NonAuthoritativeInformation = 203,\n NoContent = 204,\n ResetContent = 205,\n PartialContent = 206,\n MultiStatus = 207,\n AlreadyReported = 208,\n IMUsed = 226,\n MultipleChoices = 300,\n MovedPermanently = 301,\n Found = 302,\n SeeOther = 303,\n NotModified = 304,\n UseProxy = 305,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n BadRequest = 400,\n Unauthorized = 401,\n PaymentRequired = 402,\n Forbidden = 403,\n NotFound = 404,\n MethodNotAllowed = 405,\n NotAcceptable = 406,\n ProxyAuthenticationRequired = 407,\n RequestTimeout = 408,\n Conflict = 409,\n Gone = 410,\n LengthRequired = 411,\n PreconditionFailed = 412,\n ContentTooLarge = 413,\n URITooLong = 414,\n UnsupportedMediaType = 415,\n RangeNotSatisfiable = 416,\n ExpectationFailed = 417,\n MisdirectedRequest = 421,\n UnprocessableContent = 422,\n Locked = 423,\n FailedDependency = 424,\n TooEarly = 425,\n UpgradeRequired = 426,\n PreconditionRequired = 428,\n TooManyRequests = 429,\n RequestHeaderFieldsTooLarge = 431,\n UnavailableForLegalReasons = 451,\n InternalServerError = 500,\n NotImplemented = 501,\n BadGateway = 502,\n ServiceUnavailable = 503,\n GatewayTimeout = 504,\n HTTPVersionNotSupported = 505,\n VariantAlsoNegotiates = 506,\n InsufficientStorage = 507,\n LoopDetected = 508,\n NotExtended = 510,\n NetworkAuthenticationRequired = 511\n}\n","export type SingleExamType =\n | 'GaitSpeed'\n | 'StaticBalance'\n | 'SitToStand'\n | 'AverageGaitSpeed'\n | 'TUG'\n | 'OneLegStanding'\n | 'HandgripStrength';\n\nexport type ExamType = SingleExamType | 'SPPB';\nexport type ExamTypeExtended = ExamType | 'All';\n\nexport const SupportedExamList: ExamType[] = [\n 'SPPB',\n 'GaitSpeed',\n 'SitToStand',\n 'StaticBalance',\n 'AverageGaitSpeed',\n 'TUG',\n 'OneLegStanding',\n 'HandgripStrength'\n];\n\nexport type StaticBalanceSubExam = 'side-by-side' | 'semi-tandem' | 'tandem';\nexport type SitToStandSubType = 'Timeout' | 'CountLimit';\nexport type OneLegStandingSubExam = 'eyes-open' | 'eyes-closed';\n","export const ApiEndPoint = {\n // Health\n health: 'health-check/',\n // Token\n issueToken: 'api/v1/token/',\n refreshTokenPair: 'api/v1/token/refresh/',\n verifyToken: 'api/v1/token/verify/',\n discardToken: 'api/v1/token/blacklist/',\n // Server time\n ping: 'api/v1/ping/',\n // Email authentication\n sendAuthLink: 'api/v1/email-auth/',\n // Verification\n verify: 'api/v1/verification/?attr=',\n // User\n user: 'api/v1/user/',\n updateUser: 'api/v1/user/?attr=',\n // Devices\n deviceInfo: 'api/v1/devices/',\n // Settings\n examSettings: 'api/v1/settings/',\n // Subjects\n subjects: 'api/v1/subjects/',\n exportSubjectData: 'api/v1/web-management/export/subjects/exams/',\n // Exams\n exams: 'api/v1/exams/',\n examsInHistory: 'api/v1/web-management/exams/',\n examsFileExport: 'api/v1/web-management/exams/sensor-data/',\n //Calcuation for PDF Print\n calculateForPrint: 'api/v1/calculator/',\n //Calcuation for sitToStand count point\n calculateForSitToStand: 'api/v1/calculator/sit-to-stand-crossing/',\n // QR data\n qrData: 'api/v1/qr-data/',\n //Admin Only\n reportAdminData: 'api/v1/web-management/report/admin/',\n exportAdminData: 'api/v1/web-management/export/admin/',\n exportAdminMainData: 'api/v1/web-management/export/admin/main/',\n licenseManagement: 'api/v1/web-management/license-management/staff/',\n qualityControl: 'api/v1/web-management/device/staff/'\n} as const;\n","/* eslint-disable @typescript-eslint/dot-notation */\nimport React, { createContext, useCallback, useLayoutEffect } from 'react';\n// import { ActionMap } from '..';\nimport { BackendApiContextType } from './BackendApiContext.type';\nimport axios, { AxiosError, AxiosResponse } from 'axios';\n\nimport {\n DeviceInfo,\n ExamType,\n ExamTypeExtended,\n SupportedExamList,\n ExamResultListProps,\n LogInParams,\n Ordering,\n SubjectListProps,\n Subject,\n User,\n calculatePhysiologicalIndexProps,\n ExamResultProps,\n ExamSettingsSitToStand,\n SensorRawData,\n AdminReportListProps,\n LicenseManagementResponseType,\n LicenseManagementBodyType,\n QualityControlResponseType,\n QualityControlPostDataProps\n} from '@types';\nimport { HttpStatusCode } from './HttpStatusCode';\nimport {\n LastLoginTimeResponse,\n RegisterOrUpdateUserResponseError,\n ServerTimeResponse,\n TemporaryTokenResponse,\n TokenDiscardResponseError,\n TokenResponse,\n TokenResponseError,\n VerifyPasswordResponse,\n VerifyNumberResponse,\n QRDataResponse\n} from './BackendApiResponse.type';\nimport { ApiEndPoint } from './BackendApiRequest.type';\nimport { BackendApiError } from './BackendApiError.type';\nimport platform from 'platform';\nimport base64 from 'base-64';\n\nconst BASE_URL = process.env.REACT_APP_SERVER_URL;\nconst browserInfo = platform.description;\n\nconst axiosInstance = axios.create({\n baseURL: BASE_URL,\n timeout: 30000,\n headers: { 'Platform-Type': browserInfo }\n});\n\nexport const StorageKey = {\n isStaff: '@isStaff',\n accessToken: '@accessToken',\n refreshToken: '@refreshToken'\n} as const;\n\nconst BackendApiContext = createContext(null);\n\n// variables to control mulitple requests ====================\nconst MAX_REQUEST_ARRAY_LENGTH = 150;\n\nlet isTokenRefreshing: boolean = false;\n\nlet requestArrayToBeExcuted: {\n resolve: (value: string | null) => void;\n reject: (error: Error) => void;\n}[] = [];\n// ================================================================\n\nfunction BackendApiProvider({ children }: { children: React.ReactNode }): JSX.Element {\n // excution func to control mulitple requests ====\n const processRequests = (error: Error | null, token: string | null = null) => {\n console.log('[BackendApiContext/processRequests] token param in processRequests', token);\n\n requestArrayToBeExcuted.forEach((prom) => {\n if (error) {\n prom.reject(error);\n } else {\n prom.resolve(token);\n }\n });\n\n requestArrayToBeExcuted = [];\n };\n // ================================================================\n\n console.log('[BackendApiContext/BackendApiProvider] baseURL', BASE_URL);\n\n // Utils\n const renewTokenPair = useCallback(async (accessToken: string, refreshToken: string) => {\n // Reset refresh token in async storage\n console.log('[BackendApiContext/renewTokenPair] Put new token pair to async storage');\n localStorage.setItem(StorageKey.accessToken, accessToken);\n localStorage.setItem(StorageKey.refreshToken, refreshToken);\n\n // Re-configure default Authroization header value\n console.log('[BackendApiContext/renewTokenPair] Re-configure default Authroization header...');\n\n axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`;\n }, []);\n\n // Axios interceptors\n //Note: verifyToken은 renewToken 로직을 돌아야 하므로 아래 목록에 포함 X\n const isAuthHeaderFree = useCallback(\n (url?: string) =>\n //로그인 이전\n url === ApiEndPoint.health ||\n url === ApiEndPoint.verify + 'serialNumber' ||\n url === ApiEndPoint.verify + 'email' ||\n url === ApiEndPoint.verify + 'lastLogin' ||\n url === ApiEndPoint.updateUser + 'all' ||\n //로그인 관련\n url === ApiEndPoint.issueToken ||\n url === ApiEndPoint.refreshTokenPair ||\n //로그인 이전 및 이후\n url === ApiEndPoint.sendAuthLink ||\n url === ApiEndPoint.updateUser + 'password',\n []\n );\n\n //Note: discardToken은 response에서 accessToken 만료 401에러가 나더라도, token refresh가 불필요하므로 추가\n const shouldBypassAxiosInterceptor = useCallback(\n (url?: string) => isAuthHeaderFree(url) || url === ApiEndPoint.discardToken,\n [isAuthHeaderFree]\n );\n\n useLayoutEffect(() => {\n console.log('[BackendApiContext/AxiosInterceptor] Configuring axios interceptor...');\n\n console.log('[BackendApiContext/AxiosInterceptor] Browser info in hedaer:', browserInfo);\n\n // Axios request interceptor\n axiosInstance.interceptors.request.use(\n (config) => {\n console.log(\n `[BackendApiContext/AxiosRequestInterceptor] Request info\n - URL: ${config.url ?? '-'}\n - Header.Authorization: ${config.headers?.common?.Authorization ?? '-'} \n `\n );\n\n return config;\n },\n (error: AxiosError) => {\n console.error(\n `[BackendApiContext/AxiosRequestInterceptor] Request error: ${error.message}`\n );\n return Promise.reject(error);\n }\n );\n // Axios response interceptor\n axiosInstance.interceptors.response.use(\n (response: AxiosResponse) => response,\n async (error: AxiosError) => {\n console.log(\n `[BackendApiContext/AxiosResponseInterceptor] API response error!\n - Code: ${error.response?.status ?? 'unknown'}\n - Message: `,\n error.response?.data\n );\n\n // At first, handle timeout error\n if (error.code === 'ECONNABORTED') {\n return Promise.reject(new Error(BackendApiError.ServerResponseTimout));\n }\n\n // Extract original request config\n const originalRequest = error.config;\n\n // Prevent inifinite recursion\n if (originalRequest?.headers?.__isRetryRequest) {\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Error on retrying original request. Reject token refreshing...'\n );\n return Promise.resolve(error.response);\n }\n\n // Bypass some api calls\n if (shouldBypassAxiosInterceptor(originalRequest?.url)) {\n console.log(\n `[BackendApiContext/AxiosResponseInterceptor] (${\n originalRequest?.url ?? 'unknown url'\n }) Bypassing axios interceptor...`\n );\n return Promise.resolve(error.response);\n }\n\n // Check authroization header and do automatic token refresh if necessary\n if (error.response?.status === HttpStatusCode.Unauthorized) {\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor]',\n originalRequest?.url,\n error.response?.data\n );\n\n // console.log('1. isTokenRefreshing===============>', isTokenRefreshing);\n\n if (!isTokenRefreshing) {\n // Lock token refresh guard\n isTokenRefreshing = true;\n // console.log('2. isTokenRefreshing===============>', isTokenRefreshing);\n\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Default header:',\n axiosInstance.defaults.headers.common\n );\n\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] OriginalHeader:',\n originalRequest?.headers\n );\n\n // Delete previous access token in default header as well as original request header\n delete axiosInstance.defaults.headers.common.Authorization;\n\n if (originalRequest?.headers?.Authorization) {\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Deleting auth header in original request...'\n );\n delete originalRequest.headers.Authorization;\n }\n\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Default header after delete Authorization:',\n axiosInstance.defaults.headers.common\n );\n\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] OriginalHeader after delete Authorization:',\n originalRequest?.headers\n );\n\n // If original request is requires auth-free header...\n if (isAuthHeaderFree(originalRequest?.url)) {\n // Release token refresh guard\n isTokenRefreshing = false;\n console.log('3. isTokenRefreshing===============>', isTokenRefreshing);\n\n // Redo original request without token\n console.log(\n '[BackendApiContext/AxiosInterceptor] Redo original requests without token'\n );\n\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Default header before redo without token:',\n axiosInstance.defaults.headers\n );\n\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] OriginalHeader before redo without token:',\n originalRequest?.headers\n );\n\n if (originalRequest?.headers) {\n originalRequest.headers.__isRetryRequest = 'yes';\n return axiosInstance(originalRequest);\n } else {\n return Promise.resolve(error.response);\n }\n }\n\n // Get refresh token in async storage\n const refreshToken = localStorage.getItem(StorageKey.refreshToken);\n\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Retrieve stored refresh token:',\n refreshToken ? 'ok' : null\n );\n\n // Reqeust to server for token pair renewal\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Request token pair renewal to server...'\n );\n\n const resp = await axiosInstance.post(ApiEndPoint.refreshTokenPair, {\n refresh_token: refreshToken\n });\n console.log(\n `[BackendApiContext/AxiosResponseInterceptor] Server response: ${resp.status} `,\n resp.data\n );\n if (resp.status === HttpStatusCode.OK) {\n const tokenPair = (resp.data as TokenResponse).token;\n\n await renewTokenPair(tokenPair.access_token, tokenPair.refresh_token);\n\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Default header after token re-configure:',\n axiosInstance.defaults.headers.common\n );\n\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] OriginalHeader after token re-configure:',\n originalRequest?.headers\n );\n\n // Redo original request with renewed token\n const newAccessToken = localStorage.getItem(StorageKey.accessToken);\n console.log(\n '[BackendApiContext/AxiosInterceptor] Redo original requests with new token',\n newAccessToken\n );\n\n if (originalRequest?.headers) {\n originalRequest.headers['Authorization'] = `Bearer ${newAccessToken}`;\n originalRequest.headers.__isRetryRequest = 'yes';\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Default header before redo with token:',\n axiosInstance.defaults.headers.common\n );\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] OriginalHeader before redo with token:',\n originalRequest?.headers\n );\n\n // Re-configure access token in body in case of token verification\n if (originalRequest.url === ApiEndPoint.verifyToken) {\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Original request data before token hacking:',\n originalRequest.data\n );\n originalRequest.data = {\n access_token: newAccessToken\n };\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] Original request data after token hacking:',\n originalRequest.data\n );\n }\n\n requestArrayToBeExcuted.length > 0 && processRequests(null, newAccessToken);\n // console.log('requestArrayToBeExcuted', requestArrayToBeExcuted);\n\n // Release token refresh guard\n isTokenRefreshing = false;\n // console.log('4. isTokenRefreshing===============>', isTokenRefreshing);\n\n return axiosInstance(originalRequest);\n }\n } else {\n // Release token refresh guard\n\n isTokenRefreshing = false;\n processRequests(error, null);\n // console.log('5. isTokenRefreshing===============>', isTokenRefreshing);\n }\n } else {\n if (requestArrayToBeExcuted.length < MAX_REQUEST_ARRAY_LENGTH) {\n return new Promise((resolve, reject) => {\n // Put resolve in the queue, save it in a function form, and execute it directly after token refreshes\n requestArrayToBeExcuted.push({ resolve, reject });\n console.log(\n '[BackendApiContext/AxiosResponseInterceptor] request is added to requestArrayToBeExcuted ',\n requestArrayToBeExcuted\n );\n })\n .then((token) => {\n originalRequest.headers['Authorization'] = `Bearer ${token}`;\n return axiosInstance(originalRequest);\n })\n .catch((error) => {\n return Promise.reject(error);\n });\n } else {\n error.response.status = HttpStatusCode.TooManyRequests;\n error.response.data = BackendApiError.APICallsOverFlow;\n\n requestArrayToBeExcuted = [];\n return Promise.resolve(error.response);\n }\n }\n }\n return Promise.resolve(error.response);\n }\n );\n console.log('[BackendApiContext/AxiosInterceptor] Success to configure');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Health\n const getServerHealth = useCallback(async () => {\n const response = await axiosInstance.get(ApiEndPoint.health);\n switch (response.status) {\n case HttpStatusCode.OK:\n return;\n\n case HttpStatusCode.InternalServerError:\n throw new Error(BackendApiError.ServerHealthSevere);\n\n default:\n throw new Error(\n `[BackendApiContext/getServerStatus] Unhandled response: ${response.status}`\n );\n }\n }, []);\n\n // Token\n const login = useCallback(\n async (param?: LogInParams) => {\n if (param) {\n const response = await axiosInstance.post(ApiEndPoint.issueToken, {\n email: param.email,\n password: param.password\n });\n switch (response.status) {\n case HttpStatusCode.OK: {\n const { token, is_active_account, is_staff } = response.data as TokenResponse;\n console.log(\n '[BackendApiContext/login/LogInParams] Log-in success. Active user?:',\n is_active_account\n );\n console.log(\n '[BackendApiContext/login/LogInParams] Log-in success. is staff?:',\n is_staff\n );\n if (is_staff) {\n await localStorage.setItem(StorageKey.isStaff, 'admin');\n } else {\n await localStorage.setItem(StorageKey.isStaff, 'user');\n }\n await renewTokenPair(token.access_token, token.refresh_token);\n // Note: e-mail & password를 이용한 log-in시도 시 response로 활성계정 여부를 return\n return is_active_account;\n }\n\n case HttpStatusCode.BadRequest: {\n const { error } = response.data as TokenResponseError;\n if (error) {\n throw new Error(BackendApiError.ExceedMaxNumOfConcurrentLogin);\n } else {\n throw new Error(\n `[BackendApiContext/login/LogInParams] This error should not occur (${response.status})`\n );\n }\n }\n\n case HttpStatusCode.Unauthorized: {\n const { error, detail } = response.data as TokenResponseError;\n if (error) {\n throw new Error(BackendApiError.SignUpRequiredToLogin);\n } else if (detail) {\n throw new Error(BackendApiError.InvalidEmailOrPasswordToLogin);\n } else {\n throw new Error(\n `[BackendApiContext/login/LogInParams] This error should not occur (${response.status})`\n );\n }\n }\n\n default:\n throw new Error(\n `[BackendApiContext/login/LogInParams] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n } else {\n const accessToken = localStorage.getItem(StorageKey.accessToken);\n console.log(\n '[BackendApiContext/login/Token] Access token in async storage:',\n accessToken ? 'ok' : null\n );\n\n if (accessToken) {\n console.log('[BackendApiContext/login/Token] Request token verification to server...');\n const response = await axiosInstance.post(ApiEndPoint.verifyToken, {\n access_token: accessToken\n });\n console.log(\n '[BackendApiContext/login/Token] Server response:',\n response.status === HttpStatusCode.OK ? 'ok' : response.status\n );\n switch (response.status) {\n case HttpStatusCode.OK:\n // Note: Set default header for remember-me\n\n //## verify에서 401에러가 난 후, renewToken 한다음 이곳으로 들어오면, 갱신 전의 accessToken을 가져오므로, 현재 localStorage의 token을 다시 가져와 최신으로 넣어야,\n // login process의 login 후 이어지는 user api에서 401 에러 발생 하지 않음\n const newAccessToken = localStorage.getItem(StorageKey.accessToken);\n console.log(\n '[BackendApiContext/login/Token] accessToken set to axiosInstance default header',\n newAccessToken\n );\n axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${newAccessToken}`;\n // Note: Token verification의 경우 API response === empty\n return undefined;\n\n case HttpStatusCode.BadRequest:\n throw new Error(\n `[BackendApiContext/login/Token] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n case HttpStatusCode.Unauthorized:\n throw new Error(BackendApiError.TokenPairExpired);\n\n default:\n throw new Error(\n `[BackendApiContext/login/Token] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n } else {\n // 로그인을 위한 LogInParms (e-mail & password) 과 token 정보 모두 부족한 경우\n throw new Error(BackendApiError.NotEnoughToLogin);\n }\n }\n },\n [renewTokenPair]\n );\n\n const logout = useCallback(async () => {\n try {\n const refreshToken = localStorage.getItem(StorageKey.refreshToken);\n console.log(\n '[BackendApiContext/logout] Retrieve stored refresh token:',\n refreshToken ? 'ok' : null\n );\n if (refreshToken) {\n console.log('[BackendApiContext/logout] Request to server to put token in blacklist...');\n\n const response = await axiosInstance.post(ApiEndPoint.discardToken, {\n refresh_token: refreshToken\n });\n switch (response.status) {\n case HttpStatusCode.OK:\n console.log('[BackendApiContext/logout] Server ok');\n break;\n\n case HttpStatusCode.BadRequest: {\n const { code } = response.data as TokenDiscardResponseError;\n if (code) {\n throw new Error(BackendApiError.RefreshTokenAlreadyExpired);\n } else {\n throw new Error(\n `[BackendApiContext/logout] This error should not occur (${response.status}): ${response.data.detail}`\n );\n }\n }\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/logout] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/logout] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n } else {\n throw new Error(BackendApiError.RefreshTokenNotFound);\n }\n } finally {\n console.log('[BackendApiContext/logout] Remove token pairs in async storage');\n\n delete axiosInstance.defaults.headers.common['Authorization'];\n localStorage.removeItem(StorageKey.accessToken);\n localStorage.removeItem(StorageKey.refreshToken);\n }\n }, []);\n\n // Server time\n const getServerTime = useCallback(async () => {\n const response = await axiosInstance.get(ApiEndPoint.ping);\n switch (response.status) {\n case HttpStatusCode.OK:\n return new Date((response.data as ServerTimeResponse).ping); // Note: UTC timezone\n\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/getServerTime] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/getServerTime] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n // Email authentication\n const sendAuthLink = useCallback(async (email: string, link: string) => {\n const response = await axiosInstance.post(ApiEndPoint.sendAuthLink, {\n email: email,\n link: link\n });\n\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as TemporaryTokenResponse;\n\n case HttpStatusCode.BadRequest:\n throw new Error(\n `[BackendApiContext/sendAuthLink] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/sendAuthLink] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n // Verification\n const verifySerialNumber = useCallback(async (serialNumber: string) => {\n const response = await axiosInstance.post(ApiEndPoint.verify + 'serialNumber', {\n serialNumber: serialNumber\n });\n\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as User[];\n\n case HttpStatusCode.BadRequest:\n throw new Error(\n `[BackendApiContext/verifySerialNumber] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n case HttpStatusCode.Unauthorized:\n throw new Error(BackendApiError.InvalidSerialNumber);\n\n default:\n throw new Error(\n `[BackendApiContext/verifySerialNumber] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const verifyEmail = useCallback(async (email: string) => {\n const response = await axiosInstance.post(ApiEndPoint.verify + 'email', {\n email: email\n });\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as User;\n\n case HttpStatusCode.BadRequest:\n throw new Error(\n `[BackendApiContext/verifyEmail] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n case HttpStatusCode.Unauthorized:\n throw new Error(BackendApiError.InvalidEmail);\n\n default:\n throw new Error(\n `[BackendApiContext/verifyEmail] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const verifyPassword = useCallback(async (password: string) => {\n const response = await axiosInstance.post(ApiEndPoint.verify + 'password', {\n password: password\n });\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as VerifyPasswordResponse;\n\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/verifyPassword] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/verifyPassword] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const verifyNumber = useCallback(async (number: string) => {\n const response = await axiosInstance.post(ApiEndPoint.verify + 'number', {\n number: number\n });\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as VerifyNumberResponse;\n\n case HttpStatusCode.BadRequest:\n throw new Error(\n `[BackendApiContext/verifyNumber] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n case HttpStatusCode.Unauthorized:\n throw new Error(BackendApiError.InvalidNumber);\n\n default:\n throw new Error(\n `[BackendApiContext/verifyNumber] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const getLastLogin = useCallback(async (email: string) => {\n const response = await axiosInstance.post(ApiEndPoint.verify + 'lastLogin', { email: email });\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as LastLoginTimeResponse;\n\n case HttpStatusCode.BadRequest:\n throw new Error(\n `[BackendApiContext/getLastLogin] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n case HttpStatusCode.Unauthorized:\n throw new Error(BackendApiError.UnregisteredEmailToGetLastLogin);\n\n default:\n throw new Error(\n `[BackendApiContext/getLastLogin] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n // User\n const getUser = useCallback(async () => {\n const response = await axiosInstance.get(ApiEndPoint.user);\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as User;\n\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/getUser] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/getUser] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const registerUser = useCallback(\n async (temporaryToken: string, email: string, password: string, organization?: string) => {\n const response = await axiosInstance.patch(ApiEndPoint.updateUser + 'all', {\n token: temporaryToken,\n email: email,\n organization: organization,\n password: password\n });\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as User;\n\n case HttpStatusCode.BadRequest: {\n const { error } = response.data as RegisterOrUpdateUserResponseError;\n if (error) {\n throw new Error(BackendApiError.AlreadySignedUpEmailToRegisterUser);\n } else {\n throw new Error(\n `[BackendApiContext/registerUser] This error should not occur (${response.status}): ${response.data.detail}`\n );\n }\n }\n\n case HttpStatusCode.Unauthorized: {\n const { detail } = response.data as RegisterOrUpdateUserResponseError;\n if (detail) {\n throw new Error(BackendApiError.InvalidEmailOrTokenToRegisterUser);\n } else {\n throw new Error(\n `[BackendApiContext/registerUser] This error should not occur (${response.status}): ${response.data.detail}`\n );\n }\n }\n\n default:\n throw new Error(\n `[BackendApiContext/registerUser] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n },\n []\n );\n\n const updateUser = useCallback(\n async (\n attribute: 'password' | 'email' | 'organization',\n value: string,\n unauth?: {\n temporaryToken: string | undefined;\n email: string | undefined;\n }\n ) => {\n let data;\n switch (attribute) {\n case 'email':\n data = { [attribute]: value };\n break;\n case 'organization':\n data = { [attribute]: value };\n break;\n case 'password':\n if (unauth) {\n data = {\n password: value,\n email: unauth.email,\n token: unauth.temporaryToken\n };\n } else {\n data = { [attribute]: value };\n }\n break;\n }\n\n const response = await axiosInstance.patch(ApiEndPoint.updateUser + attribute, data);\n\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as User;\n\n case HttpStatusCode.BadRequest:\n throw new Error(BackendApiError.EmailIsAlredayTaken);\n\n case HttpStatusCode.Unauthorized: {\n if (attribute === 'password' && unauth) {\n const { detail } = response.data as RegisterOrUpdateUserResponseError;\n if (detail) {\n throw new Error(BackendApiError.InvalidEmailOrTokenToUpdateUser);\n }\n }\n throw new Error(\n `[BackendApiContext/updateUser] This error should not occur (${response.status}): ${response.data.detail}`\n );\n }\n\n default:\n throw new Error(\n `[BackendApiContext/updateUser] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n },\n []\n );\n\n const activateUser = useCallback(async () => {\n const response = await axiosInstance.patch(ApiEndPoint.updateUser + 'isActiveAccount');\n switch (response.status) {\n case HttpStatusCode.OK:\n return;\n\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/activateUser] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/activateUser] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const deleteUser = useCallback(async () => {\n const response = await axiosInstance.delete(ApiEndPoint.user);\n switch (response.status) {\n case HttpStatusCode.OK:\n return;\n\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/deleteUser] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/deleteUser] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n // Devices\n const getDeviceInfo = useCallback(async () => {\n const response = await axiosInstance.get(ApiEndPoint.deviceInfo);\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as DeviceInfo[];\n\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/getDeviceInfo] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/getDeviceInfo] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n // Subjects\n const getSubjectList = useCallback(async (limit: number, offset: number, query?: string) => {\n let baseUrl = `${ApiEndPoint.subjects}?limit=${limit}&offset=${offset}`;\n if (query) {\n baseUrl += `&query=${query}`;\n }\n const response = await axiosInstance.get(baseUrl);\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as SubjectListProps;\n\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/getSubjectList] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n case HttpStatusCode.TooManyRequests:\n throw new Error(BackendApiError.APICallsOverFlow);\n\n default:\n throw new Error(\n `[BackendApiContext/getSubjectList] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const registerSubject = useCallback(async (subject: Omit) => {\n const response = await axiosInstance.post(ApiEndPoint.subjects, {\n number: subject.number,\n name: subject.name,\n birthday: subject.birthday,\n gender: subject.gender\n });\n\n switch (response.status) {\n case HttpStatusCode.Created:\n return response.data as Subject;\n\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/registerSubject] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/registerSubject] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const updateSubject = useCallback(async (subject: Omit) => {\n const response = await axiosInstance.patch(`${ApiEndPoint.subjects}${subject.id}/`, {\n number: subject.number,\n name: subject.name,\n birthday: subject.birthday,\n gender: subject.gender\n });\n\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as Subject;\n\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/updateSubject] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/updateSubject] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const deleteSubject = useCallback(async (subjectId: string) => {\n const response = await axiosInstance.delete(`${ApiEndPoint.subjects}${subjectId}/`);\n switch (response.status) {\n case HttpStatusCode.OK:\n return;\n\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/deleteSubject] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/deleteSubject] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const exportSubjectSPPBData = useCallback(\n async (language: string, subjectId: string[] | 'All', excludeId?: string[]) => {\n console.log('[BackendApiContext/exportSubjectSPPBData]', { subjectId, excludeId });\n let queryString = '';\n if (subjectId === 'All') {\n queryString = `subjectId=All`;\n if (excludeId && excludeId.length > 0) {\n excludeId.forEach((id) => {\n queryString += `&subjectId=${id}`;\n });\n }\n } else {\n if (subjectId.length > 0) {\n subjectId.forEach((id, index) => {\n if (index === 0) {\n queryString += `subjectId=${id}`;\n } else {\n queryString += `&subjectId=${id}`;\n }\n });\n }\n }\n\n console.log(\n `[BackendApiContext/exportSubjectSPPBData], ${ApiEndPoint.exportSubjectData}?${queryString}&lang=${language}`\n );\n const response = await axiosInstance.get(\n `${ApiEndPoint.exportSubjectData}?${queryString}&lang=${language}`,\n {\n responseType: 'blob'\n }\n );\n\n console.log('[BackendApiContext/exportSubjectSPPBData] response is', response);\n\n switch (response.status) {\n case HttpStatusCode.OK:\n const filename = response.headers['content-disposition'].split('filename=')[1];\n console.log('[BackendApiContext/exportSubjectSPPBData] Export success', response);\n return { fileData: response.data, fileName: filename };\n case HttpStatusCode.BadRequest:\n console.error(\n `[BackendApiContext/exportSubjectSPPBData] Error occured: (${response.status}): ${response.data.detail}`\n );\n throw new Error(BackendApiError.ExportSubjectDataBadRequest);\n case HttpStatusCode.Unauthorized:\n console.error(\n `[BackendApiContext/exportSubjectSPPBData] Error occured: (${response.status}): ${response.data.detail}`\n );\n throw new Error(BackendApiError.ExportSubjectDataUnauthorized);\n case HttpStatusCode.NotFound:\n console.error(\n `[BackendApiContext/exportSubjectSPPBData] Error occured: (${response.status}): ${response.data.detail}`\n );\n throw new Error(BackendApiError.ExportSubjectDataNotFound);\n default:\n throw new Error(\n `[BackendApiContext/exportSubjectSPPBData] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n },\n []\n );\n\n // Exams\n const getExamResults = useCallback(\n async (\n examType: ExamTypeExtended,\n limit: number,\n offset: number,\n ordering: Ordering,\n startDate?: string,\n endDate?: string,\n searchQuery?: string,\n subjectPk?: string,\n isCountLimit?: boolean\n ) => {\n let baseUrl = `${ApiEndPoint.exams}?exam=${examType}&limit=${limit}&offset=${offset}&ordering=${ordering}`;\n if (startDate) {\n baseUrl += `&startDate=${startDate}`;\n }\n if (endDate) {\n baseUrl += `&endDate=${endDate}`;\n }\n if (searchQuery) {\n baseUrl += `&searchQuery=${searchQuery}`;\n }\n if (subjectPk) {\n baseUrl += `&subjectPk=${subjectPk}`;\n }\n if (isCountLimit === true) {\n baseUrl += `&isCountLimit=True`;\n } else if (isCountLimit === false) {\n baseUrl += `&isCountLimit=False`;\n }\n\n const response = await axiosInstance.get(baseUrl);\n\n switch (response.status) {\n case HttpStatusCode.OK:\n if (response.data) {\n return response.data as ExamResultListProps;\n } else {\n throw new Error(\n `[BackendApiContext/getExamResults] This error should not occur (${response.status}): Undefined data in response`\n );\n }\n case HttpStatusCode.BadRequest:\n throw new Error(BackendApiError.BadRequestError);\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/getExamResults] This error should not occur (${response.status}): ${response.data.detail}`\n );\n case HttpStatusCode.TooManyRequests:\n throw new Error(BackendApiError.APICallsOverFlow);\n\n default:\n throw new Error(\n `[BackendApiContext/getExamResults] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n },\n []\n );\n const getSingleExamResult = useCallback(async (examId: number, examType: ExamType) => {\n const response = await axiosInstance.get(\n `${ApiEndPoint.exams}?examPk=${examId}&exam=${examType}`\n );\n console.log('[BackendApiContext/getSingleExamResult] response success');\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data.results[0] as ExamResultProps;\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/getSingleExamResult] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/getSingleExamResult] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n }, []);\n\n const getExamResultsInHistory = useCallback(\n async (\n examType: ExamType,\n subjectPk: string,\n examPk?: string,\n index?: string,\n isCountLimit?: boolean,\n limit?: number\n ) => {\n let queryString = `exam=${examType}&subjectPk=${subjectPk}`;\n\n if (examPk) {\n queryString += `&examPk=${examPk}`;\n } else if (index || index === '0') {\n queryString += `&index=${index}`;\n }\n\n if (isCountLimit === true) {\n queryString += `&isCountLimit=True`;\n } else if (isCountLimit === false) {\n queryString += `&isCountLimit=False`;\n }\n\n if (limit) {\n queryString += `&limit=${limit}`;\n }\n\n const response = await axiosInstance.get(`${ApiEndPoint.examsInHistory}?${queryString}`);\n\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as ExamResultListProps;\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/getExamResultsInHistory] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/getExamResultsInHistory] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n },\n []\n );\n\n const getExamSensorData = useCallback(\n async (examId: number, examType: Omit) => {\n const response = await axiosInstance.get(`${ApiEndPoint.exams}${examId}/?exam=${examType}`);\n console.log('[BackendApiContext/getExamSensorData] response success');\n\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as SensorRawData;\n case HttpStatusCode.BadRequest:\n return {} as SensorRawData;\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/getExamSensorData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/getExamSensorData] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n },\n []\n );\n\n const removeExamResult = useCallback(async (query: Record) => {\n console.log('[BackendApiContext/removeExamResult Query] :', query);\n\n const data: Record> = {};\n SupportedExamList.forEach((examType) => {\n if (query[examType].length > 0) {\n data[examType] = { id: query[examType] };\n }\n });\n console.log('[BackendApiContext/removeExamResult Parsed Query Data] :', data);\n\n const response = await axiosInstance.delete(ApiEndPoint.exams, { data });\n console.log('[BackendApiContext/Response]', response);\n\n switch (response.status) {\n case HttpStatusCode.OK:\n return;\n\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/removeExamResult] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/removeExamResult] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const updateExamNote = useCallback(async (examType: ExamType, examPk: number, note: string) => {\n console.log('[BackendApiContext/updateExamNote querys]', examType, examPk, note);\n\n const response = await axiosInstance.patch(\n `${ApiEndPoint.exams}?exam=${examType}&examPk=${examPk}`,\n { note }\n );\n\n console.log('[BackendApiContext/updateExamNote Response]', response);\n switch (response.status) {\n case HttpStatusCode.OK:\n return;\n\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/updateExamNote] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/updateExamNote] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n // Calculation For SitToStand Count Index Array\n const calculateSitToStandCountIndex = useCallback(\n async (\n sitToStandSetting: ExamSettingsSitToStand,\n weightArray: string[],\n distanceArray: string[]\n ) => {\n const response = await axiosInstance.post(ApiEndPoint.calculateForSitToStand, {\n sitToStandSetting,\n weightArray,\n distanceArray\n });\n\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as number[];\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/calculateSitToStandCountIndex] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/calculateSitToStandCountIndex] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n },\n []\n );\n\n const getCSVExamFileExport = useCallback(\n async (examType: Omit, examPk: number[]) => {\n console.log('[BackendApiContext/getCSVExamFileExport]', { examType, examPk });\n let queryString = `exam=${examType}`;\n if (examPk.length > 0) {\n examPk.forEach((pk) => {\n queryString += `&examPk=${pk}`;\n });\n }\n console.log(\n `[BackendApiContext/getCSVExamFileExport], ${ApiEndPoint.examsFileExport}?${queryString}`\n );\n const response = await axiosInstance.get(`${ApiEndPoint.examsFileExport}?${queryString}`, {\n responseType: 'blob'\n });\n // const response = await axiosInstance.get(`${ApiEndPoint.examsFileExport}?${queryString}`);\n console.log('[BackendApiContext/getCSVExamFileExport] response is', response);\n\n switch (response.status) {\n case HttpStatusCode.OK:\n const filename = response.headers['content-disposition'].split('filename=')[1];\n const decodedFileName = base64.decode(filename);\n console.log('[BackendApiContext/getCSVExamFileExport] Export success', response);\n return { fileData: response.data, fileName: decodedFileName };\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/getCSVExamFileExport] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/getCSVExamFileExport] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n },\n []\n );\n\n const getQRData = useCallback(async (examId: number): Promise => {\n let baseQuery = `${ApiEndPoint.qrData}?examId=${examId}`;\n const response = await axiosInstance.get(baseQuery);\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data;\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/getQualityControlData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/getQualityControlData] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n }, []);\n\n const getAdminDataReport = useCallback(\n async (limit: number, offset: number, searchQuery?: string) => {\n let baseQuery = `${ApiEndPoint.reportAdminData}?limit=${limit}&offset=${offset}`;\n if (searchQuery) {\n baseQuery += `&searchQuery=${searchQuery}`;\n }\n const response = await axiosInstance.get(baseQuery);\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as AdminReportListProps;\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/getAdminDataReport] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/getAdminDataReport] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n },\n []\n );\n\n const exportAdminData = useCallback(async (userId: string[] | 'All', excludeId?: string[]) => {\n console.log('[BackendApiContext/exportAdminData]', { userId, excludeId });\n let queryString = '';\n if (userId === 'All') {\n queryString = `UserId=All`;\n if (excludeId && excludeId.length > 0) {\n excludeId.forEach((id) => {\n queryString += `&UserId=${id}`;\n });\n }\n } else {\n if (userId.length > 0) {\n userId.forEach((id, index) => {\n if (index === 0) {\n queryString += `UserId=${id}`;\n } else {\n queryString += `&UserId=${id}`;\n }\n });\n }\n }\n\n console.log(\n `[BackendApiContext/exportAdminData], ${ApiEndPoint.exportAdminData}?${queryString}`\n );\n const response = await axiosInstance.get(`${ApiEndPoint.exportAdminData}?${queryString}`, {\n responseType: 'blob'\n });\n // const response = await axiosInstance.get(`${ApiEndPoint.examsFileExport}?${queryString}`);\n\n switch (response.status) {\n case HttpStatusCode.OK:\n const filename = response.headers['content-disposition'].split('filename=')[1];\n const decodedFileName = base64.decode(filename);\n console.log('[BackendApiContext/exportAdminData] Export success', response);\n return { fileData: response.data, fileName: decodedFileName };\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/exportAdminData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/exportAdminData] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n }, []);\n\n const exportAdminMainData = useCallback(\n async (userId: string[] | 'All', excludeId?: string[]) => {\n console.log('[BackendApiContext/exportAdminData]', { userId, excludeId });\n let queryString = '';\n if (userId === 'All') {\n queryString = `UserId=All`;\n if (excludeId && excludeId.length > 0) {\n excludeId.forEach((id) => {\n queryString += `&UserId=${id}`;\n });\n }\n } else {\n if (userId.length > 0) {\n userId.forEach((id, index) => {\n if (index === 0) {\n queryString += `UserId=${id}`;\n } else {\n queryString += `&UserId=${id}`;\n }\n });\n }\n }\n\n console.log(\n `[BackendApiContext/exportAdminMainData], ${ApiEndPoint.exportAdminMainData}?${queryString}`\n );\n const response = await axiosInstance.get(\n `${ApiEndPoint.exportAdminMainData}?${queryString}`,\n {\n responseType: 'blob'\n }\n );\n // const response = await axiosInstance.get(`${ApiEndPoint.examsFileExport}?${queryString}`);\n\n switch (response.status) {\n case HttpStatusCode.OK:\n const filename = response.headers['content-disposition'].split('filename=')[1];\n const decodedFileName = base64.decode(filename);\n console.log('[BackendApiContext/exportAdminMainData] Export success', response);\n return { fileData: response.data, fileName: decodedFileName };\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/exportAdminMainData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/exportAdminMainData] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n },\n []\n );\n\n const getLicenseManagementData = useCallback(\n async (limit: number, offset: number, searchQuery?: string) => {\n let baseQuery = `${ApiEndPoint.licenseManagement}?limit=${limit}&offset=${offset}`;\n if (searchQuery) {\n baseQuery += `&searchQuery=${searchQuery}`;\n }\n const response = await axiosInstance.get(baseQuery);\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as LicenseManagementResponseType;\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/getLicenseManagementData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/getLicenseManagementData] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n },\n []\n );\n\n const postLicenseManagementData = useCallback(\n async ({ email, organization, division, device }: LicenseManagementBodyType) => {\n // console.log(\n // '[BackendApiContext/postLicenseManagementData body]',\n // email,\n // organization,\n // division,\n // device\n // );\n\n const response = await axiosInstance.post(`${ApiEndPoint.licenseManagement}`, {\n email,\n organization,\n division,\n device\n });\n\n console.log('[BackendApiContext/postLicenseManagementData Response]', response);\n switch (response.status) {\n case HttpStatusCode.OK:\n case HttpStatusCode.Created:\n return;\n case HttpStatusCode.BadRequest:\n if (response?.data?.email?.email) {\n throw new Error(response.data.email.email[0]);\n } else if (response?.data?.device?.device) {\n throw new Error(response.data.device.device[0]);\n } else {\n throw new Error(\n `[BackendApiContext/postLicenseManagementData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n }\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/postLicenseManagementData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/postLicenseManagementData] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n },\n []\n );\n\n const getQualityControlData = useCallback(async () => {\n let baseQuery = `${ApiEndPoint.qualityControl}`;\n const response = await axiosInstance.get(baseQuery);\n switch (response.status) {\n case HttpStatusCode.OK:\n return response as QualityControlResponseType;\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n case HttpStatusCode.NotFound:\n throw new Error(\n `[BackendApiContext/getQualityControlData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/getQualityControlData] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n }, []);\n\n const postQualityControlData = useCallback(async (value: QualityControlPostDataProps) => {\n // console.log('[BackendApiContext/postQualityControlData body]', value);\n\n const response = await axiosInstance.post(`${ApiEndPoint.qualityControl}`, value);\n\n console.log('[BackendApiContext/postQualityControlData Response]', response);\n switch (response.status) {\n case HttpStatusCode.OK:\n case HttpStatusCode.Created:\n return;\n case HttpStatusCode.BadRequest:\n if (response?.data[0]?.serial_number) {\n throw new Error(response.data[0].serial_number[0]);\n } else if (response?.data[0]?.release_date) {\n throw new Error(response.data[0].release_date[0]);\n } else {\n throw new Error(\n `[BackendApiContext/postQualityControlData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n }\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/postQualityControlData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/postQualityControlData] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n }, []);\n\n const deleteQualityControlData = useCallback(\n async (objectId: string[] | 'All', excludeId?: string[]) => {\n console.log('[BackendApiContext/exportAdminData]', { objectId, excludeId });\n let queryString = '';\n if (objectId === 'All') {\n queryString = `ObjectId=All`;\n if (excludeId && excludeId.length > 0) {\n excludeId.forEach((id) => {\n queryString += `&ObjectId=${id}`;\n });\n }\n } else {\n if (objectId.length > 0) {\n objectId.forEach((id, index) => {\n if (index === 0) {\n queryString += `ObjectId=${id}`;\n } else {\n queryString += `&ObjectId=${id}`;\n }\n });\n }\n }\n\n const response = await axiosInstance.delete(`${ApiEndPoint.qualityControl}?${queryString}`);\n\n console.log('[BackendApiContext/deleteQualityControlData Response]', response);\n switch (response.status) {\n case HttpStatusCode.OK:\n case HttpStatusCode.NoContent:\n return;\n\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/deleteQualityControlData] This error should not occur (${response.status}): ${response.data.detail}`\n );\n\n default:\n throw new Error(\n `[BackendApiContext/deleteQualityControlData] Unhandled response: ${response.status} ${response.data.detail}`\n );\n }\n },\n []\n );\n\n return (\n \n {children}\n \n );\n}\n\nexport { BackendApiContext, BackendApiProvider };\n\n//Calculation For PDF Print and download\nexport const calculatePhysiologicalIndex = async (\n age: number,\n staticBalanceScore: number,\n sitToStandScore: number,\n gaitSpeedScore: number\n) => {\n const response = await axiosInstance.post(ApiEndPoint.calculateForPrint, {\n age: age,\n staticBalanceScore: staticBalanceScore,\n sitToStandScore: sitToStandScore,\n gaitSpeedScore: gaitSpeedScore\n });\n switch (response.status) {\n case HttpStatusCode.OK:\n return response.data as calculatePhysiologicalIndexProps;\n case HttpStatusCode.BadRequest:\n case HttpStatusCode.Unauthorized:\n throw new Error(\n `[BackendApiContext/calculatePhysiologicalIndex] This error should not occur (${response.status}): ${response.data.detail}`\n );\n default:\n throw new Error(\n `[BackendApiContext/calculatePhysiologicalIndex] Unhandled response: (${response.status}): ${response.data.detail}`\n );\n }\n};\n","import { useRef, useState } from 'react';\n// material\nimport { Box, MenuItem, ListItemText, Stack } from '@mui/material';\n// hooks\nimport useLocales from '../../hooks/useLocales';\n// components\nimport MenuPopover from '../../components/MenuPopover';\nimport { SmallIcon } from '../../styles/icon';\nimport { SubBodyText } from '../../styles/typography';\n\n// ----------------------------------------------------------------------\n\nexport default function LanguagePopover() {\n const anchorRef = useRef(null);\n const [open, setOpen] = useState(false);\n const { allLang, currentLang, onChangeLang, translate } = useLocales();\n\n return (\n <>\n setOpen(true)}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n spacing={1}\n sx={{\n padding: 1,\n cursor: 'pointer'\n // ...(open && { bgcolor: 'action.selected' })\n }}\n >\n \n \n {currentLang.value === 'ko'\n ? translate('LanguagePopoverKR')\n : currentLang.value === 'ja'\n ? translate('LanguagePopoverJA')\n : translate('LanguagePopoverEN')}\n \n \n\n setOpen(false)} anchorEl={anchorRef.current}>\n \n {allLang.map((option) => (\n {\n onChangeLang(option.value);\n setOpen(false);\n }}\n sx={{ py: 1, px: 2.5 }}\n >\n \n {option.value === 'ko'\n ? translate('LanguagePopoverKR')\n : option.value === 'ja'\n ? translate('LanguagePopoverJA')\n : translate('LanguagePopoverEN')}\n \n \n ))}\n \n \n \n );\n}\n","// ----------------------------------------------------------------------\n\nexport const varWrapEnter = {\n animate: {\n transition: { staggerChildren: 0.1 }\n }\n};\n\nexport const varWrapExit = {\n exit: {\n transition: { staggerChildren: 0.1 }\n }\n};\n\nexport const varWrapBoth = {\n animate: {\n transition: { staggerChildren: 0.07, delayChildren: 0.1 }\n },\n exit: {\n transition: { staggerChildren: 0.05, staggerDirection: -1 }\n }\n};\n","// ----------------------------------------------------------------------\n\nexport const varHover = {\n hover: { scale: 1.1 }\n};\n\nexport const varSmallClick = {\n hover: { scale: 1.04 },\n tap: { scale: 0.96 }\n};\n\nexport const varMediumClick = {\n hover: { scale: 1.1 },\n tap: { scale: 0.9 }\n};\n","// ----------------------------------------------------------------------\n\nconst TRANSITION = {\n duration: 4,\n ease: 'linear'\n};\n\nconst gradient = (deg: number) => `linear-gradient(${deg}deg, #ee7752, #e73c7e, #23a6d5, #23d5ab)`;\n\nexport const varPanTop = {\n animate: {\n backgroundImage: [gradient(0), gradient(0)],\n backgroundPosition: ['center 99%', 'center 1%'],\n backgroundSize: ['100% 600%', '100% 600%'],\n transition: TRANSITION\n }\n};\n\nexport const varPanBottom = {\n animate: {\n backgroundImage: [gradient(0), gradient(0)],\n backgroundPosition: ['center 1%', 'center 99%'],\n backgroundSize: ['100% 600%', '100% 600%'],\n transition: TRANSITION\n }\n};\n\nexport const varPanLeft = {\n animate: {\n backgroundPosition: ['99% center', '1% center'],\n backgroundImage: [gradient(270), gradient(270)],\n backgroundSize: ['600% 100%', '600% 100%'],\n transition: TRANSITION\n }\n};\n\nexport const varPanRight = {\n animate: {\n backgroundPosition: ['1% center', '99% center'],\n backgroundImage: [gradient(270), gradient(270)],\n backgroundSize: ['600% 100%', '600% 100%'],\n transition: TRANSITION\n }\n};\n","// ----------------------------------------------------------------------\n\nconst DISTANCE = 720;\nconst IN = { scale: 1, opacity: 1 };\nconst OUT = { scale: 0, opacity: 0 };\n\nconst TRANSITION_ENTER = {\n duration: 0.64,\n ease: [0.43, 0.13, 0.23, 0.96]\n};\n\nconst TRANSITION_EXIT = {\n duration: 0.48,\n ease: [0.43, 0.13, 0.23, 0.96]\n};\n\nexport const varZoomIn = {\n initial: OUT,\n animate: { ...IN, transition: TRANSITION_ENTER },\n exit: { ...OUT, transition: TRANSITION_EXIT }\n};\n\nexport const varZoomInUp = {\n initial: { ...OUT, translateY: DISTANCE },\n animate: { ...IN, translateY: 0, transition: TRANSITION_ENTER },\n exit: { ...OUT, translateY: DISTANCE, transition: TRANSITION_EXIT }\n};\n\nexport const varZoomInDown = {\n initial: { ...OUT, translateY: -DISTANCE },\n animate: { ...IN, translateY: 0, transition: TRANSITION_ENTER },\n exit: { ...OUT, translateY: -DISTANCE, transition: TRANSITION_EXIT }\n};\n\nexport const varZoomInLeft = {\n initial: { ...OUT, translateX: -DISTANCE },\n animate: { ...IN, translateX: 0, transition: TRANSITION_ENTER },\n exit: { ...OUT, translateX: -DISTANCE, transition: TRANSITION_EXIT }\n};\n\nexport const varZoomInRight = {\n initial: { ...OUT, translateX: DISTANCE },\n animate: { ...IN, translateX: 0, transition: TRANSITION_ENTER },\n exit: { ...OUT, translateX: DISTANCE, transition: TRANSITION_EXIT }\n};\n","// ----------------------------------------------------------------------\n\nconst DISTANCE = 720;\nconst IN = { scale: 1, opacity: 1 };\nconst OUT = { scale: 0, opacity: 0 };\n\nconst TRANSITION_ENTER = {\n duration: 0.64,\n ease: [0.43, 0.13, 0.23, 0.96]\n};\n\nexport const varZoomOut = {\n initial: { scale: 1 },\n animate: { scale: 0, transition: TRANSITION_ENTER }\n};\n\nexport const varZoomOutUp = {\n initial: IN,\n animate: { ...OUT, translateY: -DISTANCE, transition: TRANSITION_ENTER }\n};\n\nexport const varZoomOutDown = {\n initial: IN,\n animate: { ...OUT, translateY: DISTANCE, transition: TRANSITION_ENTER }\n};\n\nexport const varZoomOutLeft = {\n initial: IN,\n animate: { ...OUT, translateX: -DISTANCE, transition: TRANSITION_ENTER }\n};\n\nexport const varZoomOutRight = {\n initial: IN,\n animate: { ...OUT, translateX: DISTANCE, transition: TRANSITION_ENTER }\n};\n","import {\n varBounceOut,\n varBounceOutUp,\n varBounceOutDown,\n varBounceOutLeft,\n varBounceOutRight\n} from './BounceOut';\n\n// ----------------------------------------------------------------------\n\nconst TRANSITION_ENTER = {\n duration: 0.72,\n ease: [0.43, 0.13, 0.23, 0.96]\n};\n\nconst TRANSITION_EXIT = {\n duration: 0.48,\n ease: [0.43, 0.13, 0.23, 0.96]\n};\n\nexport const varBounceIn = {\n animate: {\n scale: [0.3, 1.1, 0.9, 1.03, 0.97, 1],\n opacity: [0, 1, 1, 1, 1, 1],\n transition: TRANSITION_ENTER\n },\n exit: varBounceOut.animate\n};\n\nexport const varBounceInUp = {\n animate: {\n y: [720, -24, 12, -4, 0],\n scaleY: [4, 0.9, 0.95, 0.985, 1],\n opacity: [0, 1, 1, 1, 1],\n transition: { ...TRANSITION_ENTER }\n },\n exit: { ...varBounceOutDown.animate, transition: TRANSITION_EXIT }\n};\n\nexport const varBounceInDown = {\n animate: {\n y: [-720, 24, -12, 4, 0],\n scaleY: [4, 0.9, 0.95, 0.985, 1],\n opacity: [0, 1, 1, 1, 1],\n transition: TRANSITION_ENTER\n },\n exit: { ...varBounceOutUp.animate, transition: TRANSITION_EXIT }\n};\n\nexport const varBounceInLeft = {\n animate: {\n x: [-720, 24, -12, 4, 0],\n scaleX: [3, 1, 0.98, 0.995, 1],\n opacity: [0, 1, 1, 1, 1],\n transition: TRANSITION_ENTER\n },\n exit: { ...varBounceOutLeft.animate, transition: TRANSITION_EXIT }\n};\n\nexport const varBounceInRight = {\n animate: {\n x: [720, -24, 12, -4, 0],\n scaleX: [3, 1, 0.98, 0.995, 1],\n opacity: [0, 1, 1, 1, 1],\n transition: TRANSITION_ENTER\n },\n exit: { ...varBounceOutRight.animate, transition: TRANSITION_EXIT }\n};\n","// ----------------------------------------------------------------------\n\nexport const varBounceOut = {\n animate: {\n scale: [0.9, 1.1, 0.3],\n opacity: [1, 1, 0]\n }\n};\n\nexport const varBounceOutUp = {\n animate: {\n y: [-12, 24, -720],\n scaleY: [0.985, 0.9, 3],\n opacity: [1, 1, 0]\n }\n};\n\nexport const varBounceOutDown = {\n animate: {\n y: [12, -24, 720],\n scaleY: [0.985, 0.9, 3],\n opacity: [1, 1, 0]\n }\n};\n\nexport const varBounceOutLeft = {\n animate: {\n x: [0, 24, -720],\n scaleX: [1, 0.9, 2],\n opacity: [1, 1, 0]\n }\n};\n\nexport const varBounceOutRight = {\n animate: {\n x: [0, -24, 720],\n scaleX: [1, 0.9, 2],\n opacity: [1, 1, 0]\n }\n};\n","import { motion } from 'framer-motion';\n// material\nimport { Box, BoxProps } from '@mui/material';\n//\nimport { varWrapEnter } from './variants';\n\n// ----------------------------------------------------------------------\n\ninterface MotionContainerProps extends BoxProps {\n initial?: boolean | string;\n open?: boolean;\n}\n\nexport default function MotionContainer({ open, children, ...other }: MotionContainerProps) {\n return (\n \n {children}\n \n );\n}\n","import { motion } from 'framer-motion';\n// material\nimport { Box, BoxProps } from '@mui/material';\n//\nimport { varSmallClick, varMediumClick } from './variants';\n\n// ----------------------------------------------------------------------\n\ninterface ButtonAnimateProps extends BoxProps {\n mediumClick?: boolean;\n}\n\nexport default function ButtonAnimate({\n mediumClick = false,\n children,\n sx,\n ...other\n}: ButtonAnimateProps) {\n return (\n \n {children}\n \n );\n}\n","import { useContext } from 'react';\nimport { BackendApiContext } from 'contexts/backend/BackendApiContext';\nimport { BackendApiContextType } from 'contexts/backend/BackendApiContext.type';\n\nconst useBackendApi = (): BackendApiContextType => {\n const context = useContext(BackendApiContext);\n if (!context) {\n throw new Error('Backend API context must be used inside BackendApiProvider');\n }\n return context;\n};\n\nexport default useBackendApi;\n","import NProgress from 'nprogress';\nimport { useEffect, useMemo } from 'react';\nimport { motion } from 'framer-motion';\n// material\nimport { alpha, styled, useTheme } from '@mui/material/styles';\nimport { Box, GlobalStyles } from '@mui/material';\n//\nimport Logo from './Logo';\n\n// ----------------------------------------------------------------------\n\nconst RootStyle = styled('div')(({ theme }) => ({\n display: 'flex',\n height: '100%',\n width: '100%',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.palette.background.default\n}));\n\n// ----------------------------------------------------------------------\n\nexport function ProgressBarStyle() {\n const theme = useTheme();\n\n return (\n \n );\n}\n\nfunction ProgressBar() {\n NProgress.configure({\n showSpinner: false\n });\n\n useMemo(() => {\n NProgress.start();\n }, []);\n\n useEffect(() => {\n NProgress.done();\n }, []);\n\n return null;\n}\n\nexport default function LoadingScreen({ ...other }) {\n return (\n <>\n \n\n \n \n \n \n\n `solid 3px ${alpha(theme.palette.primary.dark, 0.24)}`\n }}\n />\n\n `solid 8px ${alpha(theme.palette.primary.dark, 0.24)}`\n }}\n />\n \n \n );\n}\n","export enum BackendApiError {\n // [BackendApiContext/ResponseInterceptor]\n ServerResponseTimout = '[BackendApiContext/AxiosResponseInterceptor] Server response timout',\n RefreshTokenExpired = '[BackendApiContext/AxiosResponseInterceptor] Refresh token has been expired',\n APICallsOverFlow = '[BackendApiContext/AxiosResponseInterceptor] too many api calls at once',\n // [BackendApiContext/getServerStatus]\n ServerHealthSevere = '[BackendApiContext/getServerStatus] Bad server health',\n // [BackendApiContext/login]\n NotEnoughToLogin = '[BackendApiContext/login] Not enough information to log-in',\n ExceedMaxNumOfConcurrentLogin = '[BackendApiContext/login] Exceed max number of concurrent log-in.',\n InvalidEmailOrPasswordToLogin = '[BackendApiContext/login] Invalid e-mail or password to log-in',\n SignUpRequiredToLogin = '[BackendApiContext/login] User must sign-up before log-in',\n TokenPairExpired = '[BackendApiContext/login] Access and refresh tokens are all expired',\n // [BackendApiContext/logout]\n RefreshTokenNotFound = '[BackendApiContext/logout] Refresh token not found in async-storage for logout',\n RefreshTokenAlreadyExpired = '[BackendApiContext/logout] Refresh token is already expired during logout',\n // [BackendApiContext/verifySerialNumber]\n InvalidSerialNumber = '[BackendApiContext/verifySerialNumber] Invalid serial number',\n // [BackendApiContext/verifyEmail]\n InvalidEmail = '[BackendApiContext/verifyEmail] Invalid e-mail',\n // [BackendApiContext/verifyNumber]\n InvalidNumber = '[BackendApiContext/verifyNumber] Invalid subjectNumber',\n // [BackendApiContext/getLastLogin]\n UnregisteredEmailToGetLastLogin = '[BackendApiContext/getLastLogin] Unregistered e-mail to get last login info',\n // [BackendApiContext/registerUser]\n AlreadySignedUpEmailToRegisterUser = '[BackendApiContext/registerUser] Already signed-up e-mail to register user',\n InvalidEmailOrTokenToRegisterUser = '[BackendApiContext/registerUser] Invalid e-mail or token to register user',\n // [BackendApiContext/updateUser]\n InvalidEmailOrTokenToUpdateUser = '[BackendApiContext/updateUser] Invalid e-mail or token to update user',\n EmailIsAlredayTaken = '[BackendApiContext/updateUser] user with this email already exists',\n // [BackendApiContext/getExamResults]\n BadRequestError = '[BackendApiContext/getExamResults] bad Request Error',\n // [BackendApiContext/uploadExamResult]\n ExamDataNotFoundToUpload = '[BackendApiContext/uploadExamResult] Exam data not found to upload',\n // [BackendApiContext/exportSubjectSPPBData]\n ExportSubjectDataBadRequest = '[BackendApiContext/exportSubjectSPPBData] 400 Bad Request',\n ExportSubjectDataUnauthorized = '[BackendApiContext/exportSubjectSPPBData] 401 Unauthorized',\n ExportSubjectDataNotFound = '[BackendApiContext/exportSubjectSPPBData] 404 Not Found'\n}\n","import React, { createContext, useCallback, useEffect, useReducer } from 'react';\nimport { DeviceInfo, LogInParams, Subject, User, AdminType } from '@types';\nimport { ActionMap } from '..';\nimport { AuthState, AuthContextType } from './AuthContext.type';\nimport useBackendApi from 'hooks/useBackendApi';\n\nimport { BackendApiError } from 'contexts/backend/BackendApiError.type';\nimport { StorageKey } from '../backend/BackendApiContext';\n\nenum Types {\n Initial = 'INITIALIZE',\n SetStaff = 'SET_STAFF',\n SetDevices = 'SET_DEVICE_LIST',\n SetUser = 'SET_USER',\n ChangeUserInfo = 'CHANGE_USER_INFO',\n CheckSubject = 'CHECK_SUBJECT'\n}\n\ntype AuthPayload = {\n [Types.Initial]: undefined;\n [Types.SetDevices]: { devices: DeviceInfo[] };\n [Types.SetStaff]: { isStaff: AdminType };\n [Types.SetUser]: { user: User | null };\n [Types.ChangeUserInfo]: { userInfo: Partial };\n [Types.CheckSubject]: { subject: Omit | undefined };\n};\n\ntype AuthActions = ActionMap[keyof ActionMap];\n\nexport const initialState: AuthState = {\n isInitialized: false,\n isAuthenticated: false,\n isStaff: null,\n user: null,\n devices: [],\n subject: undefined\n};\n\nexport const reducer = (state: AuthState, action: AuthActions): AuthState => {\n switch (action.type) {\n case Types.Initial:\n return {\n ...state,\n isInitialized: true\n };\n\n case Types.SetStaff:\n return {\n ...state,\n isStaff: action.payload.isStaff\n };\n\n case Types.SetDevices:\n return {\n ...state,\n devices: action.payload.devices\n };\n\n case Types.SetUser:\n return {\n ...state,\n user: action.payload.user\n ? {\n ...state.user,\n id: action.payload.user.id,\n email: action.payload.user.email,\n organization: action.payload.user.organization,\n date_joined: action.payload.user.date_joined,\n division: action.payload.user.division,\n timezone: action.payload.user.timezone\n }\n : null,\n isInitialized: true,\n isAuthenticated: !!action.payload.user\n };\n\n case Types.ChangeUserInfo:\n return {\n ...state,\n user: state.user\n ? {\n ...state.user,\n email: action.payload.userInfo.email ?? state.user.email,\n organization: action.payload.userInfo.organization ?? state.user.organization\n }\n : state.user\n };\n\n case Types.CheckSubject:\n return {\n ...state,\n subject: action.payload.subject\n };\n\n default:\n return state;\n }\n};\n\nconst AuthContext = createContext(null);\n\nfunction AuthProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const [state, dispatch] = useReducer(reducer, initialState);\n const { login, logout, getUser, getDeviceInfo, registerUser, updateUser, deleteUser } =\n useBackendApi();\n\n // Initializer\n // useEffect(() => {\n // // TODO: Server Health Check\n\n // dispatch({ type: Types.Initial });\n // }, []);\n\n // Methods\n const signIn = useCallback(\n async (params?: LogInParams) => {\n try {\n console.log('[AuthContext/signIn] Trying to log-in...');\n const isActive = await login(params);\n\n // Check if user account is inactive\n if (isActive === false) {\n console.log('[AuthContext/signIn] This account has been de-activated!');\n return isActive;\n }\n\n // If user account is active...\n // Get user information\n const user = await getUser();\n const isStaff = (await localStorage.getItem(StorageKey.isStaff)) as AdminType;\n\n if (isStaff !== null) {\n dispatch({ type: Types.SetStaff, payload: { isStaff } });\n }\n if (user) {\n dispatch({ type: Types.SetUser, payload: { user } });\n // Get device information\n const devices = await getDeviceInfo();\n dispatch({\n type: Types.SetDevices,\n payload: {\n devices: devices\n }\n });\n console.log('[AuthContext/getUserInfo] Retrieved user info:', user);\n console.log(\n '[AuthContext/getDevice] Retrieved device list:',\n devices.map((d) => d.device.serial_number)\n );\n\n // Return account active state\n console.log('[AuthContext/signIn] Sign-in success!');\n } else {\n dispatch({ type: Types.Initial });\n }\n\n return isActive;\n } catch (error) {\n console.log('[AuthContext/signIn] Require user sign-in');\n dispatch({ type: Types.SetUser, payload: { user: null } });\n dispatch({ type: Types.SetDevices, payload: { devices: [] } });\n //\n switch ((error as Error).message) {\n case BackendApiError.SignUpRequiredToLogin:\n case BackendApiError.InvalidEmailOrPasswordToLogin:\n case BackendApiError.ExceedMaxNumOfConcurrentLogin:\n case BackendApiError.NotEnoughToLogin:\n default:\n console.error(error);\n throw error;\n }\n }\n },\n [getDeviceInfo, getUser, login]\n );\n\n const signOut = useCallback(async () => {\n try {\n await logout();\n } catch (error) {\n switch ((error as Error).message) {\n case BackendApiError.RefreshTokenAlreadyExpired:\n case BackendApiError.RefreshTokenNotFound:\n default:\n throw error;\n }\n } finally {\n dispatch({ type: Types.SetUser, payload: { user: null } });\n dispatch({ type: Types.SetDevices, payload: { devices: [] } });\n console.log('[AuthContext/signOut] Log-out');\n }\n }, [logout]);\n\n const signUp = useCallback(\n async (\n temporaryToken: string,\n email: string,\n password: string,\n organization?: string\n ): Promise => {\n try {\n const user = await registerUser(temporaryToken, email, password, organization);\n console.log('[AuthContext/signUp] Sign-up success!');\n return user;\n } catch (error) {\n switch ((error as Error).message) {\n case BackendApiError.UnregisteredEmailToGetLastLogin:\n case BackendApiError.AlreadySignedUpEmailToRegisterUser: // Already signed up email (This error should not happen)\n case BackendApiError.InvalidEmailOrTokenToRegisterUser: // Invalid e-mail and/or temporary token (This error should not happen)\n default:\n throw error;\n }\n }\n },\n [registerUser]\n );\n\n const setUser = (user: User) => {\n dispatch({\n type: Types.SetUser,\n payload: { user }\n });\n };\n\n const changeEmail = useCallback(\n async (email: string) => {\n try {\n await updateUser('email', email);\n // dispatch({\n // type: Types.ChangeUserInfo,\n // payload: { userInfo: { email: email } }\n // });\n // await signOut();\n } catch (error) {\n switch ((error as Error).message) {\n case BackendApiError.InvalidEmailOrTokenToUpdateUser:\n case BackendApiError.EmailIsAlredayTaken:\n default:\n throw error;\n }\n }\n },\n [updateUser]\n );\n\n const changeOrganization = useCallback(\n async (organization: string) => {\n try {\n const result = await updateUser('organization', organization);\n dispatch({\n type: Types.ChangeUserInfo,\n payload: { userInfo: { organization: organization } }\n });\n return result;\n } catch (error) {\n switch ((error as Error).message) {\n case BackendApiError.InvalidEmailOrTokenToUpdateUser:\n default:\n console.error(error);\n throw error;\n }\n }\n },\n [updateUser]\n );\n\n const changePassword = useCallback(\n async (password: string) => {\n try {\n await updateUser('password', password);\n await signOut();\n } catch (error) {\n switch ((error as Error).message) {\n case BackendApiError.InvalidEmailOrTokenToUpdateUser:\n default:\n console.error(error);\n throw error;\n }\n }\n },\n [signOut, updateUser]\n );\n\n const checkSubject = useCallback((subject: Omit | undefined) => {\n dispatch({\n type: Types.CheckSubject,\n payload: { subject: subject }\n });\n }, []);\n\n const deleteUserAccount = useCallback(async () => {\n try {\n await deleteUser();\n await signOut();\n console.log('[AuthContext/deleteUserAccount] user account is deleted');\n } catch (error) {\n switch ((error as Error).message) {\n case BackendApiError.InvalidEmailOrTokenToUpdateUser:\n default:\n console.error(error);\n throw error;\n }\n }\n }, [deleteUser, signOut]);\n\n // Auth state checker\n useEffect(() => {\n signIn().catch((error) => {\n console.log('[AuthContext/AuthStateChecker] Failed to sign-in:', error);\n\n switch ((error as Error).message) {\n case BackendApiError.ExceedMaxNumOfConcurrentLogin:\n case BackendApiError.InvalidEmailOrPasswordToLogin:\n break;\n\n case BackendApiError.SignUpRequiredToLogin:\n case BackendApiError.NotEnoughToLogin:\n case BackendApiError.TokenPairExpired:\n // dispatch({ type: Types.SetUser, payload: { user: null } });\n // dispatch({ type: Types.SetDevices, payload: { devices: [] } });\n break;\n\n default:\n break;\n }\n });\n }, [signIn]);\n\n return (\n \n {children}\n \n );\n}\n\nexport { AuthContext, AuthProvider };\n","// material\nimport { Box, BoxProps } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\ninterface Props {\n sx?: BoxProps;\n width?: string;\n height?: string;\n}\n\nexport default function Logo({ sx, width, height }: Props) {\n return (\n \n \n \n );\n}\n","import { useRef, useEffect } from 'react';\n\n// ----------------------------------------------------------------------\n\nexport default function useIsMountedRef() {\n const isMounted = useRef(true);\n\n useEffect(\n () => () => {\n isMounted.current = false;\n },\n []\n );\n\n return isMounted;\n}\n","// material\nimport { alpha, styled } from '@mui/material/styles';\nimport { Popover, PopoverProps } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nconst ArrowStyle = styled('span')(({ theme }) => ({\n [theme.breakpoints.up('sm')]: {\n top: -7,\n zIndex: 1,\n width: 12,\n right: 20,\n height: 12,\n content: \"''\",\n position: 'absolute',\n borderRadius: '0 0 4px 0',\n transform: 'rotate(-135deg)',\n background: theme.palette.background.paper,\n borderRight: `solid 1px ${alpha(theme.palette.grey[500], 0.12)}`,\n borderBottom: `solid 1px ${alpha(theme.palette.grey[500], 0.12)}`\n }\n}));\n\n// ----------------------------------------------------------------------\n\nexport default function MenuPopover({ children, sx, ...other }: PopoverProps) {\n return (\n theme.customShadows.z20,\n border: (theme) => `solid 1px ${theme.palette.grey[500_8]}`,\n width: 200,\n ...sx\n }\n }}\n {...other}\n >\n \n\n {children}\n \n );\n}\n","import breakpoints from 'theme/breakpoints';\n\nexport default function uponMediaSize(bpType: 'xs' | 'sm' | 'md' | 'lg' | 'xl') {\n const mediaValue = [breakpoints.values].map((bp) => `@media (min-width: ${bp[bpType]}px)`);\n return mediaValue[0];\n}\n","import styled from '@emotion/styled';\nimport { Button, styled as MuiStyled, Typography } from '@mui/material';\nimport uponMediaSize from 'theme/mediaQuery';\n\n/**\n * @Heading\n font-size: 32px;\n font-weight: 700;\n line-height: 48px;\n color: #212b36;\n */\nexport const Heading = styled('p')<{ fontWeight?: string | number }>`\n font-size: 24px;\n font-weight: ${(props) => props.fontWeight || 700};\n line-height: 36px;\n color: ${(props) => props.color || '#212b36'};\n ${uponMediaSize('sm')} {\n font-size: 32px;\n line-height: 48px;\n }\n`;\n\n/**\n * @ContentHead\n font-size: 24px;\n font-weight: 700;\n line-height: 36px;\n color: #212b36;\n */\nexport const ContentHead = styled('p')<{ fontWeight?: string | number }>`\n font-size: 24px;\n font-weight: ${(props) => props.fontWeight || 700};\n line-height: 36px;\n color: ${(props) => props.color || '#212b36'};\n`;\n\n/**\n * @Title\n font-size: 24px;\n font-weight: 700;\n line-height: 36px;\n color: #212b36;\n uponMediaSize(sm) = `font-size: 20px`\n */\nexport const Title = styled('p')<{ fontWeight?: string | number }>`\n font-size: 20px;\n font-weight: ${(props) => props.fontWeight || 700};\n line-height: 36px;\n color: ${(props) => props.color || '#212b36'};\n ${uponMediaSize('sm')} {\n font-size: 24px;\n }\n`;\n\n/**\n * @ModalTitle\n font-size: 18px;\n font-weight: 700;\n line-height: 28px;\n color: #212b36;\n */\nexport const ModalTitle = styled('p')<{ fontWeight?: string | number }>`\n font-size: 18px;\n font-weight: ${(props) => props.fontWeight || 700};\n line-height: 28px;\n color: ${(props) => props.color || '#212b36'};\n`;\n\n/**\n * @CardTitle\n font-size: 18px -> {sm: 16px};\n font-weight: 700;\n line-height: 28px;\n color: #212b36;\n */\nexport const CardTitle = MuiStyled(Typography)(({ theme }) => ({\n fontSize: '18px',\n lineHeight: '28px',\n color: '#212b36',\n fontWeight: 700,\n [theme.breakpoints.down('sm')]: {\n fontSize: '16px'\n }\n}));\n\n/**\n * @Subtitle\n font-weight: 700;\n font-size: 16px;\n line-height: 24px;\n color: #212b36;\n uponMediaSize(sm) = `font-size: 20px`\n */\nexport const Subtitle = styled('p')<{ fontWeight?: string | number }>`\n font-weight: 700;\n font-size: 16px;\n line-height: 24px;\n color: ${(props) => props.color || '#212b36'};\n`;\n\n/**\n * @Subtitle1\n font-weight: 400;\n font-size: 16px;\n line-height: 24px;\n color: #212b36;\n uponMediaSize(sm) = `font-size: 20px`\n */\nexport const Subtitle1 = styled('p')<{ fontWeight?: string | number }>`\n font-weight: ${(props) => props.fontWeight || 400};\n font-size: 16px;\n line-height: 24px;\n color: ${(props) => props.color || '#212b36'};\n`;\n\n/**\n * @BodyText\n font-size: 16px;\n font-weight: props.fontWeight || 400;\n line-height: 24px;\n color: props.fontColor || #637381;\n white-space: pre-wrap;\n */\nexport const BodyText = styled('span')<{ fontWeight?: string | number; textAlign?: string }>`\n font-size: 14px;\n line-height: 22px;\n font-weight: ${(props) => props.fontWeight || 400};\n color: ${(props) => props.color || '#637381'};\n white-space: pre-wrap;\n text-align: ${(props) => props.textAlign || 'left'};\n ${uponMediaSize('sm')} {\n font-size: 16px;\n line-height: 24px;\n }\n`;\n\n/**\n * @Body2Text\n font-size: 16px;\n font-weight: props.fontWeight || 400;\n line-height: 24px;\n color: props.fontColor || #637381;\n white-space: pre-wrap;\n */\nexport const Body2Text = styled('span')<{ fontWeight?: string | number; textAlign?: string }>`\n font-size: 14px;\n line-height: 22px;\n font-weight: ${(props) => props.fontWeight || 400};\n color: ${(props) => props.color || '#637381'};\n white-space: pre-wrap;\n text-align: ${(props) => props.textAlign || 'left'};\n`;\n\n/**\n * @SubBodyText\n font-weight: 400;\n font-size: 14px;\n line-height: 22px;\n color: #212b36;\n uponMediaSize(sm) = `font-size: 20px`\n */\nexport const SubBodyText = styled('span')<{ fontWeight?: string | number }>`\n display: flex;\n font-weight: ${(props) => props.fontWeight || 400};\n font-size: 14px;\n line-height: 22px;\n color: ${(props) => props.color || '#212b36'};\n white-space: pre-wrap;\n`;\n\nexport const SubBodyText2 = styled('span')<{ fontWeight?: string | number }>`\n display: flex;\n font-weight: ${(props) => props.fontWeight || 400};\n font-size: 14px;\n line-height: 22px;\n color: ${(props) => props.color || '#212b36'};\n white-space: nowrap;\n`;\n\n/**\n * @LinkText\n font-size: 14px;\n font-weight: props.fontWeight || 700;\n line-height: 22px;\n color: props.fontColor || #5486E8;\n */\nexport const LinkText = styled(Button)<{ fontWeight?: string | number }>`\n font-size: 14px;\n font-weight: ${(props) => props.fontWeight || 700};\n line-height: 22px;\n color: ${(props) => props.color || '#5486E8'};\n text-transform: none;\n padding: 0;\n &:hover {\n color: #3a76e9;\n background-color: transparent;\n }\n`;\n\n/**\n * @LabelText\n font-size: 13px;\n font-weight: props.fontWeight || 500;\n line-height: 20px;\n color: props.fontColor || #637381;\n */\nexport const LabelText = styled('p')`\n font-weight: 500;\n font-size: 13px;\n line-height: 20px;\n color: #637381;\n`;\n\n/**\n * @Caption\n font-size: 12px;\n font-weight: props.fontWeight || 400;\n line-height: 18px;\n color: props.fontColor || #637381;\n */\nexport const Caption = styled('p')<{ fontWeight?: string | number }>`\n font-size: 12px;\n font-weight: ${(props) => props.fontWeight || 400};\n line-height: 18px;\n color: ${(props) => props.color || '#637381'};\n`;\n\n/**\n * @ErrorText\n font-size: 12px;\n font-weight: props.fontWeight || 400;\n line-height: 18px;\n color: props.fontColor || #EB5757;\n */\nexport const ErrorText = styled('p')<{ fontWeight?: string | number }>`\n font-size: 12px;\n font-weight: ${(props) => props.fontWeight || 400};\n line-height: 18px;\n color: ${(props) => props.color || '#EB5757'};\n`;\n","import { useState, useEffect } from 'react';\n\nexport function useWindowSize() {\n // Initialize state with undefined width/height so server and client renders match\n // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/\n const [windowSize, setWindowSize] = useState<{\n width: number | undefined;\n height: number | undefined;\n }>({\n width: undefined,\n height: undefined\n });\n\n useEffect(() => {\n // Handler to call on window resize\n function handleResize() {\n // Set window width/height to state\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight\n });\n }\n // Add event listener\n window.addEventListener('resize', handleResize);\n // Call handler right away so state gets updated with initial window size\n handleResize();\n // Remove event listener on cleanup\n return () => window.removeEventListener('resize', handleResize);\n }, []); // Empty array ensures that effect is only run on mount\n return windowSize;\n}\n","import { Button, ButtonProps, styled } from '@mui/material';\n\ninterface BaseButtonAttrs {\n buttonsize?: 'sm' | 'md' | 'lg';\n}\ntype BaseButtonProps = BaseButtonAttrs & Omit;\n\nconst BaseButtonStyle = styled(Button)<{ buttonsize?: BaseButtonAttrs['buttonsize'] }>(\n ({ theme, variant, buttonsize }) =>\n variant === 'contained'\n ? {\n minWidth: buttonsize === 'sm' ? '128px' : undefined,\n height: buttonsize === 'sm' ? '36px' : '48px',\n fontSize: buttonsize === 'sm' ? '14px' : '15px',\n fontWeight: 700,\n padding: '6px 14px',\n backgroundColor: '#5486E8',\n boxShadow: 'none',\n textTransform: 'none',\n '&:hover': {\n backgroundColor: '#3A76E9 !important',\n boxShadow: 'none !important'\n },\n '&:disabled': {\n backgroundColor: '#CBCBCB',\n color: 'white'\n }\n }\n : variant === 'outlined'\n ? {\n minWidth: buttonsize === 'sm' ? '128px' : undefined,\n height: buttonsize === 'sm' ? '36px' : '48px',\n fontSize: buttonsize === 'sm' ? '14px' : '14px',\n fontWeight: 700,\n padding: '6px 14px',\n border: '1px solid #5486E8',\n backgroundColor: 'white',\n boxShadow: 'none',\n textTransform: 'none',\n '&:hover': {\n backgroundColor: '#EAF1FF !important',\n boxShadow: 'none !important'\n },\n '&:disabled': {\n border: '1px solid #E5E5E5',\n color: theme.palette.font.gray2\n }\n }\n : undefined\n);\n\nconst BaseButton = (props: BaseButtonProps) => {\n return (\n \n );\n};\n\nexport default BaseButton;\n","import SimpleBarReact, { Props } from 'simplebar-react';\n// material\nimport { alpha, styled } from '@mui/material/styles';\nimport { Box, BoxProps } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nconst RootStyle = styled('div')(({ theme }) => ({\n flexGrow: 1,\n height: '100%',\n overflow: 'hidden'\n}));\n\nconst SimpleBarStyle = styled(SimpleBarReact)(({ theme }) => ({\n maxHeight: '100%',\n '& .simplebar-scrollbar': {\n '&:before': {\n backgroundColor: alpha(theme.palette.grey[600], 0.48)\n },\n '&.simplebar-visible:before': {\n opacity: 1\n }\n },\n '& .simplebar-track.simplebar-vertical': {\n width: 10\n },\n '& .simplebar-track.simplebar-horizontal .simplebar-scrollbar': {\n height: 6\n },\n '& .simplebar-mask': {\n zIndex: 'inherit'\n }\n}));\n\n// ----------------------------------------------------------------------\n\nexport default function Scrollbar({ children, sx, ...other }: BoxProps & Props) {\n const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n\n if (isMobile) {\n return (\n \n {children}\n \n );\n }\n\n return (\n \n \n {children}\n \n \n );\n}\n","export const firebaseConfig = {\n apiKey: process.env.REACT_APP_FIREBASE_API_KEY,\n authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,\n databaseURL: process.env.REACT_APP_FIREBASE_DATABASE_URL,\n projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,\n storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,\n messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,\n appId: process.env.REACT_APP_FIREBASE_APPID,\n measurementId: process.env.REACT_APP_FIREBASE_MEASUREMENT_ID\n};\n\nexport const cognitoConfig = {\n userPoolId: process.env.REACT_APP_AWS_COGNITO_USER_POOL_ID,\n clientId: process.env.REACT_APP_AWS_COGNITO_CLIENT_ID\n};\n\nexport const auth0Config = {\n clientId: process.env.REACT_APP_AUTH0_CLIENT_ID,\n domain: process.env.REACT_APP_AUTH0_DOMAIN\n};\n\nexport const mapConfig = process.env.REACT_APP_MAP_MAPBOX;\n\nexport const googleAnalyticsConfig = process.env.REACT_APP_GA_MEASUREMENT_ID;\n","import { googleAnalyticsConfig } from '../config';\n\n// ----------------------------------------------------------------------\n\nconst setup = (\n targetId: string,\n config?: Gtag.CustomParams | Gtag.ControlParams | Gtag.EventParams\n) => {\n if (process.env.NODE_ENV !== 'production') {\n return;\n }\n if (!window.gtag) {\n return;\n }\n window.gtag('config', targetId, config);\n};\n\nconst setupEvent = (\n targetId: string,\n config?: Gtag.CustomParams | Gtag.ControlParams | Gtag.EventParams\n) => {\n if (process.env.NODE_ENV !== 'production') {\n return;\n }\n if (!window.gtag) {\n return;\n }\n window.gtag('event', targetId, config);\n};\n\nconst track = {\n pageview: (props?: Gtag.CustomParams | Gtag.ControlParams | Gtag.EventParams) => {\n setup(googleAnalyticsConfig || '', props);\n },\n event: (type: string, props?: Gtag.CustomParams | Gtag.ControlParams | Gtag.EventParams) => {\n setupEvent(type, props);\n }\n};\n\nexport default track;\n","import { useLocation } from 'react-router-dom';\nimport { forwardRef, useEffect, useCallback, ReactNode } from 'react';\n// material\nimport { Box, BoxProps } from '@mui/material';\n// utils\nimport track from 'utils/analytics';\n\n// ----------------------------------------------------------------------\n\ninterface PageProps extends BoxProps {\n children: ReactNode;\n title?: string;\n}\n\nconst Page = forwardRef(({ children, title = '', ...other }, ref) => {\n const { pathname } = useLocation();\n\n const sendPageViewEvent = useCallback(() => {\n track.pageview({\n page_path: pathname\n });\n }, [pathname]);\n\n useEffect(() => {\n sendPageViewEvent();\n }, [sendPageViewEvent]);\n\n return (\n \n {title}\n\n {children}\n \n );\n});\n\nexport default Page;\n","import { Link as RouterLink, Outlet } from 'react-router-dom';\n// material\nimport { styled } from '@mui/material/styles';\nimport LanguagePopover from './dashboard/LanguagePopover';\nimport { Stack } from '@mui/material';\n\nconst Header = styled('header')(({ theme }) => ({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n width: '100%',\n padding: '16px',\n [theme.breakpoints.up('sm')]: {\n padding: '40px'\n }\n}));\n\nconst ImgBox = styled('div')(({ theme }) => ({\n width: '32px',\n height: '32px',\n [theme.breakpoints.up('sm')]: {\n width: '40px',\n height: '40px'\n }\n}));\n\nexport default function AuthHeader() {\n return (\n
\n \n \n \n \"full-name-logo\"\n \n \n \n \n \n
\n );\n}\n","/**\n * [Utility function] Set delay\n * @param {Number} ms Target delay time in millisecond\n * @returns {Promise}\n */\n\nimport validator from 'validator';\n\nexport const delay = (ms: number): Promise =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\nexport const authCodeRandomGenerator = (): string =>\n Math.floor(100000 + Math.random() * 900000).toString();\n\n// 검증 코드 추가\nexport const isValidDateFormat = (date: string) => {\n // 'YYYY-MM-DD' 형식의 날짜가 올바른지 검증\n return validator.isDate(date, { format: 'YYYY-MM-DD', strictMode: true });\n};\n\nexport const calculateAge = (birthDay: Date) => {\n /**\n * 산출방법\n *\n * (1) 기준일이 속한 연도에서 출생일이 속한 연도를 뺀다.\n *\n * (2a) 기준일이 생일 전이라면 1세를 뺀다.\n *\n * (2b) 기준일이 생일 이후라면 그 결과를 그대로 쓴다.\n *\n */\n const birthYear = birthDay.getFullYear();\n const birthMonth = birthDay.getMonth();\n const birthDate = birthDay.getDate();\n\n const todayYear = new Date().getFullYear();\n const todayMonth = new Date().getMonth();\n const todayDate = new Date().getDate();\n\n // 산출방법: 1\n let age = todayYear - birthYear;\n const monthDiff = todayMonth - birthMonth;\n\n // 산출방법: 2a\n if (monthDiff < 0 || (monthDiff === 0 && todayDate < birthDate)) {\n return age - 1;\n }\n\n // 산출방법: 2b\n return age;\n};\n","import styled from '@emotion/styled';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport WarningRoundedIcon from '@mui/icons-material/Warning';\n\n/**\n * @CustomErrorIcon\n font-size: 16px;\n line-height: 18px;\n vertical-align: middle;\n margin-bottom: 2px;\n */\nexport const CustomErrorIcon = styled(ErrorIcon)`\n font-size: 16px;\n line-height: 18px;\n vertical-align: middle;\n margin-bottom: 2px;\n`;\n\n/**\n * @CustomWarningIcon\n font-size: 16px;\n line-height: 18px;\n vertical-align: middle;\n margin-bottom: 2px;\n */\nexport const CustomWarningIcon = styled(WarningRoundedIcon)`\n font-size: 16px;\n line-height: 18px;\n vertical-align: middle;\n margin-bottom: 2px;\n`;\n\n/**\n * @LargeIcon\n width: 20px;\n height: 20px;\n */\nexport const LargeIcon = styled('img')`\n width: 44px;\n height: 44px;\n`;\n\n/**\n * @MediumIcon\n width: 20px;\n height: 20px;\n */\nexport const MediumIcon = styled('img')`\n width: 22px;\n height: 22px;\n`;\n\n/**\n * @SmallIcon\n width: 20px;\n height: 20px;\n */\nexport const SmallIcon = styled('img')`\n width: 20px;\n height: 20px;\n`;\n\n/**\n * @XSmallIcon\n width: 18px;\n height: 18px;\n */\nexport const XSmallIcon = styled('img')`\n width: 18px;\n height: 18px;\n`;\n","export const PDF_STORAGE_KEY = {\n fileName: '@PDF_FILE_NAME',\n fileFormat: '@PDF_FILE_FORMAT',\n userInput: '@PDF_USER_INPUT'\n} as const;\nexport type FileNameId = 'userInput' | 'number' | 'name' | 'examDate' | 'organization' | 'examName';\nexport type FileNameTitle =\n | 'UserInput'\n | 'SubjectNumber'\n | 'Name'\n | 'ExamCompleted'\n | 'Organization'\n | 'ExamTypeShort';\nexport type FileNameSample =\n | 'UserInputSample'\n | 'SubjectNumberSample'\n | 'NameSample'\n | 'ExamCompletedSample'\n | 'OrganizationSample'\n | 'ExamNameSample';\nexport type FileNameFormatType = {\n id: FileNameId;\n title: FileNameTitle;\n};\n","// ----------------------------------------------------------------------\n\nfunction path(root: string, sublink: string) {\n return `${root}${sublink}`;\n}\n\nconst ROOTS_AUTH = '/auth';\nconst ROOTS_DASHBOARD = '/dashboard';\nexport const GUIDELINE = '/guidelines';\n\n// ----------------------------------------------------------------------\n\nexport const PATH_AUTH = {\n root: ROOTS_AUTH,\n login: '/',\n signUp: path(ROOTS_AUTH, '/sign-up'),\n findEmail: path(ROOTS_AUTH, '/find-email'),\n emailAuth: path(ROOTS_AUTH, '/email-auth'),\n resetPassword: path(ROOTS_AUTH, '/reset-password'),\n inactiveUser: path(ROOTS_AUTH, '/inactive-user'),\n privacyPolicy: path(ROOTS_AUTH, '/privacy-policy'),\n termsOfUse: path(ROOTS_AUTH, '/terms-of-use')\n};\n\nexport const PATH_PAGE = {\n // comingSoon: '/coming-soon',\n maintenance: '/maintenance',\n page401: '/401',\n page404: '/404',\n page500: '/500'\n};\n\nexport const PATH_DASHBOARD = {\n root: ROOTS_DASHBOARD,\n exams: {\n overview: path(ROOTS_DASHBOARD, '/overview'),\n SPPB: path(ROOTS_DASHBOARD, '/sppb-exams'),\n GaitSpeed: path(ROOTS_DASHBOARD, '/gaitspeed-exams'),\n SitToStand: path(ROOTS_DASHBOARD, '/sittostand-exams'),\n StaticBalance: path(ROOTS_DASHBOARD, '/staticbalance-exams'),\n AverageGaitSpeed: path(ROOTS_DASHBOARD, '/averagegaitspeed-exams'),\n OneLegStanding: path(ROOTS_DASHBOARD, '/onelegstanding-exams'),\n TUG: path(ROOTS_DASHBOARD, '/tug-exams'),\n HandgripStrength: path(ROOTS_DASHBOARD, '/handgripstrength-exams')\n },\n management: {\n userAccountSetting: path(ROOTS_DASHBOARD, '/useraccount-setting'),\n emailChange: path(ROOTS_DASHBOARD, '/email-change'),\n passwordChange: path(ROOTS_DASHBOARD, '/password-change'),\n subjectManagement: path(ROOTS_DASHBOARD, '/subject-management'),\n customerService: path(ROOTS_DASHBOARD, `/customer-service`),\n // Admin Only\n adminDashboard: path(ROOTS_DASHBOARD, '/admin'),\n reportDashboard: path(ROOTS_DASHBOARD, '/admin/report'),\n qualityControl: path(ROOTS_DASHBOARD, '/admin/quality-control'),\n licenseManagement: path(ROOTS_DASHBOARD, '/admin/license-management')\n }\n};\n","import React, { createContext, useCallback, useEffect, useReducer } from 'react';\n\nimport { ActionMap } from '..';\nimport { DeepLinkContextType, DeepLinkState } from './DeepLinkContext.type';\nimport { authCodeRandomGenerator } from 'utils/common.utils';\nimport useBackendApi from 'hooks/useBackendApi';\n\nconst BASE_AUTH_URL = 'localhost:3000/adtf'; //FIXME: 추후 변경 필요\nenum Types {\n Set = 'SET'\n}\n\ntype DeepLinkPayload = {\n [Types.Set]: {\n linkedEmail?: string;\n linkedCode?: string;\n temporaryToken?: string;\n };\n};\n\ntype DeepLinkActions = ActionMap[keyof ActionMap];\n\nconst initialState: DeepLinkState = {\n linkedEmail: undefined,\n linkedCode: undefined,\n temporaryToken: undefined\n};\n\nconst reducer = (state: DeepLinkState, action: DeepLinkActions): DeepLinkState => {\n switch (action.type) {\n case Types.Set:\n return {\n ...state,\n linkedEmail: action.payload.linkedEmail,\n linkedCode: action.payload.linkedCode,\n temporaryToken: action.payload.temporaryToken\n };\n\n default:\n return state;\n }\n};\n\nconst DeepLinkContext = createContext(null);\n\nfunction DeepLinkProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const [state, dispatch] = useReducer(reducer, initialState);\n const { sendAuthLink } = useBackendApi();\n\n useEffect(() => {\n console.log('[DeepLink] EmailAuthCode =>', state.linkedCode);\n }, [state.linkedCode]);\n\n const verifyLink = useCallback(\n (code?: string) => {\n if (code && state.linkedCode) {\n return code === state.linkedCode;\n } else {\n return undefined;\n }\n },\n [state.linkedCode]\n );\n\n const sendDeepLink = useCallback(\n async (email: string, screenName: string) => {\n if (BASE_AUTH_URL) {\n const code = authCodeRandomGenerator();\n const response = await sendAuthLink(email, `${BASE_AUTH_URL}${screenName}/${code}`);\n\n dispatch({\n type: Types.Set,\n payload: {\n linkedEmail: email,\n linkedCode: code,\n temporaryToken: response.token\n }\n });\n } else {\n throw new Error('[DeepLinkContext/sendDeepLink] Unsupported platform!');\n }\n },\n [sendAuthLink]\n );\n\n return (\n \n {children}\n \n );\n}\n\nexport { DeepLinkContext, DeepLinkProvider };\n","import { ApexOptions } from 'apexcharts';\n// material\nimport { useTheme } from '@mui/material/styles';\nimport { GlobalStyles } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nexport function BaseOptionChartStyle() {\n return (\n \n );\n}\n\nexport default function BaseOptionChart(): ApexOptions {\n const theme = useTheme();\n\n return {\n // Colors\n colors: [\n theme.palette.primary.main,\n // theme.palette.chart.yellow[0],\n theme.palette.chart.blue[0],\n theme.palette.chart.violet[0],\n theme.palette.chart.green[0],\n theme.palette.chart.red[0]\n ],\n\n // Chart\n chart: {\n type: 'bar',\n toolbar: { show: false },\n zoom: { enabled: false },\n animations: { enabled: false },\n foreColor: theme.palette.text.disabled,\n fontFamily: theme.typography.fontFamily\n },\n\n // States\n states: {\n normal: { filter: { type: 'none', value: 0 } },\n hover: { filter: { type: 'lighten', value: 0 } },\n active: { filter: { type: 'darken', value: 1 } }\n },\n\n // Fill\n fill: {\n opacity: 1,\n gradient: {\n type: 'vertical',\n shadeIntensity: 0,\n opacityFrom: 0.4,\n opacityTo: 0,\n stops: [0, 100]\n }\n },\n\n // Stroke\n stroke: {\n width: 2,\n curve: 'smooth',\n lineCap: 'round'\n },\n\n // Xaxis\n xaxis: {\n type: 'category',\n axisBorder: { show: false },\n axisTicks: { show: false }\n },\n\n // Legend\n legend: {\n show: true,\n showForSingleSeries: true,\n showForNullSeries: true,\n showForZeroSeries: true,\n fontFamily: 'Noto Sans KR, Noto Sans, Nanum Square',\n fontSize: String(13),\n position: 'top',\n horizontalAlign: 'right',\n markers: { radius: 12 },\n itemMargin: { horizontal: 12 },\n labels: { colors: theme.palette.text.primary }\n },\n\n plotOptions: { bar: { columnWidth: '10%', borderRadius: 4 } },\n\n // Datalabels\n dataLabels: { enabled: false },\n\n // Markers\n markers: {\n size: 0,\n strokeColors: theme.palette.background.paper\n },\n\n // Tooltip\n tooltip: { enabled: false, x: { show: false } },\n\n noData: { text: 'No Data', offsetY: -22 }\n };\n}\n","import { motion, AnimatePresence } from 'framer-motion';\n// material\nimport { Dialog, Box, Paper, DialogProps } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\ninterface DialogAnimateProps extends DialogProps {\n animate?: object;\n onClose?: VoidFunction;\n}\n\nexport default function DialogAnimate({\n open = false,\n animate,\n onClose,\n children,\n ...other\n}: DialogAnimateProps) {\n return (\n \n {open && (\n (\n \n \n {props.children}\n \n )}\n {...other}\n >\n {children}\n \n )}\n \n );\n}\n","import { Box, Stack } from '@mui/material';\nimport { styled } from '@mui/material/styles';\n\nexport const AuthContent = styled(Box)(() => ({\n margin: '0 auto',\n display: 'flex',\n width: '100%',\n minHeight: '100vh',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'flex-start'\n}));\n\nexport const Header = styled('header')(({ theme }) => ({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n\n width: '100%',\n padding: '16px',\n [theme.breakpoints.up('sm')]: {\n padding: '40px'\n }\n}));\n\nexport const SmallLogo = styled('img')(({ theme }) => ({\n width: '32px',\n height: '32px',\n [theme.breakpoints.up('sm')]: {\n width: '40px',\n height: '40px'\n }\n}));\n\nexport const LogoStack = styled(Stack)(() => ({\n width: '100%',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: '60px'\n}));\n\nexport const LogoImg = styled('img')(({ theme }) => ({\n width: '203.67px',\n height: '32px',\n [theme.breakpoints.up('sm')]: {\n width: '305.5px',\n height: '48px'\n }\n}));\n\nexport const TextFieldStack = styled(Stack)(({ theme }) => ({\n marginTop: '20px',\n '.MuiTextField-root:first-of-type': {\n paddingBottom: '16px',\n [theme.breakpoints.up('sm')]: {\n paddingBottom: '24px'\n }\n }\n}));\n\nexport const AuthRouteStack = styled(Stack)(({ theme }) => ({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n height: '40px',\n margin: '16px 0px',\n a: {\n padding: '6px 8px',\n fontSize: '14px',\n fontWeight: 700,\n lineHeight: '22px',\n color: '#637381',\n '&:hover': {\n borderRadius: '8px',\n backgroundColor: 'rgba(145, 158, 171, 0.08)'\n }\n },\n '.AuthRoute-Divider': {\n margin: '0px 8px',\n width: '1px',\n height: '10px',\n borderRight: '1px solid rgba(145, 158, 171, 0.32)',\n [theme.breakpoints.up('sm')]: {\n margin: '0px 24px'\n }\n }\n}));\n\nexport const SubRouteStack = styled(Stack)(({ theme }) => ({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-evenly',\n marginTop: '16px',\n '& a': {\n fontSize: '14px',\n color: theme.palette.font.gray4\n }\n}));\n","import * as Yup from 'yup';\nimport { useState } from 'react';\n// routes\nimport { PATH_AUTH, PATH_DASHBOARD } from 'routes/paths';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { useFormik, Form, FormikProvider } from 'formik';\nimport { Icon } from '@iconify/react';\nimport eyeFill from '@iconify/icons-eva/eye-fill';\nimport eyeOffFill from '@iconify/icons-eva/eye-off-fill';\nimport { Stack, Alert, TextField, IconButton, InputAdornment, Box } from '@mui/material';\nimport { AuthRouteStack, SubRouteStack, TextFieldStack } from './styles';\nimport useAuth from 'hooks/useAuth';\nimport useIsMountedRef from 'hooks/useIsMountedRef';\nimport { LogInParams } from '@types';\nimport { BackendApiError } from 'contexts/backend/BackendApiError.type';\nimport BaseButton from 'components/BaseButton';\nimport useLocales from 'hooks/useLocales';\n\ninterface InitialValues extends LogInParams {\n afterSubmit?: string;\n}\n\nexport default function LoginForm() {\n const { translate } = useLocales();\n const navigate = useNavigate();\n\n const { signIn } = useAuth();\n const isMountedRef = useIsMountedRef();\n\n const [showPassword, setShowPassword] = useState(false);\n\n const LoginSchema = Yup.object().shape({\n email: Yup.string()\n .email(translate('EmailIsNotVaild'))\n .required(translate('LoginEmailLengthValidation')),\n password: Yup.string().required(translate('LoginPasswordLengthValidation'))\n });\n\n const formik = useFormik({\n initialValues: {\n email: '',\n password: ''\n },\n validationSchema: LoginSchema,\n onSubmit: async (values, { setErrors, setSubmitting, resetForm }) => {\n try {\n const isActive = await signIn(values);\n\n if (isActive === undefined) {\n throw new Error(translate('ErrorLoginFailedAndRequestToRetry'));\n } else if (isActive === false) {\n navigate(PATH_AUTH.inactiveUser);\n } else {\n navigate(PATH_DASHBOARD.exams.overview);\n }\n\n if (isMountedRef.current) {\n setSubmitting(false);\n }\n } catch (error) {\n if (isMountedRef.current) {\n setSubmitting(false);\n switch ((error as Error).message) {\n case BackendApiError.SignUpRequiredToLogin:\n setErrors({ afterSubmit: translate('ErrorLoginFailedRequestForSignUp') });\n break;\n case BackendApiError.InvalidEmailOrPasswordToLogin:\n setErrors({ afterSubmit: translate('ErrorLoginFailedWrongEmailOrPassword') });\n break;\n case BackendApiError.ExceedMaxNumOfConcurrentLogin:\n setErrors({ afterSubmit: translate('ErrorLoginMaxNumOfConcurrentLogin') });\n break;\n case BackendApiError.NotEnoughToLogin:\n setErrors({ afterSubmit: translate('ErrorLoginFailedAndRequestToRetry') });\n break;\n\n // Unknown error\n default:\n console.error(\n `[LoginForm/formik OnSubmit] Unknown error: ${(error as Error).message}`\n );\n break;\n }\n }\n }\n }\n });\n\n const { errors, touched, handleSubmit, getFieldProps } = formik;\n\n const handleShowPassword = () => {\n setShowPassword((show) => !show);\n };\n\n return (\n \n
\n {errors.afterSubmit && {errors.afterSubmit}}\n \n \n \n \n \n \n \n )\n }}\n error={Boolean(touched.password && errors.password)}\n helperText={touched.password && errors.password}\n />\n \n \n \n {translate('FindEmail')}\n \n {translate('FindPassword')}\n \n {translate('SignUp')}\n \n \n {translate('Login')}\n \n {translate('TermsOfUse')}\n {translate('PrivacyPolicy')}\n \n
\n
\n );\n}\n","import React from 'react';\nimport Page from 'components/Page';\nimport { AuthContent, Header, SmallLogo, LogoImg, LogoStack } from './styles';\nimport { Container } from '@mui/material';\nimport LoginForm from './LoginForm';\nimport LanguagePopover from 'layouts/dashboard/LanguagePopover';\n\nexport default function Login() {\n return (\n \n
\n \n \n
\n \n \n \n \n \n \n \n \n
\n );\n}\n","import i18n from 'i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { initReactI18next } from 'react-i18next';\n//\nimport enLocales from './en.json';\nimport koLocales from './ko.json';\nimport jaLocales from './ja.json';\n\n// ----------------------------------------------------------------------\n\ndeclare module 'react-i18next' {\n // and extend them!\n interface CustomTypeOptions {\n // custom namespace type if you changed it\n defaultlang: 'ko';\n // custom resources type\n resources: {\n ko: typeof koLocales;\n en: typeof enLocales;\n ja: typeof jaLocales;\n };\n }\n}\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources: {\n ko: { translations: koLocales },\n en: { translations: enLocales },\n ja: { translations: jaLocales }\n },\n lng: localStorage.getItem('i18nextLng') || window.navigator.language.substring(0, 2) || 'ko',\n fallbackLng: 'ko',\n debug: false,\n ns: ['translations'],\n defaultNS: 'translations',\n interpolation: {\n escapeValue: false\n }\n });\n\nexport default i18n;\n","import { useTranslation } from 'react-i18next';\n// material\nimport { enUS, jaJP, koKR } from '@mui/material/locale';\n\n// ----------------------------------------------------------------------\n\nconst LANGS = [\n {\n label: 'Korean',\n value: 'ko',\n systemValue: koKR,\n icon: '/static/icons/ic_flag_kr.svg'\n },\n {\n label: 'English',\n value: 'en',\n systemValue: enUS,\n icon: '/static/icons/ic_flag_en.svg'\n },\n {\n label: 'Japanese',\n value: 'ja',\n systemValue: jaJP,\n icon: '/static/icons/ic_flag_en.svg'\n }\n];\n\nexport default function useLocales() {\n const { i18n, t: translate } = useTranslation();\n const langStorage = localStorage.getItem('i18nextLng');\n const currentLang = LANGS.find((_lang) => _lang.value === langStorage) || LANGS[0];\n\n const handleChangeLanguage = (newlang: string) => {\n i18n.changeLanguage(newlang);\n };\n\n return {\n onChangeLang: handleChangeLanguage,\n translate,\n currentLang,\n allLang: LANGS\n };\n}\n","import { useContext } from 'react';\nimport { AuthContextType } from 'contexts/auth/AuthContext.type';\nimport { AuthContext } from 'contexts/auth/AuthContext';\n\nconst useAuth = (): AuthContextType => {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error('Auth context must be used inside AuthProvider');\n }\n return context;\n};\n\nexport default useAuth;\n","import { alpha } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nfunction createGradient(color1: string, color2: string) {\n return `linear-gradient(to bottom, ${color1}, ${color2})`;\n}\n\ninterface GradientsPaletteOptions {\n primary: string;\n info: string;\n success: string;\n warning: string;\n error: string;\n}\n\ninterface ChartPaletteOptions {\n violet: string[];\n blue: string[];\n green: string[];\n yellow: string[];\n red: string[];\n}\n\ndeclare module '@mui/material/styles/createPalette' {\n interface TypeBackground {\n neutral: string;\n }\n interface SimplePaletteColorOptions {\n lighter: string;\n darker: string;\n }\n interface PaletteColor {\n lighter: string;\n darker: string;\n primary2: string;\n }\n interface Palette {\n gradients: GradientsPaletteOptions;\n chart: ChartPaletteOptions;\n }\n interface PaletteOptions {\n gradients: GradientsPaletteOptions;\n chart: ChartPaletteOptions;\n }\n}\n\ndeclare module '@mui/material' {\n interface Color {\n 0: string;\n 500_8: string;\n 500_12: string;\n 500_16: string;\n 500_24: string;\n 500_32: string;\n 500_48: string;\n 500_56: string;\n 500_80: string;\n }\n}\n\n// SETUP COLORS\nconst PRIMARY = {\n lighter: '#C8FACD',\n light: '#5BE584',\n main: '#00AB55',\n dark: '#007B55',\n darker: '#005249',\n primary2: '#3A76E9'\n};\nconst SECONDARY = {\n lighter: '#D6E4FF',\n light: '#84A9FF',\n main: '#3366FF',\n dark: '#1939B7',\n darker: '#091A7A'\n};\nconst INFO = {\n lighter: '#D0F2FF',\n light: '#74CAFF',\n main: '#1890FF',\n dark: '#0C53B7',\n darker: '#04297A'\n};\nconst SUCCESS = {\n lighter: '#E9FCD4',\n light: '#AAF27F',\n main: '#54D62C',\n dark: '#229A16',\n darker: '#08660D'\n};\nconst WARNING = {\n lighter: '#FFF7CD',\n light: '#FFE16A',\n main: '#FFC107',\n dark: '#B78103',\n darker: '#7A4F01'\n};\nconst ERROR = {\n lighter: '#FFE7D9',\n light: '#FFA48D',\n main: '#FF4842',\n dark: '#B72136',\n darker: '#7A0C2E'\n};\n\nconst GREY = {\n 0: '#FFFFFF',\n 100: '#F9FAFB',\n 200: '#F4F6F8',\n 300: '#DFE3E8',\n 400: '#C4CDD5',\n 500: '#919EAB',\n 600: '#637381',\n 700: '#454F5B',\n 800: '#212B36',\n 900: '#161C24',\n 500_8: alpha('#919EAB', 0.08),\n 500_12: alpha('#919EAB', 0.12),\n 500_16: alpha('#919EAB', 0.16),\n 500_24: alpha('#919EAB', 0.24),\n 500_32: alpha('#919EAB', 0.32),\n 500_48: alpha('#919EAB', 0.48),\n 500_56: alpha('#919EAB', 0.56),\n 500_80: alpha('#919EAB', 0.8)\n};\n\nconst GRADIENTS = {\n primary: createGradient(PRIMARY.light, PRIMARY.main),\n info: createGradient(INFO.light, INFO.main),\n success: createGradient(SUCCESS.light, SUCCESS.main),\n warning: createGradient(WARNING.light, WARNING.main),\n error: createGradient(ERROR.light, ERROR.main)\n};\n\nconst CHART_COLORS = {\n violet: ['#826AF9', '#9E86FF', '#D0AEFF', '#F7D2FF'],\n blue: ['#2D99FF', '#83CFFF', '#A5F3FF', '#CCFAFF'],\n green: ['#2CD9C5', '#60F1C8', '#A4F7CC', '#C0F2DC'],\n yellow: ['#FFE700', '#FFEF5A', '#FFF7AE', '#FFF3D6'],\n red: ['#FF6C40', '#FF8F6D', '#FFBD98', '#FFF2D4']\n};\n\nconst FONT = {\n gray1: '#CBCBCB',\n gray2: '#929292',\n gray3: '#7b7b7b',\n gray4: '#454545',\n gray5: '#000000'\n};\n\nconst COMMON = {\n common: { black: '#000', white: '#fff' },\n font: { ...FONT },\n primary: { ...PRIMARY, contrastText: '#fff' },\n secondary: { ...SECONDARY, contrastText: '#fff' },\n info: { ...INFO, contrastText: '#fff' },\n success: { ...SUCCESS, contrastText: GREY[800] },\n warning: { ...WARNING, contrastText: GREY[800] },\n error: { ...ERROR, contrastText: '#fff' },\n grey: GREY,\n gradients: GRADIENTS,\n chart: CHART_COLORS,\n divider: GREY[500_24],\n action: {\n hover: GREY[500_8],\n selected: GREY[500_16],\n disabled: GREY[500_80],\n disabledBackground: GREY[500_24],\n focus: GREY[500_24],\n hoverOpacity: 0.08,\n disabledOpacity: 0.48\n }\n};\n\nconst palette = {\n light: {\n ...COMMON,\n text: { primary: GREY[800], secondary: GREY[600], disabled: GREY[500] },\n background: { paper: '#fff', default: '#fff', neutral: GREY[200] },\n action: { active: GREY[600], ...COMMON.action }\n },\n dark: {\n ...COMMON,\n text: { primary: '#fff', secondary: GREY[500], disabled: GREY[600] },\n background: { paper: GREY[800], default: GREY[900], neutral: GREY[500_16] },\n action: { active: GREY[500], ...COMMON.action }\n }\n};\n\nexport default palette;\n","import { ReactNode, createContext } from 'react';\n// hooks\nimport useLocalStorage from '../hooks/useLocalStorage';\n// theme\nimport palette from '../theme/palette';\n// @type\nimport { ThemeMode, ThemeDirection, ThemeColor, SettingsContextProps } from '../@types/settings';\n\n// ----------------------------------------------------------------------\n\nconst PRIMARY_COLOR = [\n // DEFAULT\n {\n name: 'default',\n ...palette.light.primary\n },\n // PURPLE\n {\n name: 'purple',\n lighter: '#EBD6FD',\n light: '#B985F4',\n main: '#7635dc',\n dark: '#431A9E',\n darker: '#200A69',\n contrastText: '#fff'\n },\n // CYAN\n {\n name: 'cyan',\n lighter: '#D1FFFC',\n light: '#76F2FF',\n main: '#1CCAFF',\n dark: '#0E77B7',\n darker: '#053D7A',\n contrastText: palette.light.grey[800]\n },\n // BLUE\n {\n name: 'blue',\n lighter: '#EAF1FF',\n light: '#6697FF',\n // main: '#0045FF',\n main: '#3A76E9',\n dark: '#0027B7',\n darker: '#00137A',\n contrastText: '#fff'\n },\n // ORANGE\n {\n name: 'orange',\n lighter: '#FEF4D4',\n light: '#FED680',\n main: '#fda92d',\n dark: '#B66816',\n darker: '#793908',\n contrastText: palette.light.grey[800]\n },\n // RED\n {\n name: 'red',\n lighter: '#FFE3D5',\n light: '#FFC1AC',\n main: '#FF3030',\n dark: '#B71833',\n darker: '#7A0930',\n contrastText: '#fff'\n }\n];\n\nfunction SetColor(themeColor: ThemeColor) {\n let color;\n const DEFAULT = PRIMARY_COLOR[0];\n const PURPLE = PRIMARY_COLOR[1];\n const CYAN = PRIMARY_COLOR[2];\n const BLUE = PRIMARY_COLOR[3];\n const ORANGE = PRIMARY_COLOR[4];\n const RED = PRIMARY_COLOR[5];\n\n switch (themeColor) {\n case 'purple':\n color = PURPLE;\n break;\n case 'cyan':\n color = CYAN;\n break;\n case 'blue':\n color = BLUE;\n break;\n case 'orange':\n color = ORANGE;\n break;\n case 'red':\n color = RED;\n break;\n default:\n color = DEFAULT;\n }\n return color;\n}\n\nconst initialState: SettingsContextProps = {\n themeMode: 'light',\n themeDirection: 'ltr',\n themeColor: 'blue',\n themeStretch: false,\n onChangeMode: () => {},\n onChangeDirection: () => {},\n onChangeColor: () => {},\n onToggleStretch: () => {},\n setColor: PRIMARY_COLOR[0],\n colorOption: []\n};\n\nconst SettingsContext = createContext(initialState);\n\ntype SettingsProviderProps = {\n children: ReactNode;\n};\n\nfunction SettingsProvider({ children }: SettingsProviderProps) {\n const [settings, setSettings] = useLocalStorage('settings', {\n themeMode: initialState.themeMode,\n themeDirection: initialState.themeDirection,\n themeColor: initialState.themeColor,\n themeStretch: initialState.themeStretch\n });\n\n const onChangeMode = (mode: ThemeMode) => {\n setSettings({\n ...settings,\n themeMode: mode as ThemeMode\n });\n };\n\n // const onChangeMode = (event: React.ChangeEvent) => {\n // setSettings({\n // ...settings,\n // themeMode: (event.target as HTMLInputElement).value as ThemeMode\n // });\n // };\n\n const onChangeDirection = (event: React.ChangeEvent) => {\n setSettings({\n ...settings,\n themeDirection: (event.target as HTMLInputElement).value as ThemeDirection\n });\n };\n\n const onChangeColor = (event: React.ChangeEvent) => {\n setSettings({\n ...settings,\n themeColor: (event.target as HTMLInputElement).value as ThemeColor\n });\n };\n\n const onToggleStretch = () => {\n setSettings({\n ...settings,\n themeStretch: !settings.themeStretch\n });\n };\n\n return (\n ({\n name: color.name,\n value: color.main\n })),\n // Stretch\n onToggleStretch\n }}\n >\n {children}\n \n );\n}\n\nexport { SettingsProvider, SettingsContext };\n","import { useState, useEffect } from 'react';\n\n// ----------------------------------------------------------------------\n\nexport default function useLocalStorage(key: string, defaultValue: ValueType) {\n const [value, setValue] = useState(() => {\n const storedValue = localStorage.getItem(key);\n return storedValue === null ? defaultValue : JSON.parse(storedValue);\n });\n\n useEffect(() => {\n const listener = (e: StorageEvent) => {\n if (e.storageArea === localStorage && e.key === key) {\n setValue(e.newValue ? JSON.parse(e.newValue) : e.newValue);\n }\n };\n window.addEventListener('storage', listener);\n\n return () => {\n window.removeEventListener('storage', listener);\n };\n }, [key, defaultValue]);\n\n const setValueInLocalStorage = (newValue: ValueType) => {\n setValue((currentValue: any) => {\n const result = typeof newValue === 'function' ? newValue(currentValue) : newValue;\n localStorage.setItem(key, JSON.stringify(result));\n return result;\n });\n };\n\n return [value, setValueInLocalStorage];\n}\n","import { ReactNode, createContext, useState, useEffect } from 'react';\n// material\nimport { useMediaQuery } from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport type CollapseDrawerContextProps = {\n isCollapse?: boolean;\n collapseClick: boolean;\n collapseHover: boolean;\n onToggleCollapse: VoidFunction;\n onHoverEnter: VoidFunction;\n onHoverLeave: VoidFunction;\n};\n\nconst initialState: CollapseDrawerContextProps = {\n collapseClick: false,\n collapseHover: false,\n onToggleCollapse: () => {},\n onHoverEnter: () => {},\n onHoverLeave: () => {}\n};\n\nconst CollapseDrawerContext = createContext(initialState);\n\ntype CollapseDrawerProviderProps = {\n children: ReactNode;\n};\n\nfunction CollapseDrawerProvider({ children }: CollapseDrawerProviderProps) {\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('lg'));\n const [collapse, setCollapse] = useState({\n click: false,\n hover: false\n });\n\n useEffect(() => {\n if (isMobile) {\n setCollapse({\n click: false,\n hover: false\n });\n }\n }, [isMobile]);\n\n const handleToggleCollapse = () => {\n setCollapse({ ...collapse, click: !collapse.click });\n };\n\n const handleHoverEnter = () => {\n if (collapse.click) {\n setCollapse({ ...collapse, hover: true });\n }\n };\n\n const handleHoverLeave = () => {\n setCollapse({ ...collapse, hover: false });\n };\n\n return (\n \n {children}\n \n );\n}\n\nexport { CollapseDrawerProvider, CollapseDrawerContext };\n","import { Helmet } from 'react-helmet-async';\n\nconst AndanteFitMetaTag = ({ currentLang }: { currentLang: string }): JSX.Element => {\n if (currentLang === 'ko') {\n return (\n \n 안단테핏\n {/* \n \n \n \n \n \n \n */}\n \n );\n } else {\n return (\n \n AndanteFit\n {/* \n \n \n \n \n \n \n */}\n \n );\n }\n};\n\nexport default AndanteFitMetaTag;\n","import { useState, ReactNode, useEffect } from 'react';\nimport { Navigate, useLocation } from 'react-router-dom';\n// hooks\nimport useAuth from '../hooks/useAuth';\nimport useLocales from '../hooks/useLocales';\n// pages\nimport Login from '../pages/authentication/login/Login';\nimport AndanteFitMetaTag from '../utils/setMetatag';\n\n// ----------------------------------------------------------------------\n\ntype AuthGuardProps = {\n children: ReactNode;\n};\n\nexport default function AuthGuard({ children }: AuthGuardProps) {\n const { isAuthenticated } = useAuth();\n const { pathname } = useLocation();\n const { currentLang } = useLocales();\n const [requestedLocation, setRequestedLocation] = useState(null);\n\n useEffect(() => {\n console.log('[AuthGuard] isAuthenticated : ', isAuthenticated);\n }, [isAuthenticated]);\n\n useEffect(() => {\n console.log('[AuthGuard]', { pathname, requestedLocation });\n }, [pathname, requestedLocation]);\n\n if (!isAuthenticated) {\n if (pathname !== requestedLocation) {\n setRequestedLocation(pathname);\n }\n\n return ;\n }\n if (requestedLocation && pathname !== requestedLocation) {\n setRequestedLocation(null);\n return ;\n }\n\n return (\n <>\n \n {children}\n \n );\n}\n","import { ReactNode } from 'react';\nimport { Navigate } from 'react-router-dom';\n// hooks\nimport useAuth from '../hooks/useAuth';\nimport useLocales from '../hooks/useLocales';\n// routes\nimport { GUIDELINE, PATH_DASHBOARD } from '../routes/paths';\nimport AndanteFitMetaTag from '../utils/setMetatag';\n\n// ----------------------------------------------------------------------\n\ntype GuestGuardProps = {\n children: ReactNode;\n};\n\nexport default function GuestGuard({ children }: GuestGuardProps) {\n const { isAuthenticated } = useAuth();\n const { currentLang } = useLocales();\n\n console.log('[GuestGuard] isAuthenticated : ', isAuthenticated);\n\n if (window.location.href.includes('andantefit.com/guidelines')) {\n return ;\n }\n\n if (isAuthenticated) {\n return ;\n }\n\n return (\n <>\n \n {children}\n \n );\n}\n","import { useContext } from 'react';\nimport { CollapseDrawerContext } from '../contexts/CollapseDrawerContext';\n\n// ----------------------------------------------------------------------\n\nconst useCollapseDrawer = () => useContext(CollapseDrawerContext);\n\nexport default useCollapseDrawer;\n","import { useRef, useState } from 'react';\nimport { Link as RouterLink, useNavigate } from 'react-router-dom';\nimport { Icon } from '@iconify/react';\nimport settings2Fill from '@iconify/icons-eva/settings-2-fill';\n// material\nimport { alpha } from '@mui/material/styles';\nimport { Button, Box, Divider, Typography, MenuItem } from '@mui/material';\n// routes\nimport { PATH_DASHBOARD } from 'routes/paths';\n// hooks\nimport { useWindowSize } from 'hooks/useWindowSize';\nimport useLocales from 'hooks/useLocales';\nimport useAuth from 'hooks/useAuth';\nimport useIsMountedRef from 'hooks/useIsMountedRef';\n// components\nimport { MIconButton } from 'components/@material-extend';\nimport MenuPopover from 'components/MenuPopover';\nimport breakpoints from 'theme/breakpoints';\n\nexport default function AccountPopover() {\n const { translate } = useLocales();\n const navigate = useNavigate();\n const anchorRef = useRef(null);\n const isMountedRef = useIsMountedRef();\n\n const { user, signOut } = useAuth();\n const { width } = useWindowSize();\n\n const [open, setOpen] = useState(false);\n\n const imageSize = width && width < breakpoints.values.md ? '36px' : '44px';\n\n const handleOpen = () => {\n setOpen(true);\n };\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleLogout = async () => {\n try {\n await signOut();\n navigate('/');\n if (isMountedRef.current) {\n navigate('/');\n handleClose();\n }\n } catch (error) {\n console.error('[AccountPopover/handleLogout] Logout Error', error);\n }\n };\n\n return (\n <>\n alpha(theme.palette.grey[900], 0.15)\n }\n })\n }}\n >\n \"account\"\n \n\n \n \n \n {user?.organization} {user?.division}\n \n \n {user?.email}\n \n \n\n \n\n \n \n {translate('AccountSetting')}\n \n\n \n \n \n \n \n );\n}\n","import { Icon } from '@iconify/react';\nimport menu2Fill from '@iconify/icons-eva/menu-2-fill';\n// material\nimport { alpha, styled } from '@mui/material/styles';\nimport { Box, Stack, AppBar, Toolbar, IconButton } from '@mui/material';\n// hooks\nimport useCollapseDrawer from 'hooks/useCollapseDrawer';\n// components\nimport { MHidden } from 'components/@material-extend';\n// import Searchbar from './Searchbar';\nimport AccountPopover from './AccountPopover';\nimport LanguagePopover from './LanguagePopover';\n// import ThemeModeToggle from './ThemeModeToggle';\n\n// ----------------------------------------------------------------------\n\nconst DRAWER_WIDTH = 280;\nconst COLLAPSE_WIDTH = 102;\n\nconst APPBAR_MOBILE = '72px';\nconst APPBAR_DESKTOP = '92px';\n\nconst RootStyle = styled(AppBar)(({ theme }) => ({\n boxShadow: 'none',\n backdropFilter: 'blur(6px)',\n WebkitBackdropFilter: 'blur(6px)', // Fix on Mobile\n backgroundColor: alpha(theme.palette.background.default, 0.72),\n [theme.breakpoints.up('lg')]: {\n width: `calc(100% - ${DRAWER_WIDTH + 1}px)`\n }\n}));\n\nconst ToolbarStyle = styled(Toolbar)(({ theme }) => ({\n minHeight: APPBAR_MOBILE,\n [theme.breakpoints.down('md')]: {\n marginLeft: '-8px'\n },\n [theme.breakpoints.up('lg')]: {\n minHeight: APPBAR_DESKTOP\n }\n}));\n\n// ----------------------------------------------------------------------\n\ntype DashboardNavbarProps = {\n onOpenSidebar: VoidFunction;\n};\n\nexport default function DashboardNavbar({ onOpenSidebar }: DashboardNavbarProps) {\n const { isCollapse } = useCollapseDrawer();\n\n return (\n \n \n \n \n \n \n \n\n {/* */}\n \n\n \n {/* */}\n \n \n \n \n \n );\n}\n","// import { useMemo } from 'react';\n// hooks\n\nimport { Box } from '@mui/material';\n\nexport default function MyAvatar() {\n return (\n \n \n \n );\n}\n","import { ReactNode } from 'react';\nimport { NavLink as RouterLink, matchPath, useLocation } from 'react-router-dom';\n// material\nimport { alpha, useTheme, styled } from '@mui/material/styles';\nimport {\n Box,\n List,\n BoxProps,\n ListItemText,\n ListSubheader,\n ListItemButton,\n ListItemButtonProps\n} from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nconst ListSubheaderStyle = styled((props) => (\n \n))(({ theme }) => ({\n ...theme.typography.overline,\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(2),\n paddingLeft: theme.spacing(5),\n color: theme.palette.text.primary\n}));\n\ninterface ListItemStyleProps extends ListItemButtonProps {\n component?: ReactNode;\n to?: string;\n}\n\nconst ListItemStyle = styled(ListItemButton)(({ theme }) => ({\n ...theme.typography.body2,\n height: 48,\n position: 'relative',\n textTransform: 'capitalize',\n paddingLeft: theme.spacing(5),\n paddingRight: theme.spacing(2.5),\n color: theme.palette.text.secondary,\n '&:before': {\n top: 0,\n right: 0,\n width: 3,\n bottom: 0,\n content: \"''\",\n display: 'none',\n position: 'absolute',\n borderTopLeftRadius: 4,\n borderBottomLeftRadius: 4,\n backgroundColor: theme.palette.primary.main\n }\n}));\n\n// ----------------------------------------------------------------------\n\ntype NavItemProps = {\n title: string;\n path: string;\n};\n\nfunction NavItem({ item, isShow }: { item: NavItemProps; isShow?: boolean | undefined }) {\n const theme = useTheme();\n const { pathname } = useLocation();\n const { title, path } = item;\n const isActiveRoot = path ? !!matchPath({ path, end: false }, pathname) : false;\n\n const activeRootStyle = {\n color: 'primary.main',\n fontWeight: 'fontWeightMedium',\n bgcolor: alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),\n '&:before': { display: 'block' }\n };\n\n return (\n \n 12 ? `${title.slice(0, 12)}...` : title}\n />\n \n );\n}\n\ninterface NavSectionProps extends BoxProps {\n isShow?: boolean | undefined;\n navConfig: {\n subheader: string;\n items: NavItemProps[];\n }[];\n}\n\nexport default function NavSection({ navConfig, isShow = true, ...other }: NavSectionProps) {\n return (\n \n {navConfig.map((list) => {\n const { subheader, items } = list;\n return (\n \n {isShow && {subheader}}\n {items.map((item: NavItemProps) => (\n \n ))}\n \n );\n })}\n \n );\n}\n","// routes\nimport { PATH_DASHBOARD } from 'routes/paths';\n\nimport i18n from 'i18next';\nimport { DeviceInfo, AdminType } from '@types';\n\nconst generateSidebarConfig = (device: DeviceInfo[], isStaff?: AdminType) => {\n const deviceCodeArray = [\n {\n title: 'Overview',\n path: PATH_DASHBOARD.exams.overview\n }\n ];\n const managementArray = [\n // MANAGEMENT : 검사자 계정 설정\n {\n title: i18n.t('UserAccountSetting'),\n path: PATH_DASHBOARD.management.userAccountSetting\n },\n // MANAGEMENT : 대상자 관리\n {\n title: i18n.t('SubjectManagement'),\n path: PATH_DASHBOARD.management.subjectManagement\n },\n // MANAGEMENT : 고객 관리\n {\n title: i18n.t('CustomerService'),\n path: PATH_DASHBOARD.management.customerService\n }\n ];\n\n const isHandGripDevice =\n device.findIndex((item, index) => item.device.serial_number.substring(4, 6) === 'H1') !== -1;\n const isSitToStandDevice =\n device.findIndex((item, index) => item.device.serial_number.substring(4, 6) === 'C1') !== -1;\n const isGaitSpeedDevice =\n device.findIndex((item, index) => item.device.serial_number.substring(4, 6) === 'G1') !== -1;\n const isStaticBalanceDevice =\n device.findIndex((item, index) => item.device.serial_number.substring(4, 6) === 'B1') !== -1;\n const isAverageGaitSpeedDevice =\n device.findIndex((item, index) => {\n return (\n item.device.serial_number.substring(4, 6) === 'AL' ||\n item.device.serial_number.substring(4, 6) === 'AR'\n );\n }) !== -1;\n\n if (isSitToStandDevice && isGaitSpeedDevice && isStaticBalanceDevice) {\n deviceCodeArray.push({\n title: i18n.t('SPPB'),\n path: PATH_DASHBOARD.exams.SPPB\n });\n }\n if (isGaitSpeedDevice) {\n deviceCodeArray.push({\n title: i18n.t('GaitSpeedShort'),\n path: PATH_DASHBOARD.exams.GaitSpeed\n });\n }\n if (isSitToStandDevice) {\n deviceCodeArray.push({\n title: i18n.t('SitToStandShort'),\n path: PATH_DASHBOARD.exams.SitToStand\n });\n }\n if (isStaticBalanceDevice) {\n deviceCodeArray.push({\n title: i18n.t('StaticBalanceShort'),\n path: PATH_DASHBOARD.exams.StaticBalance\n });\n }\n if (isAverageGaitSpeedDevice) {\n deviceCodeArray.push({\n // AVG\n title: i18n.t('AverageGaitSpeedShort'),\n path: PATH_DASHBOARD.exams.AverageGaitSpeed\n });\n }\n if (isSitToStandDevice) {\n deviceCodeArray.push({\n title: i18n.t('TUGShort'),\n path: PATH_DASHBOARD.exams.TUG\n });\n }\n if (isStaticBalanceDevice) {\n deviceCodeArray.push({\n title: i18n.t('OneLegStandingShort'),\n path: PATH_DASHBOARD.exams.OneLegStanding\n });\n }\n if (isHandGripDevice) {\n deviceCodeArray.push({\n title: i18n.t('HandgripStrengthShort'),\n path: PATH_DASHBOARD.exams.HandgripStrength\n });\n }\n\n if (isStaff === 'admin') {\n // MANAGEMENT : 관리자 모드 (Admin Only)\n managementArray.push({\n title: i18n.t('AdminDashboard'),\n path: PATH_DASHBOARD.management.adminDashboard\n });\n }\n\n const sidebarConfig = [\n // exam\n { subheader: i18n.t('ExamShort'), items: deviceCodeArray },\n\n // management\n {\n subheader: i18n.t('Management'),\n items: managementArray\n }\n ];\n\n return sidebarConfig;\n};\n\nexport default generateSidebarConfig;\n","import { useEffect } from 'react';\nimport { Link as RouterLink, useLocation } from 'react-router-dom';\n// material\nimport { alpha, styled } from '@mui/material/styles';\nimport { Box, Link, Stack, Drawer, Tooltip, Typography, CardActionArea } from '@mui/material';\n// hooks\nimport useAuth from '../../hooks/useAuth';\nimport useCollapseDrawer from '../../hooks/useCollapseDrawer';\n// routes\n// import { PATH_DASHBOARD } from '../../routes/paths';\n// components\nimport Logo from '../../components/Logo';\nimport MyAvatar from '../../components/MyAvatar';\nimport Scrollbar from '../../components/Scrollbar';\nimport NavSection from '../../components/NavSection';\nimport { MHidden } from '../../components/@material-extend';\n//\nimport generateSidebarConfig from './SidebarConfig';\n// ----------------------------------------------------------------------\n\nconst DRAWER_WIDTH = '280px';\nconst COLLAPSE_WIDTH = '160px';\n\nconst RootStyle = styled('div')(({ theme }) => ({\n [theme.breakpoints.up('lg')]: {\n flexShrink: 0,\n transition: theme.transitions.create('width', {\n duration: theme.transitions.duration.complex\n })\n }\n}));\n\nconst AccountStyle = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n marginTop: '52px',\n marginLeft: '-4px',\n marginRight: '-4px',\n padding: '16px 20px',\n borderRadius: theme.shape.borderRadiusSm,\n backgroundColor: '#F4F6F8'\n}));\n\n// ----------------------------------------------------------------------\n\ntype IconCollapseProps = {\n onToggleCollapse: VoidFunction;\n collapseClick: boolean;\n};\n\nfunction IconCollapse({ onToggleCollapse, collapseClick }: IconCollapseProps) {\n return (\n \n \n theme.transitions.create('all'),\n ...(collapseClick && {\n width: 0,\n height: 0\n })\n }}\n />\n \n \n );\n}\n\ntype DashboardSidebarProps = {\n isOpenSidebar: boolean;\n onCloseSidebar: VoidFunction;\n};\n\nexport default function DashboardSidebar({ isOpenSidebar, onCloseSidebar }: DashboardSidebarProps) {\n const { pathname } = useLocation();\n const { user, devices, isStaff } = useAuth();\n\n const { isCollapse, collapseClick, collapseHover, onToggleCollapse, onHoverEnter, onHoverLeave } =\n useCollapseDrawer();\n\n useEffect(() => {\n if (isOpenSidebar) {\n onCloseSidebar();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname]);\n\n const renderContent = (\n \n \n \n \n \n \n\n \n {!isCollapse && (\n \n )}\n \n \n\n {isCollapse ? (\n \n ) : (\n \n \n \n {user?.email}\n \n \n {user?.organization} {user?.division}\n \n \n \n )}\n \n\n \n\n \n \n );\n\n return (\n \n \n \n {renderContent}\n \n \n\n \n theme.customShadows.z20,\n bgcolor: (theme) => alpha(theme.palette.background.default, 0.88)\n })\n }\n }}\n >\n {renderContent}\n \n \n \n );\n}\n","import React, { useState } from 'react';\nimport { Outlet } from 'react-router-dom';\n// material\nimport { styled, useTheme } from '@mui/material/styles';\n// hooks\nimport useCollapseDrawer from 'hooks/useCollapseDrawer';\n//\nimport DashboardNavbar from './DashboardNavbar';\nimport DashboardSidebar from './DashboardSidebar';\n\n// ----------------------------------------------------------------------\n\nconst RootStyle = styled('div')({\n display: 'flex',\n minHeight: '100%',\n overflow: 'hidden'\n});\n\nconst MainStyle = styled('div')(({ theme }) => ({\n position: 'relative',\n backgroundColor: 'white',\n flexGrow: 1,\n overflow: 'hidden',\n minHeight: '100%',\n paddingTop: '72px',\n paddingBottom: theme.spacing(5),\n paddingLeft: '0px',\n paddingRight: '0px',\n marginTop: '16px',\n [theme.breakpoints.up('md')]: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n paddingTop: '92px',\n paddingBottom: '60px',\n marginTop: '24px'\n },\n [theme.breakpoints.up('lg')]: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n paddingTop: '92px',\n paddingBottom: '60px',\n marginTop: '24px'\n }\n}));\n\n// ----------------------------------------------------------------------\n\nexport default function DashboardLayout() {\n const theme = useTheme();\n const { collapseClick } = useCollapseDrawer();\n const [open, setOpen] = useState(false);\n\n return (\n \n {\n console.log('opened ?', open);\n setOpen(!open);\n }}\n />\n setOpen(false)} />\n \n \n \n \n );\n}\n","import { lazy, Suspense } from 'react';\nimport { Navigate, useLocation, useRoutes } from 'react-router-dom';\n\n// components\nimport LoadingScreen from '../components/LoadingScreen';\nimport AuthGuard from '../guards/AuthGuard';\n// guards\nimport GuestGuard from '../guards/GuestGuard';\nimport AuthHeader from '../layouts/AuthHeader';\nimport DashboardLayout from '../layouts/dashboard';\n\n// ----------------------------------------------------------------------\n\nconst Loadable = (Component: React.ElementType) => (props: any) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { pathname } = useLocation();\n\n const isDashboard = pathname?.includes('/dashboard');\n\n console.log('[routes index/ Loadable] present pathName :', pathname);\n\n return (\n \n }\n >\n \n \n );\n};\n\nexport default function Router() {\n return useRoutes([\n {\n path: '/',\n element: (\n \n \n \n )\n },\n { path: 'guidelines', element: },\n {\n path: 'auth',\n children: [\n { path: 'sign-up', element: },\n { path: 'find-email', element: },\n {\n path: 'reset-password',\n element: ,\n children: [{ path: ':authcode', element: }]\n },\n { path: 'inactive-user', element: },\n { path: 'privacy-policy', element: },\n { path: 'terms-of-use', element: }\n ]\n },\n {\n path: 'dashboard',\n element: (\n \n \n \n ),\n children: [\n { index: true, element: },\n { path: 'overview', element: },\n //exams\n { path: 'sppb-exams', element: },\n { path: 'sppb-exams/:id', element: },\n { path: 'gaitspeed-exams', element: },\n { path: 'gaitspeed-exams/:id', element: },\n { path: 'sittostand-exams', element: },\n { path: 'sittostand-exams/:id', element: },\n { path: 'staticbalance-exams', element: },\n { path: 'staticbalance-exams/:id', element: },\n { path: 'averagegaitspeed-exams', element: },\n { path: 'averagegaitspeed-exams/:id', element: },\n { path: 'onelegstanding-exams', element: },\n { path: 'onelegstanding-exams/:id', element: },\n { path: 'tug-exams', element: },\n { path: 'tug-exams/:id', element: },\n { path: 'handgripstrength-exams', element: },\n { path: 'handgripstrength-exams/:id', element: },\n //management\n { path: 'useraccount-setting', element: },\n { path: 'email-change', element: },\n { path: 'password-change', element: },\n { path: 'subject-management', element: },\n { path: 'customer-service', element: },\n { path: 'admin', element: },\n { path: 'admin/report', element: },\n { path: 'admin/quality-control', element: },\n { path: 'admin/license-management', element: }\n ]\n },\n\n {\n path: '*',\n element: ,\n children: [\n { path: '*', element: },\n { path: 'maintenance', element: },\n { path: '500', element: },\n { path: '404', element: },\n { path: '401', element: }\n ]\n }\n ]);\n}\n\nconst Guidelines = Loadable(lazy(() => import('../pages/Guidelines')));\n// Authentication\nconst Login = Loadable(lazy(() => import('../pages/authentication/login/Login')));\nconst FindEmail = Loadable(lazy(() => import('../pages/authentication/findEmail/FindEmail')));\nconst SignUp = Loadable(lazy(() => import('../pages/authentication/signUp/SignUp')));\nconst ResetPassword = Loadable(\n lazy(() => import('../pages/authentication/resetPassword/ResetPassword'))\n);\nconst InActiveUser = Loadable(\n lazy(() => import('../pages/authentication/inactiveUser/InActiveUser'))\n);\nconst PrivacyPolicy = Loadable(lazy(() => import('../pages/PrivacyPolicy')));\nconst TermsOfUse = Loadable(lazy(() => import('../pages/TermOfUse')));\n\n// Dashboard\nconst OverView = Loadable(lazy(() => import('../pages/dashboard/exams/overview/Overview')));\nconst AverageGaitSpeedExamListMain = Loadable(\n lazy(() => import('../pages/dashboard/exams/averageGaitSpeedExam/AverageGaitSpeedExamListMain'))\n);\nconst GaitSpeedExamListMain = Loadable(\n lazy(() => import('../pages/dashboard/exams/gaitSpeedExam/GaitSpeedExamListMain'))\n);\nconst SitToStandExamListMain = Loadable(\n lazy(() => import('../pages/dashboard/exams/sitToStandExam/SitToStandExamListMain'))\n);\nconst SPPBExamListMain = Loadable(\n lazy(() => import('../pages/dashboard/exams/sppbExam/SPPBExamListMain'))\n);\nconst StaticBalanceExamListMain = Loadable(\n lazy(() => import('../pages/dashboard/exams/staticBalanceExam/StaticBalanceExamListMain'))\n);\nconst OneLegStandingExamListMain = Loadable(\n lazy(() => import('../pages/dashboard/exams/oneLegStandingExam/OneLegStandingExamListMain'))\n);\nconst TUGExamListMain = Loadable(\n lazy(() => import('../pages/dashboard/exams/tugExam/TUGExamListMain'))\n);\nconst HandGripStrengthExamListMain = Loadable(\n lazy(() => import('../pages/dashboard/exams/handgripStrength/HandgripStrengthListMain'))\n);\nconst ExamDetailResultNotSPPB = Loadable(\n lazy(\n () => import('../pages/dashboard/components/ExamDetailResult/ExamDetailResultNotSPPBContainer')\n )\n);\nconst SPPBExamDetailResult = Loadable(\n lazy(() => import('../pages/dashboard/exams/sppbExam/SPPBExamDetailResultContainer'))\n);\n\n// Management\nconst UserAccountSettingMain = Loadable(\n lazy(() => import('../pages/dashboard/management/userAccountSetting/UserAccountSettingMain'))\n);\nconst EmailChangeTemp = Loadable(\n lazy(() => import('../pages/dashboard/management/userAccountSetting/EmailChangeTemp'))\n);\nconst PasswordChangeTemp = Loadable(\n lazy(() => import('../pages/dashboard/management/userAccountSetting/PasswordChangeTemp'))\n);\nconst SubjectManagement = Loadable(\n lazy(() => import('../pages/dashboard/management/subjectManagemnet/SubjectManagement'))\n);\nconst CustomerService = Loadable(\n lazy(() => import('../pages/dashboard/management/customerService/CustomerService'))\n);\nconst AdminDashboard = Loadable(\n lazy(() => import('../pages/dashboard/management/admin/AdminDashboard'))\n);\nconst ReportDashboard = Loadable(\n lazy(() => import('../pages/dashboard/management/admin/ReportDashboard'))\n);\nconst QualityControl = Loadable(\n lazy(() => import('../pages/dashboard/management/admin/QualityControl'))\n);\nconst LicenseManagement = Loadable(\n lazy(() => import('../pages/dashboard/management/admin/LicenseManagement'))\n);\n\n// Main\nconst Maintenance = Loadable(lazy(() => import('../pages/Maintenance')));\nconst Page500 = Loadable(lazy(() => import('../pages/Page500')));\nconst NotFound = Loadable(lazy(() => import('../pages/Page404')));\nconst Page401 = Loadable(lazy(() => import('../pages/Page401')));\n","// ----------------------------------------------------------------------\n\ndeclare module '@mui/system' {\n interface Shape {\n borderRadiusSm: number | string;\n borderRadiusMd: number | string;\n }\n}\n\nconst shape = {\n borderRadius: 8,\n borderRadiusSm: 12,\n borderRadiusMd: 16\n};\n\nexport default shape;\n","// ----------------------------------------------------------------------\n\nfunction pxToRem(value: number) {\n return `${value / 16}rem`;\n}\n\nfunction responsiveFontSizes({ sm, md, lg }: { sm: number; md: number; lg: number }) {\n return {\n '@media (min-width:600px)': {\n fontSize: pxToRem(sm)\n },\n '@media (min-width:900px)': {\n fontSize: pxToRem(md)\n },\n '@media (min-width:1200px)': {\n fontSize: pxToRem(lg)\n }\n };\n}\n\nconst FONT_PRIMARY = 'Noto Sans KR, Noto Sans, sans-serif, NanumSquare'; // Google Font\n// const FONT_SECONDARY = 'CircularStd, sans-serif'; // Local Font\n\nconst typography = {\n fontFamily: FONT_PRIMARY,\n fontWeightRegular: 400,\n fontWeightMedium: 600,\n fontWeightBold: 700,\n h1: {\n fontWeight: 700,\n lineHeight: 80 / 64,\n fontSize: pxToRem(40),\n ...responsiveFontSizes({ sm: 52, md: 58, lg: 64 })\n },\n h2: {\n fontWeight: 700,\n lineHeight: 64 / 48,\n fontSize: pxToRem(32),\n ...responsiveFontSizes({ sm: 40, md: 44, lg: 48 })\n },\n h3: {\n fontWeight: 700,\n lineHeight: 1.5,\n fontSize: pxToRem(24),\n ...responsiveFontSizes({ sm: 26, md: 30, lg: 32 })\n },\n h4: {\n fontWeight: 700,\n lineHeight: 1.5,\n fontSize: pxToRem(20),\n ...responsiveFontSizes({ sm: 20, md: 24, lg: 24 })\n },\n h5: {\n fontWeight: 700,\n lineHeight: 1.5,\n fontSize: pxToRem(18),\n ...responsiveFontSizes({ sm: 19, md: 20, lg: 20 })\n },\n h6: {\n fontWeight: 700,\n lineHeight: 28 / 18,\n fontSize: pxToRem(17),\n ...responsiveFontSizes({ sm: 18, md: 18, lg: 18 })\n },\n subtitle1: {\n fontWeight: 600,\n lineHeight: 1.5,\n fontSize: pxToRem(16)\n },\n subtitle2: {\n fontWeight: 700,\n lineHeight: 22 / 14,\n fontSize: pxToRem(14)\n },\n body1: {\n lineHeight: 1.5,\n fontSize: pxToRem(16)\n },\n body2: {\n lineHeight: 22 / 14,\n fontSize: pxToRem(14)\n },\n caption: {\n lineHeight: 1.5,\n fontSize: pxToRem(12)\n },\n overline: {\n fontWeight: 700,\n lineHeight: 1.5,\n fontSize: pxToRem(12),\n letterSpacing: 1.1,\n textTransform: 'uppercase'\n },\n button: {\n fontWeight: 700,\n lineHeight: 24 / 14,\n fontSize: pxToRem(14),\n textTransform: 'capitalize'\n }\n} as const;\n\nexport default typography;\n","import { Icon } from '@iconify/react';\nimport starFill from '@iconify/icons-eva/star-fill';\nimport { Theme } from '@mui/material/styles';\nimport { SvgIcon } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nconst ICON_SMALL = { width: 20, height: 20 };\nconst ICON_LARGE = { width: 28, height: 28 };\n\nconst ICON = (\n \n \n \n);\n\nexport default function Rating(theme: Theme) {\n return {\n MuiRating: {\n defaultProps: {\n emptyIcon: ICON,\n icon: ICON\n },\n\n styleOverrides: {\n root: {\n '&.Mui-disabled': {\n opacity: 0.48\n }\n },\n iconEmpty: { color: theme.palette.grey[500_48] },\n sizeSmall: { '& svg': { ...ICON_SMALL } },\n sizeLarge: { '& svg': { ...ICON_LARGE } }\n }\n }\n };\n}\n","import { Icon } from '@iconify/react';\nimport plusSquareOutline from '@iconify/icons-eva/plus-square-outline';\nimport minusSquareOutline from '@iconify/icons-eva/minus-square-outline';\nimport closeSquareOutline from '@iconify/icons-eva/close-square-outline';\nimport { Theme } from '@mui/material/styles';\nimport { Box } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nconst ICON_SIZE = { width: 20, height: 20 };\n\nexport default function TreeView(theme: Theme) {\n return {\n MuiTreeView: {\n defaultProps: {\n defaultCollapseIcon: ,\n defaultExpandIcon: ,\n defaultEndIcon: (\n \n )\n }\n },\n MuiTreeItem: {\n styleOverrides: {\n label: { ...theme.typography.body2 },\n iconContainer: { width: 'auto' }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\nimport { SvgIcon, SvgIconProps } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nfunction Icon(props: SvgIconProps) {\n return (\n \n \n \n );\n}\n\nfunction CheckedIcon(props: SvgIconProps) {\n return (\n \n \n \n );\n}\n\nfunction IndeterminateIcon(props: SvgIconProps) {\n return (\n \n \n \n );\n}\n\nexport default function Checkbox(theme: Theme) {\n return {\n MuiCheckbox: {\n defaultProps: {\n icon: ,\n checkedIcon: ,\n indeterminateIcon: \n },\n\n styleOverrides: {\n root: {\n padding: theme.spacing(1),\n '&.Mui-checked.Mui-disabled, &.Mui-disabled': {\n color: theme.palette.action.disabled\n },\n '& .MuiSvgIcon-fontSizeMedium': {\n width: 24,\n height: 24\n },\n '& .MuiSvgIcon-fontSizeSmall': {\n width: 20,\n height: 20\n },\n svg: {\n fontSize: 24,\n '&[font-size=small]': {\n fontSize: 20\n }\n }\n }\n }\n }\n };\n}\n","import { merge } from 'lodash';\nimport { Theme } from '@mui/material/styles';\nimport Fab from './Fab';\nimport Card from './Card';\nimport Chip from './Chip';\nimport Tabs from './Tabs';\nimport Menu from './Menu';\nimport Grid from './Grid';\nimport Link from './Link';\nimport Lists from './Lists';\nimport Table from './Table';\nimport Alert from './Alert';\nimport Badge from './Badge';\nimport Paper from './Paper';\nimport Input from './Input';\nimport Radio from './Radio';\nimport Drawer from './Drawer';\nimport Dialog from './Dialog';\nimport Avatar from './Avatar';\nimport Rating from './Rating';\nimport Slider from './Slider';\nimport Button from './Button';\nimport Switch from './Switch';\nimport Select from './Select';\nimport SvgIcon from './SvgIcon';\nimport Tooltip from './Tooltip';\nimport Popover from './Popover';\nimport Stepper from './Stepper';\nimport Pickers from './Pickers';\nimport DataGrid from './DataGrid';\nimport Skeleton from './Skeleton';\nimport Backdrop from './Backdrop';\nimport Snackbar from './Snackbar';\nimport Progress from './Progress';\nimport Timeline from './Timeline';\nimport TreeView from './TreeView';\nimport Checkbox from './Checkbox';\nimport Container from './Container';\nimport Accordion from './Accordion';\nimport Typography from './Typography';\nimport Pagination from './Pagination';\nimport IconButton from './IconButton';\nimport Breadcrumbs from './Breadcrumbs';\nimport ButtonGroup from './ButtonGroup';\nimport Autocomplete from './Autocomplete';\nimport ToggleButton from './ToggleButton';\nimport ControlLabel from './ControlLabel';\nimport LoadingButton from './LoadingButton';\n\n// ----------------------------------------------------------------------\n\nexport default function ComponentsOverrides(theme: Theme) {\n return merge(\n Fab(theme),\n Tabs(theme),\n Chip(theme),\n Card(theme),\n Menu(theme),\n Grid(theme),\n Link(theme),\n Input(theme),\n Radio(theme),\n Badge(theme),\n Lists(theme),\n Table(theme),\n Paper(theme),\n Alert(theme),\n Switch(theme),\n Select(theme),\n Button(theme),\n Rating(theme),\n Dialog(theme),\n Avatar(theme),\n Slider(theme),\n Drawer(theme),\n Pickers(theme),\n Stepper(theme),\n Tooltip(theme),\n Popover(theme),\n SvgIcon(theme),\n Checkbox(theme),\n DataGrid(theme),\n Skeleton(theme),\n Timeline(theme),\n TreeView(theme),\n Backdrop(theme),\n Snackbar(theme),\n Progress(theme),\n Container(theme),\n Accordion(theme),\n IconButton(theme),\n Typography(theme),\n Pagination(theme),\n ButtonGroup(theme),\n Breadcrumbs(theme),\n Autocomplete(theme),\n ControlLabel(theme),\n ToggleButton(theme),\n LoadingButton(theme)\n );\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Fab(theme: Theme) {\n return {\n MuiFab: {\n defaultProps: {\n color: 'primary'\n },\n\n styleOverrides: {\n root: {\n boxShadow: theme.customShadows.z8,\n '&:hover': {\n boxShadow: 'none',\n backgroundColor: theme.palette.grey[400]\n }\n },\n primary: {\n boxShadow: theme.customShadows.primary,\n '&:hover': {\n backgroundColor: theme.palette.primary.dark\n }\n },\n secondary: {\n boxShadow: theme.customShadows.secondary,\n '&:hover': {\n backgroundColor: theme.palette.secondary.dark\n }\n },\n extended: {\n '& svg': {\n marginRight: theme.spacing(1)\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Tabs(theme: Theme) {\n return {\n MuiTab: {\n styleOverrides: {\n root: {\n padding: 0,\n fontWeight: theme.typography.fontWeightMedium,\n borderTopLeftRadius: theme.shape.borderRadius,\n borderTopRightRadius: theme.shape.borderRadius,\n '&.Mui-selected': {\n color: theme.palette.text.primary\n },\n '&:not(:last-of-type)': {\n marginRight: theme.spacing(5)\n },\n '@media (min-width: 600px)': {\n minWidth: 48\n }\n },\n labelIcon: {\n minHeight: 48,\n flexDirection: 'row',\n '& > *:first-of-type': {\n marginBottom: 0,\n marginRight: theme.spacing(1)\n }\n },\n wrapper: {\n flexDirection: 'row',\n whiteSpace: 'nowrap'\n },\n textColorInherit: {\n opacity: 1,\n color: theme.palette.text.secondary\n }\n }\n },\n MuiTabPanel: {\n styleOverrides: {\n root: {\n padding: 0\n }\n }\n },\n MuiTabScrollButton: {\n styleOverrides: {\n root: {\n width: 48,\n borderRadius: '50%'\n }\n }\n }\n };\n}\n","import { Icon } from '@iconify/react';\nimport closeCircleFill from '@iconify/icons-eva/close-circle-fill';\nimport { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Chip(theme: Theme) {\n return {\n MuiChip: {\n defaultProps: {\n deleteIcon: \n },\n\n styleOverrides: {\n colorDefault: {\n '& .MuiChip-avatarMedium, .MuiChip-avatarSmall': {\n color: theme.palette.text.secondary\n }\n },\n outlined: {\n borderColor: theme.palette.grey[500_32],\n '&.MuiChip-colorPrimary': {\n borderColor: theme.palette.primary.main\n },\n '&.MuiChip-colorSecondary': {\n borderColor: theme.palette.secondary.main\n }\n },\n //\n avatarColorInfo: {\n color: theme.palette.info.contrastText,\n backgroundColor: theme.palette.info.dark\n },\n avatarColorSuccess: {\n color: theme.palette.success.contrastText,\n backgroundColor: theme.palette.success.dark\n },\n avatarColorWarning: {\n color: theme.palette.warning.contrastText,\n backgroundColor: theme.palette.warning.dark\n },\n avatarColorError: {\n color: theme.palette.error.contrastText,\n backgroundColor: theme.palette.error.dark\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Card(theme: Theme) {\n return {\n MuiCard: {\n styleOverrides: {\n root: {\n boxShadow: theme.customShadows.z16,\n borderRadius: theme.shape.borderRadiusMd,\n position: 'relative',\n zIndex: 0 // Fix Safari overflow: hidden with border radius\n }\n }\n },\n MuiCardHeader: {\n defaultProps: {\n titleTypographyProps: { variant: 'h6' },\n subheaderTypographyProps: { variant: 'body2', marginTop: theme.spacing(0.5) }\n },\n styleOverrides: {\n root: {\n padding: theme.spacing(3, 3, 0)\n }\n }\n },\n MuiCardContent: {\n styleOverrides: {\n root: {\n padding: theme.spacing(3)\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Menu(theme: Theme) {\n return {\n MuiMenuItem: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: theme.palette.action.selected,\n '&:hover': {\n backgroundColor: theme.palette.action.hover\n }\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Grid(theme: Theme) {\n return {\n MuiGrid: {\n styleOverrides: {}\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Link(theme: Theme) {\n return {\n MuiLink: {\n defaultProps: {\n underline: 'hover'\n },\n\n styleOverrides: {\n root: {}\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Input(theme: Theme) {\n return {\n MuiInputBase: {\n styleOverrides: {\n root: {\n '&.Mui-disabled': {\n '& svg': { color: theme.palette.text.disabled }\n }\n },\n input: {\n '&::placeholder': {\n opacity: 1,\n color: theme.palette.text.disabled\n }\n }\n }\n },\n MuiInput: {\n styleOverrides: {\n underline: {\n '&:before': {\n borderBottomColor: theme.palette.grey[500_56]\n }\n }\n }\n },\n MuiFilledInput: {\n styleOverrides: {\n root: {\n backgroundColor: theme.palette.grey[500_12],\n '&:hover': {\n backgroundColor: theme.palette.grey[500_16]\n },\n '&.Mui-focused': {\n backgroundColor: theme.palette.action.focus\n },\n '&.Mui-disabled': {\n backgroundColor: theme.palette.action.disabledBackground\n }\n },\n underline: {\n '&:before': {\n borderBottomColor: theme.palette.grey[500_56]\n }\n }\n }\n },\n MuiOutlinedInput: {\n styleOverrides: {\n root: {\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.grey[500_32]\n },\n '&.Mui-disabled': {\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: theme.palette.action.disabledBackground\n }\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Radio(theme: Theme) {\n return {\n MuiRadio: {\n styleOverrides: {\n root: {\n padding: theme.spacing(1),\n svg: {\n fontSize: 24,\n '&[font-size=small]': {\n fontSize: 20\n }\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Badge(theme: Theme) {\n return {\n MuiBadge: {\n styleOverrides: {\n dot: {\n width: 10,\n height: 10,\n borderRadius: '50%'\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Lists(theme: Theme) {\n return {\n MuiListItemIcon: {\n styleOverrides: {\n root: {\n color: 'inherit',\n minWidth: 'auto',\n marginRight: theme.spacing(2)\n }\n }\n },\n MuiListItemAvatar: {\n styleOverrides: {\n root: {\n minWidth: 'auto',\n marginRight: theme.spacing(2)\n }\n }\n },\n MuiListItemText: {\n styleOverrides: {\n root: {\n marginTop: 0,\n marginBottom: 0\n },\n multiline: {\n marginTop: 0,\n marginBottom: 0\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Table(theme: Theme) {\n return {\n MuiTableRow: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n backgroundColor: theme.palette.action.selected,\n '&:hover': {\n backgroundColor: theme.palette.action.hover\n }\n }\n }\n }\n },\n MuiTableCell: {\n styleOverrides: {\n root: {\n borderBottom: 'none'\n },\n head: {\n color: theme.palette.text.secondary,\n backgroundColor: theme.palette.background.neutral,\n '&:first-of-type': {\n paddingLeft: theme.spacing(3),\n borderTopLeftRadius: theme.shape.borderRadius,\n borderBottomLeftRadius: theme.shape.borderRadius,\n boxShadow: `inset 8px 0 0 ${theme.palette.background.paper}`\n },\n '&:last-of-type': {\n paddingRight: theme.spacing(3),\n borderTopRightRadius: theme.shape.borderRadius,\n borderBottomRightRadius: theme.shape.borderRadius,\n boxShadow: `inset -8px 0 0 ${theme.palette.background.paper}`\n }\n },\n stickyHeader: {\n backgroundColor: theme.palette.background.paper,\n backgroundImage: `linear-gradient(to bottom, ${theme.palette.background.neutral} 0%, ${theme.palette.background.neutral} 100%)`\n },\n body: {\n '&:first-of-type': {\n paddingLeft: theme.spacing(3)\n },\n '&:last-of-type': {\n paddingRight: theme.spacing(3)\n }\n }\n }\n },\n MuiTablePagination: {\n styleOverrides: {\n root: {\n borderTop: `solid 1px ${theme.palette.divider}`\n },\n toolbar: {\n height: 64\n },\n select: {\n '&:focus': {\n borderRadius: theme.shape.borderRadius\n }\n },\n selectIcon: {\n width: 20,\n height: 20,\n marginTop: 2\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Paper(theme: Theme) {\n return {\n MuiPaper: {\n defaultProps: {\n elevation: 0\n },\n\n styleOverrides: {\n root: {\n backgroundImage: 'none'\n }\n }\n }\n };\n}\n","import { Icon } from '@iconify/react';\nimport infoFill from '@iconify/icons-eva/info-fill';\nimport alertCircleFill from '@iconify/icons-eva/alert-circle-fill';\nimport alertTriangleFill from '@iconify/icons-eva/alert-triangle-fill';\nimport checkmarkCircle2Fill from '@iconify/icons-eva/checkmark-circle-2-fill';\n// material\nimport { Theme } from '@mui/material/styles';\n// @types\nimport { ColorSchema } from '../../@types/theme';\n\n// ----------------------------------------------------------------------\n\nexport default function Alert(theme: Theme) {\n const isLight = theme.palette.mode === 'light';\n\n const standardStyle = (color: ColorSchema) => ({\n color: theme.palette[color][isLight ? 'darker' : 'lighter'],\n backgroundColor: theme.palette[color][isLight ? 'lighter' : 'darker'],\n '& .MuiAlert-icon': {\n color: theme.palette[color][isLight ? 'main' : 'light']\n }\n });\n\n const filledStyle = (color: ColorSchema) => ({\n color: theme.palette[color].contrastText\n });\n\n const outlinedStyle = (color: ColorSchema) => ({\n color: theme.palette[color][isLight ? 'darker' : 'lighter'],\n border: `solid 1px ${theme.palette[color][isLight ? 'light' : 'dark']}`,\n backgroundColor: theme.palette[color][isLight ? 'lighter' : 'darker'],\n '& .MuiAlert-icon': {\n color: theme.palette[color][isLight ? 'main' : 'light']\n }\n });\n\n return {\n MuiAlert: {\n defaultProps: {\n iconMapping: {\n error: ,\n info: ,\n success: ,\n warning: \n }\n },\n\n styleOverrides: {\n message: {\n '& .MuiAlertTitle-root': {\n marginBottom: theme.spacing(0.5)\n }\n },\n action: {\n '& button:not(:first-of-type)': {\n marginLeft: theme.spacing(1)\n }\n },\n\n standardInfo: standardStyle('info'),\n standardSuccess: standardStyle('success'),\n standardWarning: standardStyle('warning'),\n standardError: standardStyle('error'),\n\n filledInfo: filledStyle('info'),\n filledSuccess: filledStyle('success'),\n filledWarning: filledStyle('warning'),\n filledError: filledStyle('error'),\n\n outlinedInfo: outlinedStyle('info'),\n outlinedSuccess: outlinedStyle('success'),\n outlinedWarning: outlinedStyle('warning'),\n outlinedError: outlinedStyle('error')\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Switch(theme: Theme) {\n const isLight = theme.palette.mode === 'light';\n\n return {\n MuiSwitch: {\n styleOverrides: {\n thumb: {\n boxShadow: theme.customShadows.z1\n },\n track: {\n opacity: 1,\n backgroundColor: theme.palette.grey[500]\n },\n switchBase: {\n left: 0,\n right: 'auto',\n '&:not(:.Mui-checked)': {\n color: theme.palette.grey[isLight ? 100 : 300]\n },\n '&.Mui-checked.Mui-disabled, &.Mui-disabled': {\n color: theme.palette.grey[isLight ? 400 : 600]\n },\n '&.Mui-disabled+.MuiSwitch-track': {\n opacity: 1,\n backgroundColor: `${theme.palette.action.disabledBackground} !important`\n }\n }\n }\n }\n };\n}\n","import ExpandMoreRoundedIcon from '@mui/icons-material/ExpandMoreRounded';\nimport { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Select(theme: Theme) {\n return {\n MuiSelect: {\n defaultProps: {\n IconComponent: ExpandMoreRoundedIcon\n },\n\n styleOverrides: {\n root: {}\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Button(theme: Theme) {\n return {\n MuiButton: {\n styleOverrides: {\n root: {\n '&:hover': {\n boxShadow: 'none'\n }\n },\n sizeLarge: {\n height: 48\n },\n // contained\n containedInherit: {\n color: theme.palette.grey[800],\n boxShadow: theme.customShadows.z8,\n '&:hover': {\n backgroundColor: theme.palette.grey[400]\n }\n },\n containedPrimary: {\n boxShadow: theme.customShadows.primary\n },\n containedSecondary: {\n boxShadow: theme.customShadows.secondary\n },\n containedInfo: {\n boxShadow: theme.customShadows.info\n },\n containedSuccess: {\n boxShadow: theme.customShadows.success\n },\n containedWarning: {\n boxShadow: theme.customShadows.warning\n },\n containedError: {\n boxShadow: theme.customShadows.error\n },\n // outlined\n outlinedInherit: {\n border: `1px solid ${theme.palette.grey[500_32]}`,\n '&:hover': {\n backgroundColor: theme.palette.action.hover\n }\n },\n textInherit: {\n '&:hover': {\n backgroundColor: theme.palette.action.hover\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Dialog(theme: Theme) {\n return {\n MuiDialog: {\n styleOverrides: {\n paper: {\n boxShadow: theme.customShadows.z24,\n '&.MuiPaper-rounded': {\n borderRadius: theme.shape.borderRadiusMd\n },\n '&.MuiDialog-paperFullScreen': {\n borderRadius: 0\n },\n '&.MuiDialog-paper .MuiDialogActions-root': {\n padding: theme.spacing(3)\n },\n '@media (max-width: 600px)': {\n margin: theme.spacing(2)\n },\n '@media (max-width: 663.95px)': {\n '&.MuiDialog-paperWidthSm.MuiDialog-paperScrollBody': {\n maxWidth: '100%'\n }\n }\n },\n paperFullWidth: {\n width: '100%'\n }\n }\n },\n MuiDialogTitle: {\n styleOverrides: {\n root: {\n padding: theme.spacing(3, 3, 0)\n }\n }\n },\n MuiDialogContent: {\n styleOverrides: {\n root: {\n borderTop: 0,\n borderBottom: 0,\n padding: theme.spacing(3)\n }\n }\n },\n MuiDialogActions: {\n styleOverrides: {\n root: {\n '& > :not(:first-of-type)': {\n marginLeft: theme.spacing(1.5)\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Avatar(theme: Theme) {\n return {\n MuiAvatar: {\n styleOverrides: {\n colorDefault: {\n color: theme.palette.text.secondary,\n backgroundColor: theme.palette.grey[400]\n }\n }\n },\n MuiAvatarGroup: {\n styleOverrides: {\n avatar: {\n fontSize: 16,\n fontWeight: theme.typography.fontWeightMedium,\n '&:first-of-type': {\n fontSize: 14,\n color: theme.palette.primary.main,\n backgroundColor: theme.palette.primary.lighter\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Slider(theme: Theme) {\n const isLight = theme.palette.mode === 'light';\n\n return {\n MuiSlider: {\n defaultProps: {\n size: 'small'\n },\n\n styleOverrides: {\n root: {\n '&.Mui-disabled': {\n color: theme.palette.action.disabled\n }\n },\n markLabel: {\n fontSize: 13,\n color: theme.palette.text.disabled\n },\n valueLabel: {\n borderRadius: 8,\n backgroundColor: theme.palette.grey[isLight ? 800 : 700]\n }\n }\n }\n };\n}\n","import { alpha, Theme } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nexport default function Drawer(theme: Theme) {\n const isLight = theme.palette.mode === 'light';\n\n return {\n MuiDrawer: {\n styleOverrides: {\n modal: {\n '&[role=\"presentation\"]': {\n '& .MuiDrawer-paperAnchorLeft': {\n boxShadow: `8px 24px 24px 12px ${alpha(\n theme.palette.grey[900],\n isLight ? 0.16 : 0.48\n )}`\n },\n '& .MuiDrawer-paperAnchorRight': {\n boxShadow: `-8px 24px 24px 12px ${alpha(\n theme.palette.grey[900],\n isLight ? 0.16 : 0.48\n )}`\n }\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Pickers(theme: Theme) {\n return {};\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Stepper(theme: Theme) {\n return {\n MuiStepConnector: {\n styleOverrides: {\n line: {\n borderColor: theme.palette.divider\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Tooltip(theme: Theme) {\n const isLight = theme.palette.mode === 'light';\n\n return {\n MuiTooltip: {\n styleOverrides: {\n tooltip: {\n backgroundColor: theme.palette.grey[isLight ? 800 : 700]\n },\n arrow: {\n color: theme.palette.grey[isLight ? 800 : 700]\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Popover(theme: Theme) {\n return {\n MuiPopover: {\n styleOverrides: {\n paper: {\n boxShadow: theme.customShadows.z12\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function SvgIcon(theme: Theme) {\n return {\n MuiSvgIcon: {\n styleOverrides: {\n fontSizeSmall: {\n width: 20,\n height: 20,\n fontSize: 'inherit'\n },\n fontSizeLarge: {\n width: 32,\n height: 32,\n fontSize: 'inherit'\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function DataGrid(theme: Theme) {\n return {\n MuiDataGrid: {\n styleOverrides: {\n root: {\n borderRadius: 0,\n border: `1px solid transparent`,\n '& .MuiTablePagination-root': {\n borderTop: 0\n },\n '& .MuiDataGrid-toolbarContainer': {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.neutral,\n '& .MuiButton-root': {\n marginRight: theme.spacing(1.5),\n color: theme.palette.text.primary,\n '&:hover': {\n backgroundColor: theme.palette.action.hover\n }\n }\n },\n '& .MuiDataGrid-cell, .MuiDataGrid-columnsContainer': {\n borderBottom: `1px solid ${theme.palette.divider}`\n },\n '& .MuiDataGrid-columnSeparator': {\n color: theme.palette.divider\n },\n '& .MuiDataGrid-columnHeader[data-field=\"__check__\"]': {\n padding: 0\n }\n }\n }\n },\n MuiGridMenu: {\n styleOverrides: {\n root: {\n '& .MuiDataGrid-gridMenuList': {\n boxShadow: theme.customShadows.z20,\n borderRadius: theme.shape.borderRadius\n },\n '& .MuiMenuItem-root': {\n ...theme.typography.body2\n }\n }\n }\n },\n MuiGridFilterForm: {\n styleOverrides: {\n root: {\n padding: theme.spacing(1.5, 0),\n '& .MuiFormControl-root': {\n margin: theme.spacing(0, 0.5)\n },\n '& .MuiInput-root': {\n marginTop: theme.spacing(3),\n '&::before, &::after': {\n display: 'none'\n },\n '& .MuiNativeSelect-select, .MuiInput-input': {\n ...theme.typography.body2,\n padding: theme.spacing(0.75, 1),\n borderRadius: theme.shape.borderRadius,\n backgroundColor: theme.palette.background.neutral\n },\n '& .MuiSvgIcon-root': {\n right: 4\n }\n }\n }\n }\n },\n MuiGridPanelFooter: {\n styleOverrides: {\n root: {\n padding: theme.spacing(2),\n justifyContent: 'flex-end',\n '& .MuiButton-root': {\n '&:first-of-type': {\n marginRight: theme.spacing(1.5),\n color: theme.palette.text.primary,\n '&:hover': {\n backgroundColor: theme.palette.action.hover\n }\n },\n '&:last-of-type': {\n color: theme.palette.common.white,\n backgroundColor: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: theme.palette.primary.dark\n }\n }\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Skeleton(theme: Theme) {\n return {\n MuiSkeleton: {\n defaultProps: {\n animation: 'wave'\n },\n\n styleOverrides: {\n root: {\n backgroundColor: theme.palette.background.neutral\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Timeline(theme: Theme) {\n return {\n MuiTimelineDot: {\n styleOverrides: {\n root: {\n boxShadow: 'none'\n }\n }\n },\n\n MuiTimelineConnector: {\n styleOverrides: {\n root: {\n backgroundColor: theme.palette.divider\n }\n }\n }\n };\n}\n","import { alpha, Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Backdrop(theme: Theme) {\n const varLow = alpha(theme.palette.grey[900], 0.48);\n const varHigh = alpha(theme.palette.grey[900], 1);\n\n return {\n MuiBackdrop: {\n styleOverrides: {\n root: {\n background: [\n `rgb(22,28,36)`,\n `-moz-linear-gradient(75deg, ${varLow} 0%, ${varHigh} 100%)`,\n `-webkit-linear-gradient(75deg, ${varLow} 0%, ${varHigh} 100%)`,\n `linear-gradient(75deg, ${varLow} 0%, ${varHigh} 100%)`\n ],\n '&.MuiBackdrop-invisible': {\n background: 'transparent'\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Snackbar(theme: Theme) {\n return {\n MuiSnackbarContent: {\n styleOverrides: {\n root: {}\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Progress(theme: Theme) {\n const isLight = theme.palette.mode === 'light';\n\n return {\n MuiLinearProgress: {\n styleOverrides: {\n root: {\n borderRadius: 4,\n overflow: 'hidden'\n },\n bar: {\n borderRadius: 4\n },\n colorPrimary: {\n backgroundColor: theme.palette.primary[isLight ? 'lighter' : 'darker']\n },\n buffer: {\n backgroundColor: 'transparent'\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Container(theme: Theme) {\n return {\n MuiContainer: {\n styleOverrides: {\n root: {}\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Accordion(theme: Theme) {\n return {\n MuiAccordion: {\n styleOverrides: {\n root: {\n '&.Mui-expanded': {\n boxShadow: theme.customShadows.z8,\n borderRadius: theme.shape.borderRadius\n },\n '&.Mui-disabled': {\n backgroundColor: 'transparent'\n }\n }\n }\n },\n MuiAccordionSummary: {\n styleOverrides: {\n root: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(1),\n '&.Mui-disabled': {\n opacity: 1,\n color: theme.palette.action.disabled,\n '& .MuiTypography-root': {\n color: 'inherit'\n }\n }\n },\n expandIconWrapper: {\n color: 'inherit'\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function IconButton(theme: Theme) {\n return {\n MuiIconButton: {\n styleOverrides: {\n root: {}\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Typography(theme: Theme) {\n return {\n MuiTypography: {\n styleOverrides: {\n paragraph: {\n marginBottom: theme.spacing(2)\n },\n gutterBottom: {\n marginBottom: theme.spacing(1)\n }\n }\n }\n };\n}\n","import { alpha, Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Pagination(theme: Theme) {\n return {\n MuiPaginationItem: {\n styleOverrides: {\n root: {\n '&.Mui-selected': {\n fontWeight: theme.typography.fontWeightBold\n }\n },\n textPrimary: {\n '&.Mui-selected': {\n color: theme.palette.primary.main,\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n '&:hover, &.Mui-focusVisible': {\n backgroundColor: `${alpha(theme.palette.primary.main, 0.24)} !important`\n }\n }\n },\n outlined: {\n border: `1px solid ${theme.palette.grey[500_32]}`\n },\n outlinedPrimary: {\n '&.Mui-selected': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n border: `1px solid ${alpha(theme.palette.primary.main, 0.24)}`\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function ButtonGroup(theme: Theme) {\n const styleContained = (\n color: 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'error'\n ) => ({\n props: { variant: 'contained', color },\n style: { boxShadow: theme.customShadows[color] }\n });\n\n return {\n MuiButtonGroup: {\n variants: [\n {\n props: { variant: 'contained', color: 'inherit' },\n style: { boxShadow: theme.customShadows.z8 }\n },\n styleContained('primary'),\n styleContained('secondary'),\n styleContained('info'),\n styleContained('success'),\n styleContained('warning'),\n styleContained('error'),\n\n {\n props: { disabled: true },\n style: {\n boxShadow: 'none',\n '& .MuiButtonGroup-grouped.Mui-disabled': {\n color: theme.palette.action.disabled,\n borderColor: `${theme.palette.action.disabledBackground} !important`,\n '&.MuiButton-contained': {\n backgroundColor: theme.palette.action.disabledBackground\n }\n }\n }\n }\n ],\n\n styleOverrides: {\n root: {\n '&:hover': {\n boxShadow: 'none'\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Breadcrumbs(theme: Theme) {\n return {\n MuiBreadcrumbs: {\n styleOverrides: {\n separator: {\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2)\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function Autocomplete(theme: Theme) {\n return {\n MuiAutocomplete: {\n styleOverrides: {\n paper: {\n boxShadow: theme.customShadows.z20\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function ControlLabel(theme: Theme) {\n return {\n MuiFormControlLabel: {\n styleOverrides: {\n label: {\n ...theme.typography.body2\n }\n }\n },\n MuiFormHelperText: {\n styleOverrides: {\n root: {\n marginTop: theme.spacing(1)\n }\n }\n },\n MuiFormLabel: {\n styleOverrides: {\n root: {\n color: theme.palette.text.disabled\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function ToggleButton(theme: Theme) {\n const isLight = theme.palette.mode === 'light';\n\n return {\n MuiToggleButton: {\n styleOverrides: {\n root: {\n color: theme.palette.grey[500],\n border: `solid 1px ${theme.palette.grey[500_32]}`,\n '&.Mui-selected': {\n color: theme.palette.grey[isLight ? 600 : 0],\n backgroundColor: theme.palette.action.selected\n },\n '&.Mui-disabled': {\n color: theme.palette.grey[500_48]\n }\n }\n }\n }\n };\n}\n","import { Theme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\nexport default function LoadingButton(theme: Theme) {\n return {\n MuiLoadingButton: {\n styleOverrides: {\n root: {\n '&.MuiButton-text': {\n '& .MuiLoadingButton-startIconPendingStart': {\n marginLeft: 0\n },\n '& .MuiLoadingButton-endIconPendingEnd': {\n marginRight: 0\n }\n }\n }\n }\n }\n };\n}\n","// material\nimport { alpha } from '@mui/material/styles';\nimport { Shadows } from '@mui/material/styles/shadows';\n//\nimport palette from './palette';\n\n// ----------------------------------------------------------------------\n\ninterface CustomShadowOptions {\n z1: string;\n z8: string;\n z12: string;\n z16: string;\n z20: string;\n z24: string;\n primary: string;\n secondary: string;\n info: string;\n success: string;\n warning: string;\n error: string;\n}\n\ndeclare module '@mui/material/styles' {\n interface Theme {\n customShadows: CustomShadowOptions;\n }\n interface ThemeOptions {\n customShadows?: CustomShadowOptions;\n }\n}\n\nconst LIGHT_MODE = palette.light.grey[500];\nconst DARK_MODE = '#000000';\n\nconst createShadow = (color: string): Shadows => {\n const transparent1 = alpha(color, 0.2);\n const transparent2 = alpha(color, 0.14);\n const transparent3 = alpha(color, 0.12);\n return [\n 'none',\n `0px 2px 1px -1px ${transparent1},0px 1px 1px 0px ${transparent2},0px 1px 3px 0px ${transparent3}`,\n `0px 3px 1px -2px ${transparent1},0px 2px 2px 0px ${transparent2},0px 1px 5px 0px ${transparent3}`,\n `0px 3px 3px -2px ${transparent1},0px 3px 4px 0px ${transparent2},0px 1px 8px 0px ${transparent3}`,\n `0px 2px 4px -1px ${transparent1},0px 4px 5px 0px ${transparent2},0px 1px 10px 0px ${transparent3}`,\n `0px 3px 5px -1px ${transparent1},0px 5px 8px 0px ${transparent2},0px 1px 14px 0px ${transparent3}`,\n `0px 3px 5px -1px ${transparent1},0px 6px 10px 0px ${transparent2},0px 1px 18px 0px ${transparent3}`,\n `0px 4px 5px -2px ${transparent1},0px 7px 10px 1px ${transparent2},0px 2px 16px 1px ${transparent3}`,\n `0px 5px 5px -3px ${transparent1},0px 8px 10px 1px ${transparent2},0px 3px 14px 2px ${transparent3}`,\n `0px 5px 6px -3px ${transparent1},0px 9px 12px 1px ${transparent2},0px 3px 16px 2px ${transparent3}`,\n `0px 6px 6px -3px ${transparent1},0px 10px 14px 1px ${transparent2},0px 4px 18px 3px ${transparent3}`,\n `0px 6px 7px -4px ${transparent1},0px 11px 15px 1px ${transparent2},0px 4px 20px 3px ${transparent3}`,\n `0px 7px 8px -4px ${transparent1},0px 12px 17px 2px ${transparent2},0px 5px 22px 4px ${transparent3}`,\n `0px 7px 8px -4px ${transparent1},0px 13px 19px 2px ${transparent2},0px 5px 24px 4px ${transparent3}`,\n `0px 7px 9px -4px ${transparent1},0px 14px 21px 2px ${transparent2},0px 5px 26px 4px ${transparent3}`,\n `0px 8px 9px -5px ${transparent1},0px 15px 22px 2px ${transparent2},0px 6px 28px 5px ${transparent3}`,\n `0px 8px 10px -5px ${transparent1},0px 16px 24px 2px ${transparent2},0px 6px 30px 5px ${transparent3}`,\n `0px 8px 11px -5px ${transparent1},0px 17px 26px 2px ${transparent2},0px 6px 32px 5px ${transparent3}`,\n `0px 9px 11px -5px ${transparent1},0px 18px 28px 2px ${transparent2},0px 7px 34px 6px ${transparent3}`,\n `0px 9px 12px -6px ${transparent1},0px 19px 29px 2px ${transparent2},0px 7px 36px 6px ${transparent3}`,\n `0px 10px 13px -6px ${transparent1},0px 20px 31px 3px ${transparent2},0px 8px 38px 7px ${transparent3}`,\n `0px 10px 13px -6px ${transparent1},0px 21px 33px 3px ${transparent2},0px 8px 40px 7px ${transparent3}`,\n `0px 10px 14px -6px ${transparent1},0px 22px 35px 3px ${transparent2},0px 8px 42px 7px ${transparent3}`,\n `0px 11px 14px -7px ${transparent1},0px 23px 36px 3px ${transparent2},0px 9px 44px 8px ${transparent3}`,\n `0px 11px 15px -7px ${transparent1},0px 24px 38px 3px ${transparent2},0px 9px 46px 8px ${transparent3}`\n ];\n};\n\nconst createCustomShadow = (color: string) => {\n const transparent = alpha(color, 0.24);\n return {\n z1: `0 1px 2px 0 ${transparent}`,\n z8: `0 8px 16px 0 ${transparent}`,\n z12: `0 0 2px 0 ${transparent}, 0 12px 24px 0 ${transparent}`,\n z16: `0 0 2px 0 ${transparent}, 0 16px 32px -4px ${transparent}`,\n z20: `0 0 2px 0 ${transparent}, 0 20px 40px -4px ${transparent}`,\n z24: `0 0 4px 0 ${transparent}, 0 24px 48px 0 ${transparent}`,\n primary: `0 8px 16px 0 ${alpha(palette.light.primary.main, 0.24)}`,\n info: `0 8px 16px 0 ${alpha(palette.light.info.main, 0.24)}`,\n secondary: `0 8px 16px 0 ${alpha(palette.light.secondary.main, 0.24)}`,\n success: `0 8px 16px 0 ${alpha(palette.light.success.main, 0.24)}`,\n warning: `0 8px 16px 0 ${alpha(palette.light.warning.main, 0.24)}`,\n error: `0 8px 16px 0 ${alpha(palette.light.error.main, 0.24)}`\n };\n};\n\nexport const customShadows = {\n light: createCustomShadow(LIGHT_MODE),\n dark: createCustomShadow(DARK_MODE)\n};\n\nconst shadows: {\n light: Shadows;\n dark: Shadows;\n} = {\n light: createShadow(LIGHT_MODE),\n dark: createShadow(DARK_MODE)\n};\n\nexport default shadows;\n","import { useMemo, ReactNode } from 'react';\n// material\nimport { CssBaseline } from '@mui/material';\nimport {\n createTheme,\n ThemeOptions,\n ThemeProvider,\n StyledEngineProvider\n} from '@mui/material/styles';\n// options\nimport shape from './shape';\nimport palette from './palette';\nimport typography from './typography';\nimport breakpoints from './breakpoints';\nimport componentsOverride from './overrides';\nimport shadows, { customShadows } from './shadows';\n\n// ----------------------------------------------------------------------\n\ntype ThemeConfigProps = {\n children: ReactNode;\n};\n\nexport default function ThemeConfig({ children }: ThemeConfigProps) {\n const themeOptions: ThemeOptions = useMemo(\n () => ({\n palette: palette.light,\n shape,\n typography,\n breakpoints,\n shadows: shadows.light,\n customShadows: customShadows.light\n }),\n []\n );\n\n const theme = createTheme(themeOptions);\n theme.components = componentsOverride(theme);\n\n return (\n \n \n \n {children}\n \n \n );\n}\n","// material\nimport { useTheme } from '@mui/material/styles';\nimport { GlobalStyles as GlobalThemeStyles } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nexport default function GlobalStyles() {\n const theme = useTheme();\n\n return (\n \n );\n}\n","import { useEffect, ReactNode } from 'react';\n// rtl\nimport rtlPlugin from 'stylis-plugin-rtl';\n// emotion\nimport createCache from '@emotion/cache';\nimport { CacheProvider } from '@emotion/react';\n// material\nimport { useTheme } from '@mui/material/styles';\n\n// ----------------------------------------------------------------------\n\ntype RtlLayoutProps = {\n children?: ReactNode;\n};\n\nexport default function RtlLayout({ children }: RtlLayoutProps) {\n const theme = useTheme();\n\n useEffect(() => {\n document.dir = theme.direction;\n }, [theme.direction]);\n\n const cacheRtl = createCache({\n key: theme.direction === 'rtl' ? 'rtl' : 'css',\n // @ts-ignore\n stylisPlugins: theme.direction === 'rtl' ? [rtlPlugin] : []\n });\n\n cacheRtl.compat = true;\n\n return {children};\n}\n","import { ReactNode } from 'react';\nimport { Icon, IconifyIcon } from '@iconify/react';\nimport { SnackbarProvider } from 'notistack';\nimport infoFill from '@iconify/icons-eva/info-fill';\nimport alertCircleFill from '@iconify/icons-eva/alert-circle-fill';\nimport alertTriangleFill from '@iconify/icons-eva/alert-triangle-fill';\nimport checkmarkCircle2Fill from '@iconify/icons-eva/checkmark-circle-2-fill';\n// material\nimport { alpha, useTheme } from '@mui/material/styles';\nimport { Box, GlobalStyles } from '@mui/material';\n// @types\nimport { ColorSchema } from '../@types/theme';\n\n// ----------------------------------------------------------------------\n\nfunction SnackbarStyles() {\n const theme = useTheme();\n const isLight = theme.palette.mode === 'light';\n\n return (\n \n );\n}\n\ntype SnackbarIconProps = {\n icon: IconifyIcon;\n color: ColorSchema;\n};\n\nfunction SnackbarIcon({ icon, color }: SnackbarIconProps) {\n return (\n alpha(theme.palette[color].main, 0.16)\n }}\n >\n \n \n );\n}\n\ntype NotistackProviderProps = {\n children: ReactNode;\n};\n\nexport default function NotistackProvider({ children }: NotistackProviderProps) {\n return (\n <>\n \n\n ,\n error: ,\n warning: ,\n info: \n }}\n >\n {children}\n \n \n );\n}\n","import { useContext } from 'react';\nimport { SettingsContext } from '../contexts/SettingsContext';\n\n// ----------------------------------------------------------------------\n\nconst useSettings = () => useContext(SettingsContext);\n\nexport default useSettings;\n","import { ReactNode, useMemo } from 'react';\n// material\nimport { alpha, ThemeProvider, createTheme, useTheme } from '@mui/material/styles';\n// hooks\nimport useSettings from '../hooks/useSettings';\n//\nimport componentsOverride from '../theme/overrides';\n\n// ----------------------------------------------------------------------\n\ntype ThemePrimaryColorProps = {\n children: ReactNode;\n};\n\nexport default function ThemePrimaryColor({ children }: ThemePrimaryColorProps) {\n const defaultTheme = useTheme();\n const { setColor } = useSettings();\n\n const themeOptions = useMemo(\n () => ({\n ...defaultTheme,\n palette: {\n ...defaultTheme.palette,\n primary: setColor\n },\n customShadows: {\n ...defaultTheme.customShadows,\n primary: `0 8px 16px 0 ${alpha(setColor.main, 0.24)}`\n }\n }),\n [setColor, defaultTheme]\n );\n\n const theme = createTheme(themeOptions);\n theme.components = componentsOverride(theme);\n\n return {children};\n}\n","import { ReactNode } from 'react';\n// material\nimport { ThemeProvider, createTheme, useTheme } from '@mui/material/styles';\n// hooks\nimport useLocales from '../hooks/useLocales';\n\n// ----------------------------------------------------------------------\n\ntype ThemeLocalizationProps = {\n children: ReactNode;\n};\n\nexport default function ThemeLocalization({ children }: ThemeLocalizationProps) {\n const defaultTheme = useTheme();\n const { currentLang } = useLocales();\n\n const theme = createTheme(defaultTheme, currentLang.systemValue);\n\n return {children};\n}\n","// routes\nimport Router from './routes';\n// theme\nimport ThemeConfig from './theme';\nimport GlobalStyles from './theme/globalStyles';\n// hooks\nimport useAuth from './hooks/useAuth';\n// components\nimport RtlLayout from './components/RtlLayout';\nimport NotistackProvider from './components/NotistackProvider';\nimport ThemePrimaryColor from './components/ThemePrimaryColor';\nimport ThemeLocalization from './components/ThemeLocalization';\nimport { BaseOptionChartStyle } from './components/charts/BaseOptionChart';\nimport { ProgressBarStyle } from './components/LoadingScreen';\nimport { CircularProgress } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nexport default function App() {\n const { isInitialized } = useAuth();\n\n return (\n \n \n \n \n \n \n \n \n {isInitialized ? (\n \n ) : (\n \n )}\n \n \n \n \n \n );\n}\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 https://cra.link/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.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: 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 console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://cra.link/PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: 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 console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://cra.link/PWA.'\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: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\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 console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","// mock api\n// import './_apis_';\nimport { hydrate, render } from 'react-dom';\nimport { HelmetProvider } from 'react-helmet-async';\n\n// default css\nimport 'styles/index.css';\n\n// i18n\nimport './utils/locales/i18n';\n\n// scroll bar\nimport 'simplebar/src/simplebar.css';\n\n// lazy image\nimport 'lazysizes';\nimport 'lazysizes/plugins/attrchange/ls.attrchange';\nimport 'lazysizes/plugins/object-fit/ls.object-fit';\nimport 'lazysizes/plugins/parent-fit/ls.parent-fit';\n\nimport { BrowserRouter } from 'react-router-dom';\n\n// material\nimport AdapterDateFns from '@mui/lab/AdapterDateFns';\nimport LocalizationProvider from '@mui/lab/LocalizationProvider';\n\n// contexts\nimport { SettingsProvider } from './contexts/SettingsContext';\nimport { CollapseDrawerProvider } from './contexts/CollapseDrawerContext';\nimport { BackendApiProvider } from 'contexts/backend/BackendApiContext';\nimport { DeepLinkProvider } from 'contexts/deeplink/DeepLinkContext';\n\n// Check our docs\n// https://docs-minimals.vercel.app/authentication/ts-version\n\nimport { AuthProvider } from './contexts/auth/AuthContext';\n\nimport App from './App';\nimport * as serviceWorkerRegistration from './serviceWorkerRegistration';\nimport reportWebVitals from './reportWebVitals';\n\n// ----------------------------------------------------------------------\n//NOTE: to remove console\nif (process.env.NODE_ENV === 'production') {\n console.log = () => {};\n console.error = () => {};\n console.time = () => {};\n console.debug = () => {};\n}\nconst rootElement = document.getElementById('root');\n\nconst ComponentsHierarchy = () => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nif (rootElement?.hasChildNodes()) {\n hydrate(, rootElement);\n} else {\n render(, rootElement);\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: https://cra.link/PWA\nserviceWorkerRegistration.unregister();\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","import { last } from 'lodash';\nimport { ReactElement } from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { Box, Link, Typography, Breadcrumbs, BreadcrumbsProps } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\nconst Separator = (\n \n);\n\ntype TLink = {\n href?: string;\n name: string;\n icon?: ReactElement;\n};\n\nfunction LinkItem({ link }: { link: TLink }) {\n const { href, name, icon } = link;\n return (\n div': { display: 'inherit' }\n }}\n >\n {icon && (\n \n {icon}\n \n )}\n {name}\n \n );\n}\n\nexport interface MBreadcrumbsProps extends BreadcrumbsProps {\n links: TLink[];\n activeLast?: boolean;\n}\n\nexport default function MBreadcrumbs({ links, activeLast = false, ...other }: MBreadcrumbsProps) {\n const currentLink = last(links)?.name;\n\n const listDefault = links.map((link) => );\n const listActiveLast = links.map((link) => (\n
\n {link.name !== currentLink ? (\n \n ) : (\n \n {currentLink}\n \n )}\n
\n ));\n\n return (\n \n {activeLast ? listDefault : listActiveLast}\n \n );\n}\n","import { forwardRef } from 'react';\n// material\nimport { IconButton, IconButtonProps } from '@mui/material';\n//\nimport { ButtonAnimate } from '../animate';\n\n// ----------------------------------------------------------------------\n\nconst MIconButton = forwardRef(\n ({ children, ...other }, ref) => (\n \n \n {children}\n \n \n )\n);\n\nexport default MIconButton;\n","import { ReactNode } from 'react';\n// material\nimport { Breakpoint, Theme, useMediaQuery } from '@mui/material';\n\n// ----------------------------------------------------------------------\n\ntype MHiddenProps = {\n children: ReactNode;\n width:\n | 'xsDown'\n | 'smDown'\n | 'mdDown'\n | 'lgDown'\n | 'xlDown'\n | 'xsUp'\n | 'smUp'\n | 'mdUp'\n | 'lgUp'\n | 'xlUp';\n};\n\nexport default function MHidden({ width, children }: MHiddenProps) {\n const breakpoint = width.substring(0, 2) as Breakpoint;\n const hiddenUp = useMediaQuery((theme) => theme.breakpoints.up(breakpoint));\n const hiddenDown = useMediaQuery((theme) => theme.breakpoints.down(breakpoint));\n\n if (width.includes('Down')) {\n return hiddenDown ? null : <>{children};\n }\n\n if (width.includes('Up')) {\n return hiddenUp ? null : <>{children};\n }\n\n return null;\n}\n"],"sourceRoot":""}