refactor(component): adjust confirm modal api (#7589)

This commit is contained in:
EYHN
2024-07-24 08:18:33 +00:00
parent 6ca7c41861
commit 98281a6394
28 changed files with 51 additions and 54 deletions

View File

@@ -11,10 +11,10 @@ export const PublicLinkDisableModal = (props: ConfirmModalProps) => {
title={t['com.affine.publicLinkDisableModal.title']()} title={t['com.affine.publicLinkDisableModal.title']()}
description={t['com.affine.publicLinkDisableModal.description']()} description={t['com.affine.publicLinkDisableModal.description']()}
cancelText={t['com.affine.publicLinkDisableModal.button.cancel']()} cancelText={t['com.affine.publicLinkDisableModal.button.cancel']()}
confirmText={t['com.affine.publicLinkDisableModal.button.disable']()}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'error', type: 'error',
['data-testid' as string]: 'confirm-enable-affine-cloud-button', ['data-testid' as string]: 'confirm-enable-affine-cloud-button',
children: t['com.affine.publicLinkDisableModal.button.disable'](),
}} }}
{...props} {...props}
/> />

View File

@@ -57,11 +57,11 @@ export const InviteModal = ({
padding: '20px 26px', padding: '20px 26px',
}, },
}} }}
confirmText={t['Invite']()}
confirmButtonOptions={{ confirmButtonOptions={{
loading: isMutating, loading: isMutating,
type: 'primary', type: 'primary',
['data-testid' as string]: 'confirm-enable-affine-cloud-button', ['data-testid' as string]: 'confirm-enable-affine-cloud-button',
children: t['Invite'](),
}} }}
onConfirm={handleConfirm} onConfirm={handleConfirm}
> >

View File

@@ -38,14 +38,13 @@ export const MemberLimitModal = ({
: 'com.affine.payment.member-limit.pro.description' : 'com.affine.payment.member-limit.pro.description'
]({ planName: plan, quota: quota })} ]({ planName: plan, quota: quota })}
cancelButtonOptions={{ style: { display: isFreePlan ? '' : 'none' } }} cancelButtonOptions={{ style: { display: isFreePlan ? '' : 'none' } }}
confirmText={t[
isFreePlan
? 'com.affine.payment.member-limit.free.confirm'
: 'com.affine.payment.member-limit.pro.confirm'
]()}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'primary', type: 'primary',
children:
t[
isFreePlan
? 'com.affine.payment.member-limit.free.confirm'
: 'com.affine.payment.member-limit.pro.confirm'
](),
}} }}
onConfirm={handleConfirm} onConfirm={handleConfirm}
></ConfirmModal> ></ConfirmModal>

View File

@@ -22,9 +22,7 @@ export const UsingHook = () => {
const showConfirm = () => { const showConfirm = () => {
openConfirmModal({ openConfirmModal({
cancelText: 'Cancel', cancelText: 'Cancel',
confirmButtonOptions: { confirmText: 'Confirm',
children: 'Confirm',
},
title: 'Confirm Modal', title: 'Confirm Modal',
children: 'Are you sure you want to confirm?', children: 'Are you sure you want to confirm?',
onConfirm, onConfirm,
@@ -43,9 +41,7 @@ export const AutoClose = () => {
const onConfirm = () => { const onConfirm = () => {
openConfirmModal({ openConfirmModal({
cancelText: 'Cancel', cancelText: 'Cancel',
confirmButtonOptions: { confirmText: 'Confirm',
children: 'Confirm',
},
title: 'Confirm Modal', title: 'Confirm Modal',
children: 'Are you sure you want to confirm?', children: 'Are you sure you want to confirm?',
onConfirm: () => console.log('Confirmed'), onConfirm: () => console.log('Confirmed'),

View File

@@ -10,11 +10,12 @@ import { Modal } from './modal';
import * as styles from './styles.css'; import * as styles from './styles.css';
export interface ConfirmModalProps extends ModalProps { export interface ConfirmModalProps extends ModalProps {
confirmButtonOptions?: ButtonProps; confirmButtonOptions?: Omit<ButtonProps, 'children'>;
onConfirm?: (() => void) | (() => Promise<void>); onConfirm?: (() => void) | (() => Promise<void>);
onCancel?: () => void; onCancel?: () => void;
cancelText?: string; confirmText?: React.ReactNode;
cancelButtonOptions?: ButtonProps; cancelText?: React.ReactNode;
cancelButtonOptions?: Omit<ButtonProps, 'children'>;
reverseFooter?: boolean; reverseFooter?: boolean;
} }
@@ -22,6 +23,7 @@ export const ConfirmModal = ({
children, children,
confirmButtonOptions, confirmButtonOptions,
// FIXME: we need i18n // FIXME: we need i18n
confirmText,
cancelText = 'Cancel', cancelText = 'Cancel',
cancelButtonOptions, cancelButtonOptions,
reverseFooter, reverseFooter,
@@ -64,7 +66,9 @@ export const ConfirmModal = ({
{cancelText} {cancelText}
</Button> </Button>
</DialogTrigger> </DialogTrigger>
<Button onClick={onConfirmClick} {...confirmButtonOptions}></Button> <Button onClick={onConfirmClick} {...confirmButtonOptions}>
{confirmText}
</Button>
</div> </div>
</Modal> </Modal>
); );

View File

@@ -58,10 +58,10 @@ const ConfirmModalTemplate: StoryFn<ConfirmModalProps> = () => {
onConfirm={handleConfirm} onConfirm={handleConfirm}
title="Modal Title" title="Modal Title"
description="Modal description" description="Modal description"
confirmText="Confirm"
confirmButtonOptions={{ confirmButtonOptions={{
loading: loading, loading: loading,
type: 'primary', type: 'primary',
children: 'Confirm',
}} }}
> >
<Input placeholder="input someting" status={inputStatus} /> <Input placeholder="input someting" status={inputStatus} />

View File

@@ -39,8 +39,8 @@ export const AdminPanelHeader = ({
title: 'Save Runtime Configurations ?', title: 'Save Runtime Configurations ?',
description: description:
'Are you sure you want to save the following changes?', 'Are you sure you want to save the following changes?',
confirmText: 'Save',
confirmButtonOptions: { confirmButtonOptions: {
children: 'Save',
type: 'primary', type: 'primary',
}, },
onConfirm: onConfirm, onConfirm: onConfirm,

View File

@@ -25,8 +25,8 @@ export const AiLoginRequiredModal = () => {
setOpen(false); setOpen(false);
openSignIn(); openSignIn();
}, },
confirmText: t['com.affine.ai.login-required.dialog-confirm'](),
confirmButtonOptions: { confirmButtonOptions: {
children: t['com.affine.ai.login-required.dialog-confirm'](),
type: 'primary', type: 'primary',
}, },
cancelText: t['com.affine.ai.login-required.dialog-cancel'](), cancelText: t['com.affine.ai.login-required.dialog-cancel'](),

View File

@@ -104,11 +104,11 @@ const NameWorkspaceContent = ({
title={t['com.affine.nameWorkspace.title']()} title={t['com.affine.nameWorkspace.title']()}
description={t['com.affine.nameWorkspace.description']()} description={t['com.affine.nameWorkspace.description']()}
cancelText={t['com.affine.nameWorkspace.button.cancel']()} cancelText={t['com.affine.nameWorkspace.button.cancel']()}
confirmText={t['com.affine.nameWorkspace.button.create']()}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'primary', type: 'primary',
disabled: !workspaceName || loading, disabled: !workspaceName || loading,
['data-testid' as string]: 'create-workspace-create-button', ['data-testid' as string]: 'create-workspace-create-button',
children: t['com.affine.nameWorkspace.button.create'](),
}} }}
closeButtonOptions={{ closeButtonOptions={{
['data-testid' as string]: 'create-workspace-close-button', ['data-testid' as string]: 'create-workspace-close-button',

View File

@@ -478,10 +478,10 @@ const PageHistoryManager = ({
['data-testid' as string]: 'confirm-restore-history-modal', ['data-testid' as string]: 'confirm-restore-history-modal',
style: { padding: '20px 26px' }, style: { padding: '20px 26px' },
}, },
confirmText: t['com.affine.history.confirm-restore-modal.restore'](),
confirmButtonOptions: { confirmButtonOptions: {
type: 'primary', type: 'primary',
['data-testid' as string]: 'confirm-restore-history-button', ['data-testid' as string]: 'confirm-restore-history-button',
children: t['com.affine.history.confirm-restore-modal.restore'](),
}, },
onConfirm: handleRestore, onConfirm: handleRestore,
}); });

View File

@@ -44,13 +44,13 @@ export const ConfirmDeletePropertyModal = ({
removed from count doc(s). This action cannot be undone. removed from count doc(s). This action cannot be undone.
</Trans> </Trans>
} }
confirmText={t['Confirm']()}
onConfirm={onConfirm} onConfirm={onConfirm}
cancelButtonOptions={{ cancelButtonOptions={{
onClick: onCancel, onClick: onCancel,
}} }}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'error', type: 'error',
children: t['Confirm'](),
}} }}
/> />
); );

View File

@@ -108,11 +108,11 @@ export const CloudQuotaModal = () => {
hidden: !isFreePlanOwner, hidden: !isFreePlanOwner,
}} }}
onConfirm={handleUpgradeConfirm} onConfirm={handleUpgradeConfirm}
confirmText={
isFreePlanOwner ? t['com.affine.payment.upgrade']() : t['Got it']()
}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'primary', type: 'primary',
children: isFreePlanOwner
? t['com.affine.payment.upgrade']()
: t['Got it'](),
}} }}
/> />
); );

View File

@@ -35,9 +35,9 @@ export const LocalQuotaModal = () => {
hidden: true, hidden: true,
}} }}
onConfirm={onConfirm} onConfirm={onConfirm}
confirmText={t['Got it']()}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'primary', type: 'primary',
children: t['Got it'](),
}} }}
/> />
); );

View File

@@ -33,9 +33,9 @@ export const AICancel = ({ ...btnProps }: AICancelProps) => {
description: description:
t['com.affine.payment.ai.action.cancel.confirm.description'](), t['com.affine.payment.ai.action.cancel.confirm.description'](),
reverseFooter: true, reverseFooter: true,
confirmText:
t['com.affine.payment.ai.action.cancel.confirm.confirm-text'](),
confirmButtonOptions: { confirmButtonOptions: {
children:
t['com.affine.payment.ai.action.cancel.confirm.confirm-text'](),
type: 'default', type: 'default',
}, },
cancelText: cancelText:

View File

@@ -38,9 +38,9 @@ export const AIResume = ({ ...btnProps }: AIResumeProps) => {
title: t['com.affine.payment.ai.action.resume.confirm.title'](), title: t['com.affine.payment.ai.action.resume.confirm.title'](),
description: description:
t['com.affine.payment.ai.action.resume.confirm.description'](), t['com.affine.payment.ai.action.resume.confirm.description'](),
confirmText:
t['com.affine.payment.ai.action.resume.confirm.confirm-text'](),
confirmButtonOptions: { confirmButtonOptions: {
children:
t['com.affine.payment.ai.action.resume.confirm.confirm-text'](),
type: 'primary', type: 'primary',
}, },
cancelText: cancelText:

View File

@@ -46,9 +46,9 @@ export const ConfirmLoadingModal = ({
<ConfirmModal <ConfirmModal
title={title} title={title}
cancelText={cancelText} cancelText={cancelText}
confirmText={confirmText}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'primary', type: 'primary',
children: confirmText,
loading, loading,
}} }}
open={open} open={open}

View File

@@ -36,11 +36,11 @@ export const WorkspaceDeleteModal = ({
<ConfirmModal <ConfirmModal
title={`${t['com.affine.workspaceDelete.title']()}?`} title={`${t['com.affine.workspaceDelete.title']()}?`}
cancelText={t['com.affine.workspaceDelete.button.cancel']()} cancelText={t['com.affine.workspaceDelete.button.cancel']()}
confirmText={t['com.affine.workspaceDelete.button.delete']()}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'error', type: 'error',
disabled: !allowDelete, disabled: !allowDelete,
['data-testid' as string]: 'delete-workspace-confirm-button', ['data-testid' as string]: 'delete-workspace-confirm-button',
children: t['com.affine.workspaceDelete.button.delete'](),
}} }}
{...props} {...props}
> >

View File

@@ -134,9 +134,9 @@ export const DeleteLeaveWorkspace = () => {
onOpenChange={setShowLeave} onOpenChange={setShowLeave}
title={`${t['com.affine.deleteLeaveWorkspace.leave']()}?`} title={`${t['com.affine.deleteLeaveWorkspace.leave']()}?`}
description={t['com.affine.deleteLeaveWorkspace.leaveDescription']()} description={t['com.affine.deleteLeaveWorkspace.leaveDescription']()}
confirmText={t['Leave']()}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'warning', type: 'warning',
children: t['Leave'](),
}} }}
/> />
)} )}

View File

@@ -10,7 +10,7 @@ type SignOutConfirmModalI18NKeys =
| 'confirm'; | 'confirm';
export const SignOutModal = ({ ...props }: ConfirmModalProps) => { export const SignOutModal = ({ ...props }: ConfirmModalProps) => {
const { title, description, cancelText, confirmButtonOptions = {} } = props; const { title, description, cancelText, confirmText } = props;
const t = useI18n(); const t = useI18n();
const defaultTexts = useMemo(() => { const defaultTexts = useMemo(() => {
@@ -30,10 +30,10 @@ export const SignOutModal = ({ ...props }: ConfirmModalProps) => {
title={title ?? defaultTexts.title} title={title ?? defaultTexts.title}
description={description ?? defaultTexts.description} description={description ?? defaultTexts.description}
cancelText={cancelText ?? defaultTexts.cancelText} cancelText={cancelText ?? defaultTexts.cancelText}
confirmText={confirmText ?? defaultTexts.children}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'error', type: 'error',
['data-testid' as string]: 'confirm-sign-out-button', ['data-testid' as string]: 'confirm-sign-out-button',
children: confirmButtonOptions.children ?? defaultTexts.children,
}} }}
contentOptions={{ contentOptions={{
['data-testid' as string]: 'confirm-sign-out-modal', ['data-testid' as string]: 'confirm-sign-out-modal',

View File

@@ -130,8 +130,8 @@ export function patchNotificationService(
openConfirmModal({ openConfirmModal({
title: toReactNode(title), title: toReactNode(title),
description: toReactNode(message), description: toReactNode(message),
confirmText,
confirmButtonOptions: { confirmButtonOptions: {
children: confirmText,
type: 'primary', type: 'primary',
}, },
cancelText, cancelText,
@@ -173,13 +173,11 @@ export function patchNotificationService(
openConfirmModal({ openConfirmModal({
title: toReactNode(title), title: toReactNode(title),
description: description, description: description,
confirmText: confirmText ?? 'Confirm',
confirmButtonOptions: { confirmButtonOptions: {
children: confirmText ?? 'Confirm',
type: 'primary', type: 'primary',
}, },
cancelButtonOptions: { cancelText: cancelText ?? 'Cancel',
children: cancelText ?? 'Cancel',
},
onConfirm: () => { onConfirm: () => {
resolve(value); resolve(value);
}, },

View File

@@ -123,9 +123,9 @@ export const CollectionPageListHeader = ({
title: t['com.affine.collection.add-doc.confirm.title'](), title: t['com.affine.collection.add-doc.confirm.title'](),
description: t['com.affine.collection.add-doc.confirm.description'](), description: t['com.affine.collection.add-doc.confirm.description'](),
cancelText: t['Cancel'](), cancelText: t['Cancel'](),
confirmText: t['Confirm'](),
confirmButtonOptions: { confirmButtonOptions: {
type: 'primary', type: 'primary',
children: t['Confirm'](),
}, },
onConfirm: () => createAndAddDocument(createDocumentFn), onConfirm: () => createAndAddDocument(createDocumentFn),
}); });

View File

@@ -269,9 +269,9 @@ export const TrashOperationCell = ({
title: `${t['com.affine.trashOperation.deletePermanently']()}?`, title: `${t['com.affine.trashOperation.deletePermanently']()}?`,
description: t['com.affine.trashOperation.deleteDescription'](), description: t['com.affine.trashOperation.deleteDescription'](),
cancelText: t['Cancel'](), cancelText: t['Cancel'](),
confirmText: t['com.affine.trashOperation.delete'](),
confirmButtonOptions: { confirmButtonOptions: {
type: 'error', type: 'error',
children: t['com.affine.trashOperation.delete'](),
}, },
onConfirm: onPermanentlyDeletePage, onConfirm: onPermanentlyDeletePage,
}); });
@@ -384,9 +384,9 @@ export const CollectionOperationCell = ({
title: t['com.affine.collection.add-doc.confirm.title'](), title: t['com.affine.collection.add-doc.confirm.title'](),
description: t['com.affine.collection.add-doc.confirm.description'](), description: t['com.affine.collection.add-doc.confirm.description'](),
cancelText: t['Cancel'](), cancelText: t['Cancel'](),
confirmText: t['Confirm'](),
confirmButtonOptions: { confirmButtonOptions: {
type: 'primary', type: 'primary',
children: t['Confirm'](),
}, },
onConfirm: createAndAddDocument, onConfirm: createAndAddDocument,
}); });

View File

@@ -46,10 +46,10 @@ const MoveToTrashConfirm = ({
title={title} title={title}
description={description} description={description}
cancelText={t['com.affine.confirmModal.button.cancel']()} cancelText={t['com.affine.confirmModal.button.cancel']()}
confirmText={t.Delete()}
confirmButtonOptions={{ confirmButtonOptions={{
['data-testid' as string]: 'confirm-delete-page', ['data-testid' as string]: 'confirm-delete-page',
type: 'error', type: 'error',
children: t.Delete(),
}} }}
{...confirmModalProps} {...confirmModalProps}
/> />

View File

@@ -73,9 +73,9 @@ export const VirtualizedTrashList = () => {
title: `${t['com.affine.trashOperation.deletePermanently']()}?`, title: `${t['com.affine.trashOperation.deletePermanently']()}?`,
description: t['com.affine.trashOperation.deleteDescription'](), description: t['com.affine.trashOperation.deleteDescription'](),
cancelText: t['Cancel'](), cancelText: t['Cancel'](),
confirmText: t['com.affine.trashOperation.delete'](),
confirmButtonOptions: { confirmButtonOptions: {
type: 'error', type: 'error',
children: t['com.affine.trashOperation.delete'](),
}, },
onConfirm: handleMultiDelete, onConfirm: handleMultiDelete,
}); });

View File

@@ -79,9 +79,9 @@ export const TrashPageFooter = () => {
title={t['com.affine.trashOperation.delete.title']()} title={t['com.affine.trashOperation.delete.title']()}
cancelText={t['com.affine.confirmModal.button.cancel']()} cancelText={t['com.affine.confirmModal.button.cancel']()}
description={t['com.affine.trashOperation.delete.description']()} description={t['com.affine.trashOperation.delete.description']()}
confirmText={t['com.affine.trashOperation.delete']()}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'error', type: 'error',
children: t['com.affine.trashOperation.delete'](),
}} }}
open={open} open={open}
onConfirm={onConfirmDelete} onConfirm={onConfirmDelete}

View File

@@ -129,9 +129,9 @@ export const CollectionSidebarNavItem = ({
title: t['com.affine.collection.add-doc.confirm.title'](), title: t['com.affine.collection.add-doc.confirm.title'](),
description: t['com.affine.collection.add-doc.confirm.description'](), description: t['com.affine.collection.add-doc.confirm.description'](),
cancelText: t['Cancel'](), cancelText: t['Cancel'](),
confirmText: t['Confirm'](),
confirmButtonOptions: { confirmButtonOptions: {
type: 'primary', type: 'primary',
children: t['Confirm'](),
}, },
onConfirm: createAndAddDocument, onConfirm: createAndAddDocument,
}); });

View File

@@ -84,13 +84,13 @@ export const useEnableCloud = () => {
title: t['Enable AFFiNE Cloud'](), title: t['Enable AFFiNE Cloud'](),
description: t['Enable AFFiNE Cloud Description'](), description: t['Enable AFFiNE Cloud Description'](),
cancelText: t['com.affine.enableAffineCloudModal.button.cancel'](), cancelText: t['com.affine.enableAffineCloudModal.button.cancel'](),
confirmText:
loginStatus === 'authenticated'
? t['Enable']()
: t['Sign in and Enable'](),
confirmButtonOptions: { confirmButtonOptions: {
type: 'primary', type: 'primary',
['data-testid' as string]: 'confirm-enable-affine-cloud-button', ['data-testid' as string]: 'confirm-enable-affine-cloud-button',
children:
loginStatus === 'authenticated'
? t['Enable']()
: t['Sign in and Enable'](),
}, },
onConfirm: async () => onConfirm: async () =>
await signInOrEnableCloud(ws, { await signInOrEnableCloud(ws, {

View File

@@ -54,9 +54,9 @@ export const DeleteTagConfirmModal = ({
}) })
) )
} }
confirmText={t['Delete']()}
confirmButtonOptions={{ confirmButtonOptions={{
type: 'warning', type: 'warning',
children: t['Delete'](),
}} }}
onConfirm={handleDelete} onConfirm={handleDelete}
/> />