{"version":3,"sources":["reducers/dashboardReducer.ts","contexts/DashboardContext.tsx","api/flashcards/types/FlashcardConstants.ts","api/flashcards/useLoadFlashcards.ts","api/account/useGetCurrentUserProfile.ts","api/dashboard/types/DashboardConstants.ts","api/dashboard/useGetDashboard.ts","api/authService.tsx","components/shared/LoadingOverlay.tsx","reducers/globalReducer.ts","contexts/GlobalContext.tsx","reducers/actions/GlobalActions.ts","reducers/actions/FlashcardsActions.ts","components/shared/Utils.tsx","reducers/actions/DashboardActions.ts","api/shared/useApiKotobaAnkiGet.ts","components/shared/Notfound.tsx","core/types/enums/Roles.ts","core/utils.ts","contexts/ToastContext.tsx","reducers/flashcardsReducer.ts","contexts/FlashcardsContext.tsx","components/shared/api-authorization/AuthorizeRoute.tsx","components/shared/api-authorization/ApiAuthorizationConstants.ts","components/shared/Success.tsx","core/types/Constants.ts","components/shared/menu/admin/AdminMenuItems.tsx","components/shared/menu/NavMenuItems.tsx","components/shared/settings/GeneralSettings.tsx","components/shared/settings/FlashcardsSettings.tsx","components/shared/settings/TabsSettings.tsx","components/shared/menu/NavMenuLogin.tsx","components/shared/menu/NavMenu.tsx","components/shared/Layout.tsx","components/shared/Processing.tsx","components/shared/api-authorization/Login.tsx","components/shared/api-authorization/Logout.tsx","routes/ApiAuthorizationRoutes.tsx","components/shared/Footer.tsx","components/shared/HomeGeneric.tsx","components/shared/loaders/LoadHomeLogged.tsx","components/shared/Home.tsx","components/shared/loaders/LoadTermsConditionsMain.tsx","components/shared/loaders/LoadPrivacyPolicyMain.tsx","routes/loaders/LoadCustomFlashcardsRoutes.tsx","routes/loaders/LoadFlashcardsRoutes.tsx","routes/loaders/LoadDecksRoutes.tsx","routes/loaders/LoadFlashcardsReviewRoutes.tsx","routes/loaders/LoadSubscriptionsRoutes.tsx","routes/loaders/LoadAccountRoutes.tsx","routes/loaders/LoadContactFeedback.tsx","routes/loaders/LoadAdminRoutes.tsx","routes/AppRoutes.tsx","App.tsx","registerServiceWorker.ts","reportWebVitals.js","index.tsx","api/shared/restErrorHandler.tsx","api/interceptors/authTokenInterceptor.ts","api/shared/httpAxios.ts","api/shared/httpApiKotobaAnki.ts","api/account/types/AccountConstants.ts"],"names":["dashboardReducer","state","action","type","DashboardActions","SET_DASHBOARD","payload","SET_LAST_CUSTOM_FLASHCARD","lastCustomFlashcard","SET_LAST_DECK","lastDeck","SET_LEARNING_STREAK","DashboardContext","React","createContext","DashboardProvider","children","useReducer","learningStreak","weeklyFlashcardDoneReviews","maximumLearningStreak","isLoading","dashboardState","dashboardDispatcher","provider","execute","useGetDashboard","noDisplayLoading","executeGetCurrentUserProfile","useGetCurrentUserProfile","useGlobalContext","globalState","globalDispatcher","isAuthenticated","userProfile","useEffect","getDashboardGeneralSection","a","result","error","response","loadUserProfile","GlobalActions","SET_USER","Provider","value","useDashboardContext","useContext","flashcardConstants","baseUrl","useLoadFlashcards","options","useApiKotobaAnkiGet","apiConstants","dashboardConstants","useDashboardSection","AuthorizeService","_baseUrl","_callbacks","_nextSubscriptionId","_user","_isAuthenticated","userManager","_popUpDisabled","this","getUser","user","profile","ensureUserManagerInitialized","expired","undefined","clearStaleState","access_token","signinSilent","createArguments","silentUser","updateState","success","console","log","Error","signinPopup","popUpUser","message","signinRedirect","redirect","url","signinCallback","signoutPopup","signoutRedirect","signoutCallback","data","notifySubscribers","callback","push","subscription","subscriptionId","subscriptionIndex","map","element","index","found","filter","length","splice","i","useReplaceToNavigate","status","AuthenticationResultStatus","Fail","Success","Redirect","fetch","ApplicationPaths","ApiAuthorizationClientConfigurationUrl","ok","ApplicationName","json","settings","automaticSilentRenew","includeIdTokenInSilentRenew","silent_redirect_uri","window","location","origin","toString","userStore","WebStorageStateStore","prefix","store","localStorage","UserManager","events","addUserSignedOut","removeUser","authService","LoadingOverlay","showLoading","className","Classes","OVERLAY_SCROLL_CONTAINER","canOutsideClickClose","canEscapeKeyClose","isOpen","intent","size","style","color","getUserSettingsFromLocalStorage","noSound","isDarkMode","showFuriganaAlways","getItem","userSettings","JSON","parse","setUserSettingsToLocalStorage","setItem","stringify","globalReducer","SET_DARK_THEME","TOGGLE_SHOW_FURIGANA","TOGGLE_NO_SOUND","BEGIN_API_CALL","apiProcessing","API_CALL_SUCCESS","API_CALL_ERROR","GlobalContext","GlobalProvider","populateState","Promise","all","_subscription","subscribe","unsubscribe","FlashcardsActions","ScrollToTopOnMount","scrollTo","useState","loading","setState","addToast","useToastContext","params","config","paramBuild","buildParams","urlFinal","indexOf","querystring","apiService","get","then","catch","restErrorHandler","resolve","Notfound","icon","title","description","to","textDecoration","minimal","large","text","Roles","newParams","key","Date","moment","format","Object","keys","calculateFrontCardTextSize","width","content","configuration","nameSize","Math","round","characterNumber","ajustPercentage","actualwidth","calculateBackCardTextSize","hasImage","isCaption","meaningCaptionSize","meaningSize","calculateBackImgMaxHeightSize","shuffle","array","sort","random","Array","enumToArray","enumValue","name","enumToEnumArray","getBase64","file","reject","reader","FileReader","readAsDataURL","onload","onerror","proccessAttachments","fileList","attachments","resultBase64","resultFinal","lastIndexOf","substring","filename","disposition","formatDate","date","UTCToLocalDate","dateFormat","formatDateTime","dateTimeFormat","dateWithoutTime","dateTime","getTime","setHours","dateAddMonth","monthsToAdd","setMonth","getMonth","buildLoginRedirectUrl","link","document","createElement","href","returnUrl","protocol","host","pathname","search","hash","Login","QueryParameterNames","ReturnUrl","encodeURIComponent","vibrateCustom","pattern","navigator","vibrate","vibrateTap","ToastContext","ToastProvider","toaster","toasts","refHandlers","ref","position","Position","TOP","useCallback","toast","props","show","getFiltersFromLocalStorage","_limit","_page","flashcardsFilterState","flashcardsReducer","LOAD_FILTERS","filters","SET_FILTERS","localStorageFilter","name_like","nameRomaji_like","nameHiragana_like","STOP_INFINTE_SCROLL","hasMore","RESTART_INFINTE_SCROLL","infiniteScrollKey","flashcards","ADD_FLASHCARDS","concat","FlashcardsContext","FlashcardsProvider","flashcardsState","flashcardsDispatcher","useFlashcardsContext","AuthorizeRoute","ready","authenticated","role","authenticationChanged","populateAuthenticationState","path","redirectUrl","Component","component","roles","rest","render","some","x","Message","LogoutActions","LogoutCallback","Logout","LoggedOut","LoginActions","LoginCallback","LoginFailed","Profile","Register","DefaultLoginRedirectPath","ApiAuthorizationPrefix","LogOut","LogOutCallback","IdentityRegisterPath","IdentityManagePath","detailMessage","AdminMenuItems","closeDrawer","drawerIsOpen","closeParentDrawer","handleClickSettings","alignText","onClick","NavMenuItems","small","Intent","PRIMARY","individual_free","local","admin","GeneralSettings","inline","label","onChange","event","target","selectedValue","labelElement","checked","innerLabelChecked","innerLabel","FlashcardsSettings","TabsSettings","DIALOG_BODY","animate","id","renderActiveTabPanelOnly","vertical","panel","DIALOG_FOOTER","DIALOG_FOOTER_ACTIONS","onClose","NavMenuLogin","avatarImage","src","alt","preferred_username","popoverClassName","POPOVER_CONTENT_SIZING","interactionKind","placement","fill","rightIcon","NavMenu","history","useHistory","settingsIsOpen","searchBarOpen","handleCloseSettings","setFlashcardsFilter","isRomaji","normalize","replace","isKana","fixedToTop","Container","align","Alignment","LEFT","autoComplete","onSubmit","preventDefault","e","currentState","onBlur","placeholder","leftIcon","rightElement","RIGHT","DRAWER_HEADER","DRAWER_BODY","DRAWER_FOOTER","getFullYear","Layout","useMemo","fluid","Processing","login","getReturnUrl","processLoginCallback","URLSearchParams","redirectToProfile","redirectToRegister","signIn","navigateToReturnUrl","completeSignIn","fromQuery","startsWith","redirectToApiAuthorizationPath","encodeURI","apiAuthorizationPath","isReady","logout","processLogoutCallback","signOut","completeSignOut","ApiAuthorizationRoutes","loginAction","logoutAction","Footer","xmlns","height","viewBox","d","HomeGeneric","isInstalled","deferredPrompt","matchMedia","matches","tempState","addEventListener","installApp","prompt","userChoice","outcome","Helmet","Row","Col","sm","lg","offset","md","interactive","elevation","LoadHomeLogged","HomeLogged","lazy","fallback","Home","LoadTermsConditionsMain","TermsConditionsMain","LoadPrivacyPolicyMain","PrivacyPolicyMain","LoadCustomFlashcardsRoutes","CustomFlashcardsRoutes","LoadFlashcardsRoutes","FlashcardsRoutes","LoadDecksRoutes","DecksRoutes","LoadFlashcardsReviewRoutes","FlashcardsReviewRoutes","LoadSubscriptionsRoutes","SubscriptionsRoutes","LoadAccountRoutes","AccountRoutes","LoadContactFeedback","ContactFeedback","LoadAdminRoutes","AdminRoutes","AppRoutes","exact","reCaptchaKey","process","language","App","displayName","isLocalhost","Boolean","hostname","match","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","getElementsByTagName","getAttribute","rootElement","getElementById","createBrowserHistory","ReactDOM","basename","URL","headers","unregister","reload","checkValidServiceWorker","registerServiceWorker","errors","Errors","DANGER","WARNING","axios","isCancel","authTokenInterceptor","getAccessToken","accessToken","Authorization","promiseWith","Accept","HttpAxios","service","create","defaults","withCredentials","interceptors","use","patch","post","put","delete","HttpKotobaAnki","baseURL","request","accountConstants"],"mappings":"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","file":"static/js/main.a0227b44.chunk.js","sourcesContent":["import { IDashboardProviderState } from \"contexts/types/IDashboardProvider\";\r\nimport { Reducer } from \"react\";\r\nimport { DashboardAction, DashboardActions } from \"./actions/DashboardActions\";\r\n\r\nconst dashboardReducer: Reducer = (\r\n state,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case DashboardActions.SET_DASHBOARD:\r\n return {\r\n ...state,\r\n ...action.payload,\r\n };\r\n\r\n case DashboardActions.SET_LAST_CUSTOM_FLASHCARD:\r\n return {\r\n ...state,\r\n lastCustomFlashcard: action.payload,\r\n };\r\n case DashboardActions.SET_LAST_DECK:\r\n return {\r\n ...state,\r\n lastDeck: action.payload,\r\n };\r\n case DashboardActions.SET_LEARNING_STREAK:\r\n return {\r\n ...state,\r\n ...action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default dashboardReducer;\r\n","import useGetCurrentUserProfile from \"api/account/useGetCurrentUserProfile\";\r\nimport useGetDashboard from \"api/dashboard/useGetDashboard\";\r\nimport React, { useContext, useReducer } from \"react\";\r\nimport { useEffect } from \"react\";\r\nimport { DashboardActions } from \"reducers/actions/DashboardActions\";\r\nimport { GlobalActions } from \"reducers/actions/GlobalActions\";\r\nimport dashboardReducer from \"reducers/dashboardReducer\";\r\nimport { useGlobalContext } from \"./GlobalContext\";\r\nimport {\r\n IDashboardProvider,\r\n IDashboardProviderState,\r\n} from \"./types/IDashboardProvider\";\r\n\r\nconst DashboardContext = React.createContext(\r\n {} as IDashboardProvider\r\n);\r\n\r\nexport const DashboardProvider = ({ children }) => {\r\n const [dashboardState, dashboardDispatcher] = useReducer(dashboardReducer, {\r\n learningStreak: 0,\r\n weeklyFlashcardDoneReviews: 0,\r\n maximumLearningStreak: 0,\r\n isLoading: true,\r\n } as IDashboardProviderState);\r\n\r\n const provider: IDashboardProvider = {\r\n dashboardState,\r\n dashboardDispatcher,\r\n };\r\n\r\n const { execute } = useGetDashboard({ noDisplayLoading: true });\r\n const { execute: executeGetCurrentUserProfile } = useGetCurrentUserProfile({\r\n noDisplayLoading: true,\r\n });\r\n\r\n const { globalState, globalDispatcher } = useGlobalContext();\r\n const { isAuthenticated } = globalState.userProfile;\r\n\r\n useEffect(() => {\r\n if (isAuthenticated) {\r\n const getDashboardGeneralSection = async () => {\r\n const result = await execute();\r\n\r\n if (!result.error) {\r\n dashboardDispatcher({\r\n type: DashboardActions.SET_DASHBOARD,\r\n payload: { ...result.response, isLoading: false },\r\n });\r\n }\r\n };\r\n\r\n const loadUserProfile = async () => {\r\n const result = await executeGetCurrentUserProfile();\r\n\r\n if (!result.error) {\r\n globalDispatcher({\r\n type: GlobalActions.SET_USER,\r\n payload: {\r\n ...globalState.userProfile,\r\n ...result.response,\r\n },\r\n });\r\n }\r\n };\r\n\r\n getDashboardGeneralSection();\r\n loadUserProfile();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isAuthenticated]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useDashboardContext = () => {\r\n return useContext(DashboardContext);\r\n};\r\n","const flashcardConstants = {\r\n baseUrl: \"/api/V1/Flashcards\",\r\n};\r\nexport default flashcardConstants;\r\n","import IFlashcard from \"../../components/flashcards/types/IFlashcard\";\r\nimport { LoadFlashcardParams } from \"./types/LoadFlashcardParams\";\r\nimport useApiKotobaAnkiGet from \"../shared/useApiKotobaAnkiGet\";\r\nimport apiConstants from \"./types/FlashcardConstants\";\r\nimport { IApiKotobaAnkiOptions } from \"../shared/types/IApiKotobaAnkiOptions\";\r\n\r\nexport default function useLoadFlashcards(options?: IApiKotobaAnkiOptions) {\r\n return useApiKotobaAnkiGet(\r\n apiConstants.baseUrl,\r\n options\r\n );\r\n}\r\n","import apiConstants from \"./types/AccountConstants\";\r\nimport useApiKotobaAnkiGet from \"../shared/useApiKotobaAnkiGet\";\r\nimport { ICurrentUserProfileOutput } from \"./types/GetCurrentUserProfileDtos\";\r\nimport { IApiKotobaAnkiOptions } from \"api/shared/types/IApiKotobaAnkiOptions\";\r\n\r\nexport default function useGetCurrentUserProfile(\r\n options?: IApiKotobaAnkiOptions\r\n) {\r\n return useApiKotobaAnkiGet(\r\n `${apiConstants.baseUrl}/GetCurrentUserProfile`,\r\n options\r\n );\r\n}\r\n","const dashboardConstants = {\r\n baseUrl: \"/api/V1/Dashboards\",\r\n};\r\nexport default dashboardConstants;\r\n","import { IApiKotobaAnkiOptions } from \"api/shared/types/IApiKotobaAnkiOptions\";\r\nimport useApiKotobaAnkiGet from \"api/shared/useApiKotobaAnkiGet\";\r\nimport apiConstants from \"./types/DashboardConstants\";\r\nimport { IDashboardOutput } from \"./types/GetDashboardDtos\";\r\n\r\nexport default function useDashboardSection(options?: IApiKotobaAnkiOptions) {\r\n return useApiKotobaAnkiGet(\r\n `${apiConstants.baseUrl}/GetDashboard`,\r\n options\r\n );\r\n}\r\n","import { User, UserManager, WebStorageStateStore } from \"oidc-client\";\r\nimport {\r\n ApplicationPaths,\r\n ApplicationName,\r\n} from \"../components/shared/api-authorization/ApiAuthorizationConstants\";\r\n\r\nexport class AuthorizeService {\r\n _baseUrl = \"api/V1\";\r\n _callbacks: Array<{ callback: any; subscription: number }> = [];\r\n _nextSubscriptionId = 0;\r\n _user: User | null = null;\r\n _isAuthenticated = false;\r\n userManager?: UserManager;\r\n\r\n // By default pop ups are disabled because they don't work properly on Edge.\r\n // If you want to enable pop up authentication simply set this flag to false.\r\n _popUpDisabled = true;\r\n\r\n async isAuthenticated() {\r\n const user = await this.getUser();\r\n return !!user;\r\n }\r\n\r\n async getUser() {\r\n if (this._user && this._user?.profile) {\r\n return this._user.profile;\r\n }\r\n\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager?.getUser();\r\n\r\n if (!user || user.expired || !user.profile) {\r\n return undefined;\r\n }\r\n return user.profile;\r\n }\r\n\r\n async clearStaleState() {\r\n await this.userManager?.clearStaleState();\r\n }\r\n\r\n async getAccessToken() {\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager?.getUser();\r\n return user && user.access_token;\r\n }\r\n\r\n // We try to authenticate the user in three different ways:\r\n // 1) We try to see if we can authenticate the user silently. This happens\r\n // when the user is already logged in on the IdP and is done using a hidden iframe\r\n // on the client.\r\n // 2) We try to authenticate the user using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 3) If the two methods above fail, we redirect the browser to the IdP to perform a traditional\r\n // redirect flow.\r\n async signIn(state) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n const silentUser = await this.userManager?.signinSilent(\r\n this.createArguments()\r\n );\r\n this.updateState(silentUser);\r\n return this.success(state);\r\n } catch (silentError) {\r\n // User might not be authenticated, fallback to popup authentication\r\n console.log(\"Silent authentication error: \", silentError);\r\n\r\n try {\r\n if (this._popUpDisabled) {\r\n throw new Error(\r\n \"Popup disabled. Change 'AuthorizeService.js:AuthorizeService._popupDisabled' to false to enable it.\"\r\n );\r\n }\r\n\r\n const popUpUser = await this.userManager?.signinPopup(\r\n this.createArguments()\r\n );\r\n this.updateState(popUpUser);\r\n return this.success(state);\r\n } catch (popUpError: any) {\r\n if (popUpError?.message === \"Popup window closed\") {\r\n // The user explicitly cancelled the login action by closing an opened popup.\r\n return this.error(\"The user closed the window.\");\r\n } else if (!this._popUpDisabled) {\r\n console.log(\"Popup authentication error: \", popUpError);\r\n }\r\n\r\n // PopUps might be blocked by the user, fallback to redirect\r\n try {\r\n await this.userManager?.signinRedirect(this.createArguments(state));\r\n return this.redirect();\r\n } catch (redirectError) {\r\n console.log(\"Redirect authentication error: \", redirectError);\r\n return this.error(redirectError);\r\n }\r\n }\r\n }\r\n }\r\n\r\n async completeSignIn(url) {\r\n try {\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager?.signinCallback(url);\r\n this.updateState(user);\r\n return this.success(user && user.state);\r\n } catch (error) {\r\n console.log(\"There was an error signing in: \", error);\r\n return this.error(\"There was an error signing in.\");\r\n }\r\n }\r\n\r\n // We try to sign out the user in two different ways:\r\n // 1) We try to do a sign-out using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 2) If the method above fails, we redirect the browser to the IdP to perform a traditional\r\n // post logout redirect flow.\r\n async signOut(state) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n if (this._popUpDisabled) {\r\n throw new Error(\r\n \"Popup disabled. Change 'AuthorizeService.js:AuthorizeService._popupDisabled' to false to enable it.\"\r\n );\r\n }\r\n\r\n await this.userManager?.signoutPopup(this.createArguments());\r\n this.updateState(undefined);\r\n return this.success(state);\r\n } catch (popupSignOutError) {\r\n console.log(\"Popup signout error: \", popupSignOutError);\r\n try {\r\n await this.userManager?.signoutRedirect(this.createArguments(state));\r\n return this.redirect();\r\n } catch (redirectSignOutError) {\r\n console.log(\"Redirect signout error: \", redirectSignOutError);\r\n return this.error(redirectSignOutError);\r\n }\r\n }\r\n }\r\n\r\n async completeSignOut(url) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n const response: any = await this.userManager?.signoutCallback(url);\r\n this.updateState(null);\r\n return this.success(response && response.data);\r\n } catch (error) {\r\n console.log(`There was an error trying to log out '${error}'.`);\r\n return this.error(error);\r\n }\r\n }\r\n\r\n updateState(user) {\r\n this._user = user;\r\n this._isAuthenticated = !!this._user;\r\n this.notifySubscribers();\r\n }\r\n\r\n subscribe(callback) {\r\n this._callbacks.push({\r\n callback,\r\n subscription: this._nextSubscriptionId++,\r\n });\r\n return this._nextSubscriptionId - 1;\r\n }\r\n\r\n unsubscribe(subscriptionId) {\r\n const subscriptionIndex: any = this._callbacks\r\n .map((element, index) =>\r\n element.subscription === subscriptionId\r\n ? { found: true, index }\r\n : { found: false }\r\n )\r\n .filter((element) => element.found === true);\r\n if (subscriptionIndex.length !== 1) {\r\n throw new Error(\r\n `Found an invalid number of subscriptions ${subscriptionIndex.length}`\r\n );\r\n }\r\n\r\n this._callbacks.splice(subscriptionIndex[0].index, 1);\r\n }\r\n\r\n notifySubscribers() {\r\n for (let i = 0; i < this._callbacks.length; i++) {\r\n const callback = this._callbacks[i].callback;\r\n callback();\r\n }\r\n }\r\n\r\n createArguments(state?) {\r\n return { useReplaceToNavigate: true, data: state };\r\n }\r\n\r\n error(message) {\r\n return { status: AuthenticationResultStatus.Fail, message };\r\n }\r\n\r\n success(state) {\r\n return { status: AuthenticationResultStatus.Success, state };\r\n }\r\n\r\n redirect() {\r\n return { status: AuthenticationResultStatus.Redirect };\r\n }\r\n\r\n async ensureUserManagerInitialized() {\r\n if (this.userManager !== undefined) {\r\n return;\r\n }\r\n\r\n let response = await fetch(\r\n `${this._baseUrl}/${ApplicationPaths.ApiAuthorizationClientConfigurationUrl}`\r\n );\r\n if (!response.ok) {\r\n throw new Error(`Could not load settings for '${ApplicationName}'`);\r\n }\r\n\r\n let settings = await response.json();\r\n settings.automaticSilentRenew = true;\r\n settings.includeIdTokenInSilentRenew = true;\r\n settings.silent_redirect_uri = `${window.location.origin.toString()}/silent.html`;\r\n settings.userStore = new WebStorageStateStore({\r\n prefix: ApplicationName,\r\n store: window.localStorage,\r\n });\r\n\r\n this.userManager = new UserManager(settings);\r\n await this.clearStaleState();\r\n this.userManager.events.addUserSignedOut(async () => {\r\n await this.userManager?.removeUser();\r\n this.updateState(undefined);\r\n });\r\n }\r\n\r\n static get instance() {\r\n return authService;\r\n }\r\n}\r\n\r\nconst authService = new AuthorizeService();\r\n\r\nexport default authService;\r\n\r\nexport const AuthenticationResultStatus = {\r\n Redirect: \"redirect\",\r\n Success: \"success\",\r\n Fail: \"fail\",\r\n};\r\n","import { Classes, Overlay, Spinner } from \"@blueprintjs/core\";\r\nimport ILoadingOverlay from \"./types/ILoadingOverlay\";\r\n\r\nconst LoadingOverlay = ({ showLoading, message }: ILoadingOverlay) => {\r\n return (\r\n \r\n
\r\n
\r\n \r\n

Por favor espere ...

\r\n {message ? (\r\n typeof message === \"string\" ? (\r\n <>\r\n

{message}

\r\n \r\n ) : (\r\n message\r\n )\r\n ) : (\r\n <>\r\n )}\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default LoadingOverlay;\r\n","import IUserSettings from \"contexts/types/User/IUserSettings\";\r\nimport { IGlobalProviderState } from \"../contexts/types/IGlobalProvider\";\r\nimport { GlobalAction, GlobalActions } from \"./actions/GlobalActions\";\r\n\r\nconst globalReducer = (state: IGlobalProviderState, action: GlobalAction) => {\r\n switch (action.type) {\r\n case GlobalActions.SET_DARK_THEME: {\r\n const globalState: IGlobalProviderState = {\r\n ...state,\r\n userSettings: { ...state.userSettings, isDarkMode: action.payload },\r\n };\r\n setUserSettingsToLocalStorage(globalState.userSettings);\r\n return globalState;\r\n }\r\n case GlobalActions.TOGGLE_SHOW_FURIGANA: {\r\n const globalState: IGlobalProviderState = {\r\n ...state,\r\n userSettings: {\r\n ...state.userSettings,\r\n showFuriganaAlways: !state.userSettings.showFuriganaAlways,\r\n },\r\n };\r\n setUserSettingsToLocalStorage(globalState.userSettings);\r\n return globalState;\r\n }\r\n case GlobalActions.TOGGLE_NO_SOUND: {\r\n const globalState: IGlobalProviderState = {\r\n ...state,\r\n userSettings: {\r\n ...state.userSettings,\r\n noSound: !state.userSettings.noSound,\r\n },\r\n };\r\n setUserSettingsToLocalStorage(globalState.userSettings);\r\n return globalState;\r\n }\r\n case GlobalActions.BEGIN_API_CALL: {\r\n return { ...state, apiProcessing: state.apiProcessing + 1 };\r\n }\r\n case GlobalActions.API_CALL_SUCCESS:\r\n case GlobalActions.API_CALL_ERROR: {\r\n return { ...state, apiProcessing: state.apiProcessing - 1 };\r\n }\r\n case GlobalActions.SET_USER:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n userProfile: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport function getUserSettingsFromLocalStorage() {\r\n let result: IUserSettings = {\r\n noSound: false,\r\n isDarkMode: false,\r\n showFuriganaAlways: false,\r\n };\r\n if (localStorage.getItem(\"userSettings\")) {\r\n const userSettings: IUserSettings = JSON.parse(\r\n localStorage.getItem(\"userSettings\") as string\r\n );\r\n if (userSettings) {\r\n result = userSettings;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction setUserSettingsToLocalStorage(userSettings: IUserSettings) {\r\n localStorage.setItem(\"userSettings\", JSON.stringify(userSettings));\r\n}\r\n\r\nexport default globalReducer;\r\n","import React, { useContext, useEffect, useReducer } from \"react\";\r\nimport { IGlobalProvider } from \"./types/IGlobalProvider\";\r\nimport globalReducer, {\r\n getUserSettingsFromLocalStorage,\r\n} from \"../reducers/globalReducer\";\r\nimport authService from \"../api/authService\";\r\nimport { GlobalActions } from \"../reducers/actions/GlobalActions\";\r\nimport IUserProfile from \"./types/User/IUserProfile\";\r\n\r\nconst GlobalContext = React.createContext(\r\n {} as IGlobalProvider\r\n);\r\n\r\nexport const GlobalProvider = ({ children }) => {\r\n const [globalState, globalDispatcher] = useReducer(globalReducer, {\r\n userSettings: getUserSettingsFromLocalStorage(),\r\n userProfile: {} as IUserProfile,\r\n apiProcessing: 0,\r\n isLoading: true,\r\n });\r\n\r\n const provider: IGlobalProvider = { globalState, globalDispatcher };\r\n\r\n useEffect(() => {\r\n const populateState = async () => {\r\n const [isAuthenticated, user] = await Promise.all([\r\n authService.isAuthenticated(),\r\n authService.getUser(),\r\n ]);\r\n\r\n globalDispatcher({\r\n type: GlobalActions.SET_USER,\r\n payload: {\r\n isAuthenticated,\r\n user,\r\n },\r\n });\r\n };\r\n let _subscription: number | undefined | null = authService.subscribe(() =>\r\n populateState()\r\n );\r\n populateState();\r\n // returned function will be called on component unmount\r\n return () => {\r\n authService.unsubscribe(_subscription);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n {children}\r\n );\r\n};\r\n\r\nexport const useGlobalContext = () => {\r\n return useContext(GlobalContext);\r\n};\r\n","import IUserProfile from \"../../contexts/types/User/IUserProfile\";\r\n\r\nexport enum GlobalActions {\r\n SET_DARK_THEME = \"SET_DARK_THEME\",\r\n TOGGLE_SHOW_FURIGANA = \"TOGGLE_SHOW_FURIGANA\",\r\n TOGGLE_NO_SOUND = \"TOGGLE_NO_SOUND\",\r\n SET_USER = \"SET_USER\",\r\n BEGIN_API_CALL = \"BEGIN_API_CALL\",\r\n API_CALL_SUCCESS = \"API_CALL_SUCCESS\",\r\n API_CALL_ERROR = \"API_CALL_ERROR\",\r\n}\r\n\r\nexport type GlobalAction =\r\n | { type: GlobalActions.SET_DARK_THEME; payload: boolean }\r\n | {\r\n type: GlobalActions.SET_USER;\r\n payload: IUserProfile;\r\n }\r\n | { type: GlobalActions.TOGGLE_SHOW_FURIGANA }\r\n | { type: GlobalActions.TOGGLE_NO_SOUND }\r\n | { type: GlobalActions.BEGIN_API_CALL }\r\n | { type: GlobalActions.API_CALL_SUCCESS }\r\n | { type: GlobalActions.API_CALL_ERROR };\r\n","import { LoadFlashcardParams } from \"../../api/flashcards/types/LoadFlashcardParams\";\r\nimport IFlashcard from \"../../components/flashcards/types/IFlashcard\";\r\n\r\nexport enum FlashcardsActions {\r\n LOAD_FILTERS = \"LOAD_FILTERS\",\r\n SET_FILTERS = \"SET_FILTERS\",\r\n ADD_FLASHCARDS = \"ADD_FLASHCARDS\",\r\n STOP_INFINTE_SCROLL = \"STOP_INFINTE_SCROLL\",\r\n RESTART_INFINTE_SCROLL = \"RESTART_INFINTE_SCROLL\",\r\n}\r\n\r\nexport type FlashcardsAction =\r\n | { type: FlashcardsActions.LOAD_FILTERS }\r\n | { type: FlashcardsActions.STOP_INFINTE_SCROLL }\r\n | { type: FlashcardsActions.RESTART_INFINTE_SCROLL }\r\n | { type: FlashcardsActions.SET_FILTERS; payload: LoadFlashcardParams }\r\n | {\r\n type: FlashcardsActions.ADD_FLASHCARDS;\r\n payload: IFlashcard[] | null | undefined;\r\n };\r\n","import { useEffect } from \"react\";\r\n\r\nexport const ScrollToTopOnMount = () => {\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, []);\r\n\r\n return null;\r\n};\r\n","import ICustomFlashcard from \"components/custom-flashcards/types/ICustomFlashcard\";\r\nimport IDeck from \"components/decks/types/IDeck\";\r\nimport { IDashboardProviderState } from \"contexts/types/IDashboardProvider\";\r\nimport ILearningStreak from \"contexts/types/ILearningStreak\";\r\n\r\nexport enum DashboardActions {\r\n SET_DASHBOARD = \"SET_DASHBOARD\",\r\n SET_LAST_DECK = \"SET_LAST_DECK\",\r\n SET_LAST_CUSTOM_FLASHCARD = \"SET_LAST_CUSTOM_FLASHCARD\",\r\n SET_LEARNING_STREAK = \"SET_LEARNING_STREAK\",\r\n}\r\n\r\nexport type DashboardAction =\r\n | {\r\n type: DashboardActions.SET_DASHBOARD;\r\n payload: IDashboardProviderState;\r\n }\r\n | {\r\n type: DashboardActions.SET_LAST_DECK;\r\n payload: IDeck;\r\n }\r\n | {\r\n type: DashboardActions.SET_LAST_CUSTOM_FLASHCARD;\r\n payload: ICustomFlashcard;\r\n }\r\n | {\r\n type: DashboardActions.SET_LEARNING_STREAK;\r\n payload: ILearningStreak;\r\n };\r\n","import { useState } from \"react\";\r\nimport apiService from \"./httpApiKotobaAnki\";\r\nimport { useGlobalContext } from \"../../contexts/GlobalContext\";\r\nimport { IGlobalProvider } from \"../../contexts/types/IGlobalProvider\";\r\nimport { AxiosRequestConfig } from \"axios\";\r\nimport { GlobalActions } from \"../../reducers/actions/GlobalActions\";\r\nimport { IApiKotobaAnkiOptions } from \"./types/IApiKotobaAnkiOptions\";\r\nimport querystring from \"querystring\";\r\nimport IHttpApiResponse from \"./types/IHttpResponse\";\r\nimport { buildParams } from \"../../core/utils\";\r\nimport { useToastContext } from \"../../contexts/ToastContext\";\r\nimport { restErrorHandler } from \"./restErrorHandler\";\r\n\r\n// P = parameter type\r\n// R Result/Response type\r\nexport default function useApiKotobaAnkiGet

(\r\n url: string,\r\n options?: IApiKotobaAnkiOptions\r\n) {\r\n const [state, setState] = useState<{\r\n data: R | null | undefined;\r\n error: any;\r\n loading: boolean;\r\n }>({\r\n data: undefined,\r\n error: undefined,\r\n loading: false,\r\n });\r\n const { globalDispatcher }: IGlobalProvider = useGlobalContext();\r\n const { addToast } = useToastContext();\r\n\r\n return {\r\n ...state,\r\n execute: (params?: P, config?: AxiosRequestConfig) => {\r\n try {\r\n setState({ ...state, loading: true });\r\n if (!options?.noDisplayLoading) {\r\n globalDispatcher({ type: GlobalActions.BEGIN_API_CALL });\r\n }\r\n const paramBuild = buildParams(params);\r\n const urlFinal = !paramBuild\r\n ? url\r\n : `${url}${\r\n url?.indexOf(\"?\") !== -1 ? \"&\" : \"?\"\r\n }${querystring.stringify(paramBuild)}`;\r\n\r\n return apiService\r\n .get(urlFinal, config)\r\n .then((response: R) => {\r\n setState({ data: response, error: undefined, loading: false });\r\n if (!options?.noDisplayLoading) {\r\n globalDispatcher({\r\n type: GlobalActions.API_CALL_SUCCESS,\r\n });\r\n }\r\n return { response } as IHttpApiResponse;\r\n })\r\n .catch((error: any) => {\r\n setState({ data: undefined, error, loading: false });\r\n if (!options?.noDisplayLoading) {\r\n globalDispatcher({\r\n type: GlobalActions.API_CALL_ERROR,\r\n });\r\n }\r\n return { error } as IHttpApiResponse;\r\n });\r\n } catch (error) {\r\n setState({ ...state, loading: false });\r\n if (!options?.noDisplayLoading) {\r\n globalDispatcher({ type: GlobalActions.API_CALL_ERROR });\r\n }\r\n\r\n restErrorHandler(error, addToast);\r\n\r\n return new Promise>((resolve) =>\r\n resolve({ error } as IHttpApiResponse)\r\n );\r\n }\r\n },\r\n };\r\n}\r\n","import { Button, NonIdealState } from \"@blueprintjs/core\";\r\nimport React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { ScrollToTopOnMount } from \"./Utils\";\r\n\r\nconst Notfound = () => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n }\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default Notfound;\r\n","enum Roles {\r\n individual_free = \"individual_free\",\r\n individual_pro = \"individual_pro\",\r\n admin = \"admin\",\r\n}\r\n\r\nexport default Roles;\r\n","import {\r\n ApplicationPaths,\r\n QueryParameterNames,\r\n} from \"components/shared/api-authorization/ApiAuthorizationConstants\";\r\nimport IFlashcardConfiguration from \"../components/flashcards/types/IFlashcardConfiguration\";\r\nimport IAttachment from \"./types/IAttachment\";\r\nimport { dateFormat, dateTimeFormat } from \"./types/Constants\";\r\nimport moment from \"moment\";\r\n\r\nexport const buildParams = (params: any) => {\r\n if (params) {\r\n const newParams = { ...params };\r\n for (const key in newParams) {\r\n newParams[key] =\r\n newParams[key] instanceof Date\r\n ? moment(newParams[key] as Date).format()\r\n : newParams[key];\r\n\r\n if (\r\n newParams[key] === \"\" ||\r\n newParams[key] === null ||\r\n newParams[key] === undefined\r\n ) {\r\n delete newParams[key];\r\n }\r\n }\r\n return Object.keys(newParams).length > 0 ? newParams : undefined;\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const calculateFrontCardTextSize = (\r\n width: number,\r\n content: string,\r\n configuration?: IFlashcardConfiguration\r\n): string => {\r\n let result: number = 0;\r\n const marginAndPadding =\r\n width < 110 ? 20 : width < 220 && width >= 110 ? 23 : 55; //64\r\n width = width - marginAndPadding;\r\n\r\n if (!content) {\r\n return \"0px\";\r\n }\r\n\r\n if (configuration && configuration.nameSize) {\r\n return `${Math.round(((configuration.nameSize + 2) * width) / 100)}px`;\r\n }\r\n\r\n const characterNumber = content.length;\r\n const ajustPercentage = characterNumber === 1 ? 35 : 5; //45 : 12;\r\n\r\n const actualwidth = width - Math.round((ajustPercentage * width) / 100);\r\n\r\n switch (true) {\r\n case characterNumber <= 5:\r\n result =\r\n actualwidth /\r\n (characterNumber <= 2\r\n ? characterNumber\r\n : characterNumber === 3\r\n ? characterNumber - 0.3\r\n : characterNumber === 4\r\n ? characterNumber - 0.6\r\n : characterNumber - 0.9);\r\n break;\r\n case characterNumber > 5 && characterNumber <= 10:\r\n result = actualwidth / 4.5;\r\n break;\r\n case characterNumber > 10 && characterNumber <= 20:\r\n result = actualwidth / 10;\r\n break;\r\n default:\r\n const characterPerLineNumber = Math.round(characterNumber / 2);\r\n result = actualwidth / characterPerLineNumber;\r\n break;\r\n }\r\n\r\n return `${Math.round(result)}px`;\r\n};\r\n\r\nexport const calculateFrontCardTextSizePercentage = (\r\n width: number,\r\n content: string,\r\n configuration?: IFlashcardConfiguration\r\n): string => {\r\n let result: number = 0;\r\n const marginAndPadding = 64;\r\n width = width - marginAndPadding;\r\n if (configuration && configuration.nameSize) {\r\n return `${Math.round((configuration.nameSize * width) / 100)}px`;\r\n }\r\n\r\n const characterNumber = content.length;\r\n const ajustPercentage = characterNumber === 1 ? 45 : 12;\r\n\r\n const actualwidth = width - Math.round((ajustPercentage * width) / 100);\r\n\r\n switch (true) {\r\n case characterNumber <= 5:\r\n result = actualwidth / characterNumber;\r\n break;\r\n case characterNumber > 5 && characterNumber <= 10:\r\n result = actualwidth / 5;\r\n break;\r\n case characterNumber > 10 && characterNumber <= 20:\r\n result = actualwidth / 10;\r\n break;\r\n default:\r\n const characterPerLineNumber = Math.round(characterNumber / 2);\r\n result = actualwidth / characterPerLineNumber;\r\n break;\r\n }\r\n\r\n return `${Math.round(result)}px`;\r\n};\r\n\r\nexport const calculateBackCardTextSize = (\r\n width: number,\r\n hasImage: boolean,\r\n content: string,\r\n isCaption?: boolean,\r\n configuration?: IFlashcardConfiguration\r\n): string => {\r\n let result: number = 0;\r\n const marginAndPadding = 54;\r\n width = width - marginAndPadding;\r\n if (content) {\r\n if (configuration) {\r\n if (isCaption && configuration.meaningCaptionSize) {\r\n return `${Math.round(\r\n (configuration.meaningCaptionSize * width) / 100\r\n )}px`;\r\n }\r\n\r\n if (!isCaption && configuration.meaningSize) {\r\n return `${Math.round((configuration.meaningSize * width) / 100)}px`;\r\n }\r\n }\r\n\r\n const characterNumber = content.length;\r\n const actualwidth = width - Math.round((12 * width) / 100);\r\n switch (true) {\r\n case characterNumber <= 3:\r\n result = Math.round((35 * actualwidth) / 100) / characterNumber;\r\n break;\r\n case characterNumber === 4:\r\n result = Math.round((55 * actualwidth) / 100) / characterNumber;\r\n break;\r\n case characterNumber <= 5:\r\n result = actualwidth / characterNumber;\r\n break;\r\n case characterNumber > 5 && characterNumber <= 10:\r\n result = Math.round((65 * actualwidth) / 100) / 5;\r\n break;\r\n case characterNumber > 10 && characterNumber <= 20:\r\n result = actualwidth / 10;\r\n break;\r\n default:\r\n const characterPerLineNumber = Math.round(characterNumber / 2);\r\n result = actualwidth / characterPerLineNumber;\r\n break;\r\n }\r\n // }\r\n }\r\n return `${Math.round(\r\n isCaption ? Math.round((75 * result) / 100) : result\r\n )}px`;\r\n};\r\n\r\nexport const calculateBackImgMaxHeightSize = (width: number) => {\r\n return width ? `${Math.round(Math.round((70 * width) / 100))}px` : \"0px\";\r\n};\r\n\r\nexport const shuffle = (\r\n array: Array | null | undefined\r\n) => {\r\n if (array) {\r\n return array.sort(() => Math.random() - 0.5);\r\n }\r\n return new Array();\r\n};\r\n\r\nexport const enumToArray = (enumValue: { [s: string]: string }) => {\r\n return Object.keys(enumValue).map((key) => ({\r\n value: enumValue[key],\r\n name: key,\r\n }));\r\n};\r\n\r\nexport const enumToEnumArray = (enumValue: { [s: string]: string }) => {\r\n return Object.keys(enumValue).map((key) => enumValue[key]);\r\n};\r\n\r\nconst getBase64 = (file: File) => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = (error) => reject(error);\r\n });\r\n};\r\n\r\nexport const proccessAttachments = async (fileList?: FileList) => {\r\n let attachments = [] as IAttachment[];\r\n if (fileList && fileList.length > 0) {\r\n for (let i = 0; i < fileList.length; i++) {\r\n const file = fileList[i];\r\n const resultBase64 = (await getBase64(file)) as string;\r\n const resultFinal =\r\n resultBase64.lastIndexOf(\"base64,\") !== -1\r\n ? resultBase64.substring(resultBase64.lastIndexOf(\"base64,\") + 7)\r\n : resultBase64;\r\n attachments.push({\r\n content: resultFinal,\r\n filename: file.name,\r\n type: file.name.lastIndexOf(\".\") !== -1 ? null : file.type,\r\n disposition: \"attachment\",\r\n } as IAttachment);\r\n }\r\n }\r\n return attachments;\r\n};\r\n\r\nexport const formatDate = (date: Date) => {\r\n if (date) {\r\n return moment(UTCToLocalDate(date)).format(dateFormat);\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const formatDateTime = (date: Date) => {\r\n if (date) {\r\n return moment(UTCToLocalDate(date)).format(dateTimeFormat);\r\n }\r\n return undefined;\r\n};\r\n\r\nexport function UTCToLocalDate(date: Date) {\r\n if (date) {\r\n return new Date(date);\r\n }\r\n return date;\r\n}\r\n\r\nexport function dateWithoutTime(dateTime: Date) {\r\n var date = new Date(dateTime.getTime());\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n}\r\n\r\nexport function dateAddMonth(dateTime: Date, monthsToAdd: number) {\r\n if (dateTime) {\r\n dateTime.setMonth(dateTime.getMonth() + monthsToAdd);\r\n }\r\n return dateTime;\r\n}\r\n\r\nexport const buildLoginRedirectUrl = () => {\r\n const link = document.createElement(\"a\");\r\n link.href = window.location.href;\r\n const returnUrl = `${link.protocol}//${link.host}${link.pathname}${link.search}${link.hash}`;\r\n return `${ApplicationPaths.Login}?${\r\n QueryParameterNames.ReturnUrl\r\n }=${encodeURIComponent(returnUrl)}`;\r\n};\r\n\r\nexport const vibrateCustom = (pattern: VibratePattern) => {\r\n navigator.vibrate && navigator.vibrate(pattern);\r\n};\r\n\r\nexport const vibrateTap = () => vibrateCustom(5);\r\n","import {\r\n OverlayToaster,\r\n Position,\r\n Toast,\r\n Toaster,\r\n ToastProps,\r\n} from \"@blueprintjs/core\";\r\nimport React, { useCallback, useContext, useState } from \"react\";\r\nimport { IToastProvider } from \"./types/IToastProvider\";\r\n\r\nconst ToastContext = React.createContext({} as IToastProvider);\r\n\r\nexport const ToastProvider = ({ children }) => {\r\n const [state] = useState({ toasts: [] });\r\n let toaster: Toaster;\r\n const refHandlers = {\r\n toaster: (ref: Toaster) => {\r\n toaster = ref;\r\n },\r\n };\r\n\r\n const addToast = (props: ToastProps, key?: string) => {\r\n toaster.show(props, key);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {state.toasts.map((toast) => (\r\n \r\n ))}\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nexport const useToastContext = () => {\r\n return useContext(ToastContext);\r\n};\r\n","import { Reducer } from \"react\";\r\nimport { LoadFlashcardParams } from \"../api/flashcards/types/LoadFlashcardParams\";\r\nimport { IFlashcardsProviderState } from \"../contexts/types/IFlashcardsProvider\";\r\nimport {\r\n FlashcardsAction,\r\n FlashcardsActions,\r\n} from \"./actions/FlashcardsActions\";\r\n\r\nconst flashcardsReducer: Reducer = (\r\n state,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case FlashcardsActions.LOAD_FILTERS: {\r\n return {\r\n ...state,\r\n filters: getFiltersFromLocalStorage(),\r\n };\r\n }\r\n case FlashcardsActions.SET_FILTERS:\r\n const {\r\n name,\r\n name_like,\r\n nameRomaji_like,\r\n nameHiragana_like,\r\n _page,\r\n _limit,\r\n ...localStorageFilter\r\n } = action.payload as any;\r\n setFlashcardsFilterStateToLocalStorage(localStorageFilter);\r\n return { ...state, filters: action.payload };\r\n\r\n case FlashcardsActions.STOP_INFINTE_SCROLL:\r\n return { ...state, hasMore: false };\r\n\r\n case FlashcardsActions.RESTART_INFINTE_SCROLL:\r\n return {\r\n ...state,\r\n infiniteScrollKey: state.infiniteScrollKey + 1,\r\n hasMore: true,\r\n flashcards: [],\r\n };\r\n\r\n case FlashcardsActions.ADD_FLASHCARDS:\r\n return action.payload\r\n ? {\r\n ...state,\r\n flashcards: state.flashcards.concat(action.payload),\r\n }\r\n : { ...state };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport function getFiltersFromLocalStorage() {\r\n let result = { _limit: 25, _page: 1 } as LoadFlashcardParams;\r\n if (localStorage.getItem(\"flashcardsFilterState\")) {\r\n const flashcardsFilterState: LoadFlashcardParams = JSON.parse(\r\n localStorage.getItem(\"flashcardsFilterState\") as string\r\n );\r\n if (flashcardsFilterState) {\r\n result = { ...result, ...flashcardsFilterState };\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction setFlashcardsFilterStateToLocalStorage(\r\n flashcardsFilterState: LoadFlashcardParams\r\n) {\r\n localStorage.setItem(\r\n \"flashcardsFilterState\",\r\n JSON.stringify(flashcardsFilterState)\r\n );\r\n}\r\n\r\nexport default flashcardsReducer;\r\n","import React, { useContext, useEffect, useReducer } from \"react\";\r\nimport { IFlashcardsProvider } from \"./types/IFlashcardsProvider\";\r\nimport flashcardsReducer, {\r\n getFiltersFromLocalStorage,\r\n} from \"../reducers/flashcardsReducer\";\r\nimport useLoadFlashcards from \"../api/flashcards/useLoadFlashcards\";\r\nimport { FlashcardsActions } from \"../reducers/actions/FlashcardsActions\";\r\nimport IPaginated from \"../core/types/IPaginated\";\r\n\r\nconst FlashcardsContext = React.createContext(\r\n {} as IFlashcardsProvider\r\n);\r\n\r\nexport const FlashcardsProvider = ({ children }) => {\r\n const { execute, data } = useLoadFlashcards({\r\n noDisplayLoading: true,\r\n });\r\n\r\n const [flashcardsState, flashcardsDispatcher] = useReducer(\r\n flashcardsReducer,\r\n {\r\n filters: getFiltersFromLocalStorage(),\r\n flashcards: [],\r\n infiniteScrollKey: 1,\r\n hasMore: true,\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n execute(flashcardsState.filters);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [flashcardsState.filters]);\r\n\r\n useEffect(() => {\r\n flashcardsDispatcher({\r\n type: FlashcardsActions.ADD_FLASHCARDS,\r\n payload: data,\r\n });\r\n\r\n if (\r\n (data &&\r\n !data.length &&\r\n (flashcardsState.filters as IPaginated)._page >= 1) ||\r\n (data &&\r\n data.length &&\r\n data.length < (flashcardsState.filters as IPaginated)._limit)\r\n ) {\r\n flashcardsDispatcher({\r\n type: FlashcardsActions.STOP_INFINTE_SCROLL,\r\n });\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [data]);\r\n\r\n const provider: IFlashcardsProvider = {\r\n flashcardsState,\r\n flashcardsDispatcher,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useFlashcardsContext = () => {\r\n return useContext(FlashcardsContext);\r\n};\r\n","import React from \"react\";\r\nimport { Component } from \"react\";\r\nimport { Route, Redirect } from \"react-router-dom\";\r\nimport {\r\n ApplicationPaths,\r\n QueryParameterNames,\r\n} from \"./ApiAuthorizationConstants\";\r\nimport authService from \"../../../api/authService\";\r\nimport { IAuthorizeRouteProps } from \"./types/IAuthorizeRouteProps\";\r\nimport Notfound from \"../Notfound\";\r\n\r\nexport default class AuthorizeRoute extends Component<\r\n IAuthorizeRouteProps,\r\n { ready: boolean; authenticated: boolean; role: string }\r\n> {\r\n _subscription: number | undefined | null;\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n ready: false,\r\n authenticated: false,\r\n role: \"\",\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._subscription = authService.subscribe(() =>\r\n this.authenticationChanged()\r\n );\r\n this.populateAuthenticationState();\r\n }\r\n\r\n componentWillUnmount() {\r\n authService.unsubscribe(this._subscription);\r\n }\r\n\r\n render() {\r\n const { ready, authenticated, role } = this.state;\r\n var link = document.createElement(\"a\");\r\n link.href = this.props.path as string;\r\n const returnUrl = `${link.protocol}//${link.host}${link.pathname}${link.search}${link.hash}`;\r\n const redirectUrl = `${ApplicationPaths.Login}?${\r\n QueryParameterNames.ReturnUrl\r\n }=${encodeURIComponent(returnUrl)}`;\r\n if (!ready) {\r\n return

;\r\n } else {\r\n const { component: Component, roles, ...rest } = this.props;\r\n if (!Component) return
;\r\n return (\r\n {\r\n if (authenticated) {\r\n\r\n if (!roles || (roles && roles.some((x) => x === role))){\r\n return ;\r\n }else{\r\n return ;\r\n }\r\n } else {\r\n return ;\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n const user = await authService.getUser();\r\n this.setState({ ready: true, authenticated, role: user?.role });\r\n }\r\n\r\n async authenticationChanged() {\r\n this.setState({ ready: false, authenticated: false, role: \"\" });\r\n await this.populateAuthenticationState();\r\n }\r\n}\r\n","export const ApplicationName = \"KotobaAnki.Presentation.Web\";\r\n\r\nexport const QueryParameterNames = {\r\n ReturnUrl: \"returnUrl\",\r\n Message: \"message\",\r\n};\r\n\r\nexport const LogoutActions = {\r\n LogoutCallback: \"logout-callback\",\r\n Logout: \"logout\",\r\n LoggedOut: \"logged-out\",\r\n};\r\n\r\nexport const LoginActions = {\r\n Login: \"login\",\r\n LoginCallback: \"login-callback\",\r\n LoginFailed: \"login-failed\",\r\n Profile: \"profile\",\r\n Register: \"register\",\r\n};\r\n\r\nconst prefix = \"/authentication\";\r\n\r\nexport const ApplicationPaths = {\r\n DefaultLoginRedirectPath: \"/\",\r\n ApiAuthorizationClientConfigurationUrl: `OidcConfiguration/${ApplicationName}`,\r\n ApiAuthorizationPrefix: prefix,\r\n Login: `${prefix}/${LoginActions.Login}`,\r\n LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\r\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\r\n Register: `${prefix}/${LoginActions.Register}`,\r\n Profile: `${prefix}/${LoginActions.Profile}`,\r\n LogOut: `${prefix}/${LogoutActions.Logout}`,\r\n LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\r\n LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\r\n // IdentityRegisterPath: \"Identity/Account/Register\",\r\n IdentityRegisterPath: \"account/register\",\r\n //IdentityManagePath: \"Identity/Account/Manage\",\r\n IdentityManagePath: \"account/Manage\",\r\n};\r\n","import ISuccessProps from \"./types/ISuccessProps\";\r\nimport { Button, H4, Icon } from \"@blueprintjs/core\";\r\nimport React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { ScrollToTopOnMount } from \"./Utils\";\r\n\r\nconst Success = (props: ISuccessProps) => {\r\n return (\r\n <>\r\n \r\n
\r\n \r\n

{props.message}

\r\n {props.detailMessage && (\r\n
{props.detailMessage}
\r\n )}\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n};\r\nexport default Success;\r\n","export const dateFormat = \"DD/MM/YYYY\";\r\nexport const dateTimeFormat = \"DD/MM/YYYY HH:mm:ss\";","import { Button, Divider, H6 } from \"@blueprintjs/core\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport INavMenuItemsProps from \"../types/INavMenuItemsProps\";\r\n\r\nexport default function AdminMenuItems({\r\n closeDrawer,\r\n drawerIsOpen,\r\n handleClickSettings,\r\n}: INavMenuItemsProps) {\r\n const closeParentDrawer = () => {\r\n if (closeDrawer) {\r\n closeDrawer();\r\n }\r\n };\r\n return (\r\n <>\r\n \r\n
Administración
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import { Intent, Button, Divider } from \"@blueprintjs/core\";\r\nimport { useGlobalContext } from \"contexts/GlobalContext\";\r\nimport { IGlobalProvider } from \"contexts/types/IGlobalProvider\";\r\nimport Roles from \"core/types/enums/Roles\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport { ApplicationPaths } from \"../api-authorization/ApiAuthorizationConstants\";\r\nimport AdminMenuItems from \"./admin/AdminMenuItems\";\r\nimport INavMenuItemsProps from \"./types/INavMenuItemsProps\";\r\n\r\nexport const NavMenuItems = (props: INavMenuItemsProps) => {\r\n const { closeDrawer, drawerIsOpen, handleClickSettings } = props;\r\n const { globalState }: IGlobalProvider = useGlobalContext();\r\n const { isAuthenticated } = globalState.userProfile!;\r\n const { user } = globalState.userProfile;\r\n\r\n const closeParentDrawer = () => {\r\n if (closeDrawer) {\r\n closeDrawer();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {!isAuthenticated ? (\r\n <>\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n ¿No tienes cuenta?\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n ) : (\r\n <>\r\n )}\r\n {isAuthenticated ? (\r\n <>\r\n {user?.role === Roles.individual_free ? (\r\n <>\r\n
\r\n
\r\n ¿No estás suscrito?\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n ) : (\r\n <>\r\n )}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {isAuthenticated ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n )}\r\n\r\n \r\n {/* {(!isAuthenticated ||\r\n (isAuthenticated && user?.role === Roles.individual_free)) && (\r\n \r\n \r\n \r\n )} */}\r\n {isAuthenticated ? (\r\n
\r\n \r\n {/* {user?.role === Roles.individual_free && (\r\n \r\n \r\n \r\n )} */}\r\n \r\n \r\n \r\n
\r\n ) : (\r\n <>\r\n )}\r\n {user?.role === Roles.admin && }\r\n \r\n );\r\n};\r\n\r\nexport default NavMenuItems;\r\n","import { RadioGroup, Radio, Switch, Icon, FormGroup } from \"@blueprintjs/core\";\r\nimport { useGlobalContext } from \"../../../contexts/GlobalContext\";\r\nimport { IGlobalProvider } from \"../../../contexts/types/IGlobalProvider\";\r\nimport { GlobalActions } from \"../../../reducers/actions/GlobalActions\";\r\n\r\nconst GeneralSettings = () => {\r\n const { globalState, globalDispatcher }: IGlobalProvider = useGlobalContext();\r\n\r\n const handleThemeChange = (event: React.FormEvent) => {\r\n globalDispatcher({\r\n type: GlobalActions.SET_DARK_THEME,\r\n payload:\r\n (event.target as HTMLInputElement).value === \"true\" ? true : false,\r\n });\r\n };\r\n\r\n const handleNoSoundChange = () => {\r\n globalDispatcher({\r\n type: GlobalActions.TOGGLE_NO_SOUND,\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n Claro\r\n \r\n }\r\n value={\"false\"}\r\n />\r\n \r\n Oscuro\r\n \r\n }\r\n value={\"true\"}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default GeneralSettings;\r\n","import { Switch, FormGroup } from \"@blueprintjs/core\";\r\nimport { useGlobalContext } from \"../../../contexts/GlobalContext\";\r\nimport { IGlobalProvider } from \"../../../contexts/types/IGlobalProvider\";\r\nimport { GlobalActions } from \"../../../reducers/actions/GlobalActions\";\r\n\r\nconst FlashcardsSettings = () => {\r\n const { globalState, globalDispatcher }: IGlobalProvider = useGlobalContext();\r\n const handleShowFuriganaChange = () => {\r\n globalDispatcher({\r\n type: GlobalActions.TOGGLE_SHOW_FURIGANA,\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FlashcardsSettings;\r\n","import { Classes, Button, Tab, Tabs } from \"@blueprintjs/core\";\r\nimport GeneralSettings from \"./GeneralSettings\";\r\nimport FlashcardsSettings from \"./FlashcardsSettings\";\r\nimport ITabsSettingsProps from \"./types/ITabsSettingsProps\";\r\n\r\nconst TabsSettings = (props: ITabsSettingsProps) => {\r\n return (\r\n <>\r\n
\r\n \r\n }\r\n />\r\n }\r\n />\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default TabsSettings;\r\n","import {\r\n Intent,\r\n Button,\r\n Divider,\r\n Classes,\r\n Icon,\r\n Popover,\r\n} from \"@blueprintjs/core\";\r\nimport { NavLink } from \"react-router-dom\";\r\n\r\nimport { IGlobalProvider } from \"contexts/types/IGlobalProvider\";\r\nimport { useGlobalContext } from \"contexts/GlobalContext\";\r\nimport { ApplicationPaths } from \"../api-authorization/ApiAuthorizationConstants\";\r\n\r\nconst NavMenuLogin = ({\r\n handleClickSettings,\r\n}: {\r\n handleClickSettings?: () => void;\r\n}) => {\r\n const { globalState }: IGlobalProvider = useGlobalContext();\r\n const { user, isAuthenticated, avatarImage } = globalState.userProfile!;\r\n\r\n return (\r\n <>\r\n {isAuthenticated ? (\r\n <>\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n >\r\n \r\n \r\n {!avatarImage ? (\r\n \r\n Hola,\r\n \r\n {user?.preferred_username}\r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n ) : (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n Ingresar\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n }\r\n interactionKind=\"hover\"\r\n placement=\"bottom\"\r\n >\r\n \r\n \r\n \r\n \r\n Ingresar\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default NavMenuLogin;\r\n","import {\r\n Alignment,\r\n NavbarDivider,\r\n NavbarGroup,\r\n Intent,\r\n Navbar,\r\n Button,\r\n Classes,\r\n NavbarHeading,\r\n Icon,\r\n Drawer,\r\n Dialog,\r\n ControlGroup,\r\n InputGroup,\r\n} from \"@blueprintjs/core\";\r\nimport { useState, ChangeEvent, FormEvent } from \"react\";\r\nimport { Container } from \"reactstrap\";\r\nimport { NavLink, useHistory } from \"react-router-dom\";\r\nimport \"../../../styles/NavMenu.scss\";\r\nimport NavMenuItems from \"./NavMenuItems\";\r\nimport { IGlobalProvider } from \"../../../contexts/types/IGlobalProvider\";\r\nimport { useGlobalContext } from \"../../../contexts/GlobalContext\";\r\nimport TabsSettings from \"../settings/TabsSettings\";\r\nimport NavMenuLogin from \"./NavMenuLogin\";\r\nimport { useFlashcardsContext } from \"contexts/FlashcardsContext\";\r\nimport { FlashcardsActions } from \"reducers/actions/FlashcardsActions\";\r\nimport { isKana, isRomaji } from \"wanakana\";\r\nimport { GlobalActions } from \"reducers/actions/GlobalActions\";\r\n\r\nexport const NavMenu = () => {\r\n const { flashcardsState, flashcardsDispatcher } = useFlashcardsContext();\r\n const pageLimit = 25;\r\n\r\n const history = useHistory();\r\n\r\n const [state, setState] = useState({\r\n isOpen: false,\r\n settingsIsOpen: false,\r\n searchBarOpen: false,\r\n name: \"\",\r\n });\r\n const { globalState, globalDispatcher }: IGlobalProvider = useGlobalContext();\r\n const { isDarkMode } = globalState.userSettings;\r\n\r\n const openDrawer = () => {\r\n setState({ ...state, isOpen: true });\r\n };\r\n\r\n const closeDrawer = () => {\r\n setState({ ...state, isOpen: false });\r\n };\r\n\r\n const handleCloseSettings = () => {\r\n setState({ ...state, settingsIsOpen: false });\r\n };\r\n\r\n const handleClickSettings = () => {\r\n setState({ ...state, settingsIsOpen: true });\r\n };\r\n\r\n const handleViewMode = () => {\r\n globalDispatcher({\r\n type: GlobalActions.SET_DARK_THEME,\r\n payload: !isDarkMode,\r\n });\r\n };\r\n\r\n const handleChange = (\r\n e: ChangeEvent\r\n ) => {\r\n setState((currentState) => {\r\n return { ...currentState, [e.target.id]: e.target.value };\r\n });\r\n };\r\n\r\n const handleNameBlur = () => {\r\n if (!state.name) {\r\n setFlashcardsFilter();\r\n }\r\n };\r\n\r\n const handleSubmit = (event: FormEvent) => {\r\n event.preventDefault();\r\n setFlashcardsFilter();\r\n history.push(`/flashcards`);\r\n };\r\n\r\n const setFlashcardsFilter = () => {\r\n flashcardsDispatcher({\r\n type: FlashcardsActions.RESTART_INFINTE_SCROLL,\r\n });\r\n\r\n flashcardsDispatcher({\r\n type: FlashcardsActions.SET_FILTERS,\r\n payload: {\r\n ...flashcardsState.filters,\r\n ...(isRomaji(\r\n state.name?.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\") ?? \"\"\r\n )\r\n ? {\r\n nameRomaji_like: state.name ?? undefined,\r\n nameHiragana_like: undefined,\r\n name_like: undefined,\r\n }\r\n : isKana(state.name ?? \"\")\r\n ? {\r\n nameHiragana_like: state.name ?? undefined,\r\n nameRomaji_like: undefined,\r\n name_like: undefined,\r\n }\r\n : {\r\n name_like: state.name ?? undefined,\r\n nameRomaji_like: undefined,\r\n nameHiragana_like: undefined,\r\n }),\r\n _page: 1,\r\n _limit: pageLimit,\r\n },\r\n });\r\n };\r\n\r\n const handleShowSearchBar = () => {\r\n setState({ ...state, searchBarOpen: true });\r\n };\r\n\r\n const handleHideSearchBar = () => {\r\n setState({ ...state, searchBarOpen: false });\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n Inicio\r\n \r\n \r\n \r\n \r\n \r\n \r\n Buscar\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {isDarkMode ? \"Claro\" : \"Oscuro\"}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n {\" \"}\r\n \r\n © 2021-{new Date().getFullYear()}, Lienzo Digital{\" \"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n","import React, { useMemo } from \"react\";\r\nimport { Container } from \"reactstrap\";\r\nimport { useGlobalContext } from \"../../contexts/GlobalContext\";\r\nimport { IGlobalProvider } from \"../../contexts/types/IGlobalProvider\";\r\n\r\nimport { NavMenu } from \"./menu/NavMenu\";\r\nimport LoadingOverlay from \"./LoadingOverlay\";\r\n\r\nexport const Layout = (props) => {\r\n const { globalState }: IGlobalProvider = useGlobalContext();\r\n const { apiProcessing } = globalState;\r\n const { isDarkMode } = globalState.userSettings;\r\n const showLoading = useMemo(() => apiProcessing > 0, [apiProcessing]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {props.children}\r\n \r\n \r\n
\r\n );\r\n};\r\n","import { Spinner, H4 } from \"@blueprintjs/core\";\r\nimport React from \"react\";\r\nimport IProcessing from \"./types/IProcessing\";\r\nimport { ScrollToTopOnMount } from \"./Utils\";\r\n\r\nconst Processing = ({ text }: IProcessing) => {\r\n return (\r\n <>\r\n \r\n
\r\n \r\n {typeof text === \"string\" ?

{text}

: text}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default Processing;\r\n","import React from \"react\";\r\nimport { Component } from \"react\";\r\nimport Processing from \"../Processing\";\r\nimport authService from \"../../../api/authService\";\r\nimport { AuthenticationResultStatus } from \"../../../api/authService\";\r\nimport {\r\n LoginActions,\r\n QueryParameterNames,\r\n ApplicationPaths,\r\n} from \"./ApiAuthorizationConstants\";\r\n\r\n// The main responsibility of this component is to handle the user's login process.\r\n// This is the starting point for the login process. Any component that needs to authenticate\r\n// a user can simply perform a redirect to this component with a returnUrl query parameter and\r\n// let the component perform the login and return back to the return url.\r\nexport class Login extends Component<\r\n { action: string },\r\n { message: string | undefined | null }\r\n> {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LoginActions.Login:\r\n this.login(this.getReturnUrl());\r\n break;\r\n case LoginActions.LoginCallback:\r\n this.processLoginCallback();\r\n break;\r\n case LoginActions.LoginFailed:\r\n const params = new URLSearchParams(window.location.search);\r\n const error = params.get(QueryParameterNames.Message);\r\n this.setState({ message: error });\r\n break;\r\n case LoginActions.Profile:\r\n this.redirectToProfile();\r\n break;\r\n case LoginActions.Register:\r\n this.redirectToRegister();\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n\r\n render() {\r\n const action = this.props.action;\r\n const { message } = this.state;\r\n\r\n if (!!message) {\r\n return
{message}
;\r\n } else {\r\n switch (action) {\r\n case LoginActions.Login:\r\n return ;\r\n case LoginActions.LoginCallback:\r\n return ;\r\n case LoginActions.Profile:\r\n case LoginActions.Register:\r\n return ;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n }\r\n\r\n async login(returnUrl) {\r\n const state = { returnUrl };\r\n const result: any = await authService.signIn(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid status result ${result.status}.`);\r\n }\r\n }\r\n\r\n async processLoginCallback() {\r\n const url = window.location.href;\r\n const result: any = await authService.completeSignIn(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeSignIn finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error(\"Should not redirect.\");\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\r\n `Invalid authentication result status '${result.status}'.`\r\n );\r\n }\r\n }\r\n\r\n getReturnUrl(state?) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\r\n \"Invalid return url. The return url needs to have the same origin as the current page.\"\r\n );\r\n }\r\n return (\r\n (state && state.returnUrl) || fromQuery || `${window.location.origin}/`\r\n );\r\n }\r\n\r\n redirectToRegister() {\r\n this.redirectToApiAuthorizationPath(\r\n `${ApplicationPaths.IdentityRegisterPath}?${\r\n QueryParameterNames.ReturnUrl\r\n }=${encodeURI(ApplicationPaths.Login)}`\r\n );\r\n }\r\n\r\n redirectToProfile() {\r\n this.redirectToApiAuthorizationPath(ApplicationPaths.IdentityManagePath);\r\n }\r\n\r\n redirectToApiAuthorizationPath(apiAuthorizationPath) {\r\n const redirectUrl = `${window.location.origin}/${apiAuthorizationPath}`;\r\n // It's important that we do a replace here so that when the user hits the back arrow on the\r\n // browser they get sent back to where it was on the app instead of to an endpoint on this\r\n // component.\r\n window.location.replace(redirectUrl);\r\n }\r\n\r\n navigateToReturnUrl(returnUrl) {\r\n // It's important that we do a replace here so that we remove the callback uri with the\r\n // fragment containing the tokens from the browser history.\r\n window.location.replace(returnUrl);\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { Component } from \"react\";\r\nimport authService from \"../../../api/authService\";\r\nimport { AuthenticationResultStatus } from \"../../../api/authService\";\r\nimport Processing from \"../Processing\";\r\nimport Success from \"../Success\";\r\nimport {\r\n QueryParameterNames,\r\n LogoutActions,\r\n ApplicationPaths,\r\n} from \"./ApiAuthorizationConstants\";\r\n\r\n// The main responsibility of this component is to handle the user's logout process.\r\n// This is the starting point for the logout process, which is usually initiated when a\r\n// user clicks on the logout button on the LoginMenu component.\r\nexport class Logout extends Component<\r\n { action: string },\r\n {\r\n message: string | undefined | null;\r\n isReady: boolean;\r\n authenticated: boolean;\r\n }\r\n> {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined,\r\n isReady: false,\r\n authenticated: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n if (!!window.history.state.state.local) {\r\n this.logout(this.getReturnUrl());\r\n } else {\r\n // This prevents regular links to /authentication/logout from triggering a logout\r\n this.setState({\r\n isReady: true,\r\n message: \"The logout was not initiated from within the page.\",\r\n });\r\n }\r\n break;\r\n case LogoutActions.LogoutCallback:\r\n this.processLogoutCallback();\r\n break;\r\n case LogoutActions.LoggedOut:\r\n this.setState({\r\n isReady: true,\r\n message: \"You successfully logged out!\",\r\n });\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n\r\n this.populateAuthenticationState();\r\n }\r\n\r\n render() {\r\n const { isReady, message } = this.state;\r\n if (!isReady) {\r\n return
;\r\n }\r\n if (!!message && this.props.action !== LogoutActions.LoggedOut) {\r\n return message === \"You successfully logged out!\" ? (\r\n \r\n ) : (\r\n
{message}
\r\n );\r\n } else {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n return ;\r\n case LogoutActions.LogoutCallback:\r\n return ;\r\n case LogoutActions.LoggedOut:\r\n return (\r\n \r\n );\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n }\r\n\r\n async logout(returnUrl) {\r\n const state = { returnUrl };\r\n const isauthenticated = await authService.isAuthenticated();\r\n if (isauthenticated) {\r\n const result: any = await authService.signOut(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n } else {\r\n this.setState({ message: \"You successfully logged out!\" });\r\n }\r\n }\r\n\r\n async processLogoutCallback() {\r\n const url = window.location.href;\r\n const result: any = await authService.completeSignOut(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeAuthentication finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error(\"Should not redirect.\");\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n this.setState({ isReady: true, authenticated });\r\n }\r\n\r\n getReturnUrl(state?) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\r\n \"Invalid return url. The return url needs to have the same origin as the current page.\"\r\n );\r\n }\r\n return (\r\n (state && state.returnUrl) ||\r\n fromQuery ||\r\n `${window.location.origin}${ApplicationPaths.LoggedOut}`\r\n );\r\n }\r\n\r\n navigateToReturnUrl(returnUrl) {\r\n return window.location.replace(returnUrl);\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { Route, Switch } from \"react-router\";\r\nimport {\r\n ApplicationPaths,\r\n LoginActions,\r\n LogoutActions,\r\n} from \"../components/shared/api-authorization/ApiAuthorizationConstants\";\r\nimport { Login } from \"../components/shared/api-authorization/Login\";\r\nimport { Logout } from \"../components/shared/api-authorization/Logout\";\r\nimport Notfound from \"../components/shared/Notfound\";\r\n\r\nexport default class ApiAuthorizationRoutes extends Component {\r\n render() {\r\n return (\r\n \r\n loginAction(LoginActions.Login)}\r\n />\r\n loginAction(LoginActions.LoginFailed)}\r\n />\r\n loginAction(LoginActions.LoginCallback)}\r\n />\r\n loginAction(LoginActions.Profile)}\r\n />\r\n loginAction(LoginActions.Register)}\r\n />\r\n logoutAction(LogoutActions.Logout)}\r\n />\r\n logoutAction(LogoutActions.LogoutCallback)}\r\n />\r\n logoutAction(LogoutActions.LoggedOut)}\r\n />\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nfunction loginAction(name) {\r\n return ;\r\n}\r\n\r\nfunction logoutAction(name) {\r\n return ;\r\n}\r\n","import { Link } from \"react-router-dom\";\r\nimport { NavbarDivider, AnchorButton } from \"@blueprintjs/core\";\r\nimport { useGlobalContext } from \"contexts/GlobalContext\";\r\nimport { IGlobalProvider } from \"contexts/types/IGlobalProvider\";\r\nconst Footer = () => {\r\n const { globalState }: IGlobalProvider = useGlobalContext();\r\n const { isDarkMode } = globalState.userSettings;\r\n\r\n return (\r\n
\r\n \r\n © 2021-{new Date().getFullYear()}, Lienzo Digital{\" \"}\r\n \r\n \r\n \r\n \r\n Términos y Condiciones\r\n {\" \"}\r\n {\" · \"}\r\n \r\n Política de Privacidad\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Footer;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Button, Card, Divider, H2, H3, Icon } from \"@blueprintjs/core\";\r\nimport { useGlobalContext } from \"contexts/GlobalContext\";\r\nimport { IGlobalProvider } from \"contexts/types/IGlobalProvider\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { Link, NavLink, Redirect, useHistory } from \"react-router-dom\";\r\nimport { Col, Container, Row } from \"reactstrap\";\r\nimport Footer from \"./Footer\";\r\nimport { ScrollToTopOnMount } from \"./Utils\";\r\nimport { ApplicationPaths } from \"./api-authorization/ApiAuthorizationConstants\";\r\nimport LoadingOverlay from \"./LoadingOverlay\";\r\nimport { IHomeGenericState } from \"./types/IHomeGenericState\";\r\n\r\nconst HomeGeneric = () => {\r\n const history = useHistory();\r\n const { globalState }: IGlobalProvider = useGlobalContext();\r\n const { isAuthenticated } = globalState.userProfile;\r\n const [state, setState] = useState({\r\n isLoading: true,\r\n isInstalled: false,\r\n deferredPrompt: undefined,\r\n });\r\n\r\n useEffect(() => {\r\n const isInstalled = window.matchMedia(\r\n \"(display-mode: standalone)\"\r\n )?.matches;\r\n const tempState = { ...state, isLoading: false, isInstalled };\r\n\r\n setState(tempState);\r\n\r\n window.addEventListener(\"beforeinstallprompt\", (event) => {\r\n setState({ ...tempState, deferredPrompt: event });\r\n });\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const installApp = async () => {\r\n if (state.deferredPrompt) {\r\n state.deferredPrompt.prompt();\r\n const { outcome } = await state.deferredPrompt.userChoice;\r\n if (outcome === \"accepted\") {\r\n setState({ ...state, deferredPrompt: undefined });\r\n }\r\n }\r\n };\r\n\r\n if (state.isLoading || globalState.isLoading) {\r\n return ;\r\n }\r\n\r\n if (!globalState.isLoading && !isAuthenticated && state.isInstalled) {\r\n return ;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n Kotoba Anki\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n

ようこそ!

\r\n

\r\n Kotoba Anki es un sitio enfocado al aprendizaje de vocabulario\r\n japonés mediante flashcards.\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n

\r\n Flashcards\r\n

\r\n
\r\n \r\n

\r\n Crea y edita tus propias flashcards en pocos pasos. Consulta\r\n vocabulario por lección del Minna no Nihongo, nivel del JLPT,\r\n o tipo de palabra. También tienes a tu disposición muchas\r\n flashcards de vocabulario general.\r\n

\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n

\r\n Mazos\r\n

\r\n
\r\n \r\n

\r\n Mantén tus flashcards organizadas en mazos y repasa con ellos.\r\n En los mazos puedes tener tantos las flashcards que has\r\n creado, como las flashcards generales de Kotoba Anki (sólo\r\n usuarios registrados).\r\n

\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n

\r\n Repaso\r\n

\r\n
\r\n \r\n

\r\n Realiza un breve quiz y conoce qué tanto vocabulario dominas.\r\n Puedes usar tanto las flashcards de tus mazos, como las\r\n flashcards generales. ¡Cumple la meta semanal y amplia tu\r\n vocabulario!.\r\n

\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n\r\n

\r\n ¿Dispositivo móvil, tablet o PC? ¡Lo tenemos cubierto! Kotoba\r\n Anki es una \"Progressive Web App (PWA)\". PWA es una nueva\r\n generación de aplicaciones móviles que puede ser instalada\r\n desde el navedador, en cualquier dispositivo que lo soporte,\r\n sin necesidad de ser descargada desde una app store.\r\n {state.deferredPrompt ? \" ¡Pruébala!\" : \"\"}\r\n

\r\n
\r\n {state.deferredPrompt ? (\r\n <>\r\n
\r\n \r\n
\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n ¿Listo para comenzar? Regístrate ahora{\" \"}\r\n

\r\n \r\n \r\n

\r\n Puedes probar Kotoba Anki, gratis, por el tiempo que desees.\r\n Cuando estés convencido de que es adecuado para tí, puedes\r\n adquirir la suscripción Pro por el monto especificado abajo.\r\n

\r\n \r\n
\r\n\r\n
\r\n history.push(\"/account/register\")}\r\n interactive\r\n elevation={0}\r\n >\r\n
Kotoba Anki Free
\r\n
\r\n
\r\n
\r\n
MENSUAL
\r\n $1.99\r\n
\r\n
\r\n GRATIS\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Registro instantáneo\r\n
\r\n
\r\n Crea hasta 5 flashcards propias\r\n
\r\n
\r\n Configura hasta 3 mazos que puedes usar en tus repasos\r\n
\r\n
\r\n Mejora tu suscripción cuando quieras\r\n
\r\n  \r\n
\r\n
 
\r\n
\r\n \r\n
\r\n
\r\n \r\n history.push(\"/subscriptions/subscribe-pro\")}\r\n interactive\r\n elevation={0}\r\n >\r\n
Kotoba Anki Pro
\r\n
\r\n
\r\n
\r\n
MENSUAL
\r\n $1.99\r\n
\r\n
\r\n
\r\n
\r\n
ANUAL
\r\n $19.99\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Registro instantáneo\r\n
\r\n
\r\n Crea hasta 2000 flashcards propias\r\n
\r\n
\r\n Configura hasta 500 mazos que puedes usar en tus repasos\r\n
\r\n
\r\n Modifica cualquier flashcard, general o propia\r\n
\r\n
\r\n Cancela tu suscripción cuando quieras\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n