import { ReactElement } from 'react'; import { faArrowDownAZ, faCalendarDays, faDownLeftAndUpRightToCenter, faFire, faFlag, faLayerGroup, faMagnet, faUpRightAndDownLeftFromCenter, } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import IconButton from '@mui/joy/IconButton'; import ToggleButtonGroup from '@mui/joy/ToggleButtonGroup'; import { Stack, Tooltip } from '@mui/joy'; import { Tag } from '../../db/db'; import { PageFilter, PageSortOrder, refreshHotness } from '../../db/pages'; import { useAppDispatch } from '../../store/hooks'; import { expandAllTags, collapseAllTags } from '../../store/uiSlice'; interface FlexViewHeaderProps { tagsSorted: Tag[]; sortOrder: PageSortOrder; setSortOrder: (sortOrder: PageSortOrder) => void; filter: PageFilter; setFilter: (filter: PageFilter) => void; groupByWindow: boolean; setGroupByWindow: (groupByWindow: boolean) => void; } const FlexViewHeader = ({ tagsSorted, sortOrder, setSortOrder, filter, setFilter, groupByWindow, setGroupByWindow, children, }: FlexViewHeaderProps & { children?: React.ReactNode }): ReactElement => { const dispatch = useAppDispatch(); return ( {children} {tagsSorted.length > 0 && ( <> dispatch(expandAllTags({ tags: tagsSorted.map((t) => t.name) }))} title="Expand All" > dispatch(collapseAllTags())} title="Collapse All"> )} { if (newValue === PageSortOrder.hot) { refreshHotness(); // async fire and forget } setSortOrder(newValue || PageSortOrder.recent); }} > setGroupByWindow(!groupByWindow)} aria-pressed={groupByWindow ? 'true' : 'false'} sx={(theme) => ({ [`&[aria-pressed="true"]`]: { ...theme.variants.outlinedActive.neutral, borderColor: theme.vars.palette.neutral.outlinedHoverBorder, }, })} > setFilter({ ...filter, flagged: !filter.flagged })} aria-pressed={filter.flagged ? 'true' : 'false'} sx={(theme) => ({ [`&[aria-pressed="true"]`]: { ...theme.variants.outlinedActive.neutral, borderColor: theme.vars.palette.neutral.outlinedHoverBorder, }, })} > ); }; export default FlexViewHeader;