import { CollectionOptimisticActionsBaseParams, FiltersMap, OptionalFiltersMap, } from '@wix/bex-core'; import { useWixPatternsContainer, CollectionConfigWithConditionals, useCreateCollection, useCreateOptimisticActions, } from '@wix/bex-core/react'; import { EditableTableState, EditableTablePermissions, EditableTableMutationHandlers, } from '../state/EditableTable'; import type { CellType } from '../state/EditableTable/types'; import { useOptionalCachedState } from './useOptionalCachedState'; export type EditableTableCollectionConfig< T, F extends FiltersMap, > = CollectionConfigWithConditionals & { permissions?: EditableTablePermissions; mutations: EditableTableMutationHandlers; optimisticActionParams?: Partial>; /** * Additional cell types to register alongside the built-in ones. * Augment `CellTypeConfigMap` to use these types on `EditableColumn.cellType`. */ extraCellTypes?: CellType[]; }; type EditableTableCollection = ( config: EditableTableCollectionConfig, ) => EditableTableState; export const useEditableTableCollection: EditableTableCollection = < T, F extends FiltersMap = OptionalFiltersMap, >( config: EditableTableCollectionConfig, ): EditableTableState => { const container = useWixPatternsContainer(); const createCollection = useCreateCollection(); const createOptimisticActions = useCreateOptimisticActions(); const state = useOptionalCachedState(() => { return new EditableTableState({ collection: createCollection(config), container, permissions: config.permissions, mutations: config.mutations, extraCellTypes: config.extraCellTypes, createOptimisticActions: (collection) => createOptimisticActions(collection, config.optimisticActionParams), }); }); return state; };