import { FC, useCallback, useEffect, useRef } from 'react'; import { App as AntdApp, Breadcrumb, Button, Result, message } from 'antd'; import { useBreadcrumbStore, useListenPopState, useRouterStore } from '@l-clutch/core'; import './style.scss'; import { Setting } from './Setting'; import { UserList } from './User/UserList'; import { Editor as User } from './User/Editor'; import { RichMenuList } from './RichMenu/RichMenuList'; import { Editor as RichMenuEditor } from './RichMenu/Editor'; export const App: FC = () => { useListenPopState(); const { items } = useBreadcrumbStore(); useEffect(() => { message.config({ top: 40, }); }, []); return ( ); }; const Content: FC = () => { const { path, setPath } = useRouterStore(); useEffect(() => { if (path === '/') setPath('/user'); }, [path]); if (path.match(/^\/?user\/?$/)) return ; if (path.match(/^\/?user\/[^/]+\/?$/)) return ; if (path.match(/^\/?rich-menu\/?$/)) return ; if (path.match(/^\/?rich-menu\/[^/]+\/?$/)) return ; if (path.match(/^\/?setting\/?/)) return ; return ( setPath('/')}> ホームへ戻る } /> ); }; const Dialog: FC = () => { const { modal } = AntdApp.useApp(); const { setConfirmLeave } = useRouterStore(); const resolveRef = useRef<(value: boolean) => void>(() => {}); const confirm = useCallback(() => { modal.confirm({ title: '変更が保存されていません', content: '変更を保存せずにページを離れると、入力した内容は失われます。', okText: '保存せずに離れる', cancelText: 'キャンセル', onOk: () => resolveRef.current(true), onCancel: () => resolveRef.current(false), }); return new Promise((resolve) => { resolveRef.current = resolve; }); }, []); useEffect(() => { setConfirmLeave(confirm); }, [confirm]); return null; };