import { Box, Button, Paper, Stack } from "@mui/material"; import { HasChildren } from "@types"; import { QRサービス券取得用トークンリフレッシュ, QRサービス券取得用トークン取得, } from "api/qr-service"; import useAPICall from "hooks/useAPICall"; import useAuth from "hooks/useAuth"; import useDashboard from "hooks/useDashBoard"; import { useDialog } from "hooks/useDialog"; import useSnackbarCustom from "hooks/useSnackbarCustom"; import { PageID, TabID } from "pages"; import QRCode from "qrcode"; import { useEffect, useMemo, useState } from "react"; import { getFullPath, getPath } from "routes/path"; export default function サービス券発行用QRコード() { const { setHeaderTitle, setTabs } = useDashboard( PageID.サービス券発行用QRコード, TabID.NONE ); const size = 200; const { error } = useSnackbarCustom(); const [token, setToken] = useState(""); const [qr, setQr] = useState(""); const { callAPI: callQRサービス券取得用トークン取得 } = useAPICall({ apiMethod: QRサービス券取得用トークン取得, backDrop: true, onSuccess: ({ data }) => { setToken(data.token); }, onFailed: () => { error("QR表示失敗しました"); }, }); const url = useMemo(() => { if (!token) return ""; return getFullPath(PageID.QRサービス券発行申請, { query: { token, }, }); }, [token]); const fetch = () => { callQRサービス券取得用トークン取得({}); }; useEffect(() => { if (url) { QRCode.toDataURL(url, { errorCorrectionLevel: "H", }).then((data: string) => { setQr(data); }); } }, [url]); useEffect(() => { setHeaderTitle("サービス券発行用QRコード"); }, [setHeaderTitle, setTabs]); useEffect(() => { fetch(); }, []); return ( {!!qr && } {url} QRコードリフレッシュ ); } type RefreshButtonProps = { fetch: VoidFunction; } & HasChildren; function RefreshButton({ fetch }: RefreshButtonProps) { const {} = useAuth(); const { success, error } = useSnackbarCustom(); const { callAPI: callQRサービス券取得用トークンリフレッシュ } = useAPICall({ apiMethod: QRサービス券取得用トークンリフレッシュ, onSuccess: () => { success("リフレッシュしました"); fetch(); }, onFailed: () => { error("失敗しました"); }, }); const { element, open, isAgree } = useDialog({ message: "リフレッシュすると以前のQRコードが使えなくなります", }); const handleClick = () => { open(); }; useEffect(() => { if (isAgree) { callQRサービス券取得用トークンリフレッシュ({}); } }, [isAgree]); return ( <> {element} ); }