From 0fd415c1d77be986875a6e5a78258814b2b280ff Mon Sep 17 00:00:00 2001 From: Peter Zimon Date: Fri, 2 Jun 2023 12:01:16 +0200 Subject: [PATCH] Added global confirmation modal to AdminX refs. https://github.com/TryGhost/Team/issues/3351 --- .../global/ConfirmationModal.stories.tsx | 36 +++++++++++++++ .../admin-x-ds/global/ConfirmationModal.tsx | 45 +++++++++++++++++++ .../global/ConfirmationModalContainer.tsx | 14 ++++++ .../src/admin-x-ds/global/Heading.tsx | 11 ++++- .../src/admin-x-ds/global/Modal.tsx | 12 +++-- 5 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModal.stories.tsx create mode 100644 ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModal.tsx create mode 100644 ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModalContainer.tsx diff --git a/ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModal.stories.tsx b/ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModal.stories.tsx new file mode 100644 index 0000000000..868982fa08 --- /dev/null +++ b/ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModal.stories.tsx @@ -0,0 +1,36 @@ +import type {Meta, StoryObj} from '@storybook/react'; + +import ConfirmationModal from './ConfirmationModal'; +import ConfirmationModalContainer from './ConfirmationModalContainer'; +import NiceModal from '@ebay/nice-modal-react'; + +const meta = { + title: 'Global / Modal / Confirmation Modal', + component: ConfirmationModal, + tags: ['autodocs'], + decorators: [(_story: any, context: any) => ( + + + + )] +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + title: 'Are you sure?', + prompt: 'Watch out, you\'re doing something super-super dangerous. Don\'t press the red button (you know you will).' + } +}; + +export const CustomButtons: Story = { + args: { + ...Default.args, + title: 'You want to delete?', + cancelLabel: 'Meh', + okLabel: 'Alrite', + okColor: 'red' + } +}; diff --git a/ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModal.tsx b/ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModal.tsx new file mode 100644 index 0000000000..b4e65c0e59 --- /dev/null +++ b/ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModal.tsx @@ -0,0 +1,45 @@ +import Modal from './Modal'; +import NiceModal from '@ebay/nice-modal-react'; +import React from 'react'; + +export interface ConfirmationModalProps { + title?: string; + prompt?: React.ReactNode; + cancelLabel?: string; + okLabel?: string; + okColor?: string; + onCancel?: () => void; + onOk?: () => void; + customFooter?: React.ReactNode; +} + +const ConfirmationModal: React.FC = ({ + title = 'Are you sure?', + prompt, + cancelLabel = 'Cancel', + okLabel = 'OK', + okColor = 'black', + onCancel, + onOk, + customFooter +}) => { + return ( + +
+ {prompt} +
+
+ ); +}; + +export default NiceModal.create(ConfirmationModal); \ No newline at end of file diff --git a/ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModalContainer.tsx b/ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModalContainer.tsx new file mode 100644 index 0000000000..346aa42c2f --- /dev/null +++ b/ghost/admin-x-settings/src/admin-x-ds/global/ConfirmationModalContainer.tsx @@ -0,0 +1,14 @@ +import Button from './Button'; +import ConfirmationModal, {ConfirmationModalProps} from './ConfirmationModal'; +import NiceModal from '@ebay/nice-modal-react'; +import React from 'react'; + +const ConfirmationModalContainer: React.FC = ({...props}) => { + return ( +