diff options
author | Christian Blättler <blatc2@bfh.ch> | 2024-05-07 18:12:20 +0200 |
---|---|---|
committer | Christian Blättler <blatc2@bfh.ch> | 2024-05-07 18:12:20 +0200 |
commit | 04447178039569db4da0fd60c819e9fe1bc1df20 (patch) | |
tree | 2a93ecf076ddc63218cb676fb7cea1dd9ad31881 /packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts | |
parent | 7b3157df9746d12f712e6a4604eccc8ed6b7d0c3 (diff) | |
download | wallet-core-04447178039569db4da0fd60c819e9fe1bc1df20.tar.xz |
update token families code to allign with new standards
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts')
-rw-r--r-- | packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts | 140 |
1 files changed, 46 insertions, 94 deletions
diff --git a/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts b/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts index 0266fe536..62f364972 100644 --- a/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts +++ b/packages/merchant-backoffice-ui/src/hooks/tokenfamily.ts @@ -13,114 +13,66 @@ 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"; +import { useSessionContext } from "../context/session.js"; // FIX default import https://github.com/microsoft/TypeScript/issues/49189 -import _useSWR, { SWRHook, useSWRConfig } from "swr"; +import _useSWR, { SWRHook } from "swr"; +import { AccessToken, TalerHttpError, TalerMerchantManagementResultByMethod } from "@gnu-taler/taler-util"; 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(); +export function useInstanceTokenFamilies() { + const { state: session, lib: { instance } } = useSessionContext(); - const createTokenFamily = async ( - data: MerchantBackend.TokenFamilies.TokenFamilyAddDetail, - ): Promise<void> => { - const res = await request(`/private/tokenfamilies`, { - method: "POST", - data, - }); + // const [offset, setOffset] = useState<number | undefined>(); - 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, + async function fetcher([token, bid]: [AccessToken, number]) { + return await instance.listTokenFamilies(token, { + // limit: PAGINATED_LIST_REQUEST, + // offset: bid === undefined ? undefined: String(bid), + // order: "dec", }); + } - return await mutateAll(/.*"\/private\/tokenfamilies.*/); - }; + const { data, error } = useSWR< + TalerMerchantManagementResultByMethod<"listTokenFamilies">, + TalerHttpError + >([session.token, "offset", "listTokenFamilies"], fetcher); - const deleteTokenFamily = async (tokenFamilySlug: string): Promise<void> => { - await request(`/private/tokenfamilies/${tokenFamilySlug}`, { - method: "DELETE", - }); - await mutate([`/private/tokenfamilies`]); - }; + if (error) return error; + if (data === undefined) return undefined; + if (data.type !== "ok") return data; - return { createTokenFamily, updateTokenFamily, deleteTokenFamily }; + return data; } -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 }; +export function useTokenFamilyDetails(tokenFamilySlug: string) { + const { state: session } = useSessionContext(); + const { lib: { instance } } = useSessionContext(); + + async function fetcher([slug, token]: [string, AccessToken]) { + return await instance.getTokenFamilyDetails(token, slug); } - return { loading: true }; + + const { data, error } = useSWR< + TalerMerchantManagementResultByMethod<"getTokenFamilyDetails">, + TalerHttpError + >([tokenFamilySlug, session.token, "getTokenFamilyDetails"], fetcher); + + if (error) return error; + if (data === undefined) return undefined; + if (data.type !== "ok") return data; + + return data; } -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 }; +export interface TokenFamilyAPI { + createTokenFamily: ( + data: MerchantBackend.TokenFamilies.TokenFamilyAddDetail, + ) => Promise<void>; + updateTokenFamily: ( + slug: string, + data: MerchantBackend.TokenFamilies.TokenFamilyPatchDetail, + ) => Promise<void>; + deleteTokenFamily: (slug: string) => Promise<void>; } |