diff --git a/packages/strapi-admin/ee/admin/components/Roles/ConditionsSelect/MenuList/index.js b/packages/strapi-admin/ee/admin/components/Roles/ConditionsSelect/MenuList/index.js index 86f4690db3..74cbe311c7 100644 --- a/packages/strapi-admin/ee/admin/components/Roles/ConditionsSelect/MenuList/index.js +++ b/packages/strapi-admin/ee/admin/components/Roles/ConditionsSelect/MenuList/index.js @@ -1,5 +1,5 @@ /* eslint-disable jsx-a11y/click-events-have-key-events */ -import React, { useState, useCallback } from 'react'; +import React, { useMemo, useState, useCallback } from 'react'; import PropTypes from 'prop-types'; import { components } from 'react-select'; import { groupBy, intersectionWith } from 'lodash'; @@ -13,12 +13,26 @@ import UpperFirst from '../../../../../../admin/src/components/Roles/ConditionsS import { usePermissionsContext } from '../../../../../../admin/src/hooks'; /* eslint-disable jsx-a11y/no-static-element-interactions */ +const createCollapsesObject = arrayOfCategories => + arrayOfCategories.reduce((acc, current, index) => { + acc[current[0]] = index === 0; + + return acc; + }, {}); const MenuList = ({ selectProps, ...rest }) => { const Component = components.MenuList; const { isSuperAdmin } = usePermissionsContext(); - const [collapses, setCollapses] = useState({}); - const optionsGroupByCategory = groupBy(selectProps.options, 'category'); + + const arrayOfOptionsGroupedByCategory = useMemo(() => { + return Object.entries(groupBy(selectProps.options, 'category')); + }, [selectProps.options]); + const initCollapses = useMemo(() => createCollapsesObject(arrayOfOptionsGroupedByCategory), [ + arrayOfOptionsGroupedByCategory, + ]); + + const [collapses, setCollapses] = useState(initCollapses); + const toggleCollapse = collapseName => { setCollapses(prevState => ({ ...prevState, [collapseName]: !collapses[collapseName] })); }; @@ -69,14 +83,16 @@ const MenuList = ({ selectProps, ...rest }) => { return (