Files
twenty/front/src/modules/ui/data/data-table/components/DataTableHeaderPlusButtonContent.tsx
Charles Bochet 685d342170 Migrate view field to new data model - Part 2 (#2270)
* Migrate view field to new data model

* Migrate view fields to new model
2023-10-28 19:13:48 +02:00

51 lines
1.7 KiB
TypeScript

import { useCallback } from 'react';
import { FieldMetadata } from '@/ui/data/field/types/FieldMetadata';
import { IconPlus } from '@/ui/display/icon';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem';
import { useRecoilScopedValue } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedValue';
import { useTableColumns } from '../hooks/useTableColumns';
import { TableRecoilScopeContext } from '../states/recoil-scope-contexts/TableRecoilScopeContext';
import { hiddenTableColumnsScopedSelector } from '../states/selectors/hiddenTableColumnsScopedSelector';
import { ColumnDefinition } from '../types/ColumnDefinition';
export const DataTableHeaderPlusButtonContent = () => {
const { closeDropdown } = useDropdown();
const hiddenTableColumns = useRecoilScopedValue(
hiddenTableColumnsScopedSelector,
TableRecoilScopeContext,
);
const { handleColumnVisibilityChange } = useTableColumns();
const handleAddColumn = useCallback(
(column: ColumnDefinition<FieldMetadata>) => {
closeDropdown();
handleColumnVisibilityChange(column);
},
[handleColumnVisibilityChange, closeDropdown],
);
return (
<DropdownMenuItemsContainer>
{hiddenTableColumns.map((column) => (
<MenuItem
key={column.fieldId}
iconButtons={[
{
Icon: IconPlus,
onClick: () => handleAddColumn(column),
},
]}
LeftIcon={column.Icon}
text={column.label}
/>
))}
</DropdownMenuItemsContainer>
);
};