import React, { useCallback, useState } from 'react'; import { Button, Divider, Form, Icon, Label, Menu } from 'semantic-ui-react'; import { FormSelect } from 'semantic-ui-react'; import { filter, find, get, head, map } from 'lodash-es'; import { 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 { IWithGroupingInstance, withGrouping } from '../../add-ons'; import { getRelatableAction } from '../../utils/relatable-actions'; import { columnHasAction } from '../../utils/column-actions'; import { ToolbarPopup } from './toolbar-popup'; import RelatableIcon from '../relatable-icon'; export default function GroupableToolbar() { const { allColumns: columns, state: { groupBy }, onCustomGroupingChange } = useRelatableStateContext(); const [selectedToolbarAction, setToolbar, clearToolbar] = useRelatableToolbarContext(); const isGrouped = arrayHasItems(groupBy); return } selectedToolbarAction={selectedToolbarAction} onClose={clearToolbar}> setToolbar(withGrouping.name)}> Groups {isGrouped && } ; } function GroupingPopup({ columns, groupBy, onClose, selectedToolbarAction, onCustomGroupingChange }: any) { return
{arrayHasItems(groupBy) && <> {map(groupBy, (id) => { const column = find(columns, (column) => column.id === id); return ; })} }
; } function GroupingForm({ columns, onCustomGroupingChange, selectedToolbarAction, onClose }: any) { const { availableGlobalActions } = useRelatableStateContext(); const relatableAction = getRelatableAction(availableGlobalActions, selectedToolbarAction.name); const columnsToUse = filter(columns, (column) => relatableAction && columnHasAction(column, relatableAction)); const firstId = get(head(columnsToUse), 'id', undefined); const [selectedColumnId, setSelectedColumnId] = useState(firstId); const selectedColumn = find(columnsToUse, ({ id }) => id === selectedColumnId); const columnOptions = map(filter(columnsToUse, 'canGroupBy'), (column) => ({ key: column.id, value: column.id, text: column.Header, })); const onSubmit = useCallback(() => { onClose(); onCustomGroupingChange(selectedColumn, true); }, [onCustomGroupingChange, selectedColumn]); return
setSelectedColumnId(value)}/>
; }