@wix/bex-core 2.279.0 → 2.284.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/assets/locale/messages_cs.json +8 -0
- package/dist/cjs/assets/locale/messages_da.json +9 -1
- package/dist/cjs/assets/locale/messages_de.json +8 -0
- package/dist/cjs/assets/locale/messages_en.json +9 -1
- package/dist/cjs/assets/locale/messages_es.json +8 -0
- package/dist/cjs/assets/locale/messages_fr.json +8 -0
- package/dist/cjs/assets/locale/messages_hi.json +8 -0
- package/dist/cjs/assets/locale/messages_id.json +8 -0
- package/dist/cjs/assets/locale/messages_it.json +8 -0
- package/dist/cjs/assets/locale/messages_ja.json +8 -0
- package/dist/cjs/assets/locale/messages_ko.json +8 -0
- package/dist/cjs/assets/locale/messages_nl.json +8 -0
- package/dist/cjs/assets/locale/messages_no.json +8 -0
- package/dist/cjs/assets/locale/messages_pl.json +8 -0
- package/dist/cjs/assets/locale/messages_pt.json +8 -0
- package/dist/cjs/assets/locale/messages_ru.json +8 -0
- package/dist/cjs/assets/locale/messages_sv.json +10 -2
- package/dist/cjs/assets/locale/messages_th.json +8 -0
- package/dist/cjs/assets/locale/messages_tr.json +8 -0
- package/dist/cjs/assets/locale/messages_uk.json +8 -0
- package/dist/cjs/assets/locale/messages_vi.json +8 -0
- package/dist/cjs/assets/locale/messages_visuale2e.json +4 -1
- package/dist/cjs/assets/locale/messages_zh.json +8 -0
- package/dist/cjs/services/translations.js.map +1 -1
- package/dist/cjs/state/CollectionOptimisticActions.js +4 -2
- package/dist/cjs/state/CollectionOptimisticActions.js.map +1 -1
- package/dist/cjs/state/CollectionOptimisticPatch.js +2 -0
- package/dist/cjs/state/CollectionOptimisticPatch.js.map +1 -1
- package/dist/cjs/state/ImportState/ImportState.js +25 -4
- package/dist/cjs/state/ImportState/ImportState.js.map +1 -1
- package/dist/cjs/state/OptimisticActions.js.map +1 -1
- package/dist/cjs/state/optimistic-simulation/mergePatchedItems.js +25 -1
- package/dist/cjs/state/optimistic-simulation/mergePatchedItems.js.map +1 -1
- package/dist/esm/assets/locale/messages_cs.json +8 -0
- package/dist/esm/assets/locale/messages_da.json +9 -1
- package/dist/esm/assets/locale/messages_de.json +8 -0
- package/dist/esm/assets/locale/messages_en.json +9 -1
- package/dist/esm/assets/locale/messages_es.json +8 -0
- package/dist/esm/assets/locale/messages_fr.json +8 -0
- package/dist/esm/assets/locale/messages_hi.json +8 -0
- package/dist/esm/assets/locale/messages_id.json +8 -0
- package/dist/esm/assets/locale/messages_it.json +8 -0
- package/dist/esm/assets/locale/messages_ja.json +8 -0
- package/dist/esm/assets/locale/messages_ko.json +8 -0
- package/dist/esm/assets/locale/messages_nl.json +8 -0
- package/dist/esm/assets/locale/messages_no.json +8 -0
- package/dist/esm/assets/locale/messages_pl.json +8 -0
- package/dist/esm/assets/locale/messages_pt.json +8 -0
- package/dist/esm/assets/locale/messages_ru.json +8 -0
- package/dist/esm/assets/locale/messages_sv.json +10 -2
- package/dist/esm/assets/locale/messages_th.json +8 -0
- package/dist/esm/assets/locale/messages_tr.json +8 -0
- package/dist/esm/assets/locale/messages_uk.json +8 -0
- package/dist/esm/assets/locale/messages_vi.json +8 -0
- package/dist/esm/assets/locale/messages_visuale2e.json +4 -1
- package/dist/esm/assets/locale/messages_zh.json +8 -0
- package/dist/esm/state/CollectionOptimisticActions.js +2 -1
- package/dist/esm/state/CollectionOptimisticActions.js.map +1 -1
- package/dist/esm/state/CollectionOptimisticPatch.js +1 -0
- package/dist/esm/state/CollectionOptimisticPatch.js.map +1 -1
- package/dist/esm/state/ImportState/ImportState.js +21 -4
- package/dist/esm/state/ImportState/ImportState.js.map +1 -1
- package/dist/esm/state/optimistic-simulation/mergePatchedItems.js +23 -1
- package/dist/esm/state/optimistic-simulation/mergePatchedItems.js.map +1 -1
- package/dist/types/services/translations.d.ts +1 -1
- package/dist/types/services/translations.d.ts.map +1 -1
- package/dist/types/state/CollectionOptimisticActions.d.ts.map +1 -1
- package/dist/types/state/CollectionOptimisticPatch.d.ts +2 -0
- package/dist/types/state/CollectionOptimisticPatch.d.ts.map +1 -1
- package/dist/types/state/ImportState/ImportState.d.ts +5 -0
- package/dist/types/state/ImportState/ImportState.d.ts.map +1 -1
- package/dist/types/state/OptimisticActions.d.ts +6 -0
- package/dist/types/state/OptimisticActions.d.ts.map +1 -1
- package/dist/types/state/optimistic-simulation/mergePatchedItems.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_mobx","require","_CollectionOptimisticActionsState","_CollectionOptimisticProcessor","_CollectionOptimisticPatch","_CollectionOptimisticExecutor","_events","_util","_QueryResultSimulationDefault","_CollectionOptimisticSequenceExecutor","_merge","_interopRequireDefault","CollectionOptimisticActions","constructor","params","_defineProperty2","default","EventEmitter","action","patch","state","collection","collections","noInvalidate","processors","_commitMode","patches","remove","length","forEach","processorHelpers","commit","invalidate","p","refreshAllPages","events","clearPatch","off","_clearPatch","onRefresh","isStale","once","emit","on","query","sequences","Map","CollectionOptimisticActionsState","source","patchesCache","container","cacheNamespace","resultSimulationDefault","QueryResultSimulationDefault","predicate","orderBy","createdAt","executor","CollectionOptimisticExecutor","batchWait","errorMonitor","showToast","translate","lodash","push","CollectionOptimisticProcessor","optimistic","_optimisticActions","makeObservable","pushPatchAndReprocess","replacePatchAndReprocess","rollback","bound","clear","move","pendingMovePatches","computed","_queryNames","queryName","map","c","hasRunningSequence","Array","from","values","some","s","seq","running","filter","isArray","newPatch","oldPatch","oldPatchIndex","findIndex","createOne","item","createMany","items","itemKey","result","submit","updateServerAfter","onUndo","onTryAgain","onError","optimisticPatchParams","queryCache","queryNames","actionType","patchedItems","originalItems","originalTotal","total","get","selector","has","optimisticPatch","OptimisticPatch","_clearPatchOnNextResultOrUnmount","execute","actions","submitResult","reduce","patchedItemsEntries","key","set","updatedOptimisticPatch","onRollback","eventuallyUpdated","onEventuallyUpdated","updateMany","merge","keepPosition","_result$get","originalItem","enqueueMovePatch","event","filtersKeyHash","_initSequence","CollectionOptimisticSequenceExecutor","err","pendingPatches","_p$move","Error","message","reorderModeCanceledMessage","requestId","isHttpError","undefined","biName","details","onClick","sequence","collectionSnapshot","updateOne","updateAll","patchOrFn","originQuery","itemPredicate","updatedAt","Date","deleteMany","deleteOne","deleteAll","initCollection","i","indexOf","splice","init","_patchesBeforeUnmount","emitRefresh","emitBeforeResultUpdated","emitter","disposers","reaction","checkUnprocessedFilteredOut","_pages","_pagesAtom","reportObserved","unprocessed","processed","checkIsEmptyAndHasUnprocessed","isEmpty","flatMap","page","listeners","_filteredOut","process","env","NODE_ENV","window","__CAIRO_TEST_TRIGGER_REACH_BOTTOM_LISTENER__","fetchNextPageIfNeeded","disposer","toJSON","remaining","exports"],"sources":["../../../src/state/CollectionOptimisticActions.ts"],"sourcesContent":["import { ActionMove, ComputedQuery, FiltersMap } from '../model';\nimport {\n action,\n computed,\n IObservableArray,\n makeObservable,\n reaction,\n} from 'mobx';\nimport { CollectionState } from './CollectionState';\nimport { Order } from './QueryResultSimulation';\nimport { CollectionOptimisticActionsState } from './CollectionOptimisticActionsState';\nimport { CollectionOptimisticProcessor } from './CollectionOptimisticProcessor';\nimport {\n OptimisticPatch,\n OptimisticPatchParams,\n} from './CollectionOptimisticPatch';\nimport { CollectionOptimisticExecutor } from './CollectionOptimisticExecutor';\nimport { EventEmitter } from 'events';\nimport { isHttpError, TypedEmitter } from '../util';\nimport { QueryResultSimulationDefault } from './QueryResultSimulationDefault';\nimport { CollectionOptimisticSequenceExecutor } from './CollectionOptimisticSequenceExecutor';\nimport { ModalLayoutProps } from '../services';\nimport { QueryState } from './QueryState';\nimport {\n CreateManyParams,\n DeleteManyParams,\n OptimisticActionBasis,\n OptimisticActions,\n UpdateAllParams,\n UpdateManyParams,\n} from './OptimisticActions';\nimport merge from 'lodash/merge';\n\nexport interface MoveParams<T, R> extends OptimisticActionBasis {\n /**\n * Function to submit the move operation.\n * @param params - The parameters for the move action.\n */\n submit?: (params: ActionMove<T>) => Promise<R>;\n /**\n * Snapshot of the collection before the move operation.\n */\n collectionSnapshot: { [key: string]: string | number | undefined };\n}\n\nexport interface CollectionOptimisticActionsBaseParams<\n T,\n F extends FiltersMap,\n> {\n /**\n * A function that simulates the filtering in the server.\n * The function should return another function that accepts an item, and return a boolean that indicates whether the item passes the query filters or not.\n * @param computedQuery - The computed query object.\n * @external\n */\n readonly predicate?: (\n computedQuery: ComputedQuery<F>,\n ) => (item: T) => boolean;\n /**\n * A function that simulates the ordering of the items in the server.<br>\n * The function should return a list of rules in the form of `{fieldName: string; order: 'asc' | 'desc';}` to order the items by\n * @param computedQuery - The computed query object.\n * @external\n */\n readonly orderBy?: (computedQuery: ComputedQuery<F>) => Order<T>[];\n /**\n * A function to retrieve the creation date of an item.\n * @param item - The item.\n * @external\n */\n readonly createdAt?: (item: T) => Date;\n /**\n * Time to wait before batching multiple `updateMany` calls into a single server call.\n * @default 0\n * @external\n */\n readonly batchWait?: number;\n /**\n * Indicates whether to refresh the current page without invalidating the cache.\n * @external\n */\n readonly noInvalidate?: boolean;\n /**\n * Adds a namespace to the cache key.\n * @external\n */\n readonly cacheNamespace?: string;\n readonly sequences?: Map<string, CollectionOptimisticSequenceExecutor>;\n readonly query?: QueryState<F>;\n}\n\nexport interface CollectionOptimisticActionsParams<T, F extends FiltersMap>\n extends CollectionOptimisticActionsBaseParams<T, F> {\n /**\n * The main collection to reflect changes into.\n * @external\n */\n readonly collection: CollectionState<T, F>;\n /**\n * Additional collections to reflect changes into.\n * @default undefined\n * @external\n */\n readonly collections?: CollectionState<T, F>[];\n /**\n * Container holding patches cache and events emitter.\n * @external\n */\n readonly container: {\n patchesCache: Map<string, IObservableArray<OptimisticPatch<T>>>;\n events: TypedEmitter<{\n navigation: () => ModalLayoutProps | null | undefined;\n }>;\n };\n}\n\nexport class CollectionOptimisticActions<T, F extends FiltersMap>\n implements OptimisticActions<T>\n{\n readonly collection;\n readonly query;\n readonly collections;\n readonly predicate: (computedQuery: ComputedQuery<F>) => (item: T) => boolean;\n readonly orderBy: (computedQuery: ComputedQuery<F>) => Order<T>[];\n readonly createdAt?: (item: T) => Date;\n readonly events = new EventEmitter() as TypedEmitter<{\n reprocess: () => void;\n updated: () => void;\n refresh: (params: { isStale: boolean }) => void;\n unmount: () => void;\n beforeResultUpdated: () => void;\n dragAndDropSequenceError: (params: {\n patches: OptimisticPatch<T>[];\n }) => void;\n dragAndDropSequenceRetry: (params: {\n patches: OptimisticPatch<T>[];\n }) => void;\n }>;\n readonly noInvalidate;\n readonly state;\n readonly processors: CollectionOptimisticProcessor<T, F>[] = [];\n readonly executor: CollectionOptimisticExecutor<OptimisticPatch<T>>;\n readonly sequences;\n readonly resultSimulationDefault;\n readonly reorderModeCanceledMessage = 'REORDER_MODE_CANCELED';\n\n _resumeNavigation: (() => void) | null = null;\n\n _orderByMode: 'orders' | 'moves' = 'orders';\n\n _commitMode = false;\n\n constructor(params: CollectionOptimisticActionsParams<T, F>) {\n this.collection = params.collection;\n this.query = params.query ?? this.collection.query;\n this.collections = params.collections ?? [];\n\n this.sequences =\n params.sequences ??\n new Map<string, CollectionOptimisticSequenceExecutor>();\n\n this.state = new CollectionOptimisticActionsState<T>({\n source: this.collection,\n patchesCache: params.container.patchesCache,\n cacheNamespace: params.cacheNamespace,\n });\n\n this.resultSimulationDefault = new QueryResultSimulationDefault({\n collection: this.collection,\n });\n\n this.predicate = params.predicate ?? this.resultSimulationDefault.predicate;\n this.orderBy = params.orderBy ?? this.resultSimulationDefault.orderBy;\n this.createdAt = params.createdAt;\n this.noInvalidate = params.noInvalidate;\n\n this.executor = new CollectionOptimisticExecutor({\n batchWait: params.batchWait ?? 0,\n errorMonitor: this.collection.errorMonitor,\n showToast: this.collection.showToast,\n translate: this.collection.translate,\n lodash: this.collection.lodash,\n container: params.container,\n });\n\n this.processors.push(\n new CollectionOptimisticProcessor({\n ...params,\n optimistic: this,\n }),\n );\n\n if (params.collections != null) {\n params.collections.forEach((collection) => {\n this.processors.push(\n new CollectionOptimisticProcessor({\n ...params,\n collection,\n optimistic: this,\n }),\n );\n });\n }\n\n this.collection._optimisticActions = this;\n\n makeObservable(this, {\n pushPatchAndReprocess: action,\n replacePatchAndReprocess: action,\n rollback: action.bound,\n clear: action,\n move: action,\n pendingMovePatches: computed,\n });\n }\n\n get _queryNames() {\n return [\n this.collection.queryName,\n ...this.collections.map((c) => c.queryName),\n ];\n }\n\n get hasRunningSequence() {\n return Array.from(this.sequences.values()).some((s) => s.seq.state.running);\n }\n\n get pendingMovePatches() {\n return this.state.patches.filter((p) => p.move);\n }\n\n rollback(patch: OptimisticPatch<T> | OptimisticPatch<T>[]) {\n const { events, state } = this;\n const patches = Array.isArray(patch) ? patch : [patch];\n\n for (const p of patches) {\n state.patches.remove(p);\n }\n\n events.emit('reprocess');\n }\n\n private _clearPatch = action((patch: OptimisticPatch<T>) => {\n const {\n state,\n collection,\n collections,\n noInvalidate,\n processors,\n _commitMode,\n } = this;\n\n if (noInvalidate) {\n return;\n }\n\n state.patches.remove(patch);\n if (_commitMode && !state.patches.length) {\n processors.forEach(({ processorHelpers }) => processorHelpers.commit());\n }\n collection.invalidate();\n collections.forEach((p) => p.refreshAllPages());\n });\n\n _clearPatchOnNextResultOrUnmount = (patch: OptimisticPatch<T>) => {\n const { events } = this;\n\n const clearPatch = () => {\n events.off('unmount', clearPatch);\n this._clearPatch(patch);\n };\n\n const onRefresh = ({ isStale }: { isStale: boolean }) => {\n events.off('refresh', onRefresh);\n\n // clear only when results are not going to come from cache\n if (isStale) {\n events.once('beforeResultUpdated', clearPatch);\n }\n };\n\n events.emit('updated');\n\n if (this._commitMode) {\n this._clearPatch(patch);\n } else {\n // Clear the patch on the next collection result update to eliminate inconsistencies between server state and local patches\n events.on('refresh', onRefresh);\n // since not clearing the patch immediately, clear it on unmount if was not cleared yet\n events.on('unmount', clearPatch);\n }\n };\n\n pushPatchAndReprocess(patch: OptimisticPatch<T> | OptimisticPatch<T>[]) {\n const { state, events } = this;\n const patches = Array.isArray(patch) ? patch : [patch];\n state.patches.push(...patches);\n events.emit('reprocess');\n }\n\n replacePatchAndReprocess(\n newPatch: OptimisticPatch<T>,\n oldPatch: OptimisticPatch<T>,\n ) {\n const { state, events } = this;\n\n const oldPatchIndex = state.patches.findIndex(\n (patch) => patch === oldPatch,\n );\n state.patches[oldPatchIndex] = newPatch;\n events.emit('reprocess');\n }\n\n\n createOne(item: T, params: CreateManyParams<T>) {\n return this.createMany([item], params);\n }\n\n\n createMany(items: T[], params: CreateManyParams<T>) {\n const { collection, executor } = this;\n const { itemKey, result } = collection;\n const { submit, updateServerAfter, onUndo, onTryAgain, onError } = params;\n\n const optimisticPatchParams: OptimisticPatchParams<T> = {\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches: this.state.patches,\n actionType: 'createMany',\n patchedItems: new Map(items.map((item) => [itemKey(item), item])),\n originalItems: new Map(),\n originalTotal: result.total,\n patch: (item, { patchedItems }) => patchedItems.get(itemKey(item)),\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n };\n\n const optimisticPatch = new OptimisticPatch<T>(optimisticPatchParams);\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n return executor.execute([optimisticPatch], {\n ...params,\n submit: action(async (actions) => {\n const submitResult = await submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'createMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n );\n\n if (!submitResult) {\n return;\n }\n\n const updatedOptimisticPatch = new OptimisticPatch({\n ...optimisticPatchParams,\n patchedItems: new Map(\n submitResult.map((item) => [itemKey(item), item]),\n ),\n });\n\n this.replacePatchAndReprocess(updatedOptimisticPatch, optimisticPatch);\n this._clearPatchOnNextResultOrUnmount(updatedOptimisticPatch);\n return submitResult;\n }),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: updateServerAfter,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n /**\n * Updates multiple items in the collection.\n * @param items - The items to update.\n * @param params - Additional parameters for the update operation.\n * @external\n */\n updateMany<R>(items: T[], params: UpdateManyParams<T, R>) {\n const { executor, collection } = this;\n\n const patchedItems = params.patch\n ? items.map((item) => merge({}, item, params.patch ?? {}))\n : items;\n\n const { itemKey, result } = collection;\n const {\n submit,\n updateServerAfter,\n keepPosition,\n onUndo,\n onTryAgain,\n onError,\n } = params;\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches: this.state.patches,\n actionType: 'updateMany',\n keepPosition,\n patchedItems: new Map(patchedItems.map((item) => [itemKey(item), item])),\n originalItems: new Map(\n patchedItems.map((item) => {\n const key = itemKey(item);\n const originalItem = result.get(itemKey(item))?.item ?? item;\n return [key, originalItem];\n }),\n ),\n originalTotal: result.total,\n patch: (item, { patchedItems }) => patchedItems.get(itemKey(item)),\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n return executor.execute([optimisticPatch], {\n ...params,\n submit: action((actions) =>\n submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'updateMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n ),\n ),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: updateServerAfter,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n enqueueMovePatch<R>(\n optimisticPatch: OptimisticPatch<T>,\n params: MoveParams<T, R>,\n ) {\n const { submit, onTryAgain } = params;\n const { collection, state, events } = this;\n const { patches } = state;\n\n const event = optimisticPatch.move;\n\n if (event == null) {\n return;\n }\n\n const { filtersKeyHash } = event;\n\n const _initSequence = () => {\n const { sequences } = this;\n const seq =\n sequences.get(filtersKeyHash) ??\n new CollectionOptimisticSequenceExecutor({\n showToast: collection.showToast,\n translate: collection.translate,\n errorMonitor: collection.errorMonitor,\n onRollback: (err) => {\n const pendingPatches = patches.filter(\n (p) => p.move?.filtersKeyHash === filtersKeyHash,\n );\n this.rollback(pendingPatches);\n\n if (\n err instanceof Error &&\n err.message === this.reorderModeCanceledMessage\n ) {\n executor.seq.clear();\n return;\n }\n\n events.emit('dragAndDropSequenceError', {\n patches: pendingPatches,\n });\n executor.seq.clear();\n\n const requestId = isHttpError(err) ? err.requestId : undefined;\n\n return {\n message: collection.translate('cairo.dragAndDrop.error.toast'),\n biName: 'cairo-drag-and-drop-submit-error',\n details: requestId\n ? {\n requestId,\n }\n : undefined,\n action: {\n onClick: async () => {\n this.pushPatchAndReprocess(pendingPatches);\n for (const p of pendingPatches) {\n this.enqueueMovePatch(p, params);\n }\n events.emit('dragAndDropSequenceRetry', {\n patches: pendingPatches,\n });\n\n await onTryAgain?.();\n },\n },\n };\n },\n });\n\n if (!sequences.has(filtersKeyHash)) {\n sequences.set(filtersKeyHash, seq);\n }\n\n return seq;\n };\n\n const executor = _initSequence();\n\n executor.sequence({\n submit: () => submit?.(event),\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n });\n }\n\n async move<R>(event: ActionMove<T>, params: MoveParams<T, R>) {\n const { collection, state } = this;\n const { itemKey, result } = collection;\n const { patches } = state;\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches,\n actionType: 'move',\n patchedItems: new Map(),\n originalItems: new Map(),\n originalTotal: result.total,\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n move: event,\n collectionSnapshot: params.collectionSnapshot,\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n this.enqueueMovePatch(optimisticPatch, params);\n }\n\n /**\n * Updates a single item in the collection.\n * @param item - The item to update.\n * @param params - Additional parameters for the operation.\n * @external\n */\n updateOne<R>(item: T, params: UpdateManyParams<T, R>) {\n return this.updateMany([item], params);\n }\n\n /**\n * > `updateAll(fn)` API is not recommended as it's not possible to calculate \"optimistic total\", prefer updateAll(patchObject) API if possible.\n * Updates all items in the collection based on a function or a patch object.\n * @param patchOrFn - A function or a patch object to apply to each item.\n * @param params - Additional parameters for the operation.\n */\n updateAll<R>(\n patchOrFn: (item: T) => Partial<T>,\n params: UpdateAllParams<R>,\n ): void;\n\n /**\n * Updates all items in the collection based on a patch object.\n * @param patch - A patch object to apply to each item.\n * @param params - Additional parameters for the operation.\n * @external\n */\n updateAll<R>(patch: Partial<T>, params: UpdateAllParams<R>): void;\n\n updateAll<R>(\n patchOrFn: ((item: T) => Partial<T>) | Partial<T>,\n params: UpdateAllParams<R>,\n ) {\n const { executor, collection, predicate, createdAt } = this;\n const {\n submit,\n updateServerAfter,\n keepPosition,\n onUndo,\n onTryAgain,\n onError,\n } = params;\n const {\n itemKey,\n result: { originQuery, items, total },\n } = collection;\n\n const itemPredicate = predicate(originQuery);\n\n const updatedAt = new Date();\n\n const { patch, actionType } =\n typeof patchOrFn === 'function'\n ? { actionType: 'updateAll' as const, patch: patchOrFn }\n : {\n actionType: 'updateAllConst' as const,\n patch: (item: T) => ({ ...item, ...patchOrFn }),\n };\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n patches: this.state.patches,\n actionType,\n keepPosition,\n queryNames: this._queryNames,\n patchedItems: new Map(\n items.map((item) => [itemKey(item), { ...item, ...patch(item) }]),\n ),\n originalItems: new Map(items.map((item) => [itemKey(item), item])),\n originalTotal: total,\n selector: (item) =>\n itemPredicate(item) &&\n (createdAt == null || createdAt(item) <= updatedAt),\n patch,\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n executor.execute([optimisticPatch], {\n ...params,\n submit,\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: updateServerAfter,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n /**\n * Deletes multiple items from the collection.\n * @param items - An array of items to delete.\n * @param params - Additional parameters for the delete operation.\n * @external\n */\n deleteMany<R>(items: T[], params: DeleteManyParams<T, R>) {\n const { executor, collection } = this;\n const {\n itemKey,\n result: { total },\n } = collection;\n const { submit, updateServerAfter, onUndo, onTryAgain, onError } = params;\n\n const patchedItems = new Map(items.map((item) => [itemKey(item), item]));\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n patches: this.state.patches,\n actionType: 'deleteMany',\n patchedItems,\n queryNames: this._queryNames,\n originalItems: patchedItems,\n originalTotal: total,\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n executor.execute([optimisticPatch], {\n ...params,\n submit: action((actions) =>\n submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'deleteMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n ),\n ),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: updateServerAfter,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n /**\n * Deletes a single item from the collection.\n * @param item - The item to delete.\n * @param params - Additional parameters for the operation.\n * @external\n */\n deleteOne<R>(item: T, params: DeleteManyParams<T, R>) {\n return this.deleteMany([item], params);\n }\n\n /**\n * Deletes all items from the collection.\n * @param params - Additional parameters for the operation.\n * @external\n */\n deleteAll<R>(params: UpdateAllParams<R>) {\n const { executor, collection, predicate, createdAt } = this;\n const { submit, updateServerAfter, onUndo, onTryAgain, onError } = params;\n const {\n itemKey,\n result: { originQuery, items, total },\n } = collection;\n\n const itemPredicate = predicate(originQuery);\n\n const updatedAt = new Date();\n\n const patchedItems = new Map(items.map((item) => [itemKey(item), item]));\n\n const optimisticPatch = new OptimisticPatch({\n patches: this.state.patches,\n queryCache: collection.queryCache,\n actionType: 'deleteAll',\n patchedItems,\n queryNames: this._queryNames,\n originalItems: patchedItems,\n originalTotal: total,\n selector: (item) =>\n itemPredicate(item) &&\n (createdAt == null || createdAt(item) <= updatedAt),\n });\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n executor.execute([optimisticPatch], {\n ...params,\n submit,\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: updateServerAfter,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n initCollection(collection: CollectionState<T, F>) {\n this.collections.push(collection);\n new CollectionOptimisticProcessor({\n collection,\n optimistic: this,\n orderBy: this.orderBy,\n predicate: this.predicate,\n });\n\n return () => {\n const i = this.collections.indexOf(collection);\n if (i !== -1) {\n this.collections.splice(i, 1);\n }\n };\n }\n\n init() {\n const { collection, events } = this;\n\n // The only case when this.state._patchesBeforeUnmount won't be null -\n // when the state was cached with patterns router, so we want to restore the patches that were existed before the unmount\n if (this.state._patchesBeforeUnmount) {\n this.state.patches.clear();\n this.state.patches.push(...this.state._patchesBeforeUnmount);\n }\n\n const emitRefresh = (params: { isStale: boolean }) => {\n events.emit('refresh', params);\n };\n const emitBeforeResultUpdated = () => events.emit('beforeResultUpdated');\n\n collection.emitter.on('refresh', emitRefresh);\n collection.emitter.on('beforeResultUpdated', emitBeforeResultUpdated);\n\n const disposers = [\n reaction(\n () => {\n const checkUnprocessedFilteredOut = (() => {\n const {\n result: { _pages, _pagesAtom },\n } = collection;\n _pagesAtom.reportObserved();\n const unprocessed =\n _pages.unprocessed[_pages.unprocessed.length - 1];\n const processed = _pages.processed[_pages.processed.length - 1];\n\n if (unprocessed == null || processed == null) {\n return false;\n }\n // check if some items in unprocessed were filtered out\n return unprocessed.length > processed.length;\n })();\n\n const checkIsEmptyAndHasUnprocessed = (() => {\n const {\n result: { isEmpty, _pages },\n } = collection;\n const unprocessed = _pages.unprocessed.flatMap((page) => page);\n return isEmpty && unprocessed.length > 0;\n })();\n\n return collection.emitter.listeners('triggerReachBottomListener')\n .length\n ? checkUnprocessedFilteredOut\n : checkIsEmptyAndHasUnprocessed;\n },\n (_filteredOut) => {\n if (!_filteredOut) {\n return;\n }\n\n if (\n collection.emitter.listeners('triggerReachBottomListener').length\n ) {\n if (\n process.env.NODE_ENV === 'test' &&\n (window as any).__CAIRO_TEST_TRIGGER_REACH_BOTTOM_LISTENER__\n ) {\n collection.emitter.emit('triggerReachBottomListener');\n }\n } else {\n collection.fetchNextPageIfNeeded();\n }\n },\n ),\n ];\n\n return () => {\n collection.emitter.off('refresh', emitRefresh);\n collection.emitter.off('beforeResultUpdated', emitBeforeResultUpdated);\n disposers.forEach((disposer) => disposer());\n this.state._patchesBeforeUnmount = this.state.patches.toJSON();\n events.emit('unmount');\n };\n }\n\n clear() {\n const { patches } = this.state;\n const remaining = patches.clear();\n for (const patch of remaining) {\n if (!patch.isStale) {\n patches.push(patch);\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_mobx","require","_CollectionOptimisticActionsState","_CollectionOptimisticProcessor","_CollectionOptimisticPatch","_CollectionOptimisticExecutor","_events","_util","_QueryResultSimulationDefault","_CollectionOptimisticSequenceExecutor","_merge","_interopRequireDefault","CollectionOptimisticActions","constructor","params","_defineProperty2","default","EventEmitter","action","patch","state","collection","collections","noInvalidate","processors","_commitMode","patches","remove","length","forEach","processorHelpers","commit","invalidate","p","refreshAllPages","events","clearPatch","off","_clearPatch","onRefresh","isStale","once","emit","on","query","sequences","Map","CollectionOptimisticActionsState","source","patchesCache","container","cacheNamespace","resultSimulationDefault","QueryResultSimulationDefault","predicate","orderBy","createdAt","executor","CollectionOptimisticExecutor","batchWait","errorMonitor","showToast","translate","lodash","push","CollectionOptimisticProcessor","optimistic","_optimisticActions","makeObservable","pushPatchAndReprocess","replacePatchAndReprocess","rollback","bound","clear","move","pendingMovePatches","computed","_queryNames","queryName","map","c","hasRunningSequence","Array","from","values","some","s","seq","running","filter","isArray","newPatch","oldPatch","oldPatchIndex","findIndex","createOne","item","createMany","items","itemKey","result","submit","updateServerAfter","onUndo","onTryAgain","onError","afterItemKey","optimisticPatchParams","queryCache","queryNames","actionType","patchedItems","originalItems","originalTotal","total","get","selector","has","optimisticPatch","OptimisticPatch","_clearPatchOnNextResultOrUnmount","execute","actions","submitResult","reduce","patchedItemsEntries","key","set","updatedOptimisticPatch","onRollback","eventuallyUpdated","onEventuallyUpdated","updateMany","merge","keepPosition","_result$get","originalItem","enqueueMovePatch","event","filtersKeyHash","_initSequence","CollectionOptimisticSequenceExecutor","err","pendingPatches","_p$move","Error","message","reorderModeCanceledMessage","requestId","isHttpError","undefined","biName","details","onClick","sequence","collectionSnapshot","updateOne","updateAll","patchOrFn","originQuery","itemPredicate","updatedAt","Date","deleteMany","deleteOne","deleteAll","initCollection","i","indexOf","splice","init","_patchesBeforeUnmount","emitRefresh","emitBeforeResultUpdated","emitter","disposers","reaction","checkUnprocessedFilteredOut","_pages","_pagesAtom","reportObserved","unprocessed","processed","checkIsEmptyAndHasUnprocessed","isEmpty","flatMap","page","listeners","_filteredOut","process","env","NODE_ENV","window","__CAIRO_TEST_TRIGGER_REACH_BOTTOM_LISTENER__","fetchNextPageIfNeeded","disposer","toJSON","remaining","exports"],"sources":["../../../src/state/CollectionOptimisticActions.ts"],"sourcesContent":["import { ActionMove, ComputedQuery, FiltersMap } from '../model';\nimport {\n action,\n computed,\n IObservableArray,\n makeObservable,\n reaction,\n} from 'mobx';\nimport { CollectionState } from './CollectionState';\nimport { Order } from './QueryResultSimulation';\nimport { CollectionOptimisticActionsState } from './CollectionOptimisticActionsState';\nimport { CollectionOptimisticProcessor } from './CollectionOptimisticProcessor';\nimport {\n OptimisticPatch,\n OptimisticPatchParams,\n} from './CollectionOptimisticPatch';\nimport { CollectionOptimisticExecutor } from './CollectionOptimisticExecutor';\nimport { EventEmitter } from 'events';\nimport { isHttpError, TypedEmitter } from '../util';\nimport { QueryResultSimulationDefault } from './QueryResultSimulationDefault';\nimport { CollectionOptimisticSequenceExecutor } from './CollectionOptimisticSequenceExecutor';\nimport { ModalLayoutProps } from '../services';\nimport { QueryState } from './QueryState';\nimport {\n CreateManyParams,\n DeleteManyParams,\n OptimisticActionBasis,\n OptimisticActions,\n UpdateAllParams,\n UpdateManyParams,\n} from './OptimisticActions';\nimport merge from 'lodash/merge';\n\nexport interface MoveParams<T, R> extends OptimisticActionBasis {\n /**\n * Function to submit the move operation.\n * @param params - The parameters for the move action.\n */\n submit?: (params: ActionMove<T>) => Promise<R>;\n /**\n * Snapshot of the collection before the move operation.\n */\n collectionSnapshot: { [key: string]: string | number | undefined };\n}\n\nexport interface CollectionOptimisticActionsBaseParams<\n T,\n F extends FiltersMap,\n> {\n /**\n * A function that simulates the filtering in the server.\n * The function should return another function that accepts an item, and return a boolean that indicates whether the item passes the query filters or not.\n * @param computedQuery - The computed query object.\n * @external\n */\n readonly predicate?: (\n computedQuery: ComputedQuery<F>,\n ) => (item: T) => boolean;\n /**\n * A function that simulates the ordering of the items in the server.<br>\n * The function should return a list of rules in the form of `{fieldName: string; order: 'asc' | 'desc';}` to order the items by\n * @param computedQuery - The computed query object.\n * @external\n */\n readonly orderBy?: (computedQuery: ComputedQuery<F>) => Order<T>[];\n /**\n * A function to retrieve the creation date of an item.\n * @param item - The item.\n * @external\n */\n readonly createdAt?: (item: T) => Date;\n /**\n * Time to wait before batching multiple `updateMany` calls into a single server call.\n * @default 0\n * @external\n */\n readonly batchWait?: number;\n /**\n * Indicates whether to refresh the current page without invalidating the cache.\n * @external\n */\n readonly noInvalidate?: boolean;\n /**\n * Adds a namespace to the cache key.\n * @external\n */\n readonly cacheNamespace?: string;\n readonly sequences?: Map<string, CollectionOptimisticSequenceExecutor>;\n readonly query?: QueryState<F>;\n}\n\nexport interface CollectionOptimisticActionsParams<T, F extends FiltersMap>\n extends CollectionOptimisticActionsBaseParams<T, F> {\n /**\n * The main collection to reflect changes into.\n * @external\n */\n readonly collection: CollectionState<T, F>;\n /**\n * Additional collections to reflect changes into.\n * @default undefined\n * @external\n */\n readonly collections?: CollectionState<T, F>[];\n /**\n * Container holding patches cache and events emitter.\n * @external\n */\n readonly container: {\n patchesCache: Map<string, IObservableArray<OptimisticPatch<T>>>;\n events: TypedEmitter<{\n navigation: () => ModalLayoutProps | null | undefined;\n }>;\n };\n}\n\nexport class CollectionOptimisticActions<T, F extends FiltersMap>\n implements OptimisticActions<T>\n{\n readonly collection;\n readonly query;\n readonly collections;\n readonly predicate: (computedQuery: ComputedQuery<F>) => (item: T) => boolean;\n readonly orderBy: (computedQuery: ComputedQuery<F>) => Order<T>[];\n readonly createdAt?: (item: T) => Date;\n readonly events = new EventEmitter() as TypedEmitter<{\n reprocess: () => void;\n updated: () => void;\n refresh: (params: { isStale: boolean }) => void;\n unmount: () => void;\n beforeResultUpdated: () => void;\n dragAndDropSequenceError: (params: {\n patches: OptimisticPatch<T>[];\n }) => void;\n dragAndDropSequenceRetry: (params: {\n patches: OptimisticPatch<T>[];\n }) => void;\n }>;\n readonly noInvalidate;\n readonly state;\n readonly processors: CollectionOptimisticProcessor<T, F>[] = [];\n readonly executor: CollectionOptimisticExecutor<OptimisticPatch<T>>;\n readonly sequences;\n readonly resultSimulationDefault;\n readonly reorderModeCanceledMessage = 'REORDER_MODE_CANCELED';\n\n _resumeNavigation: (() => void) | null = null;\n\n _orderByMode: 'orders' | 'moves' = 'orders';\n\n _commitMode = false;\n\n constructor(params: CollectionOptimisticActionsParams<T, F>) {\n this.collection = params.collection;\n this.query = params.query ?? this.collection.query;\n this.collections = params.collections ?? [];\n\n this.sequences =\n params.sequences ??\n new Map<string, CollectionOptimisticSequenceExecutor>();\n\n this.state = new CollectionOptimisticActionsState<T>({\n source: this.collection,\n patchesCache: params.container.patchesCache,\n cacheNamespace: params.cacheNamespace,\n });\n\n this.resultSimulationDefault = new QueryResultSimulationDefault({\n collection: this.collection,\n });\n\n this.predicate = params.predicate ?? this.resultSimulationDefault.predicate;\n this.orderBy = params.orderBy ?? this.resultSimulationDefault.orderBy;\n this.createdAt = params.createdAt;\n this.noInvalidate = params.noInvalidate;\n\n this.executor = new CollectionOptimisticExecutor({\n batchWait: params.batchWait ?? 0,\n errorMonitor: this.collection.errorMonitor,\n showToast: this.collection.showToast,\n translate: this.collection.translate,\n lodash: this.collection.lodash,\n container: params.container,\n });\n\n this.processors.push(\n new CollectionOptimisticProcessor({\n ...params,\n optimistic: this,\n }),\n );\n\n if (params.collections != null) {\n params.collections.forEach((collection) => {\n this.processors.push(\n new CollectionOptimisticProcessor({\n ...params,\n collection,\n optimistic: this,\n }),\n );\n });\n }\n\n this.collection._optimisticActions = this;\n\n makeObservable(this, {\n pushPatchAndReprocess: action,\n replacePatchAndReprocess: action,\n rollback: action.bound,\n clear: action,\n move: action,\n pendingMovePatches: computed,\n });\n }\n\n get _queryNames() {\n return [\n this.collection.queryName,\n ...this.collections.map((c) => c.queryName),\n ];\n }\n\n get hasRunningSequence() {\n return Array.from(this.sequences.values()).some((s) => s.seq.state.running);\n }\n\n get pendingMovePatches() {\n return this.state.patches.filter((p) => p.move);\n }\n\n rollback(patch: OptimisticPatch<T> | OptimisticPatch<T>[]) {\n const { events, state } = this;\n const patches = Array.isArray(patch) ? patch : [patch];\n\n for (const p of patches) {\n state.patches.remove(p);\n }\n\n events.emit('reprocess');\n }\n\n private _clearPatch = action((patch: OptimisticPatch<T>) => {\n const {\n state,\n collection,\n collections,\n noInvalidate,\n processors,\n _commitMode,\n } = this;\n\n if (noInvalidate) {\n return;\n }\n\n state.patches.remove(patch);\n if (_commitMode && !state.patches.length) {\n processors.forEach(({ processorHelpers }) => processorHelpers.commit());\n }\n collection.invalidate();\n collections.forEach((p) => p.refreshAllPages());\n });\n\n _clearPatchOnNextResultOrUnmount = (patch: OptimisticPatch<T>) => {\n const { events } = this;\n\n const clearPatch = () => {\n events.off('unmount', clearPatch);\n this._clearPatch(patch);\n };\n\n const onRefresh = ({ isStale }: { isStale: boolean }) => {\n events.off('refresh', onRefresh);\n\n // clear only when results are not going to come from cache\n if (isStale) {\n events.once('beforeResultUpdated', clearPatch);\n }\n };\n\n events.emit('updated');\n\n if (this._commitMode) {\n this._clearPatch(patch);\n } else {\n // Clear the patch on the next collection result update to eliminate inconsistencies between server state and local patches\n events.on('refresh', onRefresh);\n // since not clearing the patch immediately, clear it on unmount if was not cleared yet\n events.on('unmount', clearPatch);\n }\n };\n\n pushPatchAndReprocess(patch: OptimisticPatch<T> | OptimisticPatch<T>[]) {\n const { state, events } = this;\n const patches = Array.isArray(patch) ? patch : [patch];\n state.patches.push(...patches);\n events.emit('reprocess');\n }\n\n replacePatchAndReprocess(\n newPatch: OptimisticPatch<T>,\n oldPatch: OptimisticPatch<T>,\n ) {\n const { state, events } = this;\n\n const oldPatchIndex = state.patches.findIndex(\n (patch) => patch === oldPatch,\n );\n state.patches[oldPatchIndex] = newPatch;\n events.emit('reprocess');\n }\n\n createOne(item: T, params: CreateManyParams<T>) {\n return this.createMany([item], params);\n }\n\n createMany(items: T[], params: CreateManyParams<T>) {\n const { collection, executor } = this;\n const { itemKey, result } = collection;\n const {\n submit,\n updateServerAfter,\n onUndo,\n onTryAgain,\n onError,\n afterItemKey,\n } = params;\n\n const optimisticPatchParams: OptimisticPatchParams<T> = {\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches: this.state.patches,\n actionType: 'createMany',\n patchedItems: new Map(items.map((item) => [itemKey(item), item])),\n originalItems: new Map(),\n originalTotal: result.total,\n patch: (item, { patchedItems }) => patchedItems.get(itemKey(item)),\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n afterItemKey,\n };\n\n const optimisticPatch = new OptimisticPatch<T>(optimisticPatchParams);\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n return executor.execute([optimisticPatch], {\n ...params,\n submit: action(async (actions) => {\n const submitResult = await submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'createMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n );\n\n if (!submitResult) {\n return;\n }\n\n const updatedOptimisticPatch = new OptimisticPatch({\n ...optimisticPatchParams,\n patchedItems: new Map(\n submitResult.map((item) => [itemKey(item), item]),\n ),\n });\n\n this.replacePatchAndReprocess(updatedOptimisticPatch, optimisticPatch);\n this._clearPatchOnNextResultOrUnmount(updatedOptimisticPatch);\n return submitResult;\n }),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: updateServerAfter,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n /**\n * Updates multiple items in the collection.\n * @param items - The items to update.\n * @param params - Additional parameters for the update operation.\n * @external\n */\n updateMany<R>(items: T[], params: UpdateManyParams<T, R>) {\n const { executor, collection } = this;\n\n const patchedItems = params.patch\n ? items.map((item) => merge({}, item, params.patch ?? {}))\n : items;\n\n const { itemKey, result } = collection;\n const {\n submit,\n updateServerAfter,\n keepPosition,\n onUndo,\n onTryAgain,\n onError,\n } = params;\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches: this.state.patches,\n actionType: 'updateMany',\n keepPosition,\n patchedItems: new Map(patchedItems.map((item) => [itemKey(item), item])),\n originalItems: new Map(\n patchedItems.map((item) => {\n const key = itemKey(item);\n const originalItem = result.get(itemKey(item))?.item ?? item;\n return [key, originalItem];\n }),\n ),\n originalTotal: result.total,\n patch: (item, { patchedItems }) => patchedItems.get(itemKey(item)),\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n return executor.execute([optimisticPatch], {\n ...params,\n submit: action((actions) =>\n submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'updateMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n ),\n ),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: updateServerAfter,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n enqueueMovePatch<R>(\n optimisticPatch: OptimisticPatch<T>,\n params: MoveParams<T, R>,\n ) {\n const { submit, onTryAgain } = params;\n const { collection, state, events } = this;\n const { patches } = state;\n\n const event = optimisticPatch.move;\n\n if (event == null) {\n return;\n }\n\n const { filtersKeyHash } = event;\n\n const _initSequence = () => {\n const { sequences } = this;\n const seq =\n sequences.get(filtersKeyHash) ??\n new CollectionOptimisticSequenceExecutor({\n showToast: collection.showToast,\n translate: collection.translate,\n errorMonitor: collection.errorMonitor,\n onRollback: (err) => {\n const pendingPatches = patches.filter(\n (p) => p.move?.filtersKeyHash === filtersKeyHash,\n );\n this.rollback(pendingPatches);\n\n if (\n err instanceof Error &&\n err.message === this.reorderModeCanceledMessage\n ) {\n executor.seq.clear();\n return;\n }\n\n events.emit('dragAndDropSequenceError', {\n patches: pendingPatches,\n });\n executor.seq.clear();\n\n const requestId = isHttpError(err) ? err.requestId : undefined;\n\n return {\n message: collection.translate('cairo.dragAndDrop.error.toast'),\n biName: 'cairo-drag-and-drop-submit-error',\n details: requestId\n ? {\n requestId,\n }\n : undefined,\n action: {\n onClick: async () => {\n this.pushPatchAndReprocess(pendingPatches);\n for (const p of pendingPatches) {\n this.enqueueMovePatch(p, params);\n }\n events.emit('dragAndDropSequenceRetry', {\n patches: pendingPatches,\n });\n\n await onTryAgain?.();\n },\n },\n };\n },\n });\n\n if (!sequences.has(filtersKeyHash)) {\n sequences.set(filtersKeyHash, seq);\n }\n\n return seq;\n };\n\n const executor = _initSequence();\n\n executor.sequence({\n submit: () => submit?.(event),\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n });\n }\n\n async move<R>(event: ActionMove<T>, params: MoveParams<T, R>) {\n const { collection, state } = this;\n const { itemKey, result } = collection;\n const { patches } = state;\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches,\n actionType: 'move',\n patchedItems: new Map(),\n originalItems: new Map(),\n originalTotal: result.total,\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n move: event,\n collectionSnapshot: params.collectionSnapshot,\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n this.enqueueMovePatch(optimisticPatch, params);\n }\n\n /**\n * Updates a single item in the collection.\n * @param item - The item to update.\n * @param params - Additional parameters for the operation.\n * @external\n */\n updateOne<R>(item: T, params: UpdateManyParams<T, R>) {\n return this.updateMany([item], params);\n }\n\n /**\n * > `updateAll(fn)` API is not recommended as it's not possible to calculate \"optimistic total\", prefer updateAll(patchObject) API if possible.\n * Updates all items in the collection based on a function or a patch object.\n * @param patchOrFn - A function or a patch object to apply to each item.\n * @param params - Additional parameters for the operation.\n */\n updateAll<R>(\n patchOrFn: (item: T) => Partial<T>,\n params: UpdateAllParams<R>,\n ): void;\n\n /**\n * Updates all items in the collection based on a patch object.\n * @param patch - A patch object to apply to each item.\n * @param params - Additional parameters for the operation.\n * @external\n */\n updateAll<R>(patch: Partial<T>, params: UpdateAllParams<R>): void;\n\n updateAll<R>(\n patchOrFn: ((item: T) => Partial<T>) | Partial<T>,\n params: UpdateAllParams<R>,\n ) {\n const { executor, collection, predicate, createdAt } = this;\n const {\n submit,\n updateServerAfter,\n keepPosition,\n onUndo,\n onTryAgain,\n onError,\n } = params;\n const {\n itemKey,\n result: { originQuery, items, total },\n } = collection;\n\n const itemPredicate = predicate(originQuery);\n\n const updatedAt = new Date();\n\n const { patch, actionType } =\n typeof patchOrFn === 'function'\n ? { actionType: 'updateAll' as const, patch: patchOrFn }\n : {\n actionType: 'updateAllConst' as const,\n patch: (item: T) => ({ ...item, ...patchOrFn }),\n };\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n patches: this.state.patches,\n actionType,\n keepPosition,\n queryNames: this._queryNames,\n patchedItems: new Map(\n items.map((item) => [itemKey(item), { ...item, ...patch(item) }]),\n ),\n originalItems: new Map(items.map((item) => [itemKey(item), item])),\n originalTotal: total,\n selector: (item) =>\n itemPredicate(item) &&\n (createdAt == null || createdAt(item) <= updatedAt),\n patch,\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n executor.execute([optimisticPatch], {\n ...params,\n submit,\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: updateServerAfter,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n /**\n * Deletes multiple items from the collection.\n * @param items - An array of items to delete.\n * @param params - Additional parameters for the delete operation.\n * @external\n */\n deleteMany<R>(items: T[], params: DeleteManyParams<T, R>) {\n const { executor, collection } = this;\n const {\n itemKey,\n result: { total },\n } = collection;\n const { submit, updateServerAfter, onUndo, onTryAgain, onError } = params;\n\n const patchedItems = new Map(items.map((item) => [itemKey(item), item]));\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n patches: this.state.patches,\n actionType: 'deleteMany',\n patchedItems,\n queryNames: this._queryNames,\n originalItems: patchedItems,\n originalTotal: total,\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n executor.execute([optimisticPatch], {\n ...params,\n submit: action((actions) =>\n submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'deleteMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n ),\n ),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: updateServerAfter,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n /**\n * Deletes a single item from the collection.\n * @param item - The item to delete.\n * @param params - Additional parameters for the operation.\n * @external\n */\n deleteOne<R>(item: T, params: DeleteManyParams<T, R>) {\n return this.deleteMany([item], params);\n }\n\n /**\n * Deletes all items from the collection.\n * @param params - Additional parameters for the operation.\n * @external\n */\n deleteAll<R>(params: UpdateAllParams<R>) {\n const { executor, collection, predicate, createdAt } = this;\n const { submit, updateServerAfter, onUndo, onTryAgain, onError } = params;\n const {\n itemKey,\n result: { originQuery, items, total },\n } = collection;\n\n const itemPredicate = predicate(originQuery);\n\n const updatedAt = new Date();\n\n const patchedItems = new Map(items.map((item) => [itemKey(item), item]));\n\n const optimisticPatch = new OptimisticPatch({\n patches: this.state.patches,\n queryCache: collection.queryCache,\n actionType: 'deleteAll',\n patchedItems,\n queryNames: this._queryNames,\n originalItems: patchedItems,\n originalTotal: total,\n selector: (item) =>\n itemPredicate(item) &&\n (createdAt == null || createdAt(item) <= updatedAt),\n });\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n executor.execute([optimisticPatch], {\n ...params,\n submit,\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: updateServerAfter,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n initCollection(collection: CollectionState<T, F>) {\n this.collections.push(collection);\n new CollectionOptimisticProcessor({\n collection,\n optimistic: this,\n orderBy: this.orderBy,\n predicate: this.predicate,\n });\n\n return () => {\n const i = this.collections.indexOf(collection);\n if (i !== -1) {\n this.collections.splice(i, 1);\n }\n };\n }\n\n init() {\n const { collection, events } = this;\n\n // The only case when this.state._patchesBeforeUnmount won't be null -\n // when the state was cached with patterns router, so we want to restore the patches that were existed before the unmount\n if (this.state._patchesBeforeUnmount) {\n this.state.patches.clear();\n this.state.patches.push(...this.state._patchesBeforeUnmount);\n }\n\n const emitRefresh = (params: { isStale: boolean }) => {\n events.emit('refresh', params);\n };\n const emitBeforeResultUpdated = () => events.emit('beforeResultUpdated');\n\n collection.emitter.on('refresh', emitRefresh);\n collection.emitter.on('beforeResultUpdated', emitBeforeResultUpdated);\n\n const disposers = [\n reaction(\n () => {\n const checkUnprocessedFilteredOut = (() => {\n const {\n result: { _pages, _pagesAtom },\n } = collection;\n _pagesAtom.reportObserved();\n const unprocessed =\n _pages.unprocessed[_pages.unprocessed.length - 1];\n const processed = _pages.processed[_pages.processed.length - 1];\n\n if (unprocessed == null || processed == null) {\n return false;\n }\n // check if some items in unprocessed were filtered out\n return unprocessed.length > processed.length;\n })();\n\n const checkIsEmptyAndHasUnprocessed = (() => {\n const {\n result: { isEmpty, _pages },\n } = collection;\n const unprocessed = _pages.unprocessed.flatMap((page) => page);\n return isEmpty && unprocessed.length > 0;\n })();\n\n return collection.emitter.listeners('triggerReachBottomListener')\n .length\n ? checkUnprocessedFilteredOut\n : checkIsEmptyAndHasUnprocessed;\n },\n (_filteredOut) => {\n if (!_filteredOut) {\n return;\n }\n\n if (\n collection.emitter.listeners('triggerReachBottomListener').length\n ) {\n if (\n process.env.NODE_ENV === 'test' &&\n (window as any).__CAIRO_TEST_TRIGGER_REACH_BOTTOM_LISTENER__\n ) {\n collection.emitter.emit('triggerReachBottomListener');\n }\n } else {\n collection.fetchNextPageIfNeeded();\n }\n },\n ),\n ];\n\n return () => {\n collection.emitter.off('refresh', emitRefresh);\n collection.emitter.off('beforeResultUpdated', emitBeforeResultUpdated);\n disposers.forEach((disposer) => disposer());\n this.state._patchesBeforeUnmount = this.state.patches.toJSON();\n events.emit('unmount');\n };\n }\n\n clear() {\n const { patches } = this.state;\n const remaining = patches.clear();\n for (const patch of remaining) {\n if (!patch.isStale) {\n patches.push(patch);\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,6 +21,7 @@ class OptimisticPatch {
|
|
|
21
21
|
(0, _defineProperty2.default)(this, "move", void 0);
|
|
22
22
|
(0, _defineProperty2.default)(this, "createdAt", Date.now());
|
|
23
23
|
(0, _defineProperty2.default)(this, "collectionSnapshot", void 0);
|
|
24
|
+
(0, _defineProperty2.default)(this, "afterItemKey", void 0);
|
|
24
25
|
(0, _defineProperty2.default)(this, "isStale", false);
|
|
25
26
|
(0, _defineProperty2.default)(this, "events", new _events.EventEmitter());
|
|
26
27
|
(0, _defineProperty2.default)(this, "onEventuallyUpdated", () => {
|
|
@@ -51,6 +52,7 @@ class OptimisticPatch {
|
|
|
51
52
|
this.patches = params.patches;
|
|
52
53
|
this.move = params.move;
|
|
53
54
|
this.collectionSnapshot = params.collectionSnapshot;
|
|
55
|
+
this.afterItemKey = params.afterItemKey;
|
|
54
56
|
this.patchedItems = _mobx.observable.map(params.patchedItems, {
|
|
55
57
|
deep: false
|
|
56
58
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_mobx","require","_events","OptimisticPatch","constructor","params","_defineProperty2","default","Date","now","EventEmitter","events","queryCache","queryNames","patches","isStale","listeners","length","remove","forEach","queryName","findAll","queryKey","q","invalidate","emit","patch","item","selector","actionType","keepPosition","move","collectionSnapshot","patchedItems","observable","map","deep","originalItems","originalTotal","makeObservable","patchedItemsEntries","computed","ref","onEventuallyUpdated","action","Array","from","entries","exports"],"sources":["../../../src/state/CollectionOptimisticPatch.ts"],"sourcesContent":["import {\n action,\n computed,\n IObservableArray,\n makeObservable,\n observable,\n} from 'mobx';\nimport { EventEmitter } from 'events';\nimport { TypedEmitter } from '../util';\nimport { ActionMove } from '../model';\nimport { QueryCache } from 'react-query/core';\n\ninterface OptimisticPatchEvents<T> {\n scheduleRemoval: (patch: OptimisticPatch<T>) => unknown;\n}\n\nexport type OptimisticPatchActionType =\n | 'move'\n | 'createMany'\n | 'updateMany'\n | 'updateAll'\n | 'updateAllConst'\n | 'deleteMany'\n | 'deleteAll';\n\nexport interface OptimisticPatchParams<T> {\n readonly patch?: (\n item: T,\n patch: OptimisticPatch<T>,\n ) => Partial<T> | undefined;\n readonly selector: (item: T, patch: OptimisticPatch<T>) => boolean;\n readonly actionType: OptimisticPatchActionType;\n readonly patchedItems: Map<string, T>;\n readonly originalItems: Map<string, T>;\n readonly originalTotal: number;\n readonly keepPosition?: boolean;\n readonly queryNames: string[];\n readonly queryCache: QueryCache;\n readonly patches: IObservableArray<OptimisticPatch<T>>;\n readonly move?: ActionMove<T>;\n readonly collectionSnapshot?: { [key: string]: string | number | undefined };\n}\n\nexport class OptimisticPatch<T> {\n readonly patch;\n readonly selector;\n readonly actionType;\n readonly patchedItems;\n readonly originalItems;\n readonly originalTotal;\n readonly keepPosition;\n readonly queryNames;\n readonly queryCache;\n readonly patches;\n readonly move;\n readonly createdAt = Date.now();\n readonly collectionSnapshot;\n\n isStale: boolean = false;\n\n readonly events = new EventEmitter() as TypedEmitter<\n OptimisticPatchEvents<T>\n >;\n\n constructor(params: OptimisticPatchParams<T>) {\n this.patch = (item: T) => params.patch?.(item, this);\n this.selector = (item: T) => params.selector(item, this);\n this.actionType = params.actionType;\n this.keepPosition = params.keepPosition;\n this.queryNames = params.queryNames;\n this.queryCache = params.queryCache;\n this.patches = params.patches;\n this.move = params.move;\n this.collectionSnapshot = params.collectionSnapshot;\n\n this.patchedItems = observable.map<string, T>(params.patchedItems, {\n deep: false,\n });\n\n this.originalItems = observable.map<string, T>(params.originalItems, {\n deep: false,\n });\n\n this.originalTotal = params.originalTotal;\n\n makeObservable(this, {\n patchedItemsEntries: computed,\n isStale: observable.ref,\n onEventuallyUpdated: action,\n });\n }\n\n get patchedItemsEntries() {\n return Array.from(this.patchedItems.entries());\n }\n\n onEventuallyUpdated = () => {\n const { events, queryCache, queryNames, patches } = this;\n this.isStale = true;\n if (!events.listeners('scheduleRemoval').length) {\n patches.remove(this);\n queryNames.forEach((queryName) => {\n queryCache\n .findAll({ queryKey: [queryName] })\n .forEach((q) => q.invalidate());\n });\n } else {\n events.emit('scheduleRemoval', this);\n }\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAOA,IAAAC,OAAA,GAAAD,OAAA;
|
|
1
|
+
{"version":3,"names":["_mobx","require","_events","OptimisticPatch","constructor","params","_defineProperty2","default","Date","now","EventEmitter","events","queryCache","queryNames","patches","isStale","listeners","length","remove","forEach","queryName","findAll","queryKey","q","invalidate","emit","patch","item","selector","actionType","keepPosition","move","collectionSnapshot","afterItemKey","patchedItems","observable","map","deep","originalItems","originalTotal","makeObservable","patchedItemsEntries","computed","ref","onEventuallyUpdated","action","Array","from","entries","exports"],"sources":["../../../src/state/CollectionOptimisticPatch.ts"],"sourcesContent":["import {\n action,\n computed,\n IObservableArray,\n makeObservable,\n observable,\n} from 'mobx';\nimport { EventEmitter } from 'events';\nimport { TypedEmitter } from '../util';\nimport { ActionMove } from '../model';\nimport { QueryCache } from 'react-query/core';\n\ninterface OptimisticPatchEvents<T> {\n scheduleRemoval: (patch: OptimisticPatch<T>) => unknown;\n}\n\nexport type OptimisticPatchActionType =\n | 'move'\n | 'createMany'\n | 'updateMany'\n | 'updateAll'\n | 'updateAllConst'\n | 'deleteMany'\n | 'deleteAll';\n\nexport interface OptimisticPatchParams<T> {\n readonly patch?: (\n item: T,\n patch: OptimisticPatch<T>,\n ) => Partial<T> | undefined;\n readonly selector: (item: T, patch: OptimisticPatch<T>) => boolean;\n readonly actionType: OptimisticPatchActionType;\n readonly patchedItems: Map<string, T>;\n readonly originalItems: Map<string, T>;\n readonly originalTotal: number;\n readonly keepPosition?: boolean;\n readonly queryNames: string[];\n readonly queryCache: QueryCache;\n readonly patches: IObservableArray<OptimisticPatch<T>>;\n readonly move?: ActionMove<T>;\n readonly collectionSnapshot?: { [key: string]: string | number | undefined };\n readonly afterItemKey?: string;\n}\n\nexport class OptimisticPatch<T> {\n readonly patch;\n readonly selector;\n readonly actionType;\n readonly patchedItems;\n readonly originalItems;\n readonly originalTotal;\n readonly keepPosition;\n readonly queryNames;\n readonly queryCache;\n readonly patches;\n readonly move;\n readonly createdAt = Date.now();\n readonly collectionSnapshot;\n readonly afterItemKey;\n\n isStale: boolean = false;\n\n readonly events = new EventEmitter() as TypedEmitter<\n OptimisticPatchEvents<T>\n >;\n\n constructor(params: OptimisticPatchParams<T>) {\n this.patch = (item: T) => params.patch?.(item, this);\n this.selector = (item: T) => params.selector(item, this);\n this.actionType = params.actionType;\n this.keepPosition = params.keepPosition;\n this.queryNames = params.queryNames;\n this.queryCache = params.queryCache;\n this.patches = params.patches;\n this.move = params.move;\n this.collectionSnapshot = params.collectionSnapshot;\n this.afterItemKey = params.afterItemKey;\n\n this.patchedItems = observable.map<string, T>(params.patchedItems, {\n deep: false,\n });\n\n this.originalItems = observable.map<string, T>(params.originalItems, {\n deep: false,\n });\n\n this.originalTotal = params.originalTotal;\n\n makeObservable(this, {\n patchedItemsEntries: computed,\n isStale: observable.ref,\n onEventuallyUpdated: action,\n });\n }\n\n get patchedItemsEntries() {\n return Array.from(this.patchedItems.entries());\n }\n\n onEventuallyUpdated = () => {\n const { events, queryCache, queryNames, patches } = this;\n this.isStale = true;\n if (!events.listeners('scheduleRemoval').length) {\n patches.remove(this);\n queryNames.forEach((queryName) => {\n queryCache\n .findAll({ queryKey: [queryName] })\n .forEach((q) => q.invalidate());\n });\n } else {\n events.emit('scheduleRemoval', this);\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,6 +6,7 @@ exports.ImportState = void 0;
|
|
|
6
6
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
7
|
var _mobx = require("mobx");
|
|
8
8
|
var _model = require("../../model");
|
|
9
|
+
var _ConditionalModalState = require("../ConditionalModalState");
|
|
9
10
|
var _parseCsv = require("./parseCsv");
|
|
10
11
|
var _set = _interopRequireDefault(require("lodash/set"));
|
|
11
12
|
const DEFAULT_BATCH_SIZE = 100;
|
|
@@ -36,6 +37,7 @@ class ImportState {
|
|
|
36
37
|
(0, _defineProperty2.default)(this, "errorHandler", void 0);
|
|
37
38
|
(0, _defineProperty2.default)(this, "showToast", void 0);
|
|
38
39
|
(0, _defineProperty2.default)(this, "batchSize", void 0);
|
|
40
|
+
(0, _defineProperty2.default)(this, "discardChangesModal", new _ConditionalModalState.ConditionalModalState());
|
|
39
41
|
(0, _defineProperty2.default)(this, "currentStep", 'upload');
|
|
40
42
|
(0, _defineProperty2.default)(this, "importStatus", {
|
|
41
43
|
..._model.queryStatus.idle
|
|
@@ -81,6 +83,7 @@ class ImportState {
|
|
|
81
83
|
isRestoring: _mobx.observable.ref,
|
|
82
84
|
hasParsedRows: _mobx.computed,
|
|
83
85
|
hasMappings: _mobx.computed,
|
|
86
|
+
selectedFieldIds: _mobx.computed,
|
|
84
87
|
mappedRows: _mobx.computed,
|
|
85
88
|
onUploadContinue: _mobx.action.bound,
|
|
86
89
|
goToUpload: _mobx.action.bound,
|
|
@@ -100,6 +103,9 @@ class ImportState {
|
|
|
100
103
|
get hasMappings() {
|
|
101
104
|
return Object.values(this.mappingByHeader).some(value => value != null);
|
|
102
105
|
}
|
|
106
|
+
get selectedFieldIds() {
|
|
107
|
+
return new Set(Object.values(this.mappingByHeader).filter(v => v != null));
|
|
108
|
+
}
|
|
103
109
|
get mappedRows() {
|
|
104
110
|
return toMappedRows(this.csvRows, this.csvHeaders, this.mappingByHeader);
|
|
105
111
|
}
|
|
@@ -163,6 +169,24 @@ class ImportState {
|
|
|
163
169
|
goToUpload() {
|
|
164
170
|
this.currentStep = 'upload';
|
|
165
171
|
}
|
|
172
|
+
async discardAndGoBack() {
|
|
173
|
+
this.discardChangesModal.open('goBack');
|
|
174
|
+
const {
|
|
175
|
+
result
|
|
176
|
+
} = await this.discardChangesModal.modal.promise();
|
|
177
|
+
if (result === 'confirmed') {
|
|
178
|
+
this.goToUpload();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async discardAndClose() {
|
|
182
|
+
this.discardChangesModal.open('close');
|
|
183
|
+
const {
|
|
184
|
+
result
|
|
185
|
+
} = await this.discardChangesModal.modal.promise();
|
|
186
|
+
if (result === 'confirmed') {
|
|
187
|
+
this.close();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
166
190
|
onUploadContinue() {
|
|
167
191
|
if (this.hasParsedRows) {
|
|
168
192
|
this.currentStep = 'configuration';
|
|
@@ -187,10 +211,7 @@ class ImportState {
|
|
|
187
211
|
this.csvHeaders = parsedCsv.headers;
|
|
188
212
|
this.csvRows = parsedCsv.rows;
|
|
189
213
|
this.mappingByHeader = this.getDefaultMapping(parsedCsv.headers);
|
|
190
|
-
this.currentStep =
|
|
191
|
-
if (parsedCsv.rows.length === 0) {
|
|
192
|
-
this.parseError = this.translate('cairo.import.noRowsFound');
|
|
193
|
-
}
|
|
214
|
+
this.currentStep = 'configuration';
|
|
194
215
|
}
|
|
195
216
|
async onFileSelected(file) {
|
|
196
217
|
if (file == null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_mobx","require","_model","_parseCsv","_set","_interopRequireDefault","DEFAULT_BATCH_SIZE","normalize","value","trim","toLowerCase","toMappedRows","rows","headers","mappingByHeader","map","row","mapped","forEach","header","index","mappedField","set","ImportState","constructor","props","_defineProperty2","default","queryStatus","idle","succeeded","failed","errors","fields","bulkUploadItems","backup","collection","importModalState","translate","errorHandler","showToast","batchSize","makeObservable","currentStep","observable","ref","importStatus","parseError","fileName","csvHeaders","csvRows","processedCount","totalCount","result","isBackingUp","isRestoring","hasParsedRows","computed","hasMappings","mappedRows","onUploadContinue","action","bound","goToUpload","setMapping","close","onFileSelected","startImport","reset","init","undefined","length","Object","values","some","_this$_abortControlle","_abortController","abort","restoreFn","_cancelled","_this$_abortControlle2","_restoreBackup","clearResultAndMoveToStart","force","restoreController","AbortController","signal","error","console","runInAction","getDefaultMapping","mapping","field","id","normalizedHeader","matched","find","applyParsedCsv","parsedCsv","file","content","text","parseCsv","message","name","e","fieldId","_uploadBatches","batches","processedRows","batch","batchResult","Math","min","_runBackup","restore","_createRowsBatches","reduce","acc","push","backupFailed","promise","loading","success","data","exports"],"sources":["../../../../src/state/ImportState/ImportState.ts"],"sourcesContent":["import {\n action,\n computed,\n makeObservable,\n observable,\n runInAction,\n} from 'mobx';\nimport {\n queryStatus,\n ShowToast,\n TaskStatus,\n PatternsErrorHandler,\n} from '../../model';\nimport { Translate } from '../../services';\nimport { ModalState } from '../ModalState';\nimport { CreateExportAsyncJobRequest } from '@wix/bex-utils/@wix/ambassador-fedinfra-exportservice-v1-export-async-job/types';\nimport { ParseCsvResult, parseCsv } from './parseCsv';\nimport set from 'lodash/set';\n\nexport interface ImportCollection {\n clearResultAndMoveToStart(params?: { force?: boolean }): void;\n}\n\nexport interface BulkUploadError {\n rowIndex: number;\n message?: string;\n code?: string;\n}\n\nexport interface BulkUploadResults {\n succeeded: number;\n failed: number;\n errors: BulkUploadError[];\n insertedIds?: string[];\n}\n\nexport type BulkUploadItemsFn = (\n items: Record<string, unknown>[],\n) => Promise<BulkUploadResults>;\n\nexport interface BackupResult {\n restore(signal: AbortSignal): Promise<void>;\n}\n\nexport type BackupFn = (signal: AbortSignal) => Promise<BackupResult | void>;\n\nexport type ImportField = NonNullable<\n CreateExportAsyncJobRequest['fields']\n>[number];\n\nexport interface ImportStateProps {\n fields: CreateExportAsyncJobRequest['fields'];\n bulkUploadItems: BulkUploadItemsFn;\n backup?: BackupFn;\n collection: ImportCollection;\n importModalState: ModalState;\n translate: Translate;\n errorHandler: PatternsErrorHandler;\n showToast?: ShowToast;\n batchSize?: number;\n}\n\nexport type ImportStep = 'upload' | 'configuration' | 'progress';\n\nconst DEFAULT_BATCH_SIZE = 100;\n\nfunction normalize(value: string) {\n return value.trim().toLowerCase();\n}\n\nfunction toMappedRows(\n rows: string[][],\n headers: string[],\n mappingByHeader: Record<string, string | null | undefined>,\n) {\n return rows.map((row) => {\n const mapped: Record<string, unknown> = {};\n\n headers.forEach((header, index) => {\n const mappedField = mappingByHeader[header];\n if (mappedField == null) {\n return;\n }\n\n set(mapped, mappedField, row[index] ?? '');\n });\n\n return mapped;\n });\n}\n\nexport class ImportState {\n readonly fields: ImportField[];\n readonly bulkUploadItems: BulkUploadItemsFn;\n readonly backup?: BackupFn;\n readonly collection: ImportCollection;\n readonly importModalState: ModalState;\n readonly translate: Translate;\n readonly errorHandler: PatternsErrorHandler;\n readonly showToast?: ShowToast;\n readonly batchSize: number;\n\n currentStep: ImportStep = 'upload';\n importStatus: TaskStatus<BulkUploadResults, unknown> = {\n ...queryStatus.idle,\n };\n parseError: string | null = null;\n fileName = '';\n csvHeaders: string[] = [];\n csvRows: string[][] = [];\n mappingByHeader: Record<string, string | null> = {};\n processedCount = 0;\n totalCount = 0;\n result: BulkUploadResults = {\n succeeded: 0,\n failed: 0,\n errors: [],\n };\n isBackingUp = false;\n isRestoring = false;\n private restoreFn: ((signal: AbortSignal) => Promise<void>) | null = null;\n private _cancelled = false;\n private _abortController: AbortController | null = null;\n\n constructor(props: ImportStateProps) {\n this.fields = (props.fields ?? []) as ImportField[];\n this.bulkUploadItems = props.bulkUploadItems;\n this.backup = props.backup;\n this.collection = props.collection;\n this.importModalState = props.importModalState;\n this.translate = props.translate;\n this.errorHandler = props.errorHandler;\n this.showToast = props.showToast;\n this.batchSize = props.batchSize ?? DEFAULT_BATCH_SIZE;\n\n makeObservable(this, {\n currentStep: observable.ref,\n importStatus: observable.ref,\n parseError: observable.ref,\n fileName: observable.ref,\n csvHeaders: observable.ref,\n csvRows: observable.ref,\n mappingByHeader: observable.ref,\n processedCount: observable.ref,\n totalCount: observable.ref,\n result: observable.ref,\n isBackingUp: observable.ref,\n isRestoring: observable.ref,\n hasParsedRows: computed,\n hasMappings: computed,\n mappedRows: computed,\n onUploadContinue: action.bound,\n goToUpload: action.bound,\n setMapping: action.bound,\n close: action.bound,\n onFileSelected: action.bound,\n startImport: action.bound,\n reset: action.bound,\n });\n }\n\n init() {\n return () => undefined;\n }\n\n get hasParsedRows() {\n return this.csvHeaders.length > 0 && this.csvRows.length > 0;\n }\n\n get hasMappings() {\n return Object.values(this.mappingByHeader).some((value) => value != null);\n }\n\n get mappedRows() {\n return toMappedRows(this.csvRows, this.csvHeaders, this.mappingByHeader);\n }\n\n reset() {\n this._abortController?.abort();\n this._abortController = null;\n this.currentStep = 'upload';\n this.importStatus = {\n ...queryStatus.idle,\n };\n this.parseError = null;\n this.fileName = '';\n this.csvHeaders = [];\n this.csvRows = [];\n this.mappingByHeader = {};\n this.processedCount = 0;\n this.totalCount = 0;\n this.result = {\n succeeded: 0,\n failed: 0,\n errors: [],\n };\n this.isBackingUp = false;\n this.isRestoring = false;\n this.restoreFn = null;\n this._cancelled = false;\n }\n\n async close() {\n if (this.currentStep === 'progress') {\n this._cancelled = true;\n this._abortController?.abort();\n\n if (!this.isBackingUp) {\n await this._restoreBackup();\n }\n\n this.collection.clearResultAndMoveToStart({\n force: true,\n });\n }\n\n this.importModalState.close();\n }\n\n private async _restoreBackup() {\n const restoreFn = this.restoreFn;\n if (!restoreFn) {\n return;\n }\n\n const restoreController = new AbortController();\n this._abortController = restoreController;\n\n this.isRestoring = true;\n try {\n await restoreFn(restoreController.signal);\n } catch (error) {\n console.error('Restore failed', error);\n }\n runInAction(() => {\n this.isRestoring = false;\n this.restoreFn = null;\n });\n }\n\n goToUpload() {\n this.currentStep = 'upload';\n }\n\n onUploadContinue() {\n if (this.hasParsedRows) {\n this.currentStep = 'configuration';\n }\n }\n\n private getDefaultMapping(headers: string[]) {\n const mapping: Record<string, string | null> = {};\n const fields = this.fields.map((field) => ({\n id: field.id ?? '',\n header: field.header ?? '',\n }));\n\n headers.forEach((header) => {\n const normalizedHeader = normalize(header);\n const matched = fields.find(\n (field) =>\n normalize(field.id) === normalizedHeader ||\n normalize(field.header) === normalizedHeader,\n );\n\n mapping[header] = matched?.id || null;\n });\n\n return mapping;\n }\n\n private applyParsedCsv(fileName: string, parsedCsv: ParseCsvResult) {\n this.fileName = fileName;\n this.parseError = null;\n this.csvHeaders = parsedCsv.headers;\n this.csvRows = parsedCsv.rows;\n this.mappingByHeader = this.getDefaultMapping(parsedCsv.headers);\n this.currentStep = parsedCsv.rows.length > 0 ? 'configuration' : 'upload';\n\n if (parsedCsv.rows.length === 0) {\n this.parseError = this.translate('cairo.import.noRowsFound');\n }\n }\n\n async onFileSelected(file: File | null) {\n if (file == null) {\n return;\n }\n\n try {\n const content = await file.text();\n const parsedCsv = parseCsv(content);\n\n if ('message' in parsedCsv) {\n runInAction(() => {\n this.parseError = parsedCsv.message;\n this.fileName = file.name;\n this.csvHeaders = [];\n this.csvRows = [];\n this.mappingByHeader = {};\n this.currentStep = 'upload';\n });\n return;\n }\n\n runInAction(() => {\n this.applyParsedCsv(file.name, parsedCsv);\n });\n } catch (e) {\n console.error(e);\n runInAction(() => {\n this.parseError = this.translate('cairo.import.parseFailed');\n this.currentStep = 'upload';\n });\n }\n }\n\n setMapping(header: string, fieldId: string | null) {\n this.mappingByHeader = {\n ...this.mappingByHeader,\n [header]: fieldId,\n };\n }\n\n private async _uploadBatches(batches: Record<string, unknown>[][]) {\n let processedRows = 0;\n\n for (const batch of batches) {\n if (this._cancelled) {\n break;\n }\n\n try {\n const batchResult = await this.bulkUploadItems(batch);\n\n this.result = {\n succeeded: this.result.succeeded + batchResult.succeeded,\n failed: this.result.failed + batchResult.failed,\n errors: [...this.result.errors, ...batchResult.errors],\n };\n } catch (error) {\n this.result = {\n succeeded: this.result.succeeded,\n failed: this.result.failed + batch.length,\n errors: this.result.errors,\n };\n\n break;\n }\n\n processedRows += batch.length;\n\n runInAction(() => {\n this.processedCount = Math.min(processedRows, this.totalCount);\n });\n }\n\n return this.result;\n }\n\n private async _runBackup(): Promise<boolean> {\n const backup = this.backup;\n if (!backup) {\n return false;\n }\n\n try {\n const result = await backup(this._abortController!.signal);\n if (this._cancelled) {\n return true;\n }\n if (result?.restore) {\n this.restoreFn = result.restore;\n }\n } catch (error) {\n if (this._cancelled) {\n return true;\n }\n runInAction(() => {\n this.isBackingUp = false;\n this.importStatus = {\n ...queryStatus.error,\n error,\n };\n });\n return true;\n }\n\n runInAction(() => {\n this.isBackingUp = false;\n });\n return false;\n }\n\n private _createRowsBatches(rows: Record<string, unknown>[]) {\n return rows.reduce<Record<string, unknown>[][]>((acc, row, index) => {\n if (index % this.batchSize === 0) {\n acc.push([]);\n }\n acc[acc.length - 1].push(row);\n return acc;\n }, []);\n }\n\n async startImport() {\n if (!this.hasMappings) {\n return;\n }\n\n this._cancelled = false;\n this._abortController = new AbortController();\n\n const rows = this.mappedRows;\n const totalCount = rows.length;\n const batches = this._createRowsBatches(rows);\n\n runInAction(() => {\n this.currentStep = 'progress';\n this.totalCount = totalCount;\n this.processedCount = 0;\n this.isBackingUp = !!this.backup;\n });\n\n const backupFailed = await this._runBackup();\n if (backupFailed) {\n return;\n }\n\n const promise = this._uploadBatches(batches);\n\n this.importStatus = {\n ...queryStatus.loading,\n promise,\n };\n\n try {\n await promise;\n runInAction(() => {\n if (this._cancelled) {\n return;\n }\n\n this.importStatus = {\n ...queryStatus.success,\n data: this.result,\n };\n\n if (this.result.failed === 0) {\n this.importModalState.close();\n this.collection.clearResultAndMoveToStart({ force: true });\n }\n });\n } catch (error) {\n runInAction(() => {\n this.importStatus = {\n ...queryStatus.error,\n error,\n };\n });\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_mobx","require","_model","_ConditionalModalState","_parseCsv","_set","_interopRequireDefault","DEFAULT_BATCH_SIZE","normalize","value","trim","toLowerCase","toMappedRows","rows","headers","mappingByHeader","map","row","mapped","forEach","header","index","mappedField","set","ImportState","constructor","props","_defineProperty2","default","ConditionalModalState","queryStatus","idle","succeeded","failed","errors","fields","bulkUploadItems","backup","collection","importModalState","translate","errorHandler","showToast","batchSize","makeObservable","currentStep","observable","ref","importStatus","parseError","fileName","csvHeaders","csvRows","processedCount","totalCount","result","isBackingUp","isRestoring","hasParsedRows","computed","hasMappings","selectedFieldIds","mappedRows","onUploadContinue","action","bound","goToUpload","setMapping","close","onFileSelected","startImport","reset","init","undefined","length","Object","values","some","Set","filter","v","_this$_abortControlle","_abortController","abort","restoreFn","_cancelled","_this$_abortControlle2","_restoreBackup","clearResultAndMoveToStart","force","restoreController","AbortController","signal","error","console","runInAction","discardAndGoBack","discardChangesModal","open","modal","promise","discardAndClose","getDefaultMapping","mapping","field","id","normalizedHeader","matched","find","applyParsedCsv","parsedCsv","file","content","text","parseCsv","message","name","e","fieldId","_uploadBatches","batches","processedRows","batch","batchResult","Math","min","_runBackup","restore","_createRowsBatches","reduce","acc","push","backupFailed","loading","success","data","exports"],"sources":["../../../../src/state/ImportState/ImportState.ts"],"sourcesContent":["import {\n action,\n computed,\n makeObservable,\n observable,\n runInAction,\n} from 'mobx';\nimport {\n queryStatus,\n ShowToast,\n TaskStatus,\n PatternsErrorHandler,\n} from '../../model';\nimport { Translate } from '../../services';\nimport { ModalState } from '../ModalState';\nimport { ConditionalModalState } from '../ConditionalModalState';\nimport { CreateExportAsyncJobRequest } from '@wix/bex-utils/@wix/ambassador-fedinfra-exportservice-v1-export-async-job/types';\nimport { ParseCsvResult, parseCsv } from './parseCsv';\nimport set from 'lodash/set';\n\nexport interface ImportCollection {\n clearResultAndMoveToStart(params?: { force?: boolean }): void;\n}\n\nexport interface BulkUploadError {\n rowIndex: number;\n message?: string;\n code?: string;\n}\n\nexport interface BulkUploadResults {\n succeeded: number;\n failed: number;\n errors: BulkUploadError[];\n insertedIds?: string[];\n}\n\nexport type BulkUploadItemsFn = (\n items: Record<string, unknown>[],\n) => Promise<BulkUploadResults>;\n\nexport interface BackupResult {\n restore(signal: AbortSignal): Promise<void>;\n}\n\nexport type BackupFn = (signal: AbortSignal) => Promise<BackupResult | void>;\n\nexport type ImportField = NonNullable<\n CreateExportAsyncJobRequest['fields']\n>[number];\n\nexport interface ImportStateProps {\n fields: CreateExportAsyncJobRequest['fields'];\n bulkUploadItems: BulkUploadItemsFn;\n backup?: BackupFn;\n collection: ImportCollection;\n importModalState: ModalState;\n translate: Translate;\n errorHandler: PatternsErrorHandler;\n showToast?: ShowToast;\n batchSize?: number;\n}\n\nexport type ImportStep = 'upload' | 'configuration' | 'progress';\n\nconst DEFAULT_BATCH_SIZE = 100;\n\nfunction normalize(value: string) {\n return value.trim().toLowerCase();\n}\n\nfunction toMappedRows(\n rows: string[][],\n headers: string[],\n mappingByHeader: Record<string, string | null | undefined>,\n) {\n return rows.map((row) => {\n const mapped: Record<string, unknown> = {};\n\n headers.forEach((header, index) => {\n const mappedField = mappingByHeader[header];\n if (mappedField == null) {\n return;\n }\n\n set(mapped, mappedField, row[index] ?? '');\n });\n\n return mapped;\n });\n}\n\nexport class ImportState {\n readonly fields: ImportField[];\n readonly bulkUploadItems: BulkUploadItemsFn;\n readonly backup?: BackupFn;\n readonly collection: ImportCollection;\n readonly importModalState: ModalState;\n readonly translate: Translate;\n readonly errorHandler: PatternsErrorHandler;\n readonly showToast?: ShowToast;\n readonly batchSize: number;\n readonly discardChangesModal = new ConditionalModalState<'goBack' | 'close'>();\n\n currentStep: ImportStep = 'upload';\n importStatus: TaskStatus<BulkUploadResults, unknown> = {\n ...queryStatus.idle,\n };\n parseError: string | null = null;\n fileName = '';\n csvHeaders: string[] = [];\n csvRows: string[][] = [];\n mappingByHeader: Record<string, string | null> = {};\n processedCount = 0;\n totalCount = 0;\n result: BulkUploadResults = {\n succeeded: 0,\n failed: 0,\n errors: [],\n };\n isBackingUp = false;\n isRestoring = false;\n private restoreFn: ((signal: AbortSignal) => Promise<void>) | null = null;\n private _cancelled = false;\n private _abortController: AbortController | null = null;\n\n constructor(props: ImportStateProps) {\n this.fields = (props.fields ?? []) as ImportField[];\n this.bulkUploadItems = props.bulkUploadItems;\n this.backup = props.backup;\n this.collection = props.collection;\n this.importModalState = props.importModalState;\n this.translate = props.translate;\n this.errorHandler = props.errorHandler;\n this.showToast = props.showToast;\n this.batchSize = props.batchSize ?? DEFAULT_BATCH_SIZE;\n\n makeObservable(this, {\n currentStep: observable.ref,\n importStatus: observable.ref,\n parseError: observable.ref,\n fileName: observable.ref,\n csvHeaders: observable.ref,\n csvRows: observable.ref,\n mappingByHeader: observable.ref,\n processedCount: observable.ref,\n totalCount: observable.ref,\n result: observable.ref,\n isBackingUp: observable.ref,\n isRestoring: observable.ref,\n hasParsedRows: computed,\n hasMappings: computed,\n selectedFieldIds: computed,\n mappedRows: computed,\n onUploadContinue: action.bound,\n goToUpload: action.bound,\n setMapping: action.bound,\n close: action.bound,\n onFileSelected: action.bound,\n startImport: action.bound,\n reset: action.bound,\n });\n }\n\n init() {\n return () => undefined;\n }\n\n get hasParsedRows() {\n return this.csvHeaders.length > 0 && this.csvRows.length > 0;\n }\n\n get hasMappings() {\n return Object.values(this.mappingByHeader).some((value) => value != null);\n }\n\n get selectedFieldIds(): Set<string> {\n return new Set(\n Object.values(this.mappingByHeader).filter(\n (v): v is string => v != null,\n ),\n );\n }\n\n get mappedRows() {\n return toMappedRows(this.csvRows, this.csvHeaders, this.mappingByHeader);\n }\n\n reset() {\n this._abortController?.abort();\n this._abortController = null;\n this.currentStep = 'upload';\n this.importStatus = {\n ...queryStatus.idle,\n };\n this.parseError = null;\n this.fileName = '';\n this.csvHeaders = [];\n this.csvRows = [];\n this.mappingByHeader = {};\n this.processedCount = 0;\n this.totalCount = 0;\n this.result = {\n succeeded: 0,\n failed: 0,\n errors: [],\n };\n this.isBackingUp = false;\n this.isRestoring = false;\n this.restoreFn = null;\n this._cancelled = false;\n }\n\n async close() {\n if (this.currentStep === 'progress') {\n this._cancelled = true;\n this._abortController?.abort();\n\n if (!this.isBackingUp) {\n await this._restoreBackup();\n }\n\n this.collection.clearResultAndMoveToStart({\n force: true,\n });\n }\n\n this.importModalState.close();\n }\n\n private async _restoreBackup() {\n const restoreFn = this.restoreFn;\n if (!restoreFn) {\n return;\n }\n\n const restoreController = new AbortController();\n this._abortController = restoreController;\n\n this.isRestoring = true;\n try {\n await restoreFn(restoreController.signal);\n } catch (error) {\n console.error('Restore failed', error);\n }\n runInAction(() => {\n this.isRestoring = false;\n this.restoreFn = null;\n });\n }\n\n goToUpload() {\n this.currentStep = 'upload';\n }\n\n async discardAndGoBack() {\n this.discardChangesModal.open('goBack');\n const { result } = await this.discardChangesModal.modal.promise();\n if (result === 'confirmed') {\n this.goToUpload();\n }\n }\n\n async discardAndClose() {\n this.discardChangesModal.open('close');\n const { result } = await this.discardChangesModal.modal.promise();\n if (result === 'confirmed') {\n this.close();\n }\n }\n\n onUploadContinue() {\n if (this.hasParsedRows) {\n this.currentStep = 'configuration';\n }\n }\n\n private getDefaultMapping(headers: string[]) {\n const mapping: Record<string, string | null> = {};\n const fields = this.fields.map((field) => ({\n id: field.id ?? '',\n header: field.header ?? '',\n }));\n\n headers.forEach((header) => {\n const normalizedHeader = normalize(header);\n const matched = fields.find(\n (field) =>\n normalize(field.id) === normalizedHeader ||\n normalize(field.header) === normalizedHeader,\n );\n\n mapping[header] = matched?.id || null;\n });\n\n return mapping;\n }\n\n private applyParsedCsv(fileName: string, parsedCsv: ParseCsvResult) {\n this.fileName = fileName;\n this.parseError = null;\n this.csvHeaders = parsedCsv.headers;\n this.csvRows = parsedCsv.rows;\n this.mappingByHeader = this.getDefaultMapping(parsedCsv.headers);\n this.currentStep = 'configuration';\n }\n\n async onFileSelected(file: File | null) {\n if (file == null) {\n return;\n }\n\n try {\n const content = await file.text();\n const parsedCsv = parseCsv(content);\n\n if ('message' in parsedCsv) {\n runInAction(() => {\n this.parseError = parsedCsv.message;\n this.fileName = file.name;\n this.csvHeaders = [];\n this.csvRows = [];\n this.mappingByHeader = {};\n this.currentStep = 'upload';\n });\n return;\n }\n\n runInAction(() => {\n this.applyParsedCsv(file.name, parsedCsv);\n });\n } catch (e) {\n console.error(e);\n runInAction(() => {\n this.parseError = this.translate('cairo.import.parseFailed');\n this.currentStep = 'upload';\n });\n }\n }\n\n setMapping(header: string, fieldId: string | null) {\n this.mappingByHeader = {\n ...this.mappingByHeader,\n [header]: fieldId,\n };\n }\n\n private async _uploadBatches(batches: Record<string, unknown>[][]) {\n let processedRows = 0;\n\n for (const batch of batches) {\n if (this._cancelled) {\n break;\n }\n\n try {\n const batchResult = await this.bulkUploadItems(batch);\n\n this.result = {\n succeeded: this.result.succeeded + batchResult.succeeded,\n failed: this.result.failed + batchResult.failed,\n errors: [...this.result.errors, ...batchResult.errors],\n };\n } catch (error) {\n this.result = {\n succeeded: this.result.succeeded,\n failed: this.result.failed + batch.length,\n errors: this.result.errors,\n };\n\n break;\n }\n\n processedRows += batch.length;\n\n runInAction(() => {\n this.processedCount = Math.min(processedRows, this.totalCount);\n });\n }\n\n return this.result;\n }\n\n private async _runBackup(): Promise<boolean> {\n const backup = this.backup;\n if (!backup) {\n return false;\n }\n\n try {\n const result = await backup(this._abortController!.signal);\n if (this._cancelled) {\n return true;\n }\n if (result?.restore) {\n this.restoreFn = result.restore;\n }\n } catch (error) {\n if (this._cancelled) {\n return true;\n }\n runInAction(() => {\n this.isBackingUp = false;\n this.importStatus = {\n ...queryStatus.error,\n error,\n };\n });\n return true;\n }\n\n runInAction(() => {\n this.isBackingUp = false;\n });\n return false;\n }\n\n private _createRowsBatches(rows: Record<string, unknown>[]) {\n return rows.reduce<Record<string, unknown>[][]>((acc, row, index) => {\n if (index % this.batchSize === 0) {\n acc.push([]);\n }\n acc[acc.length - 1].push(row);\n return acc;\n }, []);\n }\n\n async startImport() {\n if (!this.hasMappings) {\n return;\n }\n\n this._cancelled = false;\n this._abortController = new AbortController();\n\n const rows = this.mappedRows;\n const totalCount = rows.length;\n const batches = this._createRowsBatches(rows);\n\n runInAction(() => {\n this.currentStep = 'progress';\n this.totalCount = totalCount;\n this.processedCount = 0;\n this.isBackingUp = !!this.backup;\n });\n\n const backupFailed = await this._runBackup();\n if (backupFailed) {\n return;\n }\n\n const promise = this._uploadBatches(batches);\n\n this.importStatus = {\n ...queryStatus.loading,\n promise,\n };\n\n try {\n await promise;\n runInAction(() => {\n if (this._cancelled) {\n return;\n }\n\n this.importStatus = {\n ...queryStatus.success,\n data: this.result,\n };\n\n if (this.result.failed === 0) {\n this.importModalState.close();\n this.collection.clearResultAndMoveToStart({ force: true });\n }\n });\n } catch (error) {\n runInAction(() => {\n this.importStatus = {\n ...queryStatus.error,\n error,\n };\n });\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAOA,IAAAC,MAAA,GAAAD,OAAA;AAQA,IAAAE,sBAAA,GAAAF,OAAA;AAEA,IAAAG,SAAA,GAAAH,OAAA;AACA,IAAAI,IAAA,GAAAC,sBAAA,CAAAL,OAAA;AA+CA,MAAMM,kBAAkB,GAAG,GAAG;AAE9B,SAASC,SAASA,CAACC,KAAa,EAAE;EAChC,OAAOA,KAAK,CAACC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;AACnC;AAEA,SAASC,YAAYA,CACnBC,IAAgB,EAChBC,OAAiB,EACjBC,eAA0D,EAC1D;EACA,OAAOF,IAAI,CAACG,GAAG,CAAEC,GAAG,IAAK;IACvB,MAAMC,MAA+B,GAAG,CAAC,CAAC;IAE1CJ,OAAO,CAACK,OAAO,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;MACjC,MAAMC,WAAW,GAAGP,eAAe,CAACK,MAAM,CAAC;MAC3C,IAAIE,WAAW,IAAI,IAAI,EAAE;QACvB;MACF;MAEA,IAAAC,YAAG,EAACL,MAAM,EAAEI,WAAW,EAAEL,GAAG,CAACI,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC,CAAC;IAEF,OAAOH,MAAM;EACf,CAAC,CAAC;AACJ;AAEO,MAAMM,WAAW,CAAC;EAkCvBC,WAAWA,CAACC,KAAuB,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,+BAxBN,IAAIC,4CAAqB,CAAqB,CAAC;IAAA,IAAAF,gBAAA,CAAAC,OAAA,uBAEpD,QAAQ;IAAA,IAAAD,gBAAA,CAAAC,OAAA,wBACqB;MACrD,GAAGE,kBAAW,CAACC;IACjB,CAAC;IAAA,IAAAJ,gBAAA,CAAAC,OAAA,sBAC2B,IAAI;IAAA,IAAAD,gBAAA,CAAAC,OAAA,oBACrB,EAAE;IAAA,IAAAD,gBAAA,CAAAC,OAAA,sBACU,EAAE;IAAA,IAAAD,gBAAA,CAAAC,OAAA,mBACH,EAAE;IAAA,IAAAD,gBAAA,CAAAC,OAAA,2BACyB,CAAC,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,0BAClC,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,sBACL,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,kBACc;MAC1BI,SAAS,EAAE,CAAC;MACZC,MAAM,EAAE,CAAC;MACTC,MAAM,EAAE;IACV,CAAC;IAAA,IAAAP,gBAAA,CAAAC,OAAA,uBACa,KAAK;IAAA,IAAAD,gBAAA,CAAAC,OAAA,uBACL,KAAK;IAAA,IAAAD,gBAAA,CAAAC,OAAA,qBACkD,IAAI;IAAA,IAAAD,gBAAA,CAAAC,OAAA,sBACpD,KAAK;IAAA,IAAAD,gBAAA,CAAAC,OAAA,4BACyB,IAAI;IAGrD,IAAI,CAACO,MAAM,GAAIT,KAAK,CAACS,MAAM,IAAI,EAAoB;IACnD,IAAI,CAACC,eAAe,GAAGV,KAAK,CAACU,eAAe;IAC5C,IAAI,CAACC,MAAM,GAAGX,KAAK,CAACW,MAAM;IAC1B,IAAI,CAACC,UAAU,GAAGZ,KAAK,CAACY,UAAU;IAClC,IAAI,CAACC,gBAAgB,GAAGb,KAAK,CAACa,gBAAgB;IAC9C,IAAI,CAACC,SAAS,GAAGd,KAAK,CAACc,SAAS;IAChC,IAAI,CAACC,YAAY,GAAGf,KAAK,CAACe,YAAY;IACtC,IAAI,CAACC,SAAS,GAAGhB,KAAK,CAACgB,SAAS;IAChC,IAAI,CAACC,SAAS,GAAGjB,KAAK,CAACiB,SAAS,IAAIpC,kBAAkB;IAEtD,IAAAqC,oBAAc,EAAC,IAAI,EAAE;MACnBC,WAAW,EAAEC,gBAAU,CAACC,GAAG;MAC3BC,YAAY,EAAEF,gBAAU,CAACC,GAAG;MAC5BE,UAAU,EAAEH,gBAAU,CAACC,GAAG;MAC1BG,QAAQ,EAAEJ,gBAAU,CAACC,GAAG;MACxBI,UAAU,EAAEL,gBAAU,CAACC,GAAG;MAC1BK,OAAO,EAAEN,gBAAU,CAACC,GAAG;MACvBhC,eAAe,EAAE+B,gBAAU,CAACC,GAAG;MAC/BM,cAAc,EAAEP,gBAAU,CAACC,GAAG;MAC9BO,UAAU,EAAER,gBAAU,CAACC,GAAG;MAC1BQ,MAAM,EAAET,gBAAU,CAACC,GAAG;MACtBS,WAAW,EAAEV,gBAAU,CAACC,GAAG;MAC3BU,WAAW,EAAEX,gBAAU,CAACC,GAAG;MAC3BW,aAAa,EAAEC,cAAQ;MACvBC,WAAW,EAAED,cAAQ;MACrBE,gBAAgB,EAAEF,cAAQ;MAC1BG,UAAU,EAAEH,cAAQ;MACpBI,gBAAgB,EAAEC,YAAM,CAACC,KAAK;MAC9BC,UAAU,EAAEF,YAAM,CAACC,KAAK;MACxBE,UAAU,EAAEH,YAAM,CAACC,KAAK;MACxBG,KAAK,EAAEJ,YAAM,CAACC,KAAK;MACnBI,cAAc,EAAEL,YAAM,CAACC,KAAK;MAC5BK,WAAW,EAAEN,YAAM,CAACC,KAAK;MACzBM,KAAK,EAAEP,YAAM,CAACC;IAChB,CAAC,CAAC;EACJ;EAEAO,IAAIA,CAAA,EAAG;IACL,OAAO,MAAMC,SAAS;EACxB;EAEA,IAAIf,aAAaA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACP,UAAU,CAACuB,MAAM,GAAG,CAAC,IAAI,IAAI,CAACtB,OAAO,CAACsB,MAAM,GAAG,CAAC;EAC9D;EAEA,IAAId,WAAWA,CAAA,EAAG;IAChB,OAAOe,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC7D,eAAe,CAAC,CAAC8D,IAAI,CAAEpE,KAAK,IAAKA,KAAK,IAAI,IAAI,CAAC;EAC3E;EAEA,IAAIoD,gBAAgBA,CAAA,EAAgB;IAClC,OAAO,IAAIiB,GAAG,CACZH,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC7D,eAAe,CAAC,CAACgE,MAAM,CACvCC,CAAC,IAAkBA,CAAC,IAAI,IAC3B,CACF,CAAC;EACH;EAEA,IAAIlB,UAAUA,CAAA,EAAG;IACf,OAAOlD,YAAY,CAAC,IAAI,CAACwC,OAAO,EAAE,IAAI,CAACD,UAAU,EAAE,IAAI,CAACpC,eAAe,CAAC;EAC1E;EAEAwD,KAAKA,CAAA,EAAG;IAAA,IAAAU,qBAAA;IACN,CAAAA,qBAAA,OAAI,CAACC,gBAAgB,aAArBD,qBAAA,CAAuBE,KAAK,CAAC,CAAC;IAC9B,IAAI,CAACD,gBAAgB,GAAG,IAAI;IAC5B,IAAI,CAACrC,WAAW,GAAG,QAAQ;IAC3B,IAAI,CAACG,YAAY,GAAG;MAClB,GAAGlB,kBAAW,CAACC;IACjB,CAAC;IACD,IAAI,CAACkB,UAAU,GAAG,IAAI;IACtB,IAAI,CAACC,QAAQ,GAAG,EAAE;IAClB,IAAI,CAACC,UAAU,GAAG,EAAE;IACpB,IAAI,CAACC,OAAO,GAAG,EAAE;IACjB,IAAI,CAACrC,eAAe,GAAG,CAAC,CAAC;IACzB,IAAI,CAACsC,cAAc,GAAG,CAAC;IACvB,IAAI,CAACC,UAAU,GAAG,CAAC;IACnB,IAAI,CAACC,MAAM,GAAG;MACZvB,SAAS,EAAE,CAAC;MACZC,MAAM,EAAE,CAAC;MACTC,MAAM,EAAE;IACV,CAAC;IACD,IAAI,CAACsB,WAAW,GAAG,KAAK;IACxB,IAAI,CAACC,WAAW,GAAG,KAAK;IACxB,IAAI,CAAC2B,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,UAAU,GAAG,KAAK;EACzB;EAEA,MAAMjB,KAAKA,CAAA,EAAG;IACZ,IAAI,IAAI,CAACvB,WAAW,KAAK,UAAU,EAAE;MAAA,IAAAyC,sBAAA;MACnC,IAAI,CAACD,UAAU,GAAG,IAAI;MACtB,CAAAC,sBAAA,OAAI,CAACJ,gBAAgB,aAArBI,sBAAA,CAAuBH,KAAK,CAAC,CAAC;MAE9B,IAAI,CAAC,IAAI,CAAC3B,WAAW,EAAE;QACrB,MAAM,IAAI,CAAC+B,cAAc,CAAC,CAAC;MAC7B;MAEA,IAAI,CAACjD,UAAU,CAACkD,yBAAyB,CAAC;QACxCC,KAAK,EAAE;MACT,CAAC,CAAC;IACJ;IAEA,IAAI,CAAClD,gBAAgB,CAAC6B,KAAK,CAAC,CAAC;EAC/B;EAEA,MAAcmB,cAAcA,CAAA,EAAG;IAC7B,MAAMH,SAAS,GAAG,IAAI,CAACA,SAAS;IAChC,IAAI,CAACA,SAAS,EAAE;MACd;IACF;IAEA,MAAMM,iBAAiB,GAAG,IAAIC,eAAe,CAAC,CAAC;IAC/C,IAAI,CAACT,gBAAgB,GAAGQ,iBAAiB;IAEzC,IAAI,CAACjC,WAAW,GAAG,IAAI;IACvB,IAAI;MACF,MAAM2B,SAAS,CAACM,iBAAiB,CAACE,MAAM,CAAC;IAC3C,CAAC,CAAC,OAAOC,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,gBAAgB,EAAEA,KAAK,CAAC;IACxC;IACA,IAAAE,iBAAW,EAAC,MAAM;MAChB,IAAI,CAACtC,WAAW,GAAG,KAAK;MACxB,IAAI,CAAC2B,SAAS,GAAG,IAAI;IACvB,CAAC,CAAC;EACJ;EAEAlB,UAAUA,CAAA,EAAG;IACX,IAAI,CAACrB,WAAW,GAAG,QAAQ;EAC7B;EAEA,MAAMmD,gBAAgBA,CAAA,EAAG;IACvB,IAAI,CAACC,mBAAmB,CAACC,IAAI,CAAC,QAAQ,CAAC;IACvC,MAAM;MAAE3C;IAAO,CAAC,GAAG,MAAM,IAAI,CAAC0C,mBAAmB,CAACE,KAAK,CAACC,OAAO,CAAC,CAAC;IACjE,IAAI7C,MAAM,KAAK,WAAW,EAAE;MAC1B,IAAI,CAACW,UAAU,CAAC,CAAC;IACnB;EACF;EAEA,MAAMmC,eAAeA,CAAA,EAAG;IACtB,IAAI,CAACJ,mBAAmB,CAACC,IAAI,CAAC,OAAO,CAAC;IACtC,MAAM;MAAE3C;IAAO,CAAC,GAAG,MAAM,IAAI,CAAC0C,mBAAmB,CAACE,KAAK,CAACC,OAAO,CAAC,CAAC;IACjE,IAAI7C,MAAM,KAAK,WAAW,EAAE;MAC1B,IAAI,CAACa,KAAK,CAAC,CAAC;IACd;EACF;EAEAL,gBAAgBA,CAAA,EAAG;IACjB,IAAI,IAAI,CAACL,aAAa,EAAE;MACtB,IAAI,CAACb,WAAW,GAAG,eAAe;IACpC;EACF;EAEQyD,iBAAiBA,CAACxF,OAAiB,EAAE;IAC3C,MAAMyF,OAAsC,GAAG,CAAC,CAAC;IACjD,MAAMpE,MAAM,GAAG,IAAI,CAACA,MAAM,CAACnB,GAAG,CAAEwF,KAAK,KAAM;MACzCC,EAAE,EAAED,KAAK,CAACC,EAAE,IAAI,EAAE;MAClBrF,MAAM,EAAEoF,KAAK,CAACpF,MAAM,IAAI;IAC1B,CAAC,CAAC,CAAC;IAEHN,OAAO,CAACK,OAAO,CAAEC,MAAM,IAAK;MAC1B,MAAMsF,gBAAgB,GAAGlG,SAAS,CAACY,MAAM,CAAC;MAC1C,MAAMuF,OAAO,GAAGxE,MAAM,CAACyE,IAAI,CACxBJ,KAAK,IACJhG,SAAS,CAACgG,KAAK,CAACC,EAAE,CAAC,KAAKC,gBAAgB,IACxClG,SAAS,CAACgG,KAAK,CAACpF,MAAM,CAAC,KAAKsF,gBAChC,CAAC;MAEDH,OAAO,CAACnF,MAAM,CAAC,GAAG,CAAAuF,OAAO,oBAAPA,OAAO,CAAEF,EAAE,KAAI,IAAI;IACvC,CAAC,CAAC;IAEF,OAAOF,OAAO;EAChB;EAEQM,cAAcA,CAAC3D,QAAgB,EAAE4D,SAAyB,EAAE;IAClE,IAAI,CAAC5D,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACD,UAAU,GAAG,IAAI;IACtB,IAAI,CAACE,UAAU,GAAG2D,SAAS,CAAChG,OAAO;IACnC,IAAI,CAACsC,OAAO,GAAG0D,SAAS,CAACjG,IAAI;IAC7B,IAAI,CAACE,eAAe,GAAG,IAAI,CAACuF,iBAAiB,CAACQ,SAAS,CAAChG,OAAO,CAAC;IAChE,IAAI,CAAC+B,WAAW,GAAG,eAAe;EACpC;EAEA,MAAMwB,cAAcA,CAAC0C,IAAiB,EAAE;IACtC,IAAIA,IAAI,IAAI,IAAI,EAAE;MAChB;IACF;IAEA,IAAI;MACF,MAAMC,OAAO,GAAG,MAAMD,IAAI,CAACE,IAAI,CAAC,CAAC;MACjC,MAAMH,SAAS,GAAG,IAAAI,kBAAQ,EAACF,OAAO,CAAC;MAEnC,IAAI,SAAS,IAAIF,SAAS,EAAE;QAC1B,IAAAf,iBAAW,EAAC,MAAM;UAChB,IAAI,CAAC9C,UAAU,GAAG6D,SAAS,CAACK,OAAO;UACnC,IAAI,CAACjE,QAAQ,GAAG6D,IAAI,CAACK,IAAI;UACzB,IAAI,CAACjE,UAAU,GAAG,EAAE;UACpB,IAAI,CAACC,OAAO,GAAG,EAAE;UACjB,IAAI,CAACrC,eAAe,GAAG,CAAC,CAAC;UACzB,IAAI,CAAC8B,WAAW,GAAG,QAAQ;QAC7B,CAAC,CAAC;QACF;MACF;MAEA,IAAAkD,iBAAW,EAAC,MAAM;QAChB,IAAI,CAACc,cAAc,CAACE,IAAI,CAACK,IAAI,EAAEN,SAAS,CAAC;MAC3C,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOO,CAAC,EAAE;MACVvB,OAAO,CAACD,KAAK,CAACwB,CAAC,CAAC;MAChB,IAAAtB,iBAAW,EAAC,MAAM;QAChB,IAAI,CAAC9C,UAAU,GAAG,IAAI,CAACT,SAAS,CAAC,0BAA0B,CAAC;QAC5D,IAAI,CAACK,WAAW,GAAG,QAAQ;MAC7B,CAAC,CAAC;IACJ;EACF;EAEAsB,UAAUA,CAAC/C,MAAc,EAAEkG,OAAsB,EAAE;IACjD,IAAI,CAACvG,eAAe,GAAG;MACrB,GAAG,IAAI,CAACA,eAAe;MACvB,CAACK,MAAM,GAAGkG;IACZ,CAAC;EACH;EAEA,MAAcC,cAAcA,CAACC,OAAoC,EAAE;IACjE,IAAIC,aAAa,GAAG,CAAC;IAErB,KAAK,MAAMC,KAAK,IAAIF,OAAO,EAAE;MAC3B,IAAI,IAAI,CAACnC,UAAU,EAAE;QACnB;MACF;MAEA,IAAI;QACF,MAAMsC,WAAW,GAAG,MAAM,IAAI,CAACvF,eAAe,CAACsF,KAAK,CAAC;QAErD,IAAI,CAACnE,MAAM,GAAG;UACZvB,SAAS,EAAE,IAAI,CAACuB,MAAM,CAACvB,SAAS,GAAG2F,WAAW,CAAC3F,SAAS;UACxDC,MAAM,EAAE,IAAI,CAACsB,MAAM,CAACtB,MAAM,GAAG0F,WAAW,CAAC1F,MAAM;UAC/CC,MAAM,EAAE,CAAC,GAAG,IAAI,CAACqB,MAAM,CAACrB,MAAM,EAAE,GAAGyF,WAAW,CAACzF,MAAM;QACvD,CAAC;MACH,CAAC,CAAC,OAAO2D,KAAK,EAAE;QACd,IAAI,CAACtC,MAAM,GAAG;UACZvB,SAAS,EAAE,IAAI,CAACuB,MAAM,CAACvB,SAAS;UAChCC,MAAM,EAAE,IAAI,CAACsB,MAAM,CAACtB,MAAM,GAAGyF,KAAK,CAAChD,MAAM;UACzCxC,MAAM,EAAE,IAAI,CAACqB,MAAM,CAACrB;QACtB,CAAC;QAED;MACF;MAEAuF,aAAa,IAAIC,KAAK,CAAChD,MAAM;MAE7B,IAAAqB,iBAAW,EAAC,MAAM;QAChB,IAAI,CAAC1C,cAAc,GAAGuE,IAAI,CAACC,GAAG,CAACJ,aAAa,EAAE,IAAI,CAACnE,UAAU,CAAC;MAChE,CAAC,CAAC;IACJ;IAEA,OAAO,IAAI,CAACC,MAAM;EACpB;EAEA,MAAcuE,UAAUA,CAAA,EAAqB;IAC3C,MAAMzF,MAAM,GAAG,IAAI,CAACA,MAAM;IAC1B,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,KAAK;IACd;IAEA,IAAI;MACF,MAAMkB,MAAM,GAAG,MAAMlB,MAAM,CAAC,IAAI,CAAC6C,gBAAgB,CAAEU,MAAM,CAAC;MAC1D,IAAI,IAAI,CAACP,UAAU,EAAE;QACnB,OAAO,IAAI;MACb;MACA,IAAI9B,MAAM,YAANA,MAAM,CAAEwE,OAAO,EAAE;QACnB,IAAI,CAAC3C,SAAS,GAAG7B,MAAM,CAACwE,OAAO;MACjC;IACF,CAAC,CAAC,OAAOlC,KAAK,EAAE;MACd,IAAI,IAAI,CAACR,UAAU,EAAE;QACnB,OAAO,IAAI;MACb;MACA,IAAAU,iBAAW,EAAC,MAAM;QAChB,IAAI,CAACvC,WAAW,GAAG,KAAK;QACxB,IAAI,CAACR,YAAY,GAAG;UAClB,GAAGlB,kBAAW,CAAC+D,KAAK;UACpBA;QACF,CAAC;MACH,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IAEA,IAAAE,iBAAW,EAAC,MAAM;MAChB,IAAI,CAACvC,WAAW,GAAG,KAAK;IAC1B,CAAC,CAAC;IACF,OAAO,KAAK;EACd;EAEQwE,kBAAkBA,CAACnH,IAA+B,EAAE;IAC1D,OAAOA,IAAI,CAACoH,MAAM,CAA8B,CAACC,GAAG,EAAEjH,GAAG,EAAEI,KAAK,KAAK;MACnE,IAAIA,KAAK,GAAG,IAAI,CAACsB,SAAS,KAAK,CAAC,EAAE;QAChCuF,GAAG,CAACC,IAAI,CAAC,EAAE,CAAC;MACd;MACAD,GAAG,CAACA,GAAG,CAACxD,MAAM,GAAG,CAAC,CAAC,CAACyD,IAAI,CAAClH,GAAG,CAAC;MAC7B,OAAOiH,GAAG;IACZ,CAAC,EAAE,EAAE,CAAC;EACR;EAEA,MAAM5D,WAAWA,CAAA,EAAG;IAClB,IAAI,CAAC,IAAI,CAACV,WAAW,EAAE;MACrB;IACF;IAEA,IAAI,CAACyB,UAAU,GAAG,KAAK;IACvB,IAAI,CAACH,gBAAgB,GAAG,IAAIS,eAAe,CAAC,CAAC;IAE7C,MAAM9E,IAAI,GAAG,IAAI,CAACiD,UAAU;IAC5B,MAAMR,UAAU,GAAGzC,IAAI,CAAC6D,MAAM;IAC9B,MAAM8C,OAAO,GAAG,IAAI,CAACQ,kBAAkB,CAACnH,IAAI,CAAC;IAE7C,IAAAkF,iBAAW,EAAC,MAAM;MAChB,IAAI,CAAClD,WAAW,GAAG,UAAU;MAC7B,IAAI,CAACS,UAAU,GAAGA,UAAU;MAC5B,IAAI,CAACD,cAAc,GAAG,CAAC;MACvB,IAAI,CAACG,WAAW,GAAG,CAAC,CAAC,IAAI,CAACnB,MAAM;IAClC,CAAC,CAAC;IAEF,MAAM+F,YAAY,GAAG,MAAM,IAAI,CAACN,UAAU,CAAC,CAAC;IAC5C,IAAIM,YAAY,EAAE;MAChB;IACF;IAEA,MAAMhC,OAAO,GAAG,IAAI,CAACmB,cAAc,CAACC,OAAO,CAAC;IAE5C,IAAI,CAACxE,YAAY,GAAG;MAClB,GAAGlB,kBAAW,CAACuG,OAAO;MACtBjC;IACF,CAAC;IAED,IAAI;MACF,MAAMA,OAAO;MACb,IAAAL,iBAAW,EAAC,MAAM;QAChB,IAAI,IAAI,CAACV,UAAU,EAAE;UACnB;QACF;QAEA,IAAI,CAACrC,YAAY,GAAG;UAClB,GAAGlB,kBAAW,CAACwG,OAAO;UACtBC,IAAI,EAAE,IAAI,CAAChF;QACb,CAAC;QAED,IAAI,IAAI,CAACA,MAAM,CAACtB,MAAM,KAAK,CAAC,EAAE;UAC5B,IAAI,CAACM,gBAAgB,CAAC6B,KAAK,CAAC,CAAC;UAC7B,IAAI,CAAC9B,UAAU,CAACkD,yBAAyB,CAAC;YAAEC,KAAK,EAAE;UAAK,CAAC,CAAC;QAC5D;MACF,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOI,KAAK,EAAE;MACd,IAAAE,iBAAW,EAAC,MAAM;QAChB,IAAI,CAAC/C,YAAY,GAAG;UAClB,GAAGlB,kBAAW,CAAC+D,KAAK;UACpBA;QACF,CAAC;MACH,CAAC,CAAC;IACJ;EACF;AACF;AAAC2C,OAAA,CAAAhH,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../src/state/OptimisticActions.ts"],"sourcesContent":["import { ToastConfig } from '../model';\nimport { EventuallyUpdated } from './CollectionOptimisticExecutor';\nimport { DeepPartial } from '../types/DeepPartial';\n\nexport interface OptimisticActionBasis {\n /**\n * Determines whether to display an undo toast before calling the server action.\n * @default false\n * @external\n */\n showUndoToast?: boolean;\n /**\n * Determines whether to display a toast after clicking on undo.\n * @default false\n * @external\n */\n showUndoSuccessToast?: boolean;\n /**\n * Callback function triggered when the user clicks on the undo button.\n * @external\n */\n onUndo?: () => void;\n /**\n * Function to generate error toast to show in case the server fails to perform the action.\n * @external\n */\n errorToast?: (\n err: unknown,\n params: { retry: () => void },\n ) => ToastConfig | string;\n /**\n * Callback function triggered when an error occurs.\n * @external\n */\n onError?: (err: unknown) => void;\n /**\n * Callback function to retry the action.\n * @deprecated Use the prop `errorToast={(err, {retry}) => { action:{onClick: () {retry();} }}}` instead.\n */\n onTryAgain?: () => void | Promise<void>;\n /**\n * Toast message or configuration to show on successful action.\n * @external\n */\n successToast?: ToastConfig | string;\n /**\n * Indicates when the server is eventually updated.\n * Possible values:\n * - submit: Server updates immediately after the submission promise resolves.\n * - number: Server updates after a specified timeout (in milliseconds).\n * - Promise: Server updates after a forwarded promise resolves.\n * @default submit\n * @external\n */\n updateServerAfter?: EventuallyUpdated;\n}\n\nexport interface CreateManyParams<T> extends OptimisticActionBasis {\n /**\n * Function to submit the creation operation.\n * @param items - The items to create.\n */\n submit: (items: T[]) => Promise<T[] | null | undefined | void>;\n}\n\nexport interface UpdateManyParams<T, R> extends OptimisticActionBasis {\n /**\n * Function to submit the update operation.\n * @param items - The items to update.\n */\n submit: (items: T[]) => Promise<R>;\n /**\n * Indicates whether to keep the current position of items after the update.\n */\n keepPosition?: boolean;\n\n /**\n * Partial data to patch the items with.\n */\n patch?: DeepPartial<T>;\n}\n\nexport interface UpdateAllParams<R> extends OptimisticActionBasis {\n /**\n * Function to submit the update operation.\n */\n submit: () => Promise<R>;\n /**\n * Indicates whether to keep the current position of items after the update.\n */\n keepPosition?: boolean;\n}\n\nexport interface DeleteManyParams<T, R> extends OptimisticActionBasis {\n /**\n * Function to submit the deletion operation.\n * @param items - The items to delete.\n */\n submit: (items: T[]) => Promise<R>;\n}\n\nexport interface DeleteAllParams<R> extends OptimisticActionBasis {\n /**\n * Function to submit the deletion operation.\n */\n submit: () => Promise<R>;\n}\n\nexport interface OptimisticActions<T> {\n /**\n * Creates a single item in the collection.\n * @param item - The item to create.\n * @param params - Additional parameters for the operation.\n * @external\n */\n createOne(item: T, params: CreateManyParams<T>): void;\n /**\n * Creates multiple items in the collection.\n * @param items - The items to create.\n * @param params - Additional parameters for the operation.\n * @external\n */\n createMany(items: T[], params: CreateManyParams<T>): void;\n\n updateMany<R>(items: T[], params: UpdateManyParams<T, R>): void;\n updateOne<R>(item: T, params: UpdateManyParams<T, R>): void;\n updateAll<R>(\n patchOrFn: (item: T) => Partial<T>,\n params: UpdateAllParams<R>,\n ): void;\n\n deleteMany<R>(items: T[], params: DeleteManyParams<T, R>): void;\n deleteOne<R>(item: T, params: DeleteManyParams<T, R>): void;\n deleteAll<R>(params: UpdateAllParams<R>): void;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../src/state/OptimisticActions.ts"],"sourcesContent":["import { ToastConfig } from '../model';\nimport { EventuallyUpdated } from './CollectionOptimisticExecutor';\nimport { DeepPartial } from '../types/DeepPartial';\n\nexport interface OptimisticActionBasis {\n /**\n * Determines whether to display an undo toast before calling the server action.\n * @default false\n * @external\n */\n showUndoToast?: boolean;\n /**\n * Determines whether to display a toast after clicking on undo.\n * @default false\n * @external\n */\n showUndoSuccessToast?: boolean;\n /**\n * Callback function triggered when the user clicks on the undo button.\n * @external\n */\n onUndo?: () => void;\n /**\n * Function to generate error toast to show in case the server fails to perform the action.\n * @external\n */\n errorToast?: (\n err: unknown,\n params: { retry: () => void },\n ) => ToastConfig | string;\n /**\n * Callback function triggered when an error occurs.\n * @external\n */\n onError?: (err: unknown) => void;\n /**\n * Callback function to retry the action.\n * @deprecated Use the prop `errorToast={(err, {retry}) => { action:{onClick: () {retry();} }}}` instead.\n */\n onTryAgain?: () => void | Promise<void>;\n /**\n * Toast message or configuration to show on successful action.\n * @external\n */\n successToast?: ToastConfig | string;\n /**\n * Indicates when the server is eventually updated.\n * Possible values:\n * - submit: Server updates immediately after the submission promise resolves.\n * - number: Server updates after a specified timeout (in milliseconds).\n * - Promise: Server updates after a forwarded promise resolves.\n * @default submit\n * @external\n */\n updateServerAfter?: EventuallyUpdated;\n}\n\nexport interface CreateManyParams<T> extends OptimisticActionBasis {\n /**\n * Function to submit the creation operation.\n * @param items - The items to create.\n */\n submit: (items: T[]) => Promise<T[] | null | undefined | void>;\n /**\n * The key of the item after which to insert the created items.\n * If not provided, items are inserted at the beginning.\n * @external\n */\n afterItemKey?: string;\n}\n\nexport interface UpdateManyParams<T, R> extends OptimisticActionBasis {\n /**\n * Function to submit the update operation.\n * @param items - The items to update.\n */\n submit: (items: T[]) => Promise<R>;\n /**\n * Indicates whether to keep the current position of items after the update.\n */\n keepPosition?: boolean;\n\n /**\n * Partial data to patch the items with.\n */\n patch?: DeepPartial<T>;\n}\n\nexport interface UpdateAllParams<R> extends OptimisticActionBasis {\n /**\n * Function to submit the update operation.\n */\n submit: () => Promise<R>;\n /**\n * Indicates whether to keep the current position of items after the update.\n */\n keepPosition?: boolean;\n}\n\nexport interface DeleteManyParams<T, R> extends OptimisticActionBasis {\n /**\n * Function to submit the deletion operation.\n * @param items - The items to delete.\n */\n submit: (items: T[]) => Promise<R>;\n}\n\nexport interface DeleteAllParams<R> extends OptimisticActionBasis {\n /**\n * Function to submit the deletion operation.\n */\n submit: () => Promise<R>;\n}\n\nexport interface OptimisticActions<T> {\n /**\n * Creates a single item in the collection.\n * @param item - The item to create.\n * @param params - Additional parameters for the operation.\n * @external\n */\n createOne(item: T, params: CreateManyParams<T>): void;\n /**\n * Creates multiple items in the collection.\n * @param items - The items to create.\n * @param params - Additional parameters for the operation.\n * @external\n */\n createMany(items: T[], params: CreateManyParams<T>): void;\n\n updateMany<R>(items: T[], params: UpdateManyParams<T, R>): void;\n updateOne<R>(item: T, params: UpdateManyParams<T, R>): void;\n updateAll<R>(\n patchOrFn: (item: T) => Partial<T>,\n params: UpdateAllParams<R>,\n ): void;\n\n deleteMany<R>(items: T[], params: DeleteManyParams<T, R>): void;\n deleteOne<R>(item: T, params: DeleteManyParams<T, R>): void;\n deleteAll<R>(params: UpdateAllParams<R>): void;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -66,6 +66,30 @@ function mergePatchedItems(toMerge, {
|
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
|
|
69
|
+
const result = Array.from(pageWithPatchedItemsMap.values());
|
|
70
|
+
|
|
71
|
+
// Reposition created items that specify afterItemKey
|
|
72
|
+
for (const [key, {
|
|
73
|
+
optimisticPatch
|
|
74
|
+
}] of toMerge.created.entries()) {
|
|
75
|
+
if (optimisticPatch.afterItemKey == null) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const currentIdx = result.findIndex(e => itemKey(e.item) === key);
|
|
79
|
+
if (currentIdx === -1) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const anchorIdx = result.findIndex(e => itemKey(e.item) === optimisticPatch.afterItemKey);
|
|
83
|
+
if (anchorIdx !== -1) {
|
|
84
|
+
// Anchor found on this page — reposition after it
|
|
85
|
+
const [entry] = result.splice(currentIdx, 1);
|
|
86
|
+
const newAnchorIdx = result.findIndex(e => itemKey(e.item) === optimisticPatch.afterItemKey);
|
|
87
|
+
result.splice(newAnchorIdx + 1, 0, entry);
|
|
88
|
+
} else {
|
|
89
|
+
// Anchor not on this page — remove (it belongs on the anchor's page)
|
|
90
|
+
result.splice(currentIdx, 1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
70
94
|
}
|
|
71
95
|
//# sourceMappingURL=mergePatchedItems.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["mergePatchedItems","toMerge","page","itemKey","orders","itemPredicate","itemsToMerge","all","pageWithPatchedItemsMapTmp","Map","key","item","optimisticPatch","Array","from","entries","keepPosition","originalItems","originalItem","get","length","set","pageWithPatchedItemsMap","created","keys","has","delete","toInsert","orderByItem","values"],"sources":["../../../../src/state/optimistic-simulation/mergePatchedItems.ts"],"sourcesContent":["import { Order } from '../QueryResultSimulation';\nimport { OptimisticPatch } from '../CollectionOptimisticPatch';\n\nexport function mergePatchedItems<T>(\n toMerge: {\n all: Map<string, { item: T; optimisticPatch: OptimisticPatch<T> }>;\n created: Map<string, { item: T; optimisticPatch: OptimisticPatch<T> }>;\n },\n {\n page,\n itemKey,\n orders,\n itemPredicate,\n }: {\n page: T[];\n limit: number;\n itemKey: (item: T) => string;\n orders: Order<T>[];\n itemPredicate: (item: T) => boolean;\n },\n) {\n const itemsToMerge = toMerge.all;\n\n // merge items into page. replace if already exists in page. order by original if `keepPosition=true`\n const pageWithPatchedItemsMapTmp = new Map<\n string,\n { item: T; orderByItem?: T }\n >();\n\n for (const [key, { item, optimisticPatch }] of Array.from(\n itemsToMerge.entries(),\n )) {\n const { keepPosition, originalItems } = optimisticPatch;\n const originalItem = originalItems.get(key);\n // if `order` is empty (can't simulate ordering) and keepPosition=true and item didn't match current filtering before update\n // skip on pushing the item into the page\n if (\n !orders.length &&\n keepPosition &&\n originalItem != null &&\n itemPredicate(originalItem)\n ) {\n continue;\n }\n\n if (!itemPredicate(item)) {\n continue;\n }\n\n pageWithPatchedItemsMapTmp.set(key, { item });\n }\n\n // place \"type=createMany\" items first\n const pageWithPatchedItemsMap = new Map<\n string,\n { item: T; orderByItem?: T }\n >();\n\n for (const key of toMerge.created.keys()) {\n if (pageWithPatchedItemsMapTmp.has(key)) {\n pageWithPatchedItemsMap.set(key, {\n item: pageWithPatchedItemsMapTmp.get(key)!.item,\n });\n pageWithPatchedItemsMapTmp.delete(key);\n }\n }\n\n for (const [key, { item }] of Array.from(\n pageWithPatchedItemsMapTmp.entries(),\n )) {\n pageWithPatchedItemsMap.set(key, { item });\n }\n\n for (const item of page) {\n const key = itemKey(item);\n const toInsert = itemsToMerge.get(key);\n\n if (toInsert && toInsert.optimisticPatch.keepPosition) {\n pageWithPatchedItemsMap.delete(key);\n pageWithPatchedItemsMap.set(key, {\n item: toInsert.item,\n orderByItem: item,\n });\n } else if (!toInsert) {\n pageWithPatchedItemsMap.set(key, { item });\n }\n }\n\n
|
|
1
|
+
{"version":3,"names":["mergePatchedItems","toMerge","page","itemKey","orders","itemPredicate","itemsToMerge","all","pageWithPatchedItemsMapTmp","Map","key","item","optimisticPatch","Array","from","entries","keepPosition","originalItems","originalItem","get","length","set","pageWithPatchedItemsMap","created","keys","has","delete","toInsert","orderByItem","result","values","afterItemKey","currentIdx","findIndex","e","anchorIdx","entry","splice","newAnchorIdx"],"sources":["../../../../src/state/optimistic-simulation/mergePatchedItems.ts"],"sourcesContent":["import { Order } from '../QueryResultSimulation';\nimport { OptimisticPatch } from '../CollectionOptimisticPatch';\n\nexport function mergePatchedItems<T>(\n toMerge: {\n all: Map<string, { item: T; optimisticPatch: OptimisticPatch<T> }>;\n created: Map<string, { item: T; optimisticPatch: OptimisticPatch<T> }>;\n },\n {\n page,\n itemKey,\n orders,\n itemPredicate,\n }: {\n page: T[];\n limit: number;\n itemKey: (item: T) => string;\n orders: Order<T>[];\n itemPredicate: (item: T) => boolean;\n },\n) {\n const itemsToMerge = toMerge.all;\n\n // merge items into page. replace if already exists in page. order by original if `keepPosition=true`\n const pageWithPatchedItemsMapTmp = new Map<\n string,\n { item: T; orderByItem?: T }\n >();\n\n for (const [key, { item, optimisticPatch }] of Array.from(\n itemsToMerge.entries(),\n )) {\n const { keepPosition, originalItems } = optimisticPatch;\n const originalItem = originalItems.get(key);\n // if `order` is empty (can't simulate ordering) and keepPosition=true and item didn't match current filtering before update\n // skip on pushing the item into the page\n if (\n !orders.length &&\n keepPosition &&\n originalItem != null &&\n itemPredicate(originalItem)\n ) {\n continue;\n }\n\n if (!itemPredicate(item)) {\n continue;\n }\n\n pageWithPatchedItemsMapTmp.set(key, { item });\n }\n\n // place \"type=createMany\" items first\n const pageWithPatchedItemsMap = new Map<\n string,\n { item: T; orderByItem?: T }\n >();\n\n for (const key of toMerge.created.keys()) {\n if (pageWithPatchedItemsMapTmp.has(key)) {\n pageWithPatchedItemsMap.set(key, {\n item: pageWithPatchedItemsMapTmp.get(key)!.item,\n });\n pageWithPatchedItemsMapTmp.delete(key);\n }\n }\n\n for (const [key, { item }] of Array.from(\n pageWithPatchedItemsMapTmp.entries(),\n )) {\n pageWithPatchedItemsMap.set(key, { item });\n }\n\n for (const item of page) {\n const key = itemKey(item);\n const toInsert = itemsToMerge.get(key);\n\n if (toInsert && toInsert.optimisticPatch.keepPosition) {\n pageWithPatchedItemsMap.delete(key);\n pageWithPatchedItemsMap.set(key, {\n item: toInsert.item,\n orderByItem: item,\n });\n } else if (!toInsert) {\n pageWithPatchedItemsMap.set(key, { item });\n }\n }\n\n const result = Array.from(pageWithPatchedItemsMap.values());\n\n // Reposition created items that specify afterItemKey\n for (const [key, { optimisticPatch }] of toMerge.created.entries()) {\n if (optimisticPatch.afterItemKey == null) {\n continue;\n }\n\n const currentIdx = result.findIndex((e) => itemKey(e.item) === key);\n if (currentIdx === -1) {\n continue;\n }\n\n const anchorIdx = result.findIndex(\n (e) => itemKey(e.item) === optimisticPatch.afterItemKey,\n );\n if (anchorIdx !== -1) {\n // Anchor found on this page — reposition after it\n const [entry] = result.splice(currentIdx, 1);\n const newAnchorIdx = result.findIndex(\n (e) => itemKey(e.item) === optimisticPatch.afterItemKey,\n );\n result.splice(newAnchorIdx + 1, 0, entry);\n } else {\n // Anchor not on this page — remove (it belongs on the anchor's page)\n result.splice(currentIdx, 1);\n }\n }\n\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
|