From a8f4a62bbe03cec8a740a9971714b13394599ddf Mon Sep 17 00:00:00 2001 From: damienSchPassCulture Date: Thu, 4 Nov 2021 18:01:08 +0100 Subject: [PATCH] (PC-11571): Desk: add confirmation dialog --- src/components/pages/Desk/Desk.jsx | 22 ++++++++- .../DeskConfirmDialog/DeskConfirmDialog.jsx | 47 +++++++++++++++++++ .../pages/Desk/__specs__/Desk.spec.jsx | 7 ++- src/icons/ico-alert-grey.svg | 1 + 4 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 src/components/pages/Desk/DeskConfirmDialog/DeskConfirmDialog.jsx create mode 100644 src/icons/ico-alert-grey.svg diff --git a/src/components/pages/Desk/Desk.jsx b/src/components/pages/Desk/Desk.jsx index a3608425a..dfbbf6887 100644 --- a/src/components/pages/Desk/Desk.jsx +++ b/src/components/pages/Desk/Desk.jsx @@ -13,6 +13,8 @@ import PageTitle from 'components/layout/PageTitle/PageTitle' import Titles from 'components/layout/Titles/Titles' import { formatLocalTimeDateString } from 'utils/timezone' +import DeskConfirmDialog from "./DeskConfirmDialog/DeskConfirmDialog" + class Desk extends Component { constructor(props) { super(props) @@ -24,6 +26,7 @@ class Desk extends Component { level: '', message: 'Saisissez une contremarque', token: '', + openDialog: false, } this.TOKEN_MAX_LENGTH = 6 @@ -200,7 +203,17 @@ class Desk extends Component { message: this.getErrorMessageFromApi(error), }) }) + this.setState({ openDialog: false }) + } + + openDeskConfirmDialog = (event) => { + event.preventDefault() + this.setState({ openDialog: true }) } + closeDeskConfirmDialog = () => { + this.setState({ openDialog: false }) + } + render() { const { booking, isDisabledButton, isUsedToken, level, message, token } = this.state @@ -278,12 +291,17 @@ class Desk extends Component { {isUsedToken && ( )} + {this.state.openDialog && ( + + )} {!isUsedToken && ( + + + + ) +} + +DeskConfirmDialog.propTypes = { + onCancel: PropTypes.func.isRequired, + onConfirm: PropTypes.func.isRequired, +} + +export default DeskConfirmDialog diff --git a/src/components/pages/Desk/__specs__/Desk.spec.jsx b/src/components/pages/Desk/__specs__/Desk.spec.jsx index fc81dfe37..54d566fb4 100644 --- a/src/components/pages/Desk/__specs__/Desk.spec.jsx +++ b/src/components/pages/Desk/__specs__/Desk.spec.jsx @@ -300,6 +300,9 @@ describe('src | components | Desk', () => { expect(invalidateTokenButton).toBeEnabled() fireEvent.click(invalidateTokenButton) + const confirmInvalidateTokenButton = await screen.findByRole('button', { name: 'Continuer' }) + fireEvent.click(confirmInvalidateTokenButton) + // then expect(screen.getByText('Invalidation en cours...')).toBeInTheDocument() const responseFromApi = await screen.findByText('Contremarque invalidée !') @@ -340,7 +343,6 @@ describe('src | components | Desk', () => { fireEvent.change(tokenInput, { target: { value: 'MEFA01' } }) // then expect(await screen.findByText('token is already validated')).toBeInTheDocument() - // when jest.spyOn(props, 'invalidateBooking').mockRejectedValue({ errors: { booking: 'cannot invalidate booking' }, @@ -348,6 +350,9 @@ describe('src | components | Desk', () => { }) const submitButton = await screen.findByRole('button', { name: 'Invalider la contremarque' }) fireEvent.click(submitButton) + + const confirmInvalidateTokenButton = await screen.findByRole('button', { name: 'Continuer' }) + fireEvent.click(confirmInvalidateTokenButton) // then const responseFromApi = await screen.findByText('cannot invalidate booking') expect(responseFromApi).toBeInTheDocument() diff --git a/src/icons/ico-alert-grey.svg b/src/icons/ico-alert-grey.svg new file mode 100644 index 000000000..f7be017cd --- /dev/null +++ b/src/icons/ico-alert-grey.svg @@ -0,0 +1 @@ + \ No newline at end of file