import React, { useCallback, useState } from 'react'; import { Button, Divider, Form, Icon, Label, Menu } from 'semantic-ui-react'; import { FormSelect } from 'semantic-ui-react'; import { entries, filter, find, flatMap, get, groupBy, head, map } from 'lodash-es'; import { FILTER_ACTIONS, RELATABLE_ICONS } from '../../relatable.types'; import { useRelatableStateContext, useRelatableToolbarContext } from '../../states'; import arrayHasItems from '../../utils/array-has-items'; import { getToolbarStateClass } from '../../utils/relatable-state-classes'; import { getRelatableAction } from '../../utils/relatable-actions'; import { columnHasAction } from '../../utils/column-actions'; import { withFilters, IWithFiltersInstance } from '../../add-ons'; import { ToolbarPopup } from './toolbar-popup'; import { Filter } from '../renderers'; import RelatableIcon from '../relatable-icon'; export default function FilterableToolbar() { const { allColumns: columns, state: { filters }, onCustomFilterChange } = useRelatableStateContext(); const [selectedToolbarAction, setToolbar, clearToolbar] = useRelatableToolbarContext(); const appliedFilterValues = map(filters, ({value}) => value); const isFiltered = arrayHasItems(appliedFilterValues); return } selectedToolbarAction={selectedToolbarAction} onClose={clearToolbar}> setToolbar(withFilters.name)}> Filters {isFiltered && } ; } function FiltersPopup({ columns, selectedToolbarAction, isFiltered, onClose, appliedFilters, onCustomFilterChange }: any) { return
{isFiltered && <> {flatMap(entries(groupBy(appliedFilters, 'id')), ([id, columnFilters]) => { const column = find(columns, (column) => column.id === id); return map(columnFilters, ({value}) => ); })} }
; } function FiltersForm({ columns, selectedToolbarAction, onCustomFilterChange, onClose }: any) { const { availableGlobalActions } = useRelatableStateContext(); const relatableAction = getRelatableAction(availableGlobalActions, selectedToolbarAction.name); const columnsToUse = filter(columns, (column) => relatableAction && columnHasAction(column, relatableAction)); const firstId = selectedToolbarAction.column ? selectedToolbarAction.column.id : get(head(columnsToUse), 'id', undefined); const [filterValue, onFilterValueChange] = useState(); const [selectedColumnId, setSelectedColumnId] = useState(firstId); const selectedColumn = find(columnsToUse, ({ id }) => id === selectedColumnId); const columnOptions = map(filter(columnsToUse, 'canFilter'), (column) => ({ key: column.id, value: column.id, text: column.Header, })); const onSubmit = useCallback(() => { onClose(); onCustomFilterChange(selectedColumn, FILTER_ACTIONS.FILTER_ADD, [filterValue]); }, [onCustomFilterChange, selectedColumn, filterValue]); return

Add filter

setSelectedColumnId(value)}/>
; } function FilterItem({ column, value }: any) { return {column.render('Header')}: {value.value} ; }