diff --git a/packages/core/admin/admin/src/content-manager/pages/ListView/components/TableRows/index.js b/packages/core/admin/admin/src/content-manager/pages/ListView/components/TableRows/index.js
index 6408ad7c42..f4b79a09aa 100644
--- a/packages/core/admin/admin/src/content-manager/pages/ListView/components/TableRows/index.js
+++ b/packages/core/admin/admin/src/content-manager/pages/ListView/components/TableRows/index.js
@@ -52,14 +52,15 @@ export const TableRows = ({
const pluginsQueryParams = usePluginsQueryParams();
const [{ query }] = useQueryParams();
const { formatAPIError } = useAPIErrorHandler(getTrad);
- const ReviewWorkflowsStage = useEnterprise(
+ const ReviewWorkflowsColumns = useEnterprise(
REVIEW_WORKFLOW_COLUMNS_CE,
- async () =>
- (
- await import(
- '../../../../../../../ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn'
- )
- ).ReviewWorkflowsStageEE,
+ async () => {
+ const { ReviewWorkflowsStageEE, ReviewWorkflowsAssigneeEE } = await import(
+ '../../../../../../../ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn'
+ );
+
+ return { ReviewWorkflowsStageEE, ReviewWorkflowsAssigneeEE };
+ },
{
enabled: hasReviewWorkflows,
}
@@ -108,7 +109,7 @@ export const TableRows = ({
};
// block rendering until the review stage component is fully loaded in EE
- if (!ReviewWorkflowsStage) {
+ if (!ReviewWorkflowsColumns) {
return null;
}
@@ -178,19 +179,36 @@ export const TableRows = ({
);
}
- if (hasReviewWorkflows && name === 'strapi_reviewWorkflows_stage') {
- return (
-
- {data.strapi_reviewWorkflows_stage ? (
-
- ) : (
- -
- )}
- |
- );
+ if (hasReviewWorkflows) {
+ if (name === 'strapi_reviewWorkflows_stage') {
+ return (
+
+ {data.strapi_reviewWorkflows_stage ? (
+
+ ) : (
+ -
+ )}
+ |
+ );
+ }
+ if (name === 'strapi_assignee') {
+ return (
+
+ {data.strapi_assignee ? (
+
+ ) : (
+ -
+ )}
+ |
+ );
+ }
}
return (
diff --git a/packages/core/admin/admin/src/content-manager/pages/ListView/index.js b/packages/core/admin/admin/src/content-manager/pages/ListView/index.js
index 1130a618e9..98a306f750 100644
--- a/packages/core/admin/admin/src/content-manager/pages/ListView/index.js
+++ b/packages/core/admin/admin/src/content-manager/pages/ListView/index.js
@@ -422,13 +422,15 @@ function ListView({
if (reviewWorkflowColumns) {
// Make sure the column header label is translated
- if (typeof reviewWorkflowColumns.metadatas.label !== 'string') {
- reviewWorkflowColumns.metadatas.label = formatMessage(
- reviewWorkflowColumns.metadatas.label
- );
- }
+ reviewWorkflowColumns.map((column) => {
+ if (typeof column.metadatas.label !== 'string') {
+ column.metadatas.label = formatMessage(column.metadatas.label);
+ }
- formattedHeaders.push(reviewWorkflowColumns);
+ return column;
+ });
+
+ formattedHeaders.push(...reviewWorkflowColumns);
}
return formattedHeaders;
diff --git a/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/ReviewWorkflowsAssigneeEE.js b/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/ReviewWorkflowsAssigneeEE.js
new file mode 100644
index 0000000000..6422c0c211
--- /dev/null
+++ b/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/ReviewWorkflowsAssigneeEE.js
@@ -0,0 +1,51 @@
+import React from 'react';
+
+import { Typography } from '@strapi/design-system';
+import PropTypes from 'prop-types';
+import { useIntl } from 'react-intl';
+
+import getTrad from '../../../../../../admin/src/content-manager/utils/getTrad';
+
+export function ReviewWorkflowsAssigneeEE({ firstname, lastname, displayname }) {
+ const { formatMessage } = useIntl();
+
+ // TODO align with changes from this PR, using the getDisplayName util
+ // https://github.com/strapi/strapi/pull/17043/
+ if (displayname) {
+ return (
+
+ {formatMessage(
+ {
+ id: getTrad(`containers.ListPage.reviewWorkflows.assignee`),
+ defaultMessage: '{displayname}',
+ },
+ { displayname }
+ )}
+
+ );
+ }
+
+ return (
+
+ {formatMessage(
+ {
+ id: getTrad(`containers.ListPage.reviewWorkflows.assignee`),
+ defaultMessage: '{firstname} {lastname}',
+ },
+ { firstname, lastname }
+ )}
+
+ );
+}
+
+ReviewWorkflowsAssigneeEE.defaultProps = {
+ firstname: '',
+ lastname: '',
+ displayname: '',
+};
+
+ReviewWorkflowsAssigneeEE.propTypes = {
+ firstname: PropTypes.string,
+ lastname: PropTypes.string,
+ displayname: PropTypes.string,
+};
diff --git a/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/constants.js b/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/constants.js
index 1ec56488b0..325cedfe98 100644
--- a/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/constants.js
+++ b/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/constants.js
@@ -1,24 +1,45 @@
import getTrad from '../../../../../../admin/src/content-manager/utils/getTrad';
+import {
+ ASSIGNEE_ATTRIBUTE_NAME,
+ STAGE_ATTRIBUTE_NAME,
+} from '../../EditView/InformationBox/constants';
-export const REVIEW_WORKFLOW_COLUMNS_EE = {
- key: '__strapi_reviewWorkflows_stage_temp_key__',
- name: 'strapi_reviewWorkflows_stage',
- fieldSchema: {
- type: 'relation',
- },
- metadatas: {
- // formatMessage() will be applied when the column is rendered
- label: {
- id: getTrad(`containers.ListPage.table-headers.reviewWorkflows.stage`),
- defaultMessage: 'Review stage',
+export const REVIEW_WORKFLOW_COLUMNS_EE = [
+ {
+ key: `__${STAGE_ATTRIBUTE_NAME}_temp_key__`,
+ name: STAGE_ATTRIBUTE_NAME,
+ fieldSchema: {
+ type: 'relation',
},
- searchable: false,
- sortable: true,
- mainField: {
- name: 'name',
- schema: {
- type: 'string',
+ metadatas: {
+ // formatMessage() will be applied when the column is rendered
+ label: {
+ id: getTrad(`containers.ListPage.table-headers.reviewWorkflows.stage`),
+ defaultMessage: 'Review stage',
+ },
+ searchable: false,
+ sortable: true,
+ mainField: {
+ name: 'name',
+ schema: {
+ type: 'string',
+ },
},
},
},
-};
+ {
+ key: `__${ASSIGNEE_ATTRIBUTE_NAME}_temp_key__`,
+ name: ASSIGNEE_ATTRIBUTE_NAME,
+ fieldSchema: {
+ type: 'relation',
+ },
+ metadatas: {
+ label: {
+ id: getTrad(`containers.ListPage.table-headers.reviewWorkflows.assignee`),
+ defaultMessage: 'Assignee',
+ },
+ searchable: false,
+ sortable: false,
+ },
+ },
+];
diff --git a/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/getTableColumns.js b/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/getTableColumns.js
deleted file mode 100644
index 18746ab3cd..0000000000
--- a/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/getTableColumns.js
+++ /dev/null
@@ -1,95 +0,0 @@
-import React from 'react';
-
-import { Typography } from '@strapi/design-system';
-import { useIntl } from 'react-intl';
-
-import getTrad from '../../../../../../admin/src/content-manager/utils/getTrad';
-import { STAGE_COLOR_DEFAULT } from '../../../../pages/SettingsPage/pages/ReviewWorkflows/constants';
-
-import { ReviewWorkflowsStageEE } from '.';
-
-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.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS) &&
- layout.contentType.options?.reviewWorkflows) ??
- false;
-
- if (!hasReviewWorkflows) {
- return [];
- }
-
- return [
- {
- key: '__strapi_reviewWorkflows_stage_temp_key__',
- name: 'strapi_reviewWorkflows_stage',
- fieldSchema: {
- type: 'relation',
- },
- metadatas: {
- label: formatMessage({
- id: getTrad(`containers.ListPage.table-headers.reviewWorkflows.stage`),
- defaultMessage: 'Review stage',
- }),
- searchable: false,
- sortable: true,
- mainField: {
- name: 'name',
- schema: {
- type: 'string',
- },
- },
- },
- cellFormatter({ strapi_reviewWorkflows_stage }) {
- // if entities are created e.g. through lifecycle methods
- // they may not have a stage assigned
- if (!strapi_reviewWorkflows_stage) {
- return -;
- }
-
- const { color, name } = strapi_reviewWorkflows_stage;
-
- return ;
- },
- },
-
- {
- key: '__strapi_reviewWorkflows_assignee_temp_key__',
- name: 'strapi_reviewWorkflows_assignee',
- fieldSchema: {
- type: 'relation',
- },
- metadatas: {
- label: formatMessage({
- id: getTrad(`containers.ListPage.table-headers.reviewWorkflows.assignee`),
- defaultMessage: 'Assignee',
- }),
- searchable: false,
- sortable: false,
- },
- cellFormatter({ strapi_assignee }) {
- if (!strapi_assignee) {
- return -;
- }
-
- const { firstname, lastname } = strapi_assignee;
-
- return (
-
- {formatMessage(
- {
- id: getTrad(`containers.ListPage.reviewWorkflows.assignee`),
- defaultMessage: '{firstname} {lastname}',
- },
- { firstname, lastname }
- )}
-
- );
- },
- },
- ];
-};
diff --git a/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/index.js b/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/index.js
index 354bfb6848..57a8fa4cf3 100644
--- a/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/index.js
+++ b/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/index.js
@@ -1 +1,2 @@
export * from './ReviewWorkflowsStageEE';
+export * from './ReviewWorkflowsAssigneeEE';
diff --git a/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/tests/ReviewWorkflowsAssignee.test.js b/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/tests/ReviewWorkflowsAssignee.test.js
new file mode 100644
index 0000000000..4e3d45a171
--- /dev/null
+++ b/packages/core/admin/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/tests/ReviewWorkflowsAssignee.test.js
@@ -0,0 +1,31 @@
+import React from 'react';
+
+import { lightTheme, ThemeProvider } from '@strapi/design-system';
+import { render } from '@testing-library/react';
+import { IntlProvider } from 'react-intl';
+
+import { ReviewWorkflowsAssigneeEE } from '..';
+
+const ComponentFixture = (props) => (
+
+
+
+
+
+);
+
+const setup = (props) => render();
+
+describe('DynamicTable | ReviewWorkflowsAssignee', () => {
+ test('will use displayname over first and last name', () => {
+ const displayname = 'Display Name';
+ const { getByText } = setup({ displayname });
+
+ expect(getByText(displayname)).toBeInTheDocument();
+ });
+ test('render assignee name', () => {
+ const { getByText } = setup({ firstname: 'Kai', lastname: 'Doe' });
+
+ expect(getByText('Kai Doe')).toBeInTheDocument();
+ });
+});
diff --git a/packages/core/admin/ee/server/services/__tests__/assignees.test.js b/packages/core/admin/ee/server/services/__tests__/assignees.test.js
index c854024dc8..7e03e19e3a 100644
--- a/packages/core/admin/ee/server/services/__tests__/assignees.test.js
+++ b/packages/core/admin/ee/server/services/__tests__/assignees.test.js
@@ -67,7 +67,7 @@ describe('Review workflows - Stages service', () => {
toId
);
expect(entityServiceMock.update).toBeCalledWith(uid, id, {
- data: { strapi_assignee: toId },
+ data: { [ENTITY_ASSIGNEE_ATTRIBUTE]: toId },
fields: [],
populate: [ENTITY_ASSIGNEE_ATTRIBUTE],
});