diff --git a/packages/core/admin/ee/admin/hooks/useSettingsMenu/utils/customGlobalLinks.js b/packages/core/admin/ee/admin/hooks/useSettingsMenu/utils/customGlobalLinks.js index 51fdf5bff6..fea5e63dc7 100644 --- a/packages/core/admin/ee/admin/hooks/useSettingsMenu/utils/customGlobalLinks.js +++ b/packages/core/admin/ee/admin/hooks/useSettingsMenu/utils/customGlobalLinks.js @@ -14,7 +14,7 @@ if (window.strapi.features.isEnabled(window.strapi.features.SSO)) { if (window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS)) { items.push({ - intlLabel: { id: 'Settings.review-workflows.title', defaultMessage: 'Review Workflow' }, + intlLabel: { id: 'Settings.review-workflows.page.title', defaultMessage: 'Review Workflows' }, to: '/settings/review-workflows', id: 'review-workflows', isDisplayed: false, diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/tests/__snapshots__/AddStage.test.js.snap b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/tests/__snapshots__/AddStage.test.js.snap index 3ba66854be..9159ee60e4 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/tests/__snapshots__/AddStage.test.js.snap +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/tests/__snapshots__/AddStage.test.js.snap @@ -1,13 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Admin | Settings | Review Workflow | AddStage should render a list of stages 1`] = ` -.c6 { - font-size: 0.75rem; - line-height: 1.33; - font-weight: 600; - color: #8e8ea9; -} - .c0 { background: #ffffff; padding-top: 12px; @@ -32,6 +25,13 @@ exports[`Admin | Settings | Review Workflow | AddStage should render a list of s gap: 8px; } +.c6 { + font-size: 0.75rem; + line-height: 1.33; + font-weight: 600; + color: #8e8ea9; +} + .c7 { border: 0; -webkit-clip: rect(0 0 0 0); @@ -104,9 +104,9 @@ exports[`Admin | Settings | Review Workflow | AddStage should render a list of s aria-hidden="true" class="c3 c4" fill="none" - height="1em" + height="1rem" viewBox="0 0 24 24" - width="1em" + width="1rem" xmlns="http://www.w3.org/2000/svg" > diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js index 07def2cd97..47e24f7cac 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js @@ -1,6 +1,5 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; -import styled from 'styled-components'; import { useField } from 'formik'; import { useIntl } from 'react-intl'; import { useDispatch } from 'react-redux'; @@ -8,30 +7,15 @@ import { Accordion, AccordionToggle, AccordionContent, - Box, Grid, GridItem, IconButton, TextInput, } from '@strapi/design-system'; - import { Trash } from '@strapi/icons'; import { deleteStage, updateStage } from '../../../actions'; -// TODO: Delete once https://github.com/strapi/design-system/pull/858 -// is merged and released. -const StyledAccordion = styled(Box)` - > div:first-child { - box-shadow: ${({ theme }) => theme.shadows.tableShadow}; - } -`; - -// TODO: Keep an eye on https://github.com/strapi/design-system/pull/878 -const DeleteButton = styled(IconButton)` - background-color: transparent; -`; - function Stage({ id, name, index, canDelete, isOpen: isOpenDefault = false }) { const { formatMessage } = useIntl(); const [isOpen, setIsOpen] = useState(isOpenDefault); @@ -40,44 +24,52 @@ function Stage({ id, name, index, canDelete, isOpen: isOpenDefault = false }) { const dispatch = useDispatch(); return ( - - setIsOpen(!isOpen)} expanded={isOpen}> - dispatch(deleteStage(id))} - label={formatMessage({ - id: 'Settings.review-workflows.stage.delete', - defaultMessage: 'Delete stage', - })} - icon={} - /> - ) : null - } - /> - - - - dispatch(updateStage(id, { name: event.target.value }))} - /> - - - - - + setIsOpen(!isOpen)} + expanded={isOpen} + shadow="tableShadow" + > + dispatch(deleteStage(id))} + label={formatMessage({ + id: 'Settings.review-workflows.stage.delete', + defaultMessage: 'Delete stage', + })} + icon={} + /> + ) : null + } + /> + + + + { + field.onChange(event); + dispatch(updateStage(id, { name: event.target.value })); + }} + /> + + + + ); } diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stages.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stages.js index 4b7f12ff75..f8ee034310 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stages.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stages.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import styled from 'styled-components'; import { useIntl } from 'react-intl'; import { useDispatch } from 'react-redux'; -import { Box, Flex, Stack } from '@strapi/design-system'; +import { Box, Flex } from '@strapi/design-system'; import { addStage } from '../../actions'; import { AddStage } from '../AddStage'; @@ -29,7 +29,14 @@ function Stages({ stages }) { - + {stages.map((stage, index) => { const id = stage?.id ?? stage.__temp_key__; @@ -45,10 +52,10 @@ function Stages({ stages }) { ); })} - + - + dispatch(addStage({ name: '' }))}> {formatMessage({ id: 'Settings.review-workflows.stage.add', diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/tests/Stages.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/tests/Stages.test.js index 88f35da411..0ce87d7465 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/tests/Stages.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/tests/Stages.test.js @@ -1,5 +1,5 @@ import React from 'react'; -import { render } from '@testing-library/react'; +import { fireEvent, render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { Provider } from 'react-redux'; import { FormikProvider, useFormik } from 'formik'; @@ -10,12 +10,13 @@ import { ThemeProvider, lightTheme } from '@strapi/design-system'; import configureStore from '../../../../../../../../../admin/src/core/store/configureStore'; import { Stages } from '../Stages'; import { reducer } from '../../../reducer'; -import { ACTION_SET_WORKFLOWS, ACTION_ADD_STAGE } from '../../../constants'; -import { addStage } from '../../../actions'; +import { ACTION_SET_WORKFLOWS } from '../../../constants'; +import * as actions from '../../../actions'; +// without mocking actions as ESM it is impossible to spy on named exports jest.mock('../../../actions', () => ({ + __esModule: true, ...jest.requireActual('../../../actions'), - addStage: jest.fn(), })); const STAGES_FIXTURE = [ @@ -87,8 +88,7 @@ describe('Admin | Settings | Review Workflow | Stages', () => { it('should append a new stage when clicking "add new stage"', async () => { const { getByRole } = setup(); - - addStage.mockReturnValue({ type: ACTION_ADD_STAGE }); + const spy = jest.spyOn(actions, 'addStage'); await user.click( getByRole('button', { @@ -96,7 +96,24 @@ describe('Admin | Settings | Review Workflow | Stages', () => { }) ); - expect(addStage).toBeCalledTimes(1); - expect(addStage).toBeCalledWith({ name: '' }); + expect(spy).toBeCalledTimes(1); + expect(spy).toBeCalledWith({ name: '' }); + }); + + it('should update the name of a stage by changing the input value', async () => { + const { queryByRole, getByRole } = setup(); + const spy = jest.spyOn(actions, 'updateStage'); + + await user.click(getByRole('button', { name: /stage-2/i })); + + const input = queryByRole('textbox', { + name: /stage name/i, + }); + + fireEvent.change(input, { target: { value: 'New name' } }); + + expect(spy).toBeCalledWith(2, { + name: 'New name', + }); }); });