diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js new file mode 100644 index 0000000000..e19585b823 --- /dev/null +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js @@ -0,0 +1,2 @@ +// Overwritten in EE +export default () => null; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/index.js deleted file mode 100644 index 14b26d7a15..0000000000 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './ReviewWorkflowsStage'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js index 9cdbed71d8..721dbd8fb5 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js @@ -4,6 +4,7 @@ import { useIntl } from 'react-intl'; import { DynamicTable as Table, useStrapiApp } from '@strapi/helper-plugin'; import { useSelector } from 'react-redux'; +import getReviewWorkflowsColumn from 'ee_else_ce/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn'; import { INJECT_COLUMN_IN_TABLE } from '../../../exposedHooks'; import { selectDisplayedHeaders } from '../../pages/ListView/selectors'; import { getTrad } from '../../utils'; @@ -11,7 +12,6 @@ import TableRows from './TableRows'; import ConfirmDialogDeleteAll from './ConfirmDialogDeleteAll'; import ConfirmDialogDelete from './ConfirmDialogDelete'; import { PublicationState } from './CellContent/PublicationState/PublicationState'; -import { ReviewWorkflowsStage } from './CellContent/ReviewWorkflowsStage'; const DynamicTable = ({ canCreate, @@ -27,7 +27,6 @@ const DynamicTable = ({ }) => { const { runHookWaterfall } = useStrapiApp(); const hasDraftAndPublish = layout.contentType.options?.draftAndPublish ?? false; - const hasReviewWorkflows = layout.contentType.options?.reviewWorkflows ?? false; const { formatMessage } = useIntl(); const displayedHeaders = useSelector(selectDisplayedHeaders); @@ -74,36 +73,19 @@ const DynamicTable = ({ }); } - if (hasReviewWorkflows) { - formattedHeaders.push({ - key: '__strapi_reviewWorkflows_stage_temp_key__', - name: 'strapi_reviewWorkflows_stage', - fieldSchema: { - type: 'custom', - }, - metadatas: { - label: formatMessage({ - id: getTrad(`containers.ListPage.table-headers.reviewWorkflows.stage`), - defaultMessage: 'Review stage', - }), - searchable: false, - sortable: false, - }, - cellFormatter({ strapi_reviewWorkflows_stage }) { - return ; - }, - }); + // this should not exist. Ideally we would use registerHook() similar to what has been done + // in the i18n plugin. In order to do that review-workflows should have been a plugin. In + // a future iteration we need to find a better pattern. + + // In CE this will return null - in EE a column definition including the custom formatting component. + const reviewWorkflowColumn = getReviewWorkflowsColumn(layout); + + if (reviewWorkflowColumn) { + formattedHeaders.push(reviewWorkflowColumn); } return formattedHeaders; - }, [ - runHookWaterfall, - displayedHeaders, - layout, - hasDraftAndPublish, - hasReviewWorkflows, - formatMessage, - ]); + }, [runHookWaterfall, displayedHeaders, layout, hasDraftAndPublish, formatMessage]); return ( {name} @@ -10,6 +10,6 @@ export function ReviewWorkflowsStage({ name }) { ); } -ReviewWorkflowsStage.propTypes = { +ReviewWorkflowsStageEE.propTypes = { name: PropTypes.string.isRequired, }; diff --git a/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js new file mode 100644 index 0000000000..0d8dc800b4 --- /dev/null +++ b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js @@ -0,0 +1,38 @@ +import React from 'react'; +import { useIntl } from 'react-intl'; + +import ReviewWorkflowsStage from '.'; +import getTrad from '../../../../../../../admin/src/content-manager/utils/getTrad'; + +export default (layout) => { + const { formatMessage } = useIntl(); + + // TODO: As soon as the feature was enabled in EE mode, the BE currently does not have a way to send + // `false` once a user is in CE mode again. We shouldn't have to perform the window.strapi.isEE check here + // and it is meant to be in interim solution until we find a better one. + const hasReviewWorkflows = + (window.strapi.isEE && layout.contentType.options?.reviewWorkflows) ?? false; + + if (!hasReviewWorkflows) { + return null; + } + + return { + key: '__strapi_reviewWorkflows_stage_temp_key__', + name: 'strapi_reviewWorkflows_stage', + fieldSchema: { + type: 'custom', + }, + metadatas: { + label: formatMessage({ + id: getTrad(`containers.ListPage.table-headers.reviewWorkflows.stage`), + defaultMessage: 'Review stage', + }), + searchable: false, + sortable: false, + }, + cellFormatter({ strapi_reviewWorkflows_stage }) { + return ; + }, + }; +}; diff --git a/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/index.js b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/index.js new file mode 100644 index 0000000000..9d18524090 --- /dev/null +++ b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/index.js @@ -0,0 +1,3 @@ +import { ReviewWorkflowsStageEE } from './ReviewWorkflowsStageEE'; + +export default ReviewWorkflowsStageEE; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/tests/ReviewWorkflowsStage.test.js b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/tests/ReviewWorkflowsStage.test.js similarity index 93% rename from packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/tests/ReviewWorkflowsStage.test.js rename to packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/tests/ReviewWorkflowsStage.test.js index 9134aa39fe..8d17245507 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/tests/ReviewWorkflowsStage.test.js +++ b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/tests/ReviewWorkflowsStage.test.js @@ -3,7 +3,7 @@ import { render } from '@testing-library/react'; import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; -import { ReviewWorkflowsStage } from '..'; +import ReviewWorkflowsStage from '..'; const ComponentFixture = (props) => (