diff --git a/packages/strapi-admin/admin/src/components/Roles/ConditionsSelect/MenuList/index.js b/packages/strapi-admin/admin/src/components/Roles/ConditionsSelect/MenuList/index.js index e20a507f1d..0fbb33d568 100644 --- a/packages/strapi-admin/admin/src/components/Roles/ConditionsSelect/MenuList/index.js +++ b/packages/strapi-admin/admin/src/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, { useState, useCallback, useMemo } from 'react'; import PropTypes from 'prop-types'; import { components } from 'react-select'; import { groupBy, intersectionWith } from 'lodash'; @@ -12,11 +12,23 @@ import Ul from './Ul'; import UpperFirst from './UpperFirst'; /* 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 [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] })); }; @@ -53,9 +65,11 @@ const MenuList = ({ selectProps, ...rest }) => { return (