import { CollectionOptimisticActions, CollectionOptimisticActionsBaseParams, CollectionOptimisticSequenceExecutor, CollectionState, Filter, FiltersMap, QueryState, WixPatternsContainer, } from '@wix/bex-core'; import { NestedTableLevelDescriptor } from './NestedTableLevelDescriptor'; import { createParentIdPredicate } from './createParentIdPredicate'; export interface NestedOptimisticActionsState { readonly parentId?: string; readonly sequences?: Map; readonly query?: QueryState; readonly levelDescriptor: NestedTableLevelDescriptor; parentFilter?: Filter; } export function createNestedOptimisticActions( container: WixPatternsContainer, collection: CollectionState, state?: NestedOptimisticActionsState, params?: Partial>, ) { const parentIdPredicate = createParentIdPredicate(state); const optimisticActions = collection._optimisticActions ?? new CollectionOptimisticActions({ container, collection, orderBy: () => [], ...params, predicate: (query) => { const originalPredicateForQuery = params?.predicate?.(query) ?? state?.levelDescriptor?.optimisticActionsPredicate?.(query); const parentIdPredicateForQuery = parentIdPredicate(query); return (item) => parentIdPredicateForQuery(item) && (originalPredicateForQuery?.(item) ?? true); }, cacheNamespace: state?.parentId, sequences: state?.sequences, query: state?.query, }); optimisticActions._commitMode = false; return optimisticActions; }