diff options
author | Christian Blättler <blatc2@bfh.ch> | 2023-11-28 08:36:43 +0100 |
---|---|---|
committer | Christian Blättler <blatc2@bfh.ch> | 2023-11-28 08:36:43 +0100 |
commit | b9ff31b8df2574663f073782f5be588dc8283174 (patch) | |
tree | 5ff0a4f22461ea52074e1151dd4b882d4541977c /packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts | |
parent | 94d741f3c86f6304771366a7ebe36bd4bb856093 (diff) | |
download | wallet-core-b9ff31b8df2574663f073782f5be588dc8283174.tar.xz |
start with token families ui
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts')
-rw-r--r-- | packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts b/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts new file mode 100644 index 000000000..0266fe536 --- /dev/null +++ b/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts @@ -0,0 +1,126 @@ +/* + This file is part of GNU Taler + (C) 2021-2023 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/> + */ + import { + HttpResponse, + HttpResponseOk, + RequestError, +} from "@gnu-taler/web-util/browser"; +import { MerchantBackend } from "../declaration.js"; +import { useBackendInstanceRequest, useMatchMutate } from "./backend.js"; + +// FIX default import https://github.com/microsoft/TypeScript/issues/49189 +import _useSWR, { SWRHook, useSWRConfig } from "swr"; +const useSWR = _useSWR as unknown as SWRHook; + +export interface TokenFamilyAPI { + createTokenFamily: ( + data: MerchantBackend.TokenFamilies.TokenFamilyAddDetail, + ) => Promise<void>; + updateTokenFamily: ( + slug: string, + data: MerchantBackend.TokenFamilies.TokenFamilyPatchDetail, + ) => Promise<void>; + deleteTokenFamily: (slug: string) => Promise<void>; +} + +export function useTokenFamilyAPI(): TokenFamilyAPI { + const mutateAll = useMatchMutate(); + const { mutate } = useSWRConfig(); + + const { request } = useBackendInstanceRequest(); + + const createTokenFamily = async ( + data: MerchantBackend.TokenFamilies.TokenFamilyAddDetail, + ): Promise<void> => { + const res = await request(`/private/tokenfamilies`, { + method: "POST", + data, + }); + + return await mutateAll(/.*"\/private\/tokenfamilies.*/); + }; + + const updateTokenFamily = async ( + tokenFamilySlug: string, + data: MerchantBackend.TokenFamilies.TokenFamilyPatchDetail, + ): Promise<void> => { + const r = await request(`/private/tokenfamilies/${tokenFamilySlug}`, { + method: "PATCH", + data, + }); + + return await mutateAll(/.*"\/private\/tokenfamilies.*/); + }; + + const deleteTokenFamily = async (tokenFamilySlug: string): Promise<void> => { + await request(`/private/tokenfamilies/${tokenFamilySlug}`, { + method: "DELETE", + }); + await mutate([`/private/tokenfamilies`]); + }; + + return { createTokenFamily, updateTokenFamily, deleteTokenFamily }; +} + +export function useInstanceTokenFamilies(): HttpResponse< + (MerchantBackend.TokenFamilies.TokenFamilyEntry)[], + MerchantBackend.ErrorDetail +> { + const { fetcher, multiFetcher } = useBackendInstanceRequest(); + + const { data: list, error: listError } = useSWR< + HttpResponseOk<MerchantBackend.TokenFamilies.TokenFamilySummaryResponse>, + RequestError<MerchantBackend.ErrorDetail> + >([`/private/tokenfamilies`], fetcher, { + refreshInterval: 0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + }); + + if (listError) return listError.cause; + + if (list) { + return { ok: true, data: list.data.token_families }; + } + return { loading: true }; +} + +export function useTokenFamilyDetails( + tokenFamilySlug: string, +): HttpResponse< + MerchantBackend.TokenFamilies.TokenFamilyDetail, + MerchantBackend.ErrorDetail +> { + const { fetcher } = useBackendInstanceRequest(); + + const { data, error, isValidating } = useSWR< + HttpResponseOk<MerchantBackend.TokenFamilies.TokenFamilyDetail>, + RequestError<MerchantBackend.ErrorDetail> + >([`/private/tokenfamilies/${tokenFamilySlug}`], fetcher, { + refreshInterval: 0, + refreshWhenHidden: false, + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshWhenOffline: false, + }); + + if (isValidating) return { loading: true, data: data?.data }; + if (data) return data; + if (error) return error.cause; + return { loading: true }; +} |