feat(component): new hook to open confirm modal (#6342)

new exports from `@affine/component`:
```ts
import { ConfirmModalProvider, useConfirmModal } from "@affine/component"
```

Open confirm modal with hook:

```ts
const Component = () => {
  const { openConfirmModal } = useConformModal();

  const open = () => {
    openConfirmModal({
      // props of ConfirmModal
      /**
       * will show loading state when confirm clicked, and close after onConfirm finished
       */
      onConfirm: async () => {
        await new Promise((r) => setTimeout(r, 2000));
      },
    });
  }
  return <Button onClick={open}>Open</Button>
}
```
This commit is contained in:
CatsJuice
2024-03-27 13:30:30 +00:00
parent 39facba92e
commit d412635f6b
7 changed files with 138 additions and 7 deletions

View File

@@ -11,7 +11,7 @@ import { useCurrentLoginStatus } from '../../../hooks/affine/use-current-login-s
export const EnableAffineCloudModal = ({
onConfirm: propsOnConfirm,
...props
}: ConfirmModalProps) => {
}: Omit<ConfirmModalProps, 'onConfirm'> & { onConfirm: () => void }) => {
const t = useAFFiNEI18N();
const loginStatus = useCurrentLoginStatus();
const setAuthAtom = useSetAtom(authAtom);

View File

@@ -55,7 +55,7 @@ export const ConfirmLoadingModal = ({
onOpenChange={onOpenChange}
onConfirm={() => {
confirmed.current = true;
onConfirm?.();
onConfirm?.()?.catch(console.error);
}}
{...props}
>

View File

@@ -13,6 +13,7 @@ import * as styles from './style.css';
interface WorkspaceDeleteProps extends ConfirmModalProps {
workspaceMetadata: WorkspaceMetadata;
onConfirm?: () => void;
}
export const WorkspaceDeleteModal = ({