Feature: Allow review workflow stage column as default sort option

This commit is contained in:
Gustav Hansen 2023-07-25 14:39:18 +02:00
parent 54c54fabf3
commit c020a6c78d
3 changed files with 48 additions and 9 deletions

View File

@ -10,14 +10,36 @@ import {
ToggleInput,
Typography,
} from '@strapi/design-system';
import { useCollator } from '@strapi/helper-plugin';
import PropTypes from 'prop-types';
import { useIntl } from 'react-intl';
import { useEnterprise } from '../../../../hooks/useEnterprise';
import { getTrad } from '../../../utils';
export const Settings = ({ modifiedData, onChange, sortOptions }) => {
const { formatMessage } = useIntl();
const { settings, metadatas } = modifiedData;
export const Settings = ({ contentTypeOptions, modifiedData, onChange, sortOptions: sortOptionsCE }) => {
const { formatMessage, locale } = useIntl();
const formatter = useCollator(locale, {
sensitivity: 'base',
});
const sortOptions = useEnterprise(
sortOptionsCE,
async () =>
(await import('../../../../../../ee/admin/content-manager/pages/ListSettingsView/constants'))
.REVIEW_WORKFLOW_STAGE_SORT_OPTION_NAME,
{
combine(ceOptions, eeOption) {
return [...ceOptions, { ...eeOption, label: formatMessage(eeOption.label) }];
},
defaultValue: sortOptionsCE,
enabled: !!contentTypeOptions?.reviewWorkflows,
}
);
const sortOptionsSorted = sortOptions.sort((a, b) => formatter.compare(a.label, b.label));
const { settings } = modifiedData;
return (
<Flex direction="column" alignItems="stretch" gap={4}>
@ -129,9 +151,9 @@ export const Settings = ({ modifiedData, onChange, sortOptions }) => {
name="settings.defaultSortBy"
value={modifiedData.settings.defaultSortBy || ''}
>
{sortOptions.map((sortBy) => (
<Option key={sortBy} value={sortBy}>
{metadatas[sortBy].list.label || sortBy}
{sortOptionsSorted.map(({ value, label }) => (
<Option key={value} value={value}>
{label}
</Option>
))}
</Select>
@ -164,7 +186,13 @@ Settings.defaultProps = {
};
Settings.propTypes = {
contentTypeOptions: PropTypes.object.isRequired,
modifiedData: PropTypes.object,
onChange: PropTypes.func.isRequired,
sortOptions: PropTypes.array,
sortOptions: PropTypes.arrayOf(
PropTypes.shape({
value: PropTypes.string,
label: PropTypes.string,
}).isRequired
),
};

View File

@ -55,7 +55,7 @@ const ListSettingsView = ({ layout, slug }) => {
const isModalFormOpen = Object.keys(fieldForm).length !== 0;
const { attributes } = layout;
const { attributes, options } = layout;
const displayedFields = modifiedData.layouts.list;
const goBackUrl = () => {
@ -179,7 +179,10 @@ const ListSettingsView = ({ layout, slug }) => {
const sortOptions = Object.entries(attributes)
.filter(([, attribute]) => !EXCLUDED_SORT_ATTRIBUTE_TYPES.includes(attribute.type))
.map(([name]) => name);
.map(([name]) => ({
value: name,
label: layout.metadatas[name].list.label,
}));
const move = (originalIndex, atIndex) => {
dispatch({
@ -235,6 +238,7 @@ const ListSettingsView = ({ layout, slug }) => {
paddingRight={7}
>
<Settings
contentTypeOptions={options}
modifiedData={modifiedData}
onChange={handleChange}
sortOptions={sortOptions}

View File

@ -0,0 +1,7 @@
export const REVIEW_WORKFLOW_STAGE_SORT_OPTION_NAME = {
value: 'strapi_stage[name]',
label: {
id: 'settings.defaultSortOrder.reviewWorkflows.label',
defaultMessage: 'Review Stage',
},
};