diff --git a/api-tests/core/admin/ee/review-workflows.test.api.js b/api-tests/core/admin/ee/review-workflows.test.api.js index 66e6766c4c..d76f174816 100644 --- a/api-tests/core/admin/ee/review-workflows.test.api.js +++ b/api-tests/core/admin/ee/review-workflows.test.api.js @@ -282,7 +282,7 @@ describeOnCondition(edition === 'EE')('Review workflows', () => { test("It should assign a default color to stages if they don't have one", async () => { await requests.admin.put(`/admin/review-workflows/workflows/${testWorkflow.id}/stages`, { body: { - data: [defaultStage, { id: secondStage.id, name: 'new_name', color: '#000000' }], + data: [defaultStage, { id: secondStage.id, name: secondStage.name, color: '#000000' }], }, }); 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 9985f3be06..c7447b96b3 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 @@ -172,6 +172,9 @@ export function Stage({ ), color: hex, })); + // TODO: the .toUpperCase() conversion can be removed once the hex code is normalized in + // the admin API + const colorValue = colorOptions.find(({ value }) => value === colorField.value.toUpperCase()); return ( @@ -275,7 +278,19 @@ export function Stage({ colorField.onChange({ target: { value } }); dispatch(updateStage(id, { color: value })); }} - value={colorOptions.find(({ value }) => value === colorField.value)} + // If no color was found in all the valid theme colors it means a user + // has set a custom value e.g. through the content API. In that case we + // display the custom color and a "Custom" label. + value={ + colorValue ?? { + value: colorField.value, + label: formatMessage({ + id: 'Settings.review-workflows.stage.color.name.custom', + defaultMessage: 'Custom', + }), + color: colorField.value, + } + } /> diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/colors.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/colors.js index e33a85d796..0d10447f33 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/colors.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/colors.js @@ -27,7 +27,7 @@ export function getStageColorByHex(hex) { export function getAvailableStageColors() { return Object.entries(STAGE_COLORS).map(([themeColorName, name]) => ({ - hex: lightTheme.colors[themeColorName], + hex: lightTheme.colors[themeColorName].toUpperCase(), name, })); } diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/tests/colors.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/tests/colors.test.js index 746dc1ee8b..73b198c4d5 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/tests/colors.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/tests/colors.test.js @@ -11,6 +11,8 @@ describe('Settings | Review Workflows | colors', () => { hex: expect.any(String), name: expect.any(String), }); + + expect(color.hex).toBe(color.hex.toUpperCase()); }); }); diff --git a/packages/core/admin/ee/server/services/review-workflows/stages.js b/packages/core/admin/ee/server/services/review-workflows/stages.js index 520e1fb6fd..235bb7edb6 100644 --- a/packages/core/admin/ee/server/services/review-workflows/stages.js +++ b/packages/core/admin/ee/server/services/review-workflows/stages.js @@ -208,7 +208,7 @@ function getDiffBetweenStages(sourceStages, comparisonStages) { if (!srcStage) { acc.created.push(stageToCompare); - } else if (srcStage.name !== stageToCompare.name) { + } else if (srcStage.name !== stageToCompare.name || srcStage.color !== stageToCompare.color) { acc.updated.push(stageToCompare); } return acc;