import React, { useState, forwardRef, useRef, useEffect } from 'react'; import classnames from 'classnames'; import filter from 'lodash/filter'; import { IconChevronRight, IconDots } from '@tabler/icons'; import Dropdown from 'components/Dropdown'; import { collectionClicked, removeCollection } from 'providers/ReduxStore/slices/collections'; import { useDispatch } from 'react-redux'; import NewRequest from 'components/Sidebar/NewRequest'; import NewFolder from 'components/Sidebar/NewFolder'; import CollectionItem from './CollectionItem'; import { doesCollectionHaveItemsMatchingSearchText } from 'utils/collections/search'; import { isItemAFolder, isItemARequest } from 'utils/collections'; import StyledWrapper from './StyledWrapper'; const Collection = ({collection, searchText}) => { const [showNewFolderModal, setShowNewFolderModal] = useState(false); const [showNewRequestModal, setShowNewRequestModal] = useState(false); const [collectionIsCollapsed, setCollectionIsCollapsed] = useState(collection.collapsed); const dispatch = useDispatch(); useEffect(() => { if (searchText && searchText.length) { setCollectionIsCollapsed(false); } else { setCollectionIsCollapsed(collection.collapsed); } }, [searchText, collection]); const menuDropdownTippyRef = useRef(); const onMenuDropdownCreate = (ref) => menuDropdownTippyRef.current = ref; const MenuIcon = forwardRef((props, ref) => { return (
); }); const iconClassName = classnames({ 'rotate-90': !collectionIsCollapsed }); const handleClick = (event) => { dispatch(collectionClicked(collection.uid)); }; if(searchText && searchText.length) { if(!doesCollectionHaveItemsMatchingSearchText(collection, searchText)) { return null; } } const requestItems = filter(collection.items, (i) => isItemARequest(i)); const folderItems = filter(collection.items, (i) => isItemAFolder(i)); return ( {showNewRequestModal && setShowNewRequestModal(false)}/>} {showNewFolderModal && setShowNewFolderModal(false)}/>}
{collection.name}
} placement='bottom-start' >
{ menuDropdownTippyRef.current.hide(); setShowNewRequestModal(true) }}> New Request
{ menuDropdownTippyRef.current.hide(); setShowNewFolderModal(true) }}> New Folder
{ dispatch(removeCollection(collection.uid)); menuDropdownTippyRef.current.hide(); }}> Remove
{!collectionIsCollapsed ? (
{requestItems && requestItems.length ? requestItems.map((i) => { return }) : null} {folderItems && folderItems.length ? folderItems.map((i) => { return }) : null}
) : null}
); }; export default Collection;