diff --git a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/index.js b/packages/core/admin/admin/src/content-manager/components/AttributeFilter/index.js deleted file mode 100644 index 54bd961ebe..0000000000 --- a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/index.js +++ /dev/null @@ -1,101 +0,0 @@ -import React from 'react'; - -import { useQueryParams } from '@strapi/helper-plugin'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; - -import { useAdminUsers } from '../../../hooks/useAdminUsers'; -import { getDisplayName } from '../../utils'; - -import { AdminUsersFilter } from './AdminUsersFilter'; -import Filters from './Filters'; -import useAllowedAttributes from './hooks/useAllowedAttributes'; - -const CREATOR_ATTRIBUTES = ['createdBy', 'updatedBy']; - -const AttributeFilter = ({ contentType, slug, metadatas }) => { - const { formatMessage } = useIntl(); - - const [{ query }] = useQueryParams(); - // We get the users selected' ids - const selectedUsers = - query?.filters?.$and?.reduce((acc, filter) => { - const [key, value] = Object.entries(filter)[0]; - const id = value.id?.$eq || value.id?.$ne; - - if (CREATOR_ATTRIBUTES.includes(key) && !acc.includes(id)) { - acc.push(id); - } - - return acc; - }, []) ?? []; - const { users, isLoading } = useAdminUsers( - { filter: { id: { in: selectedUsers } } }, - { - enabled: selectedUsers.length > 0, - } - ); - - const allowedAttributes = useAllowedAttributes(contentType, slug); - const displayedFilters = allowedAttributes.map((name) => { - const attribute = contentType.attributes[name]; - const { type, enum: options } = attribute; - - const trackedEvent = { - name: 'didFilterEntries', - properties: { useRelation: type === 'relation' }, - }; - - const { mainField, label } = metadatas[name].list; - - const filter = { - name, - metadatas: { label: formatMessage({ id: label, defaultMessage: label }) }, - fieldSchema: { type, options, mainField }, - trackedEvent, - }; - - if (attribute.type === 'relation' && attribute.target === 'admin::user') { - filter.metadatas = { - ...filter.metadatas, - customOperators: [ - { - intlLabel: { id: 'components.FilterOptions.FILTER_TYPES.$eq', defaultMessage: 'is' }, - value: '$eq', - }, - { - intlLabel: { - id: 'components.FilterOptions.FILTER_TYPES.$ne', - defaultMessage: 'is not', - }, - value: '$ne', - }, - ], - customInput: AdminUsersFilter, - options: users.map((user) => ({ - label: getDisplayName(user, formatMessage), - customValue: user.id.toString(), - })), - }; - filter.fieldSchema.mainField = { - name: 'id', - }; - } - - return filter; - }); - - if (isLoading) { - return null; - } - - return ; -}; - -AttributeFilter.propTypes = { - contentType: PropTypes.object.isRequired, - metadatas: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired, -}; - -export default AttributeFilter; diff --git a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/AdminUsersFilter.js b/packages/core/admin/admin/src/content-manager/components/Filter/CustomInputs/AdminUsersFilter.js similarity index 89% rename from packages/core/admin/admin/src/content-manager/components/AttributeFilter/AdminUsersFilter.js rename to packages/core/admin/admin/src/content-manager/components/Filter/CustomInputs/AdminUsersFilter.js index d2fefb42e5..ff08c4e280 100644 --- a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/AdminUsersFilter.js +++ b/packages/core/admin/admin/src/content-manager/components/Filter/CustomInputs/AdminUsersFilter.js @@ -4,8 +4,8 @@ import { Combobox, ComboboxOption } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { useAdminUsers } from '../../../hooks/useAdminUsers'; -import { getDisplayName } from '../../utils'; +import { useAdminUsers } from '../../../../hooks/useAdminUsers'; +import { getDisplayName } from '../../../utils'; const AdminUsersFilter = ({ value, onChange }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/tests/AdminUsersFilter.test.js b/packages/core/admin/admin/src/content-manager/components/Filter/CustomInputs/tests/AdminUsersFilter.test.js similarity index 100% rename from packages/core/admin/admin/src/content-manager/components/AttributeFilter/tests/AdminUsersFilter.test.js rename to packages/core/admin/admin/src/content-manager/components/Filter/CustomInputs/tests/AdminUsersFilter.test.js diff --git a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/Filters.js b/packages/core/admin/admin/src/content-manager/components/Filter/Filter.js similarity index 89% rename from packages/core/admin/admin/src/content-manager/components/AttributeFilter/Filters.js rename to packages/core/admin/admin/src/content-manager/components/Filter/Filter.js index ee2755fe0c..b3851404be 100644 --- a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/Filters.js +++ b/packages/core/admin/admin/src/content-manager/components/Filter/Filter.js @@ -2,11 +2,11 @@ import React, { useRef, useState } from 'react'; import { Box, Button } from '@strapi/design-system'; import { FilterListURLQuery, FilterPopoverURLQuery, useTracking } from '@strapi/helper-plugin'; -import { Filter } from '@strapi/icons'; +import { Filter as FilterIcon } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -const Filters = ({ displayedFilters }) => { +export const Filter = ({ displayedFilters }) => { const [isVisible, setIsVisible] = useState(false); const { formatMessage } = useIntl(); const buttonRef = useRef(); @@ -25,7 +25,7 @@ const Filters = ({ displayedFilters }) => {