/* 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 './SubUl'; import Ul from './Ul'; import UpperFirst from './UpperFirst'; /* eslint-disable jsx-a11y/no-static-element-interactions */ const MenuList = ({ selectProps, ...rest }) => { const Component = components.MenuList; const [collapses, setCollapses] = useState({}); const optionsGroupByCategory = groupBy(selectProps.options, 'category'); const toggleCollapse = collapseName => { setCollapses(prevState => ({ ...prevState, [collapseName]: !collapses[collapseName] })); }; 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;