@wix/bex-core 2.23.0 → 2.26.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/InMemoryBackend/InMemoryBackend.js.map +1 -1
- package/dist/cjs/assets/locale/messages_cs.json +2 -2
- package/dist/cjs/assets/locale/messages_da.json +5 -5
- package/dist/cjs/assets/locale/messages_de.json +2 -2
- package/dist/cjs/assets/locale/messages_es.json +5 -5
- package/dist/cjs/assets/locale/messages_fr.json +2 -2
- package/dist/cjs/assets/locale/messages_id.json +2 -2
- package/dist/cjs/assets/locale/messages_it.json +2 -2
- package/dist/cjs/assets/locale/messages_ja.json +2 -2
- package/dist/cjs/assets/locale/messages_ko.json +2 -2
- package/dist/cjs/assets/locale/messages_nl.json +2 -2
- package/dist/cjs/assets/locale/messages_no.json +2 -2
- package/dist/cjs/assets/locale/messages_pl.json +2 -2
- package/dist/cjs/assets/locale/messages_pt.json +2 -2
- package/dist/cjs/assets/locale/messages_ru.json +2 -2
- package/dist/cjs/assets/locale/messages_sv.json +2 -2
- package/dist/cjs/assets/locale/messages_th.json +2 -2
- package/dist/cjs/assets/locale/messages_tr.json +2 -2
- package/dist/cjs/assets/locale/messages_uk.json +3 -3
- package/dist/cjs/assets/locale/messages_vi.json +2 -2
- package/dist/cjs/assets/locale/messages_visuale2e.json +7 -1
- package/dist/cjs/assets/locale/messages_zh.json +5 -5
- package/dist/cjs/hooks/collectionConfig.js.map +1 -1
- package/dist/cjs/model/dataResultRaw/dataResultRaw.js.map +1 -1
- package/dist/cjs/model/wixPatternsEssentials.js.map +1 -1
- package/dist/cjs/state/CollectionOptimisticActions.js +2 -5
- package/dist/cjs/state/CollectionOptimisticActions.js.map +1 -1
- package/dist/cjs/state/CollectionOptimisticProcessor.js +2 -6
- package/dist/cjs/state/CollectionOptimisticProcessor.js.map +1 -1
- package/dist/cjs/state/CollectionState.js.map +1 -1
- package/dist/cjs/state/WixPatternsContainer.js +2 -0
- package/dist/cjs/state/WixPatternsContainer.js.map +1 -1
- package/dist/cjs/state/buildWixPatternsContainer.js +2 -0
- package/dist/cjs/state/buildWixPatternsContainer.js.map +1 -1
- package/dist/esm/assets/locale/messages_cs.json +2 -2
- package/dist/esm/assets/locale/messages_da.json +5 -5
- package/dist/esm/assets/locale/messages_de.json +2 -2
- package/dist/esm/assets/locale/messages_es.json +5 -5
- package/dist/esm/assets/locale/messages_fr.json +2 -2
- package/dist/esm/assets/locale/messages_id.json +2 -2
- package/dist/esm/assets/locale/messages_it.json +2 -2
- package/dist/esm/assets/locale/messages_ja.json +2 -2
- package/dist/esm/assets/locale/messages_ko.json +2 -2
- package/dist/esm/assets/locale/messages_nl.json +2 -2
- package/dist/esm/assets/locale/messages_no.json +2 -2
- package/dist/esm/assets/locale/messages_pl.json +2 -2
- package/dist/esm/assets/locale/messages_pt.json +2 -2
- package/dist/esm/assets/locale/messages_ru.json +2 -2
- package/dist/esm/assets/locale/messages_sv.json +2 -2
- package/dist/esm/assets/locale/messages_th.json +2 -2
- package/dist/esm/assets/locale/messages_tr.json +2 -2
- package/dist/esm/assets/locale/messages_uk.json +3 -3
- package/dist/esm/assets/locale/messages_vi.json +2 -2
- package/dist/esm/assets/locale/messages_visuale2e.json +7 -1
- package/dist/esm/assets/locale/messages_zh.json +5 -5
- package/dist/esm/state/CollectionOptimisticActions.js +2 -5
- package/dist/esm/state/CollectionOptimisticActions.js.map +1 -1
- package/dist/esm/state/CollectionOptimisticProcessor.js +2 -6
- package/dist/esm/state/CollectionOptimisticProcessor.js.map +1 -1
- package/dist/esm/state/WixPatternsContainer.js +1 -0
- package/dist/esm/state/WixPatternsContainer.js.map +1 -1
- package/dist/esm/state/buildWixPatternsContainer.js +2 -1
- package/dist/esm/state/buildWixPatternsContainer.js.map +1 -1
- package/dist/types/InMemoryBackend/InMemoryBackend.d.ts +3 -3
- package/dist/types/hooks/collectionConfig.d.ts +3 -3
- package/dist/types/model/dataResultRaw/dataResultRaw.d.ts +3 -3
- package/dist/types/model/wixPatternsEssentials.d.ts +2 -0
- package/dist/types/model/wixPatternsEssentials.d.ts.map +1 -1
- package/dist/types/state/CollectionOptimisticActions.d.ts.map +1 -1
- package/dist/types/state/CollectionOptimisticProcessor.d.ts +1 -1
- package/dist/types/state/CollectionOptimisticProcessor.d.ts.map +1 -1
- package/dist/types/state/CollectionState.d.ts +1 -1
- package/dist/types/state/WixPatternsContainer.d.ts +2 -0
- package/dist/types/state/WixPatternsContainer.d.ts.map +1 -1
- package/dist/types/state/buildWixPatternsContainer.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"cairo.customFields.fieldType.dropdownList.addOption.CTA": "新增選項",
|
|
50
50
|
"cairo.dragAndDrop.leaveSite.modal.cancel.CTA": "取消",
|
|
51
51
|
"cairo.tags.manageTags.modal.deleteModal.delete.CTA": "刪除",
|
|
52
|
-
"cairo.updatedView.collectionPage.toast.cta": "
|
|
52
|
+
"cairo.updatedView.collectionPage.toast.cta": "重新整理檢視",
|
|
53
53
|
"cairo.customFields.fieldType.dropdownList.placeholder": "例如,義大利",
|
|
54
54
|
"cairo.tags.manageTags.modal.deleteModal.cancel.CTA": "取消",
|
|
55
55
|
"cairo.dragAndDrop.discardChanges.CTA": "捨棄",
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
"cairo.customFields.technical.error.title": "我們無法載入您的自訂欄位。",
|
|
178
178
|
"cairo.table.saveViewModal.body": "此檢視會包括目前套用的篩選條件和欄。 ",
|
|
179
179
|
"cairo.customFields.emptyStatePassive.title": "尚無欄位",
|
|
180
|
-
"cairo.customFields.entityPage.title": "
|
|
180
|
+
"cairo.customFields.entityPage.title": "其他欄位",
|
|
181
181
|
"cairo.dragAndDrop.reorderMode.toolbar.save.cta": "Save Order",
|
|
182
182
|
"cairo.customFields.archive.modal.title": "是否封存自訂欄位?",
|
|
183
183
|
"cairo.manageView.Rename.Success.toast": "「{oldViewName}」已重新命名為「{newViewName}」。",
|
|
@@ -199,7 +199,7 @@
|
|
|
199
199
|
"cairo.customFields.modal.networkError": "由於網路錯誤,因此未新增欄位。請檢查連線並且再試一次。",
|
|
200
200
|
"cairo.customFields.manageFields.CTA": "管理",
|
|
201
201
|
"cairo.appliedFilters": "{num, plural, =0 {未套用篩選條件} other {{num,number} 個篩選條件已套用}}",
|
|
202
|
-
"cairo.collectionsPage.edit.CTA": "
|
|
202
|
+
"cairo.collectionsPage.edit.CTA": "編輯",
|
|
203
203
|
"cairo.dragAndDrop.reorderMode.toast.success": "Order has been updated",
|
|
204
204
|
"cairo.customFields.addCustomField.modal.sameKey.error": "此密鑰已經存在。請試其他方式。",
|
|
205
205
|
"cairo.entityPage.saveError-technical.toast.description": "由於我們這邊發生技術問題,因此並未儲存變更。 ",
|
|
@@ -347,7 +347,7 @@
|
|
|
347
347
|
"cairo.manageView.saveNewView.CTA": "另存為新檢視",
|
|
348
348
|
"cair.appliedFilters.Apply.CTA": "套用",
|
|
349
349
|
"cairo.export.noPermissionsCTA": "查看身分與權限",
|
|
350
|
-
"cairo.updatedView.collectionPage.toast.desc": "
|
|
350
|
+
"cairo.updatedView.collectionPage.toast.desc": "請重新整理,以對檢視套用最新變更。",
|
|
351
351
|
"cairo.search.nothingMatches.text": "請嘗試其他搜尋條件。",
|
|
352
352
|
"cairo.viewDropdown.category.predefinedViews": "預設檢視",
|
|
353
353
|
"cairo.customFields.fieldType.dropdownList.inputTitle": "選項",
|
|
@@ -408,7 +408,7 @@
|
|
|
408
408
|
"cairo.tags.collectionPage.applyChanges.CTA": "套用",
|
|
409
409
|
"cairo.customFields.addCustomField.modal.fieldName.placeholder": "輸入名稱",
|
|
410
410
|
"cairo.a11y.liveRegion.resultsFound": "{num, plural, =0 {找不到任何結果} other {找到 {num,number} 筆結果}}",
|
|
411
|
-
"cairo.customFields.entityPage.sectionTitle": "
|
|
411
|
+
"cairo.customFields.entityPage.sectionTitle": "您的自訂欄位",
|
|
412
412
|
"cairo.table.listView": "清單檢視",
|
|
413
413
|
"cairo.passiveEmptyState.subtitle": "項目會在此處顯示。",
|
|
414
414
|
"cairo.tags.collectionPage.popover.loadTags.error.body": "由於我們這邊發生技術問題,因此無法載入標籤。",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../src/hooks/collectionConfig.ts"],"sourcesContent":["import {\n CollectionEvents,\n ComputedQuery,\n DataResultRaw,\n Filter,\n FiltersMap,\n QueryOptions,\n} from '../model';\nimport { ExtendedFields } from '../services';\n\nexport interface CollectionConfigBase<T, F extends FiltersMap> {\n /**\n * Whether to disable \"Select All\" server simulation for bulk selection.\n * @external\n */\n disableAutoSelectAllCount?: boolean;\n /**\n * Whether to enable new \"Select All\" logic.\n * <br> <br>\n * If `true`: <br>\n * - Unchecking items after checking \"Select All\" does not fallback to specific selection logic and values. This means in `<bulkActionToolbar />` and `<MultiBulkActionToolbar />`, \"Total Selected\" will show `total - unchecked items` and `isSelectAll` will be true. <br>\n * - You will receive a list of unchecked IDs.\n * @external\n */\n useNewSelectAllLogic?: boolean;\n /**\n * Unique value for each API endpoint consumed in `fetchData`.\n * @external\n */\n queryName: string;\n\n /**\n * Entity fqdn.\n * @external\n */\n fqdn?: string;\n\n /**\n * The `ExtendedFields` object used to render custom field values\n * Optional in case your data complies to the type `{ extendedFields: ExtendedFields }`\n */\n toExtendedFields?: (item: T) => ExtendedFields | undefined | null;\n\n /**\n * Message shown in a toast when fetching from the server fails.\n * <br> <br>\n * If the function returns a nullish value, no toast is shown.\n * @external\n */\n fetchErrorMessage: (params: {\n err: unknown;\n isOnline: boolean;\n }) => string | null | undefined;\n\n search?: Filter<string>;\n queryOptions?: QueryOptions;\n /**\n * Persist the selected filters, search & sort in the query parameters of the URL.<br/>\n * For improved readability, sort & columns are formatted in CSV-like formatting, i.e \"?sort=name+desc,price+asc\". Do not use commas and/or spaces for your columns IDs.<br>\n * Note: The filters from the selected view will be persist, but the actual view will not be selected\n * @default false\n */\n persistQueryToUrl?: boolean;\n /**\n * Whether the collection refreshes when different columns are selected.\n * <br> <br>\n * Selected columns are passed in `fetchData(query.columns)`.\n * @default false\n * @external\n */\n refreshOnColumnsChange?: boolean;\n initialPage?: DataResultRaw<T>;\n deferInitialLoading?: boolean;\n\n /**\n * Preserve or clear selection after applying a new search or filter.\n * @default preserve\n * @external\n */\n selectionConsistencyMode?: 'preserve' | 'clear';\n /**\n * Optional callbacks for various events of the collection state lifecycle\n * - `onInitialPageFetched` - when the first page of items is ready\n * - `onSearch` - when fetching new items as a result new search\n * - `onSearchResults` - when the result of a search is ready\n * - `onNewPageStart` - when starting to load the next page of items\n * - `onNewPageAdded` - when the result of the next page is ready\n * - `onError` - When `fetchData` throws an error. Return `true` from this function if the error was reported and shouldn't be reported again internally.\n */\n events?: CollectionEvents<F>;\n}\n\nexport interface CollectionConfigAnyPaginationMode<T, F extends FiltersMap>\n extends CollectionConfigBase<T, F> {\n /**\n * Function that fetches the collection data.<br> <br>\n * Supported parameters: <br>\n * - `query`: [object] [ComputedQuery](
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../src/hooks/collectionConfig.ts"],"sourcesContent":["import {\n CollectionEvents,\n ComputedQuery,\n DataResultRaw,\n Filter,\n FiltersMap,\n QueryOptions,\n} from '../model';\nimport { ExtendedFields } from '../services';\n\nexport interface CollectionConfigBase<T, F extends FiltersMap> {\n /**\n * Whether to disable \"Select All\" server simulation for bulk selection.\n * @external\n */\n disableAutoSelectAllCount?: boolean;\n /**\n * Whether to enable new \"Select All\" logic.\n * <br> <br>\n * If `true`: <br>\n * - Unchecking items after checking \"Select All\" does not fallback to specific selection logic and values. This means in `<bulkActionToolbar />` and `<MultiBulkActionToolbar />`, \"Total Selected\" will show `total - unchecked items` and `isSelectAll` will be true. <br>\n * - You will receive a list of unchecked IDs.\n * @external\n */\n useNewSelectAllLogic?: boolean;\n /**\n * Unique value for each API endpoint consumed in `fetchData`.\n * @external\n */\n queryName: string;\n\n /**\n * Entity fqdn.\n * @external\n */\n fqdn?: string;\n\n /**\n * The `ExtendedFields` object used to render custom field values\n * Optional in case your data complies to the type `{ extendedFields: ExtendedFields }`\n */\n toExtendedFields?: (item: T) => ExtendedFields | undefined | null;\n\n /**\n * Message shown in a toast when fetching from the server fails.\n * <br> <br>\n * If the function returns a nullish value, no toast is shown.\n * @external\n */\n fetchErrorMessage: (params: {\n err: unknown;\n isOnline: boolean;\n }) => string | null | undefined;\n\n search?: Filter<string>;\n queryOptions?: QueryOptions;\n /**\n * Persist the selected filters, search & sort in the query parameters of the URL.<br/>\n * For improved readability, sort & columns are formatted in CSV-like formatting, i.e \"?sort=name+desc,price+asc\". Do not use commas and/or spaces for your columns IDs.<br>\n * Note: The filters from the selected view will be persist, but the actual view will not be selected\n * @default false\n */\n persistQueryToUrl?: boolean;\n /**\n * Whether the collection refreshes when different columns are selected.\n * <br> <br>\n * Selected columns are passed in `fetchData(query.columns)`.\n * @default false\n * @external\n */\n refreshOnColumnsChange?: boolean;\n initialPage?: DataResultRaw<T>;\n deferInitialLoading?: boolean;\n\n /**\n * Preserve or clear selection after applying a new search or filter.\n * @default preserve\n * @external\n */\n selectionConsistencyMode?: 'preserve' | 'clear';\n /**\n * Optional callbacks for various events of the collection state lifecycle\n * - `onInitialPageFetched` - when the first page of items is ready\n * - `onSearch` - when fetching new items as a result new search\n * - `onSearchResults` - when the result of a search is ready\n * - `onNewPageStart` - when starting to load the next page of items\n * - `onNewPageAdded` - when the result of the next page is ready\n * - `onError` - When `fetchData` throws an error. Return `true` from this function if the error was reported and shouldn't be reported again internally.\n */\n events?: CollectionEvents<F>;\n}\n\nexport interface CollectionConfigAnyPaginationMode<T, F extends FiltersMap>\n extends CollectionConfigBase<T, F> {\n /**\n * Function that fetches the collection data.<br> <br>\n * Supported parameters: <br>\n * - `query`: [object] [ComputedQuery](./com?path=/story/common-models--computedquery) instance.\n * <br> <br>\n *\n * Must return a [DataResultRaw](./?path=/story/common-models--dataresultraw) Promise.\n * @external\n */\n fetchData: (query: ComputedQuery<F>) => Promise<DataResultRaw<T>>;\n /**\n * Defines the filters that the collection supports.\n * <br> <br>\n * Either an [arrayFilter](./?path=/story/features-filter-factories--arrayfilter) or a [customFilter](./?path=/story/features-filter-factories--customfilter).\n * @external\n */\n filters: F;\n /**\n * Used to identify the item in many messages from Wix Patterns.\n * <br> <br>\n * For example, '{entity} \"{itemName}\" was deleted successfully' may become 'Contact \"Johnny Doe\" was deleted successfully'.\n * <br> <br>\n * If your data has an ID, then `itemKey` will default to this ID.\n * @external\n */\n itemName: (item: T) => string;\n /**\n * Unique key within the collection. The item's ID is often used for its key.\n * <br> <br>\n * If your data has an ID, then `itemKey` will default to this ID.\n * @external\n */\n itemKey: (item: T) => string;\n /**\n * Maximum number of items fetched per page.\n * @external\n */\n limit?: number;\n}\n\nexport interface CollectionConfig<T, F extends FiltersMap>\n extends CollectionConfigAnyPaginationMode<T, F> {\n /**\n * Pagination type supported by `fetchData`.\n * <br> <br>\n * Supported values: <br>\n * - `\"offset\"`: Server accepts `query.offset`. <br>\n * - `\"cursor\"`: Server returns a cursor when `fetchData` is called.\n * @default offset\n * @external\n */\n paginationMode?: 'cursor' | 'offset';\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../../src/model/dataResultRaw/dataResultRaw.ts"],"sourcesContent":["export interface DataResultRaw<T> {\n /**\n * Array of items returned from the server
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../../src/model/dataResultRaw/dataResultRaw.ts"],"sourcesContent":["export interface DataResultRaw<T> {\n /**\n * Array of items returned from the server.\n * @external\n */\n items: T[];\n /**\n * Total items available in the server, *after* applying filters. If not provided, offset pagination will not work correctly.\n * @default `items.length`\n * @external\n */\n total?: number | null;\n /**\n * Total items available in the server, *before* applying filters.\n * @external\n */\n available?: number;\n /**\n * In case of cursor pagination, this will be the value that will be sent in the query on the next page request.\n * @external\n */\n cursor?: string | undefined | null;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../src/model/wixPatternsEssentials.ts"],"sourcesContent":["import type { Essentials, EssentialsOptions } from '@wix/fe-essentials/core';\nimport type { LogParams, ReportProps } from '@wix/fe-essentials/bi';\nimport type { Trans, useTranslation } from '@wix/fe-essentials/react';\nimport type { ShowToast } from './toast';\nimport type {\n Environment,\n ErrorMonitor,\n Experiments,\n MonitorLogger,\n OnlineManager,\n} from '../services';\nimport type { History } from 'history';\nimport type { QueryCache } from 'react-query/core';\nimport type { FunctionComponent } from 'react';\nimport { DataCapsule } from './dataCapsule';\nimport { HttpClient } from './httpClient';\n\nexport type OnSidePanelOpen = (listener: () => void) => {\n remove(): void;\n};\n\nexport type CloseSidePanel = () => unknown;\n\nexport interface BiLogger {\n report(reportProps: ReportProps): Promise<any>;\n}\n\nexport interface CairoBILoggerFactory {\n updateDefaults(params: LogParams): this;\n logger(): BiLogger;\n}\n\nexport type OnNavigationPause = () => { resume(): void };\nexport type OnNavigationCallback = (pause: OnNavigationPause) => void;\nexport type OnNavigation = (callback: OnNavigationCallback) => {\n remove(): void;\n};\n\nexport type BeforeUnloadResponse = {\n remove: () => void;\n};\nexport type OnBeforeUnload = (\n callback: (event: Event) => void,\n) => BeforeUnloadResponse;\n\nexport interface HostContainerExtension {\n appId?: string;\n componentId: string;\n title?: string;\n menuItem?: {\n IconComponent?: FunctionComponent;\n structuredAction: (params?: Record<string, any>) => unknown;\n };\n Extension?: React.ComponentType;\n}\nexport type GetExtensions = () =>\n | HostContainerExtension[]\n | Promise<HostContainerExtension[]>;\ninterface HostContainer {\n getExtensions: GetExtensions;\n}\n\nexport type GetHostContainer = (hostContainerId: string) => HostContainer;\n\ntype CreateEssentials = (options: EssentialsOptions) => {\n i18n: Essentials['i18n'];\n dataCapsule: Essentials['dataCapsule'];\n biLoggerFactory?: () => CairoBILoggerFactory;\n errorMonitor: ErrorMonitor;\n fedopsLogger?: MonitorLogger;\n experiments?: Experiments;\n};\nexport type CreateComponentSettings = (container: {\n httpClient: HttpClient;\n queryCache: QueryCache;\n environment: Environment;\n createEssentials: CreateEssentials;\n}) => (options: { namespace: string }) => DataCapsule;\n\nexport interface WixPatternsEssentials {\n httpClient: HttpClient;\n /** A `ErrorMonitor` instance `@wix/fe-essentials/error-monitor` */\n errorMonitor: ErrorMonitor;\n /** A `Experiments` instance `@wix/fe-essentials/experiments` */\n experiments: Experiments;\n biLogger?: BiLogger | null;\n /**\n * A function that returns the shape `{ i18n }` - should be compatible with `{createEssentials} from '@wix/fe-essentials'` */\n createEssentials: CreateEssentials;\n /** A `DataCapsule` to store component-level settings such as `Views` */\n createComponentSettings?: CreateComponentSettings;\n /** The user's environment\n * - `language` - preferable language for the user\n * - `artifactId` - App level identifier, usually the artifact ID\n * - `componentId` - Component/page level identifier (Optional)\n * - `componentName` - Readable component/page name (Optional)\n */\n environment: Pick<Environment, 'language'> &\n Partial<Omit<Environment, 'language'>> & { uiLibVersion?: string };\n /** `useTranslation` hook from `react-i18next` or `@wix/fe-essentials/react` */\n useTranslation: typeof useTranslation;\n /** `Trans` component from `react-i18next` or `@wix/fe-essentials/react */\n Trans: typeof Trans;\n user: {\n permissions: string[];\n };\n /** `useExperiments` hook from `@wix/yoshi-flow-bm` or `@wix/fe-essentials/react` */\n useExperiments: () => {\n ready: boolean;\n experiments: {\n enabled: (key: string) => boolean;\n };\n };\n /** A function that shows a global toast. For BM usage, it should be `showToast` from `business-manager-api` */\n showToast?: ShowToast;\n /** A function to perform a navigation to a given pageId */\n navigateTo?: (params: {\n pageId: string;\n appState?: string;\n referrer?: string;\n }) => void;\n useAppLoaded?: () => void;\n onSidePanelOpen?: OnSidePanelOpen;\n closeSidePanel?: CloseSidePanel;\n /** Custom [history](https://github.com/remix-run/history/tree/v5.3.0/packages/history) instance to sync custom consumer navigations with Cairo navigations */\n history?: History;\n /** An optional query cache instance for controlling the cache from other modules */\n queryCache?: QueryCache;\n /** A function that interrupts a navigation to another app inside wix platforms */\n onNavigation?: OnNavigation;\n getHostContainer?: GetHostContainer;\n onlineManager?: OnlineManager;\n /**\n * Deals with dirty state by setting up a listener that triggers a confirmation dialog when a user attempts to leave a page. The event listener is removed upon component unmount.\n * @param callback - called on navigation with an event object. Use event.preventDefault() within the callback to display the dialog.\n * @returns { remove: () => void } - object that includes a remove method. You can use this method to remove the listener whenever necessary.\n */\n onBeforeUnload?: OnBeforeUnload;\n}\n\nexport interface WixPatternsEssentialsOverrides\n extends Omit<Partial<WixPatternsEssentials>, 'environment'> {\n environment: Partial<WixPatternsEssentials['environment']>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../src/model/wixPatternsEssentials.ts"],"sourcesContent":["import type { Essentials, EssentialsOptions } from '@wix/fe-essentials/core';\nimport type { LogParams, ReportProps } from '@wix/fe-essentials/bi';\nimport type { Trans, useTranslation } from '@wix/fe-essentials/react';\nimport type { ShowToast } from './toast';\nimport type {\n Environment,\n ErrorMonitor,\n Experiments,\n MonitorLogger,\n OnlineManager,\n} from '../services';\nimport type { History } from 'history';\nimport type { QueryCache } from 'react-query/core';\nimport type { FunctionComponent } from 'react';\nimport { DataCapsule } from './dataCapsule';\nimport { HttpClient } from './httpClient';\n\nexport type OnSidePanelOpen = (listener: () => void) => {\n remove(): void;\n};\n\nexport type CloseSidePanel = () => unknown;\n\nexport interface BiLogger {\n report(reportProps: ReportProps): Promise<any>;\n}\n\nexport interface CairoBILoggerFactory {\n updateDefaults(params: LogParams): this;\n logger(): BiLogger;\n}\n\nexport type OnNavigationPause = () => { resume(): void };\nexport type OnNavigationCallback = (pause: OnNavigationPause) => void;\nexport type OnNavigation = (callback: OnNavigationCallback) => {\n remove(): void;\n};\n\nexport type BeforeUnloadResponse = {\n remove: () => void;\n};\nexport type OnBeforeUnload = (\n callback: (event: Event) => void,\n) => BeforeUnloadResponse;\n\nexport interface HostContainerExtension {\n appId?: string;\n componentId: string;\n title?: string;\n menuItem?: {\n IconComponent?: FunctionComponent;\n structuredAction: (params?: Record<string, any>) => unknown;\n };\n Extension?: React.ComponentType;\n}\nexport type GetExtensions = () =>\n | HostContainerExtension[]\n | Promise<HostContainerExtension[]>;\ninterface HostContainer {\n getExtensions: GetExtensions;\n}\n\nexport type GetHostContainer = (hostContainerId: string) => HostContainer;\n\ntype CreateEssentials = (options: EssentialsOptions) => {\n i18n: Essentials['i18n'];\n dataCapsule: Essentials['dataCapsule'];\n biLoggerFactory?: () => CairoBILoggerFactory;\n errorMonitor: ErrorMonitor;\n fedopsLogger?: MonitorLogger;\n experiments?: Experiments;\n};\n\nexport type UseAssistantEffect = (\n handler: (payload: any, sourceEvent: string) => void,\n appDefId: string,\n event: string | string[],\n) => unknown;\n\nexport type CreateComponentSettings = (container: {\n httpClient: HttpClient;\n queryCache: QueryCache;\n environment: Environment;\n createEssentials: CreateEssentials;\n}) => (options: { namespace: string }) => DataCapsule;\n\nexport interface WixPatternsEssentials {\n httpClient: HttpClient;\n /** A `ErrorMonitor` instance `@wix/fe-essentials/error-monitor` */\n errorMonitor: ErrorMonitor;\n /** A `Experiments` instance `@wix/fe-essentials/experiments` */\n experiments: Experiments;\n biLogger?: BiLogger | null;\n /**\n * A function that returns the shape `{ i18n }` - should be compatible with `{createEssentials} from '@wix/fe-essentials'` */\n createEssentials: CreateEssentials;\n /** A `DataCapsule` to store component-level settings such as `Views` */\n createComponentSettings?: CreateComponentSettings;\n /** The user's environment\n * - `language` - preferable language for the user\n * - `artifactId` - App level identifier, usually the artifact ID\n * - `componentId` - Component/page level identifier (Optional)\n * - `componentName` - Readable component/page name (Optional)\n */\n environment: Pick<Environment, 'language'> &\n Partial<Omit<Environment, 'language'>> & { uiLibVersion?: string };\n /** `useTranslation` hook from `react-i18next` or `@wix/fe-essentials/react` */\n useTranslation: typeof useTranslation;\n /** `Trans` component from `react-i18next` or `@wix/fe-essentials/react */\n Trans: typeof Trans;\n user: {\n permissions: string[];\n };\n /** `useExperiments` hook from `@wix/yoshi-flow-bm` or `@wix/fe-essentials/react` */\n useExperiments: () => {\n ready: boolean;\n experiments: {\n enabled: (key: string) => boolean;\n };\n };\n /** A function that shows a global toast. For BM usage, it should be `showToast` from `business-manager-api` */\n showToast?: ShowToast;\n /** A function to perform a navigation to a given pageId */\n navigateTo?: (params: {\n pageId: string;\n appState?: string;\n referrer?: string;\n }) => void;\n useAppLoaded?: () => void;\n onSidePanelOpen?: OnSidePanelOpen;\n closeSidePanel?: CloseSidePanel;\n /** Custom [history](https://github.com/remix-run/history/tree/v5.3.0/packages/history) instance to sync custom consumer navigations with Cairo navigations */\n history?: History;\n /** An optional query cache instance for controlling the cache from other modules */\n queryCache?: QueryCache;\n /** A function that interrupts a navigation to another app inside wix platforms */\n onNavigation?: OnNavigation;\n getHostContainer?: GetHostContainer;\n onlineManager?: OnlineManager;\n /**\n * Deals with dirty state by setting up a listener that triggers a confirmation dialog when a user attempts to leave a page. The event listener is removed upon component unmount.\n * @param callback - called on navigation with an event object. Use event.preventDefault() within the callback to display the dialog.\n * @returns { remove: () => void } - object that includes a remove method. You can use this method to remove the listener whenever necessary.\n */\n onBeforeUnload?: OnBeforeUnload;\n useAssistantEffect?: UseAssistantEffect;\n}\n\nexport interface WixPatternsEssentialsOverrides\n extends Omit<Partial<WixPatternsEssentials>, 'environment'> {\n environment: Partial<WixPatternsEssentials['environment']>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -651,25 +651,22 @@ class CollectionOptimisticActions {
|
|
|
651
651
|
}
|
|
652
652
|
initCollection(collection) {
|
|
653
653
|
this.collections.push(collection);
|
|
654
|
-
|
|
654
|
+
new _CollectionOptimisticProcessor.CollectionOptimisticProcessor({
|
|
655
655
|
collection,
|
|
656
656
|
optimistic: this,
|
|
657
657
|
orderBy: this.orderBy,
|
|
658
658
|
predicate: this.predicate
|
|
659
659
|
});
|
|
660
|
-
const dispose = processor.init();
|
|
661
660
|
return () => {
|
|
662
661
|
const i = this.collections.indexOf(collection);
|
|
663
662
|
if (i !== -1) {
|
|
664
663
|
this.collections.splice(i, 1);
|
|
665
664
|
}
|
|
666
|
-
dispose();
|
|
667
665
|
};
|
|
668
666
|
}
|
|
669
667
|
init() {
|
|
670
668
|
const {
|
|
671
669
|
collection,
|
|
672
|
-
processors,
|
|
673
670
|
events
|
|
674
671
|
} = this;
|
|
675
672
|
const emitRefresh = params => {
|
|
@@ -691,7 +688,7 @@ class CollectionOptimisticActions {
|
|
|
691
688
|
if (allFilteredOut) {
|
|
692
689
|
collection.fetchNextPageIfNeeded();
|
|
693
690
|
}
|
|
694
|
-
})
|
|
691
|
+
})];
|
|
695
692
|
return () => {
|
|
696
693
|
collection.emitter.off('refresh', emitRefresh);
|
|
697
694
|
collection.emitter.off('beforeResultUpdated', emitBeforeResultUpdated);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_mobx","require","_CollectionOptimisticActionsState","_CollectionOptimisticProcessor","_CollectionOptimisticPatch","_CollectionOptimisticExecutor","_events","_QueryResultSimulationDefault","_CollectionOptimisticSequenceExecutor","CollectionOptimisticActions","constructor","params","_defineProperty2","default","EventEmitter","Map","action","patch","state","collection","collections","noInvalidate","patches","remove","invalidate","forEach","p","refreshAllPages","events","clearPatch","off","_clearPatch","onRefresh","isStale","once","on","emit","CollectionOptimisticActionsState","source","patchesCache","container","cacheNamespace","resultSimulationDefault","QueryResultSimulationDefault","predicate","orderBy","createdAt","executor","CollectionOptimisticExecutor","batchWait","errorMonitor","showToast","translate","lodash","processors","push","CollectionOptimisticProcessor","optimistic","_optimisticActions","makeObservable","pushPatchAndReprocess","replacePatchAndReprocess","rollback","bound","clear","move","pendingMovePatches","computed","_queryNames","queryName","map","c","hasRunningSequence","Array","from","sequences","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","keepPosition","_result$get","originalItem","enqueueMovePatch","query","filtersKeyHash","event","_initSequence","CollectionOptimisticSequenceExecutor","err","pendingPatches","_p$move","Error","message","reorderModeCanceledMessage","biName","onClick","sequence","collectionSnapshot","updateOne","updateAll","patchOrFn","originQuery","itemPredicate","updatedAt","Date","deleteMany","deleteOne","deleteAll","initCollection","processor","dispose","init","i","indexOf","splice","emitRefresh","emitBeforeResultUpdated","emitter","disposers","reaction","isEmpty","_pages","unprocessed","flatMap","page","length","allFilteredOut","fetchNextPageIfNeeded","disposer","remaining","exports"],"sources":["../../../src/state/CollectionOptimisticActions.ts"],"sourcesContent":["import { ActionMove, ComputedQuery, FiltersMap, ToastConfig } 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 {\n CollectionOptimisticExecutor,\n EventuallyUpdated,\n} from './CollectionOptimisticExecutor';\nimport { EventEmitter } from 'events';\nimport { TypedEmitter } from '../util';\nimport { QueryResultSimulationDefault } from './QueryResultSimulationDefault';\nimport { CollectionOptimisticSequenceExecutor } from './CollectionOptimisticSequenceExecutor';\nimport { ModalLayoutProps } from '../services';\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?: (err: unknown) => 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 * @external\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 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 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\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 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[]>;\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 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}\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 readonly collection;\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 = new Map<string, CollectionOptimisticSequenceExecutor>();\n readonly resultSimulationDefault;\n readonly reorderModeCanceledMessage = 'REORDER_MODE_CANCELED';\n\n _resumeNavigation: (() => void) | null = null;\n\n _orderByMode: 'orders' | 'moves' = 'orders';\n\n constructor(params: CollectionOptimisticActionsParams<T, F>) {\n this.collection = params.collection;\n this.collections = params.collections ?? [];\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 { state, collection, collections, noInvalidate } = this;\n if (noInvalidate) {\n return;\n }\n\n state.patches.remove(patch);\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 // 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 events.emit('updated');\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 * 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>) {\n this.createMany([item], params);\n }\n\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>) {\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 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 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(items.map((item) => [itemKey(item), item])),\n originalItems: new Map(\n items.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 { query } = collection;\n const { patches } = state;\n\n const { filtersKeyHash } = query;\n\n const event = optimisticPatch.move;\n\n if (event == null) {\n return;\n }\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 return {\n message: collection.translate('cairo.dragAndDrop.error.toast'),\n biName: 'cairo-drag-and-drop-submit-error',\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, query } = collection;\n const { patches } = state;\n\n const { filtersKeyHash } = query;\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: {\n ...event,\n filtersKeyHash,\n },\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 const processor = new CollectionOptimisticProcessor({\n collection,\n optimistic: this,\n orderBy: this.orderBy,\n predicate: this.predicate,\n });\n\n const dispose = processor.init();\n\n return () => {\n const i = this.collections.indexOf(collection);\n if (i !== -1) {\n this.collections.splice(i, 1);\n }\n dispose();\n };\n }\n\n init() {\n const { collection, processors, events } = this;\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 {\n result: { isEmpty, _pages },\n } = collection;\n const unprocessed = _pages.unprocessed.flatMap((page) => page);\n return isEmpty && unprocessed.length > 0;\n },\n (allFilteredOut) => {\n if (allFilteredOut) {\n collection.fetchNextPageIfNeeded();\n }\n },\n ),\n ...processors.map((p) => p.init()),\n ];\n\n return () => {\n collection.emitter.off('refresh', emitRefresh);\n collection.emitter.off('beforeResultUpdated', emitBeforeResultUpdated);\n disposers.forEach((disposer) => disposer());\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","_QueryResultSimulationDefault","_CollectionOptimisticSequenceExecutor","CollectionOptimisticActions","constructor","params","_defineProperty2","default","EventEmitter","Map","action","patch","state","collection","collections","noInvalidate","patches","remove","invalidate","forEach","p","refreshAllPages","events","clearPatch","off","_clearPatch","onRefresh","isStale","once","on","emit","CollectionOptimisticActionsState","source","patchesCache","container","cacheNamespace","resultSimulationDefault","QueryResultSimulationDefault","predicate","orderBy","createdAt","executor","CollectionOptimisticExecutor","batchWait","errorMonitor","showToast","translate","lodash","processors","push","CollectionOptimisticProcessor","optimistic","_optimisticActions","makeObservable","pushPatchAndReprocess","replacePatchAndReprocess","rollback","bound","clear","move","pendingMovePatches","computed","_queryNames","queryName","map","c","hasRunningSequence","Array","from","sequences","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","keepPosition","_result$get","originalItem","enqueueMovePatch","query","filtersKeyHash","event","_initSequence","CollectionOptimisticSequenceExecutor","err","pendingPatches","_p$move","Error","message","reorderModeCanceledMessage","biName","onClick","sequence","collectionSnapshot","updateOne","updateAll","patchOrFn","originQuery","itemPredicate","updatedAt","Date","deleteMany","deleteOne","deleteAll","initCollection","i","indexOf","splice","init","emitRefresh","emitBeforeResultUpdated","emitter","disposers","reaction","isEmpty","_pages","unprocessed","flatMap","page","length","allFilteredOut","fetchNextPageIfNeeded","disposer","remaining","exports"],"sources":["../../../src/state/CollectionOptimisticActions.ts"],"sourcesContent":["import { ActionMove, ComputedQuery, FiltersMap, ToastConfig } 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 {\n CollectionOptimisticExecutor,\n EventuallyUpdated,\n} from './CollectionOptimisticExecutor';\nimport { EventEmitter } from 'events';\nimport { TypedEmitter } from '../util';\nimport { QueryResultSimulationDefault } from './QueryResultSimulationDefault';\nimport { CollectionOptimisticSequenceExecutor } from './CollectionOptimisticSequenceExecutor';\nimport { ModalLayoutProps } from '../services';\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?: (err: unknown) => 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 * @external\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 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 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\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 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[]>;\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 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}\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 readonly collection;\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 = new Map<string, CollectionOptimisticSequenceExecutor>();\n readonly resultSimulationDefault;\n readonly reorderModeCanceledMessage = 'REORDER_MODE_CANCELED';\n\n _resumeNavigation: (() => void) | null = null;\n\n _orderByMode: 'orders' | 'moves' = 'orders';\n\n constructor(params: CollectionOptimisticActionsParams<T, F>) {\n this.collection = params.collection;\n this.collections = params.collections ?? [];\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 { state, collection, collections, noInvalidate } = this;\n if (noInvalidate) {\n return;\n }\n\n state.patches.remove(patch);\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 // 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 events.emit('updated');\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 * 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>) {\n this.createMany([item], params);\n }\n\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>) {\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 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 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(items.map((item) => [itemKey(item), item])),\n originalItems: new Map(\n items.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 { query } = collection;\n const { patches } = state;\n\n const { filtersKeyHash } = query;\n\n const event = optimisticPatch.move;\n\n if (event == null) {\n return;\n }\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 return {\n message: collection.translate('cairo.dragAndDrop.error.toast'),\n biName: 'cairo-drag-and-drop-submit-error',\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, query } = collection;\n const { patches } = state;\n\n const { filtersKeyHash } = query;\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: {\n ...event,\n filtersKeyHash,\n },\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 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 {\n result: { isEmpty, _pages },\n } = collection;\n const unprocessed = _pages.unprocessed.flatMap((page) => page);\n return isEmpty && unprocessed.length > 0;\n },\n (allFilteredOut) => {\n if (allFilteredOut) {\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 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":[]}
|
|
@@ -31,16 +31,12 @@ class CollectionOptimisticProcessor {
|
|
|
31
31
|
beforeAddNewPages: _mobx.action.bound,
|
|
32
32
|
beforeSetTotal: _mobx.action.bound
|
|
33
33
|
});
|
|
34
|
+
this._register();
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
+
_register() {
|
|
36
37
|
this.collection.emitter.on('beforeAddNewPages', this.beforeAddNewPages);
|
|
37
38
|
this.collection.emitter.on('beforeSetTotal', this.beforeSetTotal);
|
|
38
39
|
this.optimistic.events.on('reprocess', this.reprocess);
|
|
39
|
-
return () => {
|
|
40
|
-
this.collection.emitter.off('beforeAddNewPages', this.beforeAddNewPages);
|
|
41
|
-
this.collection.emitter.off('beforeSetTotal', this.beforeSetTotal);
|
|
42
|
-
this.optimistic.events.off('reprocess', this.reprocess);
|
|
43
|
-
};
|
|
44
40
|
}
|
|
45
41
|
reprocess() {
|
|
46
42
|
this.removeSelectionIfExists();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_mobx","require","_QueryResultSimulationDefault","_CollectionOptimisticHelpers","_optimisticSimulation","_orderByOrders","_orderByMoves","CollectionOptimisticProcessor","constructor","params","_defineProperty2","default","collection","processorHelpers","CollectionOptimisticProcessorHelpers","optimistic","resultSimulationDefault","QueryResultSimulationDefault","predicate","orderBy","makeObservable","reprocess","action","bound","beforeAddNewPages","beforeSetTotal","init","emitter","on","events","off","removeSelectionIfExists","itemKey","bulkSelect","result","originQuery","state","patches","itemPredicate","filterItem","filterPageByPatches","select","filter","item","pages","currentItemsMap","orderByIteratee","limit","length","orders","_orderByMode","finalPages","map","page","transformItemByUpdateAllPatches","itemToMerge","prepareItemsToMergeIntoPage","all","size","index","pageWithPatchedItems","mergePatchedItems","orderByMoves","pageIndex","currentFiltersKeyHash","query","filtersKeyHash","toMerge","orderByOrders","total","processedTotal","reduce","prev","actionType","patchedItemsEntries","originalItems","originalTotal","key","originalItem","get","patchedItemsTotal","acc","value","Math","max","exports"],"sources":["../../../src/state/CollectionOptimisticProcessor.ts"],"sourcesContent":["import {\n ComputedQuery,\n ComputedQueryFull,\n FiltersMap,\n KeyedItem,\n} from '../model';\nimport { CollectionState } from './CollectionState';\nimport { action, makeObservable } from 'mobx';\nimport { Order, QueryResultSimulation } from './QueryResultSimulation';\nimport { QueryResultSimulationDefault } from './QueryResultSimulationDefault';\nimport { TypedEmitter } from '../util';\nimport { CollectionOptimisticProcessorHelpers } from './CollectionOptimisticHelpers';\nimport { CollectionOptimisticActionsState } from './CollectionOptimisticActionsState';\nimport {\n filterPageByPatches,\n mergePatchedItems,\n prepareItemsToMergeIntoPage,\n transformItemByUpdateAllPatches,\n} from './optimistic-simulation';\nimport { orderByOrders } from './optimistic-simulation/orderByOrders';\nimport { orderByMoves } from './optimistic-simulation/orderByMoves';\n\ninterface Optimistic<T> {\n _orderByMode: 'orders' | 'moves';\n readonly state: CollectionOptimisticActionsState<T>;\n readonly events: TypedEmitter<{\n reprocess: () => void;\n updated: () => void;\n }>;\n}\n\nexport interface CollectionOptimisticProcessorParams<T, F extends FiltersMap>\n extends Partial<QueryResultSimulation<T, F>> {\n readonly collection: CollectionState<T, F>;\n readonly optimistic: Optimistic<T>;\n}\n\nexport class CollectionOptimisticProcessor<T, F extends FiltersMap> {\n readonly collection: CollectionState<T, F>;\n readonly processorHelpers: CollectionOptimisticProcessorHelpers<T, F>;\n readonly optimistic: Optimistic<T>;\n\n readonly resultSimulationDefault: QueryResultSimulation<T, F>;\n readonly predicate: (computedQuery: ComputedQuery<F>) => (item: T) => boolean;\n readonly orderBy: (computedQuery: ComputedQuery<F>) => Order<T>[];\n\n constructor(params: CollectionOptimisticProcessorParams<T, F>) {\n this.collection = params.collection;\n this.processorHelpers = new CollectionOptimisticProcessorHelpers(\n this.collection,\n );\n this.optimistic = params.optimistic;\n\n this.resultSimulationDefault = new QueryResultSimulationDefault({\n collection: this.collection,\n });\n this.predicate = params.predicate ?? this.resultSimulationDefault.predicate;\n this.orderBy = params.orderBy ?? this.resultSimulationDefault.orderBy;\n\n makeObservable(this, {\n reprocess: action.bound,\n beforeAddNewPages: action.bound,\n beforeSetTotal: action.bound,\n });\n }\n\n init() {\n this.collection.emitter.on('beforeAddNewPages', this.beforeAddNewPages);\n this.collection.emitter.on('beforeSetTotal', this.beforeSetTotal);\n this.optimistic.events.on('reprocess', this.reprocess);\n\n return () => {\n this.collection.emitter.off('beforeAddNewPages', this.beforeAddNewPages);\n this.collection.emitter.off('beforeSetTotal', this.beforeSetTotal);\n this.optimistic.events.off('reprocess', this.reprocess);\n };\n }\n\n reprocess() {\n this.removeSelectionIfExists();\n this.processorHelpers.reprocess();\n }\n\n removeSelectionIfExists() {\n const {\n collection: {\n itemKey,\n bulkSelect,\n result: { originQuery },\n },\n optimistic: {\n state: { patches },\n },\n predicate,\n } = this;\n\n const itemPredicate = predicate(originQuery);\n\n const filterItem = filterPageByPatches(patches, { itemPredicate, itemKey });\n bulkSelect.select.filter(({ item }) => filterItem(item));\n }\n\n beforeAddNewPages({\n pages,\n currentItemsMap,\n originQuery,\n }: {\n pages: T[][];\n currentItemsMap: Map<string, KeyedItem<T>>;\n originQuery: ComputedQueryFull<F>;\n }) {\n const {\n optimistic: { state },\n collection,\n predicate,\n orderBy: orderByIteratee,\n } = this;\n\n const { itemKey } = collection;\n\n const { patches } = state;\n\n const { limit } = originQuery;\n\n if (!patches.length) {\n return pages;\n }\n\n const itemPredicate = predicate(originQuery);\n const orders =\n this.optimistic._orderByMode === 'orders'\n ? orderByIteratee(originQuery)\n : [];\n\n let finalPages = pages;\n\n finalPages = finalPages.map((page) => {\n return page\n .filter(filterPageByPatches(patches, { itemPredicate, itemKey }))\n .map(transformItemByUpdateAllPatches(patches));\n });\n\n const itemToMerge = prepareItemsToMergeIntoPage(patches, {\n itemPredicate,\n currentItemsMap,\n });\n\n if (!itemToMerge.all.size && this.optimistic._orderByMode === 'orders') {\n return finalPages;\n }\n\n finalPages = finalPages.map((page, index) => {\n const pageWithPatchedItems = itemToMerge.all.size\n ? mergePatchedItems(itemToMerge, {\n page,\n limit,\n itemKey,\n orders,\n itemPredicate,\n })\n : page.map((item) => ({ item }));\n\n return this.optimistic._orderByMode === 'moves'\n ? orderByMoves({\n pageWithPatchedItems,\n pageIndex: index,\n patches,\n currentFiltersKeyHash: collection.query.filtersKeyHash,\n itemKey,\n toMerge: itemToMerge,\n limit,\n })\n : orderByOrders(pageWithPatchedItems, itemToMerge, {\n orders,\n itemKey,\n limit,\n });\n });\n\n return finalPages;\n }\n\n beforeSetTotal({\n total,\n originQuery,\n }: {\n total: number;\n originQuery: ComputedQuery<F>;\n }) {\n const {\n optimistic: { state },\n predicate,\n } = this;\n\n const { patches } = state;\n\n if (!patches.length) {\n return total;\n }\n\n const itemPredicate = predicate(originQuery);\n\n const processedTotal = patches.reduce(\n (\n prev,\n { actionType, patchedItemsEntries, originalItems, originalTotal },\n ) => {\n if (actionType === 'updateAllConst' || actionType === 'deleteAll') {\n const [[key, item] = []] = patchedItemsEntries;\n\n if (key == null || item == null) {\n return prev;\n }\n\n const originalItem = originalItems.get(key);\n\n if (\n itemPredicate(item) &&\n (originalItem == null || !itemPredicate(originalItem))\n ) {\n return prev + originalTotal;\n }\n\n if (\n // if action=deleteAll treat the item as filtered out, no need to check predicate\n (actionType === 'deleteAll' || !itemPredicate(item)) &&\n originalItem != null &&\n itemPredicate(originalItem)\n ) {\n return prev - originalTotal;\n }\n\n return prev;\n }\n\n const patchedItemsTotal = patchedItemsEntries.reduce(\n (acc, [key, item]) => {\n const originalItem = originalItems.get(key);\n const value = (() => {\n switch (actionType) {\n case 'deleteMany':\n if (originalItem != null && itemPredicate(originalItem)) {\n return -1;\n }\n\n return 0;\n case 'updateMany':\n case 'updateAll':\n case 'createMany':\n if (\n itemPredicate(item) &&\n (originalItem == null || !itemPredicate(originalItem))\n ) {\n return 1;\n }\n\n if (\n !itemPredicate(item) &&\n originalItem != null &&\n itemPredicate(originalItem)\n ) {\n return -1;\n }\n return 0;\n }\n\n return 0;\n })();\n return acc + value;\n },\n 0,\n );\n\n return prev + patchedItemsTotal;\n },\n total,\n );\n\n return Math.max(processedTotal, 0);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_mobx","require","_QueryResultSimulationDefault","_CollectionOptimisticHelpers","_optimisticSimulation","_orderByOrders","_orderByMoves","CollectionOptimisticProcessor","constructor","params","_defineProperty2","default","collection","processorHelpers","CollectionOptimisticProcessorHelpers","optimistic","resultSimulationDefault","QueryResultSimulationDefault","predicate","orderBy","makeObservable","reprocess","action","bound","beforeAddNewPages","beforeSetTotal","_register","emitter","on","events","removeSelectionIfExists","itemKey","bulkSelect","result","originQuery","state","patches","itemPredicate","filterItem","filterPageByPatches","select","filter","item","pages","currentItemsMap","orderByIteratee","limit","length","orders","_orderByMode","finalPages","map","page","transformItemByUpdateAllPatches","itemToMerge","prepareItemsToMergeIntoPage","all","size","index","pageWithPatchedItems","mergePatchedItems","orderByMoves","pageIndex","currentFiltersKeyHash","query","filtersKeyHash","toMerge","orderByOrders","total","processedTotal","reduce","prev","actionType","patchedItemsEntries","originalItems","originalTotal","key","originalItem","get","patchedItemsTotal","acc","value","Math","max","exports"],"sources":["../../../src/state/CollectionOptimisticProcessor.ts"],"sourcesContent":["import {\n ComputedQuery,\n ComputedQueryFull,\n FiltersMap,\n KeyedItem,\n} from '../model';\nimport { CollectionState } from './CollectionState';\nimport { action, makeObservable } from 'mobx';\nimport { Order, QueryResultSimulation } from './QueryResultSimulation';\nimport { QueryResultSimulationDefault } from './QueryResultSimulationDefault';\nimport { TypedEmitter } from '../util';\nimport { CollectionOptimisticProcessorHelpers } from './CollectionOptimisticHelpers';\nimport { CollectionOptimisticActionsState } from './CollectionOptimisticActionsState';\nimport {\n filterPageByPatches,\n mergePatchedItems,\n prepareItemsToMergeIntoPage,\n transformItemByUpdateAllPatches,\n} from './optimistic-simulation';\nimport { orderByOrders } from './optimistic-simulation/orderByOrders';\nimport { orderByMoves } from './optimistic-simulation/orderByMoves';\n\ninterface Optimistic<T> {\n _orderByMode: 'orders' | 'moves';\n readonly state: CollectionOptimisticActionsState<T>;\n readonly events: TypedEmitter<{\n reprocess: () => void;\n updated: () => void;\n }>;\n}\n\nexport interface CollectionOptimisticProcessorParams<T, F extends FiltersMap>\n extends Partial<QueryResultSimulation<T, F>> {\n readonly collection: CollectionState<T, F>;\n readonly optimistic: Optimistic<T>;\n}\n\nexport class CollectionOptimisticProcessor<T, F extends FiltersMap> {\n readonly collection: CollectionState<T, F>;\n readonly processorHelpers: CollectionOptimisticProcessorHelpers<T, F>;\n readonly optimistic: Optimistic<T>;\n\n readonly resultSimulationDefault: QueryResultSimulation<T, F>;\n readonly predicate: (computedQuery: ComputedQuery<F>) => (item: T) => boolean;\n readonly orderBy: (computedQuery: ComputedQuery<F>) => Order<T>[];\n\n constructor(params: CollectionOptimisticProcessorParams<T, F>) {\n this.collection = params.collection;\n this.processorHelpers = new CollectionOptimisticProcessorHelpers(\n this.collection,\n );\n this.optimistic = params.optimistic;\n\n this.resultSimulationDefault = new QueryResultSimulationDefault({\n collection: this.collection,\n });\n this.predicate = params.predicate ?? this.resultSimulationDefault.predicate;\n this.orderBy = params.orderBy ?? this.resultSimulationDefault.orderBy;\n\n makeObservable(this, {\n reprocess: action.bound,\n beforeAddNewPages: action.bound,\n beforeSetTotal: action.bound,\n });\n\n this._register();\n }\n\n _register() {\n this.collection.emitter.on('beforeAddNewPages', this.beforeAddNewPages);\n this.collection.emitter.on('beforeSetTotal', this.beforeSetTotal);\n this.optimistic.events.on('reprocess', this.reprocess);\n }\n\n reprocess() {\n this.removeSelectionIfExists();\n this.processorHelpers.reprocess();\n }\n\n removeSelectionIfExists() {\n const {\n collection: {\n itemKey,\n bulkSelect,\n result: { originQuery },\n },\n optimistic: {\n state: { patches },\n },\n predicate,\n } = this;\n\n const itemPredicate = predicate(originQuery);\n\n const filterItem = filterPageByPatches(patches, { itemPredicate, itemKey });\n bulkSelect.select.filter(({ item }) => filterItem(item));\n }\n\n beforeAddNewPages({\n pages,\n currentItemsMap,\n originQuery,\n }: {\n pages: T[][];\n currentItemsMap: Map<string, KeyedItem<T>>;\n originQuery: ComputedQueryFull<F>;\n }) {\n const {\n optimistic: { state },\n collection,\n predicate,\n orderBy: orderByIteratee,\n } = this;\n\n const { itemKey } = collection;\n\n const { patches } = state;\n\n const { limit } = originQuery;\n\n if (!patches.length) {\n return pages;\n }\n\n const itemPredicate = predicate(originQuery);\n const orders =\n this.optimistic._orderByMode === 'orders'\n ? orderByIteratee(originQuery)\n : [];\n\n let finalPages = pages;\n\n finalPages = finalPages.map((page) => {\n return page\n .filter(filterPageByPatches(patches, { itemPredicate, itemKey }))\n .map(transformItemByUpdateAllPatches(patches));\n });\n\n const itemToMerge = prepareItemsToMergeIntoPage(patches, {\n itemPredicate,\n currentItemsMap,\n });\n\n if (!itemToMerge.all.size && this.optimistic._orderByMode === 'orders') {\n return finalPages;\n }\n\n finalPages = finalPages.map((page, index) => {\n const pageWithPatchedItems = itemToMerge.all.size\n ? mergePatchedItems(itemToMerge, {\n page,\n limit,\n itemKey,\n orders,\n itemPredicate,\n })\n : page.map((item) => ({ item }));\n\n return this.optimistic._orderByMode === 'moves'\n ? orderByMoves({\n pageWithPatchedItems,\n pageIndex: index,\n patches,\n currentFiltersKeyHash: collection.query.filtersKeyHash,\n itemKey,\n toMerge: itemToMerge,\n limit,\n })\n : orderByOrders(pageWithPatchedItems, itemToMerge, {\n orders,\n itemKey,\n limit,\n });\n });\n\n return finalPages;\n }\n\n beforeSetTotal({\n total,\n originQuery,\n }: {\n total: number;\n originQuery: ComputedQuery<F>;\n }) {\n const {\n optimistic: { state },\n predicate,\n } = this;\n\n const { patches } = state;\n\n if (!patches.length) {\n return total;\n }\n\n const itemPredicate = predicate(originQuery);\n\n const processedTotal = patches.reduce(\n (\n prev,\n { actionType, patchedItemsEntries, originalItems, originalTotal },\n ) => {\n if (actionType === 'updateAllConst' || actionType === 'deleteAll') {\n const [[key, item] = []] = patchedItemsEntries;\n\n if (key == null || item == null) {\n return prev;\n }\n\n const originalItem = originalItems.get(key);\n\n if (\n itemPredicate(item) &&\n (originalItem == null || !itemPredicate(originalItem))\n ) {\n return prev + originalTotal;\n }\n\n if (\n // if action=deleteAll treat the item as filtered out, no need to check predicate\n (actionType === 'deleteAll' || !itemPredicate(item)) &&\n originalItem != null &&\n itemPredicate(originalItem)\n ) {\n return prev - originalTotal;\n }\n\n return prev;\n }\n\n const patchedItemsTotal = patchedItemsEntries.reduce(\n (acc, [key, item]) => {\n const originalItem = originalItems.get(key);\n const value = (() => {\n switch (actionType) {\n case 'deleteMany':\n if (originalItem != null && itemPredicate(originalItem)) {\n return -1;\n }\n\n return 0;\n case 'updateMany':\n case 'updateAll':\n case 'createMany':\n if (\n itemPredicate(item) &&\n (originalItem == null || !itemPredicate(originalItem))\n ) {\n return 1;\n }\n\n if (\n !itemPredicate(item) &&\n originalItem != null &&\n itemPredicate(originalItem)\n ) {\n return -1;\n }\n return 0;\n }\n\n return 0;\n })();\n return acc + value;\n },\n 0,\n );\n\n return prev + patchedItemsTotal;\n },\n total,\n );\n\n return Math.max(processedTotal, 0);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|