/* eslint-disable jsx-a11y/click-events-have-key-events */ import React, { useState, useCallback } from 'react'; import PropTypes from 'prop-types'; import { components } from 'react-select'; import { groupBy, intersectionWith } from 'lodash'; import { Checkbox, Flex } from '@buffetjs/core'; import { Label } from '@buffetjs/styles'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import SubUl from '../../../../../../admin/src/components/Roles/ConditionsSelect/MenuList/SubUl'; import Ul from '../../../../../../admin/src/components/Roles/ConditionsSelect/MenuList/Ul'; import UpperFirst from '../../../../../../admin/src/components/Roles/ConditionsSelect/MenuList/UpperFirst'; import { usePermissionsContext } from '../../../../../../admin/src/hooks'; /* eslint-disable jsx-a11y/no-static-element-interactions */ const MenuList = ({ selectProps, ...rest }) => { const Component = components.MenuList; const { isSuperAdmin } = usePermissionsContext(); const [collapses, setCollapses] = useState({}); const optionsGroupByCategory = groupBy(selectProps.options, 'category'); const toggleCollapse = collapseName => { setCollapses(prevState => ({ ...prevState, [collapseName]: !collapses[collapseName] })); }; const handleChange = condition => { if (!isSuperAdmin) { selectProps.onChange(condition.id); } }; const handleCategoryChange = categoryConditions => { const formattedCategories = categoryConditions.map(condition => condition.id); if (!isSuperAdmin) { selectProps.onCategoryChange(formattedCategories); } }; const hasAction = useCallback( condition => { return selectProps.value.includes(condition.id); }, [selectProps.value] ); const hasSomeCategoryAction = useCallback( category => { const formattedCategories = category[1].map(condition => condition.id); const categoryActions = intersectionWith(formattedCategories, selectProps.value).length; return categoryActions > 0 && categoryActions < formattedCategories.length; }, [selectProps.value] ); const hasAllCategoryAction = useCallback( category => { const formattedCategories = category[1].map(condition => condition.id); const categoryActions = intersectionWith(formattedCategories, selectProps.value).length; return categoryActions === formattedCategories.length; }, [selectProps.value] ); return ( ); }; MenuList.propTypes = { selectProps: PropTypes.object.isRequired, }; export default MenuList;