diff options
Diffstat (limited to 'packages/merchant-backoffice-ui/src/context')
6 files changed, 297 insertions, 0 deletions
diff --git a/packages/merchant-backoffice-ui/src/context/backend.ts b/packages/merchant-backoffice-ui/src/context/backend.ts new file mode 100644 index 000000000..9ef7bfdea --- /dev/null +++ b/packages/merchant-backoffice-ui/src/context/backend.ts @@ -0,0 +1,82 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE.  See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createContext, h, VNode } from 'preact' +import { useCallback, useContext, useState } from 'preact/hooks' +import { useBackendDefaultToken, useBackendURL } from '../hooks'; + +interface BackendContextType { +  url: string; +  token?: string; +  triedToLog: boolean; +  resetBackend: () => void; +  clearAllTokens: () => void; +  addTokenCleaner: (c: () => void) => void; +  updateLoginStatus: (url: string, token?: string) => void; +} + +const BackendContext = createContext<BackendContextType>({ +  url: '', +  token: undefined, +  triedToLog: false, +  resetBackend: () => null, +  clearAllTokens: () => null, +  addTokenCleaner: () => null, +  updateLoginStatus: () => null, +}) + +function useBackendContextState(defaultUrl?: string, initialToken?: string): BackendContextType { +  const [url, triedToLog, changeBackend, resetBackend] = useBackendURL(defaultUrl); +  const [token, _updateToken] = useBackendDefaultToken(initialToken); +  const updateToken = (t?: string) => { +    _updateToken(t) +  } + +  const tokenCleaner = useCallback(() => { updateToken(undefined) }, []) +  const [cleaners, setCleaners] = useState([tokenCleaner]) +  const addTokenCleaner = (c: () => void) => setCleaners(cs => [...cs, c]) +  const addTokenCleanerMemo = useCallback((c: () => void) => { addTokenCleaner(c) }, [tokenCleaner]) + +  const clearAllTokens = () => { +    cleaners.forEach(c => c()) +    for (let i = 0; i < localStorage.length; i++) { +      const k = localStorage.key(i) +      if (k && /^backend-token/.test(k)) localStorage.removeItem(k) +    } +    resetBackend() +  } + +  const updateLoginStatus = (url: string, token?: string) => { +    changeBackend(url); +    if (token) updateToken(token); +  }; + + +  return { url, token, triedToLog, updateLoginStatus, resetBackend, clearAllTokens, addTokenCleaner: addTokenCleanerMemo } +} + +export const BackendContextProvider = ({ children, defaultUrl, initialToken }: { children: any, defaultUrl?: string, initialToken?: string }): VNode => { +  const value = useBackendContextState(defaultUrl, initialToken) + +  return h(BackendContext.Provider, { value, children }); +} + +export const useBackendContext = (): BackendContextType => useContext(BackendContext); diff --git a/packages/merchant-backoffice-ui/src/context/config.ts b/packages/merchant-backoffice-ui/src/context/config.ts new file mode 100644 index 000000000..5cd772380 --- /dev/null +++ b/packages/merchant-backoffice-ui/src/context/config.ts @@ -0,0 +1,32 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE.  See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createContext } from 'preact' +import { useContext } from 'preact/hooks' + +interface Type { +  currency: string; +  version: string; +} +const Context = createContext<Type>(null!) + +export const ConfigContextProvider = Context.Provider +export const useConfigContext = (): Type => useContext(Context); diff --git a/packages/merchant-backoffice-ui/src/context/fetch.ts b/packages/merchant-backoffice-ui/src/context/fetch.ts new file mode 100644 index 000000000..ef4dfb7ae --- /dev/null +++ b/packages/merchant-backoffice-ui/src/context/fetch.ts @@ -0,0 +1,54 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE.  See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/> + */ + +/** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +import { h, createContext, VNode, ComponentChildren } from "preact"; +import { useContext } from "preact/hooks"; +import useSWR from "swr"; +import useSWRInfinite from "swr/infinite"; + +interface Type { +  useSWR: typeof useSWR; +  useSWRInfinite: typeof useSWRInfinite; +} + +const Context = createContext<Type>({} as any); + +export const useFetchContext = (): Type => useContext(Context); +export const FetchContextProvider = ({ +  children, +}: { +  children: ComponentChildren; +}): VNode => { +  return h(Context.Provider, { value: { useSWR, useSWRInfinite }, children }); +}; + +export const FetchContextProviderTesting = ({ +  children, +  data, +}: { +  children: ComponentChildren; +  data: any; +}): VNode => { +  return h(Context.Provider, { +    value: { useSWR: () => data, useSWRInfinite }, +    children, +  }); +}; diff --git a/packages/merchant-backoffice-ui/src/context/instance.ts b/packages/merchant-backoffice-ui/src/context/instance.ts new file mode 100644 index 000000000..fecf36426 --- /dev/null +++ b/packages/merchant-backoffice-ui/src/context/instance.ts @@ -0,0 +1,35 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE.  See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createContext } from 'preact' +import { useContext } from 'preact/hooks' + +interface Type { +  id: string; +  token?: string; +  admin?: boolean; +  changeToken: (t?:string) => void; +} + +const Context = createContext<Type>({} as any) + +export const InstanceContextProvider = Context.Provider +export const useInstanceContext = (): Type => useContext(Context); diff --git a/packages/merchant-backoffice-ui/src/context/listener.ts b/packages/merchant-backoffice-ui/src/context/listener.ts new file mode 100644 index 000000000..659db0a03 --- /dev/null +++ b/packages/merchant-backoffice-ui/src/context/listener.ts @@ -0,0 +1,35 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE.  See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createContext } from 'preact' +import { useContext } from 'preact/hooks' + +interface Type { +  id: string; +  token?: string; +  admin?: boolean; +  changeToken: (t?:string) => void; +} + +const Context = createContext<Type>({} as any) + +export const ListenerContextProvider = Context.Provider +export const useListenerContext = (): Type => useContext(Context); diff --git a/packages/merchant-backoffice-ui/src/context/translation.ts b/packages/merchant-backoffice-ui/src/context/translation.ts new file mode 100644 index 000000000..952a1e325 --- /dev/null +++ b/packages/merchant-backoffice-ui/src/context/translation.ts @@ -0,0 +1,59 @@ +/* + This file is part of GNU Taler + (C) 2021 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE.  See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/> + */ + +/** +* +* @author Sebastian Javier Marchano (sebasjm) +*/ + +import { createContext, h, VNode } from 'preact' +import { useContext, useEffect } from 'preact/hooks' +import { useLang } from '../hooks' +import * as jedLib from "jed"; +import { strings } from "../i18n/strings"; + +interface Type { +  lang: string; +  handler: any; +  changeLanguage: (l: string) => void; +} +const initial = { +  lang: 'en', +  handler: null, +  changeLanguage: () => { +    // do not change anything +  } +} +const Context = createContext<Type>(initial) + +interface Props { +  initial?: string, +  children: any, +  forceLang?: string +} + +export const TranslationProvider = ({ initial, children, forceLang }: Props): VNode => { +  const [lang, changeLanguage] = useLang(initial) +  useEffect(() => { +    if (forceLang) { +      changeLanguage(forceLang) +    } +  }) +  const handler = new jedLib.Jed(strings[lang]); +  return h(Context.Provider, { value: { lang, handler, changeLanguage }, children }); +} + +export const useTranslationContext = (): Type => useContext(Context);
\ No newline at end of file  | 
