@wix/bex-core 2.216.0 → 2.217.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.
Files changed (31) hide show
  1. package/dist/cjs/InMemoryBackend/InMemoryBackend.js +11 -0
  2. package/dist/cjs/InMemoryBackend/InMemoryBackend.js.map +1 -1
  3. package/dist/cjs/assets/locale/messages_es.json +2 -2
  4. package/dist/cjs/state/CollectionState.js +13 -2
  5. package/dist/cjs/state/CollectionState.js.map +1 -1
  6. package/dist/cjs/state/FedopsReporter.js +3 -5
  7. package/dist/cjs/state/FedopsReporter.js.map +1 -1
  8. package/dist/cjs/state/FetchTotalState.js +1 -0
  9. package/dist/cjs/state/FetchTotalState.js.map +1 -1
  10. package/dist/cjs/testkit/ProductsCollectionState.driver.js +5 -0
  11. package/dist/cjs/testkit/ProductsCollectionState.driver.js.map +1 -1
  12. package/dist/esm/InMemoryBackend/InMemoryBackend.js +10 -0
  13. package/dist/esm/InMemoryBackend/InMemoryBackend.js.map +1 -1
  14. package/dist/esm/assets/locale/messages_es.json +2 -2
  15. package/dist/esm/state/CollectionState.js +5 -2
  16. package/dist/esm/state/CollectionState.js.map +1 -1
  17. package/dist/esm/state/FedopsReporter.js +3 -3
  18. package/dist/esm/state/FedopsReporter.js.map +1 -1
  19. package/dist/esm/state/FetchTotalState.js +1 -0
  20. package/dist/esm/state/FetchTotalState.js.map +1 -1
  21. package/dist/esm/testkit/ProductsCollectionState.driver.js +5 -0
  22. package/dist/esm/testkit/ProductsCollectionState.driver.js.map +1 -1
  23. package/dist/types/InMemoryBackend/InMemoryBackend.d.ts +2 -0
  24. package/dist/types/InMemoryBackend/InMemoryBackend.d.ts.map +1 -1
  25. package/dist/types/state/CollectionState.d.ts +14 -3
  26. package/dist/types/state/CollectionState.d.ts.map +1 -1
  27. package/dist/types/state/FedopsReporter.d.ts.map +1 -1
  28. package/dist/types/state/FetchTotalState.d.ts.map +1 -1
  29. package/dist/types/testkit/ProductsCollectionState.driver.d.ts +1 -0
  30. package/dist/types/testkit/ProductsCollectionState.driver.d.ts.map +1 -1
  31. package/package.json +2 -2
@@ -32,6 +32,17 @@ class InMemoryBackend {
32
32
  await this.simulateAsyncDelay();
33
33
  return this.fetchDataSync(query);
34
34
  });
35
+ (0, _defineProperty2.default)(this, "fetchTotal", async query => {
36
+ const fetchTotalStartPromises = this.events.listeners('fetchTotalStart').map(listener => listener(query));
37
+ if (fetchTotalStartPromises.length) {
38
+ await Promise.all(fetchTotalStartPromises);
39
+ }
40
+ await this.simulateAsyncDelay();
41
+ return this.fetchDataSync({
42
+ ...query,
43
+ limit: 1
44
+ }).total ?? 0;
45
+ });
35
46
  (0, _defineProperty2.default)(this, "deleteMany", async (items, params) => {
36
47
  await this.simulateAsyncDelay(params);
37
48
  items.forEach(item => this.map.delete(this.itemKey(item)));
@@ -1 +1 @@
1
- {"version":3,"names":["_chance","require","_orderBy","_interopRequireDefault","_shuffle","_events","_core","InMemoryBackend","constructor","params","_defineProperty2","default","EventEmitter","Chance","query","fetchDataStartPromises","events","listeners","map","listener","length","Promise","all","simulateAsyncDelay","fetchDataSync","items","forEach","item","delete","itemKey","set","Map","index","values","predicate","_","Math","floor","random","available","shuffle","find","enableTotal","createOne","paginationMode","orderBy","projection","initialTotal","total","delay","min","max","excludeOrdinalFilters","newList","throwError","chance","resolve","setTimeout","integer","Array","fill","getOrderBy","ordinal","_getOrdinal","filters","allItems","orders","itemsAfterOrdering","fieldName","order","size","get","itemsAfterFiltering","filter","offset","cursor","findIndex","value","itemsAfterSlicing","slice","limit","cursorItem","itemsAfterFieldsProjection","deleteAll","isItemDeleted","emit","clear","updateMany","categoriesOrdinal","category","hashQueryKey","Object","fromEntries","entries","key","includes","has","move","moveStartPromises","from","after","array","fromKey","toKey","fromIndex","splice","toIndex","i","len","updateAll","patch","patchedItems","unshift","newItems","push","getRandomItems","count","page","pickset","undefined","exports"],"sources":["../../../src/InMemoryBackend/InMemoryBackend.ts"],"sourcesContent":["import { FiltersMap, RawFilters } from '../model';\nimport { Chance } from 'chance';\nimport orderBy from 'lodash/orderBy';\nimport shuffle from 'lodash/shuffle';\nimport { ListIteratee } from 'lodash';\nimport { EventEmitter } from 'events';\nimport { TypedEmitter } from '../util';\nimport { hashQueryKey } from 'react-query/core';\n\ninterface Order<T> {\n fieldName: ListIteratee<T>;\n order: 'asc' | 'desc';\n}\n\ninterface IndexedItem<T> {\n item: T;\n index: number;\n}\n\nexport type TransformPatch<T> = (item: T) => Partial<T>;\n\nexport interface BackendQuery<F extends FiltersMap = FiltersMap> {\n /**\n * Number of items to fetch for each page\n */\n limit: number;\n /**\n * The index of the item to start fetching items from.<br>\n * Relevant for APIs that support offset pagination.<br>\n * Not available on `CursorQuery`\n */\n offset?: number;\n page?: number;\n /**\n * Current search term (defaults to `undefined` for empty search)\n */\n search?: string;\n /**\n * The `cursor` returned from the server, to be sent back to it in the next call.<br>\n * Relevant for APIs that support cursor pagination.<br>\n * Not available on `OffsetQuery`\n */\n cursor?: string | null;\n /**\n * Current state of the filters. Each key holds the value of the filter, according to its type, defined in [CollectionConfig](./?path=/story/common-hooks--usecollection).\n */\n filters?: RawFilters<F>;\n\n /**\n * Current sort applied to the collection.\n */\n sort?: { fieldName: string; order: 'asc' | 'desc' }[];\n\n /**\n * Array of projected fields. A list of specific field names to return. If `fieldsets` are also specified, the union of `fieldsets` and `fields` is returned.\n */\n fields?: string[];\n /**\n * Array of named, predefined sets of projected fields. A array of predefined named sets of fields to be returned. Specifying multiple `fieldsets` will return the union of fields from all sets. If `fields` are also specified, the union of `fieldsets` and `fields` is returned.\n */\n fieldsset?: string[];\n}\n\nexport interface Delay {\n min: number;\n max: number;\n}\n\ninterface SubmitParams {\n delay?: Delay;\n throwError?: () => unknown;\n}\n\ninterface MoveEvent<T, F extends FiltersMap> {\n from: IndexedItem<T>;\n after: IndexedItem<T> | null;\n over: IndexedItem<T>;\n filters: RawFilters<F>;\n}\n\nexport interface InMemoryBackendParams<T, F extends FiltersMap = FiltersMap> {\n paginationMode?: 'offset' | 'cursor';\n /**\n * A callback function for each item creation\n */\n createOne: (index: number) => T;\n /**\n * A callback function that accepts an item and returns a unique ID of it. typically `item.id`.\n */\n itemKey: (item: T) => string;\n /**\n * A function that accepts a subset of [ComputedQuery](./?path=/story/common-types--computedquery) sent by the client and returns another function that accepts an item and should return a boolean that indicates whether the item passes the query filtering or not.\n */\n predicate?: (query: BackendQuery<F>) => (item: T) => boolean;\n /**\n * A function that accepts a subset of [ComputedQuery](./?path=/story/common-types--computedquery) sent by the client and returns another function that accepts an item and should returns a list of rules to order the items by\n */\n orderBy?: (query: BackendQuery<F>) => Order<T>[];\n\n /**\n * A function that accepts a subset of [ComputedQuery](./?path=/story/common-types--computedquery) sent by the client and returns a list of fields to project from the item\n */\n projection?: (query: BackendQuery<F>) => (item: T) => T;\n /**\n * Simulates API latency\n * @default { min: 0, max: 5 }\n */\n delay?: { min: number; max: number };\n /**\n * Total number of items to store in the backend\n */\n total: number;\n /**\n * Enable total for the backend. Defaults to \"true\"\n */\n enableTotal?: boolean;\n\n excludeOrdinalFilters?: string[];\n}\n\nexport class InMemoryBackend<T, F extends FiltersMap = FiltersMap> {\n readonly createOne: InMemoryBackendParams<T, F>['createOne'];\n readonly itemKey: InMemoryBackendParams<T, F>['itemKey'];\n readonly predicate: (query: BackendQuery<F>) => (item: T) => boolean;\n readonly orderBy?: (query: BackendQuery<F>) => Order<T>[];\n readonly projection;\n readonly initialTotal: number;\n readonly delay: { min: number; max: number };\n readonly paginationMode;\n readonly enableTotal?: boolean;\n\n readonly excludeOrdinalFilters;\n\n readonly events = new EventEmitter() as TypedEmitter<{\n updatedMany: () => void;\n updateAll: () => void;\n deleteAll: () => void;\n fetchDataStart: (query: BackendQuery<F>) => void | Promise<void>;\n moveStart: (events: MoveEvent<T, F>[]) => void | Promise<void>;\n }>;\n\n map: Map<string, T>;\n\n readonly chance = new Chance();\n\n constructor(params: InMemoryBackendParams<T, F>) {\n this.enableTotal = params.enableTotal ?? true;\n this.createOne = params.createOne;\n this.itemKey = params.itemKey;\n this.paginationMode = params.paginationMode;\n this.predicate = params.predicate ?? (() => () => true);\n this.orderBy = params.orderBy;\n this.projection = params.projection;\n this.initialTotal = params.total;\n this.delay = params.delay ?? { min: 0, max: 5 };\n this.excludeOrdinalFilters = params.excludeOrdinalFilters ?? [];\n this.map = new Map<string, T>(\n this.newList(params.total).map((item) => [this.itemKey(item), item]),\n );\n }\n\n private async simulateAsyncDelay({ delay, throwError }: SubmitParams = {}) {\n const { chance } = this;\n await new Promise((resolve) =>\n setTimeout(resolve, chance.integer(delay ?? this.delay)),\n ); // simulate async\n\n await throwError?.();\n }\n\n private newList(length: number) {\n return new Array(length)\n .fill(null)\n .map((_, index) => this.createOne(index));\n }\n\n fetchDataSync(query: BackendQuery<F>) {\n const { itemKey, predicate, orderBy: getOrderBy, paginationMode } = this;\n\n const ordinal = this._getOrdinal(query.filters ?? {});\n\n const allItems = this.values;\n\n const orders = getOrderBy?.(query);\n\n let itemsAfterOrdering;\n\n if (orders?.length) {\n itemsAfterOrdering = orderBy(\n allItems,\n orders.map(({ fieldName }) => fieldName),\n orders.map(({ order }) => order),\n );\n } else if (ordinal.size) {\n itemsAfterOrdering = orderBy(\n allItems,\n (item) => ordinal.get(itemKey(item)),\n ['asc'],\n );\n } else {\n itemsAfterOrdering = allItems;\n }\n\n const itemsAfterFiltering = itemsAfterOrdering.filter(predicate(query));\n\n let offset;\n\n if (paginationMode === 'cursor') {\n offset = query.cursor\n ? itemsAfterFiltering.findIndex(\n (value) => itemKey(value) === query.cursor,\n )\n : 0;\n } else {\n offset = query.cursor\n ? itemsAfterFiltering.findIndex(\n (value) => itemKey(value) === query.cursor,\n )\n : query.offset ?? 0;\n }\n\n const itemsAfterSlicing = itemsAfterFiltering.slice(\n offset,\n offset + query.limit,\n );\n\n const cursorItem = itemsAfterFiltering[offset + query.limit] as\n | T\n | undefined;\n\n const itemsAfterFieldsProjection = this.projection\n ? itemsAfterSlicing.map(this.projection(query))\n : itemsAfterSlicing;\n\n return {\n items: itemsAfterFieldsProjection,\n ...(this.enableTotal\n ? { total: itemsAfterFiltering.length, available: allItems.length }\n : {}),\n cursor: cursorItem && itemKey(cursorItem),\n };\n }\n\n fetchData = async (query: BackendQuery<F>) => {\n const fetchDataStartPromises = this.events\n .listeners('fetchDataStart')\n .map((listener) => listener(query));\n\n if (fetchDataStartPromises.length) {\n await Promise.all(fetchDataStartPromises);\n }\n\n await this.simulateAsyncDelay();\n return this.fetchDataSync(query);\n };\n\n deleteMany = async (items: T[], params?: SubmitParams) => {\n await this.simulateAsyncDelay(params);\n items.forEach((item) => this.map.delete(this.itemKey(item)));\n };\n\n async deleteAll(\n params: {\n delay?: Delay;\n throwError?: () => unknown;\n filters?: RawFilters<F>;\n } = {},\n ) {\n const { filters = {} } = params;\n\n await this.simulateAsyncDelay(params);\n const { predicate, itemKey } = this;\n\n const isItemDeleted = predicate({\n filters,\n limit: 1,\n });\n\n for (const item of this.values) {\n if (isItemDeleted(item)) {\n this.map.delete(itemKey(item));\n }\n }\n\n this.events.emit('deleteAll');\n }\n\n clear() {\n this.map.clear();\n }\n\n update = async (item: T) => {\n await this.simulateAsyncDelay();\n this.map.set(this.itemKey(item), item);\n };\n\n async updateMany(items: T[], params: SubmitParams = {}) {\n await this.simulateAsyncDelay(params);\n for (const item of items) {\n this.map.set(this.itemKey(item), item);\n }\n this.events.emit('updatedMany');\n }\n readonly categoriesOrdinal: Map<string, Map<string, number>> = new Map();\n\n _getOrdinal(filters: RawFilters<F>) {\n const { categoriesOrdinal, excludeOrdinalFilters } = this;\n\n const category = hashQueryKey([\n {\n filters: Object.fromEntries(\n Object.entries(filters).filter(\n ([key]) => !excludeOrdinalFilters.includes(key),\n ),\n ),\n },\n ]);\n\n const ordinal =\n categoriesOrdinal.get(category) ?? new Map<string, number>();\n\n if (!categoriesOrdinal.has(category)) {\n categoriesOrdinal.set(category, ordinal);\n }\n\n return ordinal;\n }\n\n async move(\n events: MoveEvent<T, F>[],\n params: {\n delay?: Delay;\n throwError?: () => unknown;\n } = {},\n ) {\n const { itemKey } = this;\n\n const moveStartPromises = this.events\n .listeners('moveStart')\n .map((listener) => listener(events));\n\n if (moveStartPromises.length) {\n await Promise.all(moveStartPromises);\n }\n\n await this.simulateAsyncDelay(params);\n\n for (const { from, after, filters } of events) {\n const ordinal = this._getOrdinal(filters);\n\n const array = ordinal.size\n ? orderBy(this.values.slice(), (item) => ordinal.get(itemKey(item)), [\n 'asc',\n ])\n : this.values.slice();\n\n const fromKey = itemKey(from.item);\n const toKey = after != null ? itemKey(after.item) : null;\n\n const fromIndex = array.findIndex((item) => fromKey === itemKey(item));\n if (fromIndex !== -1) {\n array.splice(fromIndex, 1);\n }\n\n if (toKey != null) {\n const toIndex = array.findIndex((item) => toKey === itemKey(item));\n if (toIndex !== -1) {\n array.splice(toIndex + 1, 0, from.item);\n }\n } else {\n array.splice(0, 0, from.item);\n }\n\n ordinal.clear();\n for (let i = 0, len = array.length; i < len; i++) {\n ordinal.set(itemKey(array[i]), i);\n }\n }\n }\n\n async updateAll(\n patch: TransformPatch<T>,\n params: {\n delay?: Delay;\n throwError?: () => unknown;\n filters?: RawFilters<F>;\n } = {},\n ) {\n const { filters = {} } = params;\n\n await this.simulateAsyncDelay(params);\n const { predicate } = this;\n\n const itemsAfterFiltering = this.values.filter(\n predicate({\n filters,\n limit: 1,\n }),\n );\n\n const patchedItems = itemsAfterFiltering.map((value) => ({\n ...value,\n ...patch(value),\n }));\n\n for (const item of patchedItems) {\n this.map.set(this.itemKey(item), item);\n }\n\n this.events.emit('updateAll');\n }\n\n async unshift(newItems: T[]) {\n await this.simulateAsyncDelay();\n const map = new Map<string, T>();\n\n for (const item of newItems) {\n map.set(this.itemKey(item), item);\n }\n\n for (const [key, value] of Array.from(this.map.entries())) {\n map.set(key, value);\n }\n\n this.map = map;\n }\n\n async push(newItems: T[]) {\n await this.simulateAsyncDelay();\n\n for (const item of newItems) {\n this.map.set(this.itemKey(item), item);\n }\n }\n\n elementAt = (index: number) => this.values[index];\n\n getRandomItems(\n count: number,\n { limit, page }: { limit: number; page: number },\n ) {\n const { chance, values } = this;\n const offset = (page - 1) * limit;\n return chance.pickset(values.slice(offset, offset + limit), count);\n }\n\n randomItem = (predicate = (_: T) => true) => {\n const index = Math.floor(Math.random() * this.available);\n return {\n index,\n item: shuffle(this.values).find(predicate),\n };\n };\n\n get values() {\n return Array.from(this.map.values());\n }\n\n get available() {\n return this.map.size;\n }\n\n get(key?: string): T | undefined {\n if (key == null) {\n return undefined;\n }\n return this.map.get(key);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_chance","require","_orderBy","_interopRequireDefault","_shuffle","_events","_core","InMemoryBackend","constructor","params","_defineProperty2","default","EventEmitter","Chance","query","fetchDataStartPromises","events","listeners","map","listener","length","Promise","all","simulateAsyncDelay","fetchDataSync","fetchTotalStartPromises","limit","total","items","forEach","item","delete","itemKey","set","Map","index","values","predicate","_","Math","floor","random","available","shuffle","find","enableTotal","createOne","paginationMode","orderBy","projection","initialTotal","delay","min","max","excludeOrdinalFilters","newList","throwError","chance","resolve","setTimeout","integer","Array","fill","getOrderBy","ordinal","_getOrdinal","filters","allItems","orders","itemsAfterOrdering","fieldName","order","size","get","itemsAfterFiltering","filter","offset","cursor","findIndex","value","itemsAfterSlicing","slice","cursorItem","itemsAfterFieldsProjection","deleteAll","isItemDeleted","emit","clear","updateMany","categoriesOrdinal","category","hashQueryKey","Object","fromEntries","entries","key","includes","has","move","moveStartPromises","from","after","array","fromKey","toKey","fromIndex","splice","toIndex","i","len","updateAll","patch","patchedItems","unshift","newItems","push","getRandomItems","count","page","pickset","undefined","exports"],"sources":["../../../src/InMemoryBackend/InMemoryBackend.ts"],"sourcesContent":["import { FiltersMap, RawFilters } from '../model';\nimport { Chance } from 'chance';\nimport orderBy from 'lodash/orderBy';\nimport shuffle from 'lodash/shuffle';\nimport { ListIteratee } from 'lodash';\nimport { EventEmitter } from 'events';\nimport { TypedEmitter } from '../util';\nimport { hashQueryKey } from 'react-query/core';\n\ninterface Order<T> {\n fieldName: ListIteratee<T>;\n order: 'asc' | 'desc';\n}\n\ninterface IndexedItem<T> {\n item: T;\n index: number;\n}\n\nexport type TransformPatch<T> = (item: T) => Partial<T>;\n\nexport interface BackendQuery<F extends FiltersMap = FiltersMap> {\n /**\n * Number of items to fetch for each page\n */\n limit: number;\n /**\n * The index of the item to start fetching items from.<br>\n * Relevant for APIs that support offset pagination.<br>\n * Not available on `CursorQuery`\n */\n offset?: number;\n page?: number;\n /**\n * Current search term (defaults to `undefined` for empty search)\n */\n search?: string;\n /**\n * The `cursor` returned from the server, to be sent back to it in the next call.<br>\n * Relevant for APIs that support cursor pagination.<br>\n * Not available on `OffsetQuery`\n */\n cursor?: string | null;\n /**\n * Current state of the filters. Each key holds the value of the filter, according to its type, defined in [CollectionConfig](./?path=/story/common-hooks--usecollection).\n */\n filters?: RawFilters<F>;\n\n /**\n * Current sort applied to the collection.\n */\n sort?: { fieldName: string; order: 'asc' | 'desc' }[];\n\n /**\n * Array of projected fields. A list of specific field names to return. If `fieldsets` are also specified, the union of `fieldsets` and `fields` is returned.\n */\n fields?: string[];\n /**\n * Array of named, predefined sets of projected fields. A array of predefined named sets of fields to be returned. Specifying multiple `fieldsets` will return the union of fields from all sets. If `fields` are also specified, the union of `fieldsets` and `fields` is returned.\n */\n fieldsset?: string[];\n}\n\nexport interface Delay {\n min: number;\n max: number;\n}\n\ninterface SubmitParams {\n delay?: Delay;\n throwError?: () => unknown;\n}\n\ninterface MoveEvent<T, F extends FiltersMap> {\n from: IndexedItem<T>;\n after: IndexedItem<T> | null;\n over: IndexedItem<T>;\n filters: RawFilters<F>;\n}\n\nexport interface InMemoryBackendParams<T, F extends FiltersMap = FiltersMap> {\n paginationMode?: 'offset' | 'cursor';\n /**\n * A callback function for each item creation\n */\n createOne: (index: number) => T;\n /**\n * A callback function that accepts an item and returns a unique ID of it. typically `item.id`.\n */\n itemKey: (item: T) => string;\n /**\n * A function that accepts a subset of [ComputedQuery](./?path=/story/common-types--computedquery) sent by the client and returns another function that accepts an item and should return a boolean that indicates whether the item passes the query filtering or not.\n */\n predicate?: (query: BackendQuery<F>) => (item: T) => boolean;\n /**\n * A function that accepts a subset of [ComputedQuery](./?path=/story/common-types--computedquery) sent by the client and returns another function that accepts an item and should returns a list of rules to order the items by\n */\n orderBy?: (query: BackendQuery<F>) => Order<T>[];\n\n /**\n * A function that accepts a subset of [ComputedQuery](./?path=/story/common-types--computedquery) sent by the client and returns a list of fields to project from the item\n */\n projection?: (query: BackendQuery<F>) => (item: T) => T;\n /**\n * Simulates API latency\n * @default { min: 0, max: 5 }\n */\n delay?: { min: number; max: number };\n /**\n * Total number of items to store in the backend\n */\n total: number;\n /**\n * Enable total for the backend. Defaults to \"true\"\n */\n enableTotal?: boolean;\n\n excludeOrdinalFilters?: string[];\n}\n\nexport class InMemoryBackend<T, F extends FiltersMap = FiltersMap> {\n readonly createOne: InMemoryBackendParams<T, F>['createOne'];\n readonly itemKey: InMemoryBackendParams<T, F>['itemKey'];\n readonly predicate: (query: BackendQuery<F>) => (item: T) => boolean;\n readonly orderBy?: (query: BackendQuery<F>) => Order<T>[];\n readonly projection;\n readonly initialTotal: number;\n readonly delay: { min: number; max: number };\n readonly paginationMode;\n readonly enableTotal?: boolean;\n\n readonly excludeOrdinalFilters;\n\n readonly events = new EventEmitter() as TypedEmitter<{\n updatedMany: () => void;\n updateAll: () => void;\n deleteAll: () => void;\n fetchDataStart: (query: BackendQuery<F>) => void | Promise<void>;\n fetchTotalStart: (query: BackendQuery<F>) => void | Promise<void>;\n moveStart: (events: MoveEvent<T, F>[]) => void | Promise<void>;\n }>;\n\n map: Map<string, T>;\n\n readonly chance = new Chance();\n\n constructor(params: InMemoryBackendParams<T, F>) {\n this.enableTotal = params.enableTotal ?? true;\n this.createOne = params.createOne;\n this.itemKey = params.itemKey;\n this.paginationMode = params.paginationMode;\n this.predicate = params.predicate ?? (() => () => true);\n this.orderBy = params.orderBy;\n this.projection = params.projection;\n this.initialTotal = params.total;\n this.delay = params.delay ?? { min: 0, max: 5 };\n this.excludeOrdinalFilters = params.excludeOrdinalFilters ?? [];\n this.map = new Map<string, T>(\n this.newList(params.total).map((item) => [this.itemKey(item), item]),\n );\n }\n\n private async simulateAsyncDelay({ delay, throwError }: SubmitParams = {}) {\n const { chance } = this;\n await new Promise((resolve) =>\n setTimeout(resolve, chance.integer(delay ?? this.delay)),\n ); // simulate async\n\n await throwError?.();\n }\n\n private newList(length: number) {\n return new Array(length)\n .fill(null)\n .map((_, index) => this.createOne(index));\n }\n\n fetchDataSync(query: BackendQuery<F>) {\n const { itemKey, predicate, orderBy: getOrderBy, paginationMode } = this;\n\n const ordinal = this._getOrdinal(query.filters ?? {});\n\n const allItems = this.values;\n\n const orders = getOrderBy?.(query);\n\n let itemsAfterOrdering;\n\n if (orders?.length) {\n itemsAfterOrdering = orderBy(\n allItems,\n orders.map(({ fieldName }) => fieldName),\n orders.map(({ order }) => order),\n );\n } else if (ordinal.size) {\n itemsAfterOrdering = orderBy(\n allItems,\n (item) => ordinal.get(itemKey(item)),\n ['asc'],\n );\n } else {\n itemsAfterOrdering = allItems;\n }\n\n const itemsAfterFiltering = itemsAfterOrdering.filter(predicate(query));\n\n let offset;\n\n if (paginationMode === 'cursor') {\n offset = query.cursor\n ? itemsAfterFiltering.findIndex(\n (value) => itemKey(value) === query.cursor,\n )\n : 0;\n } else {\n offset = query.cursor\n ? itemsAfterFiltering.findIndex(\n (value) => itemKey(value) === query.cursor,\n )\n : query.offset ?? 0;\n }\n\n const itemsAfterSlicing = itemsAfterFiltering.slice(\n offset,\n offset + query.limit,\n );\n\n const cursorItem = itemsAfterFiltering[offset + query.limit] as\n | T\n | undefined;\n\n const itemsAfterFieldsProjection = this.projection\n ? itemsAfterSlicing.map(this.projection(query))\n : itemsAfterSlicing;\n\n return {\n items: itemsAfterFieldsProjection,\n ...(this.enableTotal\n ? { total: itemsAfterFiltering.length, available: allItems.length }\n : {}),\n cursor: cursorItem && itemKey(cursorItem),\n };\n }\n\n fetchData = async (query: BackendQuery<F>) => {\n const fetchDataStartPromises = this.events\n .listeners('fetchDataStart')\n .map((listener) => listener(query));\n\n if (fetchDataStartPromises.length) {\n await Promise.all(fetchDataStartPromises);\n }\n\n await this.simulateAsyncDelay();\n return this.fetchDataSync(query);\n };\n\n fetchTotal = async (query: BackendQuery<F>) => {\n const fetchTotalStartPromises = this.events\n .listeners('fetchTotalStart')\n .map((listener) => listener(query));\n\n if (fetchTotalStartPromises.length) {\n await Promise.all(fetchTotalStartPromises);\n }\n await this.simulateAsyncDelay();\n return this.fetchDataSync({ ...query, limit: 1 }).total ?? 0;\n };\n\n deleteMany = async (items: T[], params?: SubmitParams) => {\n await this.simulateAsyncDelay(params);\n items.forEach((item) => this.map.delete(this.itemKey(item)));\n };\n\n async deleteAll(\n params: {\n delay?: Delay;\n throwError?: () => unknown;\n filters?: RawFilters<F>;\n } = {},\n ) {\n const { filters = {} } = params;\n\n await this.simulateAsyncDelay(params);\n const { predicate, itemKey } = this;\n\n const isItemDeleted = predicate({\n filters,\n limit: 1,\n });\n\n for (const item of this.values) {\n if (isItemDeleted(item)) {\n this.map.delete(itemKey(item));\n }\n }\n\n this.events.emit('deleteAll');\n }\n\n clear() {\n this.map.clear();\n }\n\n update = async (item: T) => {\n await this.simulateAsyncDelay();\n this.map.set(this.itemKey(item), item);\n };\n\n async updateMany(items: T[], params: SubmitParams = {}) {\n await this.simulateAsyncDelay(params);\n for (const item of items) {\n this.map.set(this.itemKey(item), item);\n }\n this.events.emit('updatedMany');\n }\n readonly categoriesOrdinal: Map<string, Map<string, number>> = new Map();\n\n _getOrdinal(filters: RawFilters<F>) {\n const { categoriesOrdinal, excludeOrdinalFilters } = this;\n\n const category = hashQueryKey([\n {\n filters: Object.fromEntries(\n Object.entries(filters).filter(\n ([key]) => !excludeOrdinalFilters.includes(key),\n ),\n ),\n },\n ]);\n\n const ordinal =\n categoriesOrdinal.get(category) ?? new Map<string, number>();\n\n if (!categoriesOrdinal.has(category)) {\n categoriesOrdinal.set(category, ordinal);\n }\n\n return ordinal;\n }\n\n async move(\n events: MoveEvent<T, F>[],\n params: {\n delay?: Delay;\n throwError?: () => unknown;\n } = {},\n ) {\n const { itemKey } = this;\n\n const moveStartPromises = this.events\n .listeners('moveStart')\n .map((listener) => listener(events));\n\n if (moveStartPromises.length) {\n await Promise.all(moveStartPromises);\n }\n\n await this.simulateAsyncDelay(params);\n\n for (const { from, after, filters } of events) {\n const ordinal = this._getOrdinal(filters);\n\n const array = ordinal.size\n ? orderBy(this.values.slice(), (item) => ordinal.get(itemKey(item)), [\n 'asc',\n ])\n : this.values.slice();\n\n const fromKey = itemKey(from.item);\n const toKey = after != null ? itemKey(after.item) : null;\n\n const fromIndex = array.findIndex((item) => fromKey === itemKey(item));\n if (fromIndex !== -1) {\n array.splice(fromIndex, 1);\n }\n\n if (toKey != null) {\n const toIndex = array.findIndex((item) => toKey === itemKey(item));\n if (toIndex !== -1) {\n array.splice(toIndex + 1, 0, from.item);\n }\n } else {\n array.splice(0, 0, from.item);\n }\n\n ordinal.clear();\n for (let i = 0, len = array.length; i < len; i++) {\n ordinal.set(itemKey(array[i]), i);\n }\n }\n }\n\n async updateAll(\n patch: TransformPatch<T>,\n params: {\n delay?: Delay;\n throwError?: () => unknown;\n filters?: RawFilters<F>;\n } = {},\n ) {\n const { filters = {} } = params;\n\n await this.simulateAsyncDelay(params);\n const { predicate } = this;\n\n const itemsAfterFiltering = this.values.filter(\n predicate({\n filters,\n limit: 1,\n }),\n );\n\n const patchedItems = itemsAfterFiltering.map((value) => ({\n ...value,\n ...patch(value),\n }));\n\n for (const item of patchedItems) {\n this.map.set(this.itemKey(item), item);\n }\n\n this.events.emit('updateAll');\n }\n\n async unshift(newItems: T[]) {\n await this.simulateAsyncDelay();\n const map = new Map<string, T>();\n\n for (const item of newItems) {\n map.set(this.itemKey(item), item);\n }\n\n for (const [key, value] of Array.from(this.map.entries())) {\n map.set(key, value);\n }\n\n this.map = map;\n }\n\n async push(newItems: T[]) {\n await this.simulateAsyncDelay();\n\n for (const item of newItems) {\n this.map.set(this.itemKey(item), item);\n }\n }\n\n elementAt = (index: number) => this.values[index];\n\n getRandomItems(\n count: number,\n { limit, page }: { limit: number; page: number },\n ) {\n const { chance, values } = this;\n const offset = (page - 1) * limit;\n return chance.pickset(values.slice(offset, offset + limit), count);\n }\n\n randomItem = (predicate = (_: T) => true) => {\n const index = Math.floor(Math.random() * this.available);\n return {\n index,\n item: shuffle(this.values).find(predicate),\n };\n };\n\n get values() {\n return Array.from(this.map.values());\n }\n\n get available() {\n return this.map.size;\n }\n\n get(key?: string): T | undefined {\n if (key == null) {\n return undefined;\n }\n return this.map.get(key);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -178,7 +178,7 @@
178
178
  "cairo.customFields.addCustomField.modal.PII-setting.toggle.name": "Información de identificación personal (PII)",
179
179
  "cairo.dragAndDrop.leaveSite.modal.description": "Es posible que los cambios realizados en el orden de tus ítems no se guarden.",
180
180
  "cairo.table.deleteViewModal.deleteBody": "Una vez que elimines \"{viewName}\", no se podrá restaurar.",
181
- "cairo.export.allItems": "Todos",
181
+ "cairo.export.allItems": "Todo",
182
182
  "cairo.customFields.addCustomField.modal.advancedSettings": "Ajustes avanzados",
183
183
  "cairo.tags.bulkItemUpdate.updatingTags.toast.asLabels": "Actualizando etiquetas...",
184
184
  "cairo.search.noresults.title": "No se encontraron resultados",
@@ -455,7 +455,7 @@
455
455
  "cairo.connection.error.title": "Parece que estás desconectado",
456
456
  "cairo.filtersPanel.date.tomorrow": "Mañana",
457
457
  "cairo.appliedFilters.selected": "{num, plural, =0 {Ningún filtro seleccionado} one {1 filtro seleccionado} other {{num,number} filtros seleccionados}}",
458
- "cairo.filtersPanel.date.none": "Todas",
458
+ "cairo.filtersPanel.date.none": "Todos",
459
459
  "cairo.saveViewModal.cancelButton": "Cancelar",
460
460
  "cairo.tags.manageTags.modal.subtitle.asLabels": "Edita, elimina y crea etiquetas.",
461
461
  "cairo.tags.manageTags.modal.emptyState.body.asLabels": "Las etiquetas te ayudan a filtrar y organizar tus ítems.",
@@ -19,6 +19,15 @@ var _util = require("../util");
19
19
  var _TransitionState = require("./TransitionState");
20
20
  var _FetchTotalState = require("./FetchTotalState");
21
21
  const MAX_RETRIES = 3;
22
+
23
+ /**
24
+ * Hooks for extending or customizing the lifecycle of a collection state.
25
+ *
26
+ * Unlike regular events (which are fire-and-forget), hooks can return a value
27
+ * that is consumed by the process they are part of. This allows business logic
28
+ * to influence behavior at specific points in the flow.
29
+ */
30
+
22
31
  class CollectionState {
23
32
  get queryKeyOptions() {
24
33
  const {
@@ -73,6 +82,7 @@ class CollectionState {
73
82
  (0, _defineProperty2.default)(this, "showToast", void 0);
74
83
  (0, _defineProperty2.default)(this, "events", void 0);
75
84
  (0, _defineProperty2.default)(this, "emitter", new _events.EventEmitter());
85
+ (0, _defineProperty2.default)(this, "hooks", void 0);
76
86
  (0, _defineProperty2.default)(this, "onlineState", void 0);
77
87
  (0, _defineProperty2.default)(this, "history", void 0);
78
88
  (0, _defineProperty2.default)(this, "initDependencies", void 0);
@@ -248,6 +258,7 @@ class CollectionState {
248
258
  this.lodash = params.lodash;
249
259
  this.persistQueryToUrl = params.persistQueryToUrl;
250
260
  this.toExtendedFields = params.toExtendedFields;
261
+ this.hooks = params.hooks ?? new _events.EventEmitter();
251
262
  (0, _mobx.makeObservable)(this, {
252
263
  fetchNextPageIfNeeded: _mobx.action.bound,
253
264
  clearAndMoveToPage: _mobx.action.bound,
@@ -988,7 +999,7 @@ class CollectionState {
988
999
  events: {
989
1000
  onInitialPageFetched
990
1001
  },
991
- emitter,
1002
+ hooks,
992
1003
  query: {
993
1004
  pagination
994
1005
  }
@@ -1002,7 +1013,7 @@ class CollectionState {
1002
1013
  pagination.cursor = _Pagination.initialCursor;
1003
1014
  this.lifecycleState = 'refresh';
1004
1015
  const isStale = prevQuery.isStale();
1005
- const beforeInitialFetchListeners = emitter.listeners('beforeInitialFetch');
1016
+ const beforeInitialFetchListeners = hooks.listeners('beforeInitialFetch');
1006
1017
  await Promise.all(beforeInitialFetchListeners.map(f => f({
1007
1018
  isStale
1008
1019
  })));
@@ -1 +1 @@
1
- {"version":3,"names":["_model","require","_core","_mobx","_events","_QueryState","_QueryResultState","_BulkSelectState","_PromisesState","_Pagination","_PaginationMode","_TaskState","_util","_TransitionState","_FetchTotalState","MAX_RETRIES","CollectionState","queryKeyOptions","query","queryKey","_queryKey","asComputed","originQuery","result","status","isOnline","onlineState","optimisticActions","_optimisticActions","process","env","NODE_ENV","Error","constructor","params","_defineProperty2","default","EventEmitter","PromisesState","TaskState","queryName","filters","rawFilters","search","hasActiveFilters","hasNonPersistentActiveFilters","nonPersistentFiltersKey","columns","computedQuery","items","total","available","cursor","rest","fetchData","Promise","resolve","requestAnimationFrame","action","err","events","errorMonitor","console","error","OfflineError","handled","onError","captureException","getCurrentQuery","invalidate","_resetReactQuery","updateStatus","onNewPageAdded","onNewPageStart","emitter","isError","pagination","nextPage","lifecycleState","onNewPageAddedListeners","listeners","map","l","maybeOnNewPageAdded","promise","currentQuery","onResultListeners","fetch","runInAction","_currentQueryPromise","updateResultInfo","updateResult","forEach","newPages","onNewPageAddedParams","totalNewItems","reduce","agg","page","length","focusManager","isFocused","fetchNextPageIfNeeded","clearResultAndMoveToStart","force","_recoverIfError","state","isPaused","dispatch","type","initTask","runOnce","TransitionState","lodash","persistQueryToUrl","toExtendedFields","makeObservable","bound","clearAndMoveToPage","refreshAllPages","sort","init","setInitialPage","initialFetch","totalPages","computed","hasAvailableItems","showInitialLoader","showRefreshLoader","showEmptyState","showErrorState","resetFiltersAndRefresh","observable","ref","clearResultBeforeRefresh","scrollableContent","_commonDynamicBiParams","fqdn","deferInitialLoading","queryCache","errorHandler","history","fetchErrorMessage","itemKey","itemName","translate","initDependencies","showToast","remove","defaultQueryOptions","queryFn","_queryFn","keepPreviousData","suspense","enabled","retryDelay","staleTime","refetchOnMount","retryOnMount","queryOptions","queryClient","QueryClient","defaultOptions","queries","queryObserver","QueryObserver","retry","failureCount","_this$errorHandler","reportRetryAttempt","QueryState","limit","undefined","refreshOnColumnsChange","_paginationModeRef","paginationModeRef","current","paginationMode","_paginationMode","PaginationMode","selectionConsistencyMode","QueryResultState","toComputed","fetchTotal","FetchTotalState","collection","fetchesHistory","bulkSelect","BulkSelectState","disableAutoSelectAllCount","useNewSelectAllLogic","scrollToTop","_this$scrollableConte","scrollTo","top","left","initialPage","initialPromises","addPromise","animationFramePromise","_runSort","clearResult","emit","moveToFirstPage","scheduleSort","whenNotIdle","debounce","_runSearch","onSearch","onSearchResults","searchEndListeners","resetToDefaults","onResultUpdated","scheduleSearch","setOptions","options","maybeTotal","hasNext","setQueryData","_getProcessedResult","unprocessedPages","unprocessedTotal","currentItemsMap","beforeAddNewPagesListeners","processedPages","pages","listener","processedTotal","_getProcessedTotal","beforeSetTotalListeners","_addToFetchesHistory","offset","push","itemsKeys","flatMap","p","item","queryPageInfo","reactQuery","data","filter","d","lastPage","_keyedItemsMap","addPages","unprocessed","processed","setTotals","setSupportTotal","setHasNext","setCursor","fn","args","isIdle","isFetching","getOptimisticResult","queryStatus","then","catch","isStale","fetchListeners","_totals","Math","ceil","totalStatus","fetchedLastPage","fetchNextPage","minLoaderTime","wait","min","max","fetchPromise","timeoutId","maxWaitPromise","setTimeout","minWaitPromise","race","clearTimeout","clear","initialCursor","fetchAndReplaceResult","queryLookup","Object","assign","filtersKey","findAll","q","col","multiple","forceDirection","origin","changeSort","slice","value","changeValue","clearSearch","changeItem","newItem","changeItems","newItems","changeResult","rollback","addItem","addItems","refreshCurrentPage","noInvalidate","beforeUpdateResult","currentPage","promises","lastPagePromise","pageQuery","id","_pageQuery$state$data","results","all","resetFilters","emitEvents","resetCustomFiltersAndRefresh","resetCustomFilters","onInitialPageFetched","prevQuery","beforeInitialFetchListeners","f","skipInitialFetch","skipFilterListeners","on","onOnlineStateChange","disposers","_registerQueryEvents","subscribe","_this$initDependencie","call","off","disposer","idle","addEventListener","opts","refreshPromises","_this$scrollableConte2","behavior","reaction","fieldsKeyHash","getItem","key","keyedItem","get","getKeyedItem","getKeyedItemByIndex","index","keyedItems","addRefreshPromise","createPromise","_query$sort","_query$sort2","currentFilters","JSON","stringify","currentSortOrder","filteredListSize","initialItems","size","numSortedColumns","isLoading","isLoadingPromises","Boolean","isEmpty","topNotification","_topNotification","text","t","set","show","exports"],"sources":["../../../src/state/CollectionState.ts"],"sourcesContent":["import {\n CollectionEvents,\n ComputedQuery,\n ComputedQueryFull,\n DataResultKeyed,\n DataResultRaw,\n Filter,\n FiltersKey,\n FiltersMap,\n Fqdn,\n KeyedItem,\n OnResultUpdated,\n PatternsErrorHandler,\n QueryOptions,\n QueryResultStatus,\n queryStatus,\n ShowToast,\n SortOrder,\n} from '../model';\nimport {\n Query as ReactQuery,\n QueryCache,\n QueryClient,\n QueryObserver,\n} from 'react-query/core';\nimport {\n action,\n computed,\n makeObservable,\n observable,\n reaction,\n runInAction,\n} from 'mobx';\nimport { EventEmitter } from 'events';\nimport { History } from 'history';\nimport { QueryState } from './QueryState';\nimport { QueryResultState } from './QueryResultState';\nimport { BulkSelectState } from './BulkSelectState';\nimport { PromisesState } from './PromisesState';\nimport { initialCursor } from './Pagination';\nimport { PaginationMode, PaginationModeRef } from './PaginationMode';\nimport { TaskState } from './TaskState';\nimport {\n ErrorMonitor,\n ExtendedFields,\n PartialLodash,\n Translate,\n} from '../services';\nimport { addEventListener, OfflineError, TypedEmitter } from '../util';\nimport { OnlineState } from './OnlineState';\nimport { TransitionState } from './TransitionState';\nimport { Sortable } from './SortState';\nimport { CollectionOptimisticActions } from './CollectionOptimisticActions';\nimport { FetchTotalState } from './FetchTotalState';\n\nconst MAX_RETRIES = 3;\n\ntype Query<T> = Omit<ReactQuery<DataResultKeyed<T>>, 'promise' | 'dispatch'> & {\n promise?: Promise<unknown>;\n dispatch: (action: { type: string; error: unknown }) => void;\n};\n\nexport interface CollectionStateEvents<T, F extends FiltersMap> {\n triggerReachBottomListener: () => unknown;\n beforeAddNewPages: (params: {\n pages: T[][];\n currentItemsMap: Map<string, KeyedItem<T>>;\n originQuery: ComputedQueryFull<F>;\n }) => T[][];\n beforeSetTotal: (params: {\n total: number;\n originQuery: ComputedQuery<F>;\n }) => number;\n resultUpdated: () => unknown;\n beforeResultUpdated: () => unknown;\n ready: () => unknown;\n beforeInitialFetch: (params: { isStale: boolean }) => unknown;\n collectionLayout: () => unknown;\n fetch: (params: { isStale: boolean }) => void | undefined | (() => unknown);\n refresh: (params: { isStale: boolean }) => unknown;\n refreshCurrentPage: () => unknown;\n refreshAllPages: () => unknown;\n refreshUpdateResult: () => unknown;\n searchStart: () => () => unknown;\n search: (params: { clearResult?: boolean }) => unknown;\n clearSearch: () => unknown;\n newPageStart: () => (params: {\n totalNewItems: number;\n newPages: DataResultKeyed<T>[];\n }) => unknown;\n beforeSortStart: (params: {\n origin?: 'SidePanel' | 'ColumnHeader';\n }) => unknown;\n sortStart: (params: { col: { id: string } }) => unknown;\n sort: (params: { clearResult?: boolean }) => unknown;\n beforeClearFilters: (params: { origin: string }) => unknown;\n}\n\ninterface ScrollableContent {\n scrollTo: (options: ScrollToOptions) => void;\n}\n\nexport interface CollectionStateParams<T, F extends FiltersMap> {\n readonly queryCache: QueryCache;\n readonly queryName: string;\n readonly fqdn?: Fqdn;\n readonly filters: F;\n readonly search?: Filter<string>;\n readonly errorMonitor: ErrorMonitor;\n readonly errorHandler: PatternsErrorHandler | undefined;\n readonly onlineState: OnlineState;\n readonly history: History;\n readonly showToast?: ShowToast;\n readonly translate: Translate;\n readonly itemKey: (item: T) => string;\n readonly toExtendedFields?: (item: T) => ExtendedFields | undefined | null;\n readonly initDependencies?: () => Promise<unknown>;\n\n readonly fetchData: (query: ComputedQuery<F>) => Promise<DataResultRaw<T>>;\n readonly fetchTotal?: (query: ComputedQuery<F>) => Promise<number>;\n readonly fetchErrorMessage?: (params: {\n err: unknown;\n isOnline: boolean;\n }) => string | null | undefined;\n readonly itemName: (item: T) => string;\n readonly deferInitialLoading?: boolean;\n readonly events?: CollectionEvents<F>;\n readonly persistQueryToUrl?: boolean;\n readonly refreshOnColumnsChange?: boolean;\n readonly limit?: number;\n readonly initialPage?: DataResultRaw<T>;\n readonly queryOptions?: QueryOptions;\n readonly paginationMode?: 'cursor' | 'offset';\n readonly paginationModeRef?: PaginationModeRef;\n readonly selectionConsistencyMode?: 'preserve' | 'clear';\n readonly disableAutoSelectAllCount?: boolean;\n readonly useNewSelectAllLogic?: boolean;\n readonly lodash: PartialLodash;\n}\n\nexport interface CollectionStatePublicAPI<T, F extends FiltersMap> {\n /**\n * Invalidates all cache records for this collection.<br>\n * Optional parameters:<br>\n * `filters` - Clears only a specific part of the cache, for example: `invalidate({ filters: { status: ['active'] } })`\n * @external\n */\n invalidate(params?: {\n filters?: { [P in keyof F]?: string[] | undefined | null };\n }): void;\n\n /**\n * Invalidates cache and refreshes all previously fetched pages, without showing a loading indication.<br>\n * Optional parameters:<br>\n * - `beforeUpdateResult` - A callback function that will be called before updating the result.<br>\n * - `filters` - Invalidates only a specific part of the cache, for example: `refreshAllPages({ filters: { status: ['active'] } })`.\n * @external\n */\n refreshAllPages(params?: {\n beforeUpdateResult?: () => unknown;\n filters?: { [P in keyof F]?: string[] | undefined | null };\n }): Promise<void>;\n\n /**\n * Invalidates cache and refreshes current page, without showing a loading indication.<br>\n * Optional parameters:<br>\n * - `noInvalidate` - Refreshes current page without invalidating cache.\n * @external\n */\n refreshCurrentPage(params?: { noInvalidate?: boolean }): Promise<void>;\n\n /**\n * Clears all data from the collection and goes back to the first page and refreshes the first page data, while showing a loading indication.<br>\n * Optional parameters:<br>\n * - `force` - Invalidates the cache and resets react-query observer.\n * - `filters` - Clears only a specific part of the cache, for example: `invalidate({ filters: { status: ['active'] } })`\n * @external\n */\n clearResultAndMoveToStart(params?: {\n force?: boolean;\n filters?: { [P in keyof F]?: string[] | undefined | null };\n }): Promise<void>;\n\n /**\n * Triggers retry when collection fails to load\n * @external\n */\n retryErrorState(): void;\n\n /**\n * [BulkSelectState](./?path=/story/common-state--bulkselectstate)\n * @external\n */\n bulkSelect: BulkSelectState<T>;\n\n /**\n * [ComputedQuery](./?path=/story/common-types--computedquery) instance. Holds all the relevant variables to query the server API with.\n */\n originQuery: ComputedQueryFull<F>;\n\n /**\n * Status of the query. Contains boolean flags of `isIdle`, `isError`, `isLoading`, `isFetching`, `isSuccess`.\n * The difference between `isLoading` and `isFetching` is that `isLoading` is true during the initial query, `isFetching` is true during the next queries.\n * @external\n */\n status: QueryResultStatus<DataResultKeyed<T>, unknown>;\n\n /**\n * The total number of items, as was returned from the last query.\n * @external\n */\n total: number;\n\n /**\n * All the keyed items of the collection\n * @external\n */\n keyedItems: KeyedItem<T>[];\n\n /**\n * Get an item object according to its key\n * @external\n * @param key The key of the wanted item\n * @returns The wanted item\n */\n getItem(key: string): T | undefined | null;\n}\n\nexport class CollectionState<T, F extends FiltersMap = FiltersMap>\n implements CollectionStatePublicAPI<T, F>\n{\n readonly query: QueryState<F>;\n readonly _paginationModeRef;\n private readonly _paginationMode: PaginationMode<T, F>;\n readonly selectionConsistencyMode: 'preserve' | 'clear';\n readonly result: QueryResultState<T, F>;\n readonly fetchesHistory: {\n itemsKeys: string[];\n queryPageInfo: {\n page: number;\n cursor: string | null | undefined;\n offset: number;\n };\n }[];\n readonly bulkSelect: BulkSelectState<T>;\n scrollableContent?: ScrollableContent | null = null;\n readonly errorMonitor: ErrorMonitor;\n readonly errorHandler;\n\n readonly queryCache: QueryCache;\n readonly queryClient: QueryClient;\n\n readonly queryObserver: QueryObserver<DataResultKeyed<T>>;\n readonly queryName;\n readonly fqdn;\n readonly fetchErrorMessage: CollectionStateParams<T, F>['fetchErrorMessage'];\n readonly itemName: CollectionStateParams<T, F>['itemName'];\n readonly itemKey: CollectionStateParams<T, F>['itemKey'];\n readonly toExtendedFields?;\n readonly translate: Translate;\n readonly fetchData: CollectionStateParams<T, F>['fetchData'];\n readonly lodash;\n\n readonly deferInitialLoading?: boolean;\n readonly persistQueryToUrl;\n\n _optimisticActions?: CollectionOptimisticActions<T, F>;\n beforeSetData?: () => void | Promise<unknown>;\n readonly showToast: ShowToast;\n\n readonly events: CollectionEvents<F>;\n readonly emitter = new EventEmitter() as TypedEmitter<\n CollectionStateEvents<T, F>\n >;\n\n readonly onlineState: OnlineState;\n readonly history: History;\n\n readonly initDependencies?: () => Promise<unknown>;\n readonly initialPromises = new PromisesState();\n readonly refreshPromises = new PromisesState();\n\n readonly initTask = new TaskState();\n\n /**\n * Possible flows:\n * result->refresh, refresh->result, result->fetchMore, fetchMore->result, refresh->refresh, fetchMore->fetchMore\n */\n lifecycleState: 'result' | 'refresh' | 'fetchMore' = 'result';\n\n _queryKey = (asComputed: ComputedQueryFull<F>) => {\n const { queryName } = this;\n const {\n filters,\n rawFilters,\n search,\n hasActiveFilters,\n hasNonPersistentActiveFilters,\n nonPersistentFiltersKey,\n columns,\n // Pick only properties relevant to `queryKey` uniqueness\n ...computedQuery\n } = asComputed;\n\n return [queryName, computedQuery] as const;\n };\n\n get queryKeyOptions() {\n const { query } = this;\n return {\n queryKey: this._queryKey(query.asComputed),\n };\n }\n\n get originQuery() {\n return this.result.originQuery;\n }\n\n get status() {\n return this.result.status;\n }\n\n isOnline() {\n return this.onlineState.isOnline;\n }\n\n get optimisticActions() {\n if (\n this._optimisticActions == null &&\n process.env.NODE_ENV !== 'production'\n ) {\n throw new Error('optimisticActions is not initialized');\n }\n return this._optimisticActions as CollectionOptimisticActions<T, F>;\n }\n\n constructor(params: CollectionStateParams<T, F>) {\n this.lodash = params.lodash;\n this.persistQueryToUrl = params.persistQueryToUrl;\n this.toExtendedFields = params.toExtendedFields;\n makeObservable(this, {\n fetchNextPageIfNeeded: action.bound,\n clearAndMoveToPage: action.bound,\n clearResultAndMoveToStart: action.bound,\n refreshAllPages: action.bound,\n updateStatus: action.bound,\n updateResult: action.bound,\n search: action,\n sort: action,\n fetch: action,\n init: action,\n setInitialPage: action,\n initialFetch: action,\n totalPages: computed,\n hasAvailableItems: computed,\n showInitialLoader: computed,\n showRefreshLoader: computed,\n showEmptyState: computed,\n showErrorState: computed,\n resetFiltersAndRefresh: action.bound,\n lifecycleState: observable.ref,\n clearResultBeforeRefresh: action,\n scrollableContent: observable.ref,\n _commonDynamicBiParams: action,\n });\n\n this.queryName = params.queryName;\n this.fqdn = params.fqdn;\n this.deferInitialLoading = params.deferInitialLoading;\n this.queryCache = params.queryCache;\n this.errorMonitor = params.errorMonitor;\n this.errorHandler = params.errorHandler;\n this.onlineState = params.onlineState;\n this.history = params.history;\n\n this.fetchErrorMessage = params.fetchErrorMessage;\n this.itemKey = params.itemKey;\n this.itemName = params.itemName;\n this.translate = params.translate;\n this.fetchData = params.fetchData;\n this.events = params.events ?? {};\n\n this.initDependencies = params.initDependencies;\n\n this.showToast = params.showToast ?? (() => ({ remove: () => {} }));\n\n const defaultQueryOptions = {\n queryFn: action(() => this._queryFn(this.query.asComputed)),\n keepPreviousData: true,\n suspense: false,\n enabled: false,\n retryDelay: 200,\n staleTime: 120000,\n onError: this.onError,\n refetchOnMount: false,\n retryOnMount: false,\n ...params.queryOptions,\n };\n\n this.queryClient = new QueryClient({\n queryCache: this.queryCache,\n defaultOptions: {\n queries: defaultQueryOptions,\n },\n });\n\n this.queryObserver = new QueryObserver<DataResultKeyed<T>>(\n this.queryClient,\n {\n retry: (failureCount, error) => {\n if (failureCount < MAX_RETRIES) {\n this.errorHandler?.reportRetryAttempt?.(error);\n return true;\n }\n\n return false;\n },\n ...defaultQueryOptions,\n },\n );\n\n this.query = new QueryState({\n filters: params.filters,\n search: params.search,\n limit: params.limit,\n history: params.persistQueryToUrl ? params.history : undefined,\n refreshOnColumnsChange: params.refreshOnColumnsChange,\n });\n\n this._paginationModeRef =\n params.paginationModeRef ??\n ({ current: params.paginationMode } as PaginationModeRef);\n\n this._paginationMode = new PaginationMode(this);\n\n this.selectionConsistencyMode =\n params.selectionConsistencyMode ?? 'preserve';\n\n this.result = new QueryResultState<T, F>({\n itemKey: params.itemKey,\n originQuery: this.query.toComputed(),\n fetchTotal: params.fetchTotal\n ? new FetchTotalState<T, F>({\n collection: this,\n queryCache: this.queryCache,\n fetchTotal: params.fetchTotal,\n })\n : undefined,\n });\n\n this._resetReactQuery();\n\n this.fetchesHistory = [];\n\n this.bulkSelect = new BulkSelectState<T>({\n disableAutoSelectAllCount: params.disableAutoSelectAllCount,\n useNewSelectAllLogic: params.useNewSelectAllLogic,\n collection: this,\n scrollToTop: () => {\n this.scrollableContent?.scrollTo({\n top: 0,\n left: 0,\n });\n },\n });\n\n if (params.initialPage) {\n this.setInitialPage(params.initialPage);\n }\n\n if (params.deferInitialLoading) {\n this.initialPromises.addPromise(this.animationFramePromise);\n }\n\n this._runSort = action(({ clearResult }: { clearResult?: boolean }) => {\n this.emitter.emit('sort', { clearResult });\n if (clearResult) {\n this.clearResultBeforeRefresh();\n }\n return this.moveToFirstPage();\n });\n\n this.scheduleSort = this.whenNotIdle(\n this.lodash.debounce(this._runSort, 300),\n );\n\n this._runSearch = action(async (clearResult?: boolean) => {\n const {\n events: { onSearch, onSearchResults },\n emitter,\n query,\n } = this;\n\n const searchEndListeners = emitter\n .listeners('searchStart')\n .map((l) => l());\n onSearch?.({\n query: query.asComputed,\n });\n emitter.emit('search', { clearResult });\n\n if (clearResult) {\n this.clearResultBeforeRefresh();\n }\n\n if (this.selectionConsistencyMode === 'clear') {\n this.bulkSelect.resetToDefaults();\n }\n\n return this.moveToFirstPage({\n onResultUpdated: (params) => {\n searchEndListeners.forEach((l) => l());\n onSearchResults?.(params);\n },\n });\n });\n\n this.scheduleSearch = this.lodash.debounce(this._runSearch, 300);\n }\n\n _resetReactQuery() {\n this.queryObserver.setOptions(\n {\n ...this.queryObserver.options,\n ...this.queryKeyOptions,\n enabled: false,\n },\n {\n onError: true,\n },\n );\n }\n\n _queryFn = async (\n computedQuery: ComputedQuery<F>,\n ): Promise<DataResultKeyed<T>> => {\n const {\n items,\n total,\n available = null,\n cursor = null,\n ...rest\n } = await this.fetchData(computedQuery);\n\n return {\n items,\n total,\n available,\n cursor,\n ...rest,\n };\n };\n\n scheduleSort;\n private readonly scheduleSearch;\n readonly _runSearch;\n readonly _runSort;\n\n setInitialPage(initialPage: DataResultRaw<T>) {\n const {\n items,\n total: maybeTotal,\n available = null,\n cursor = null,\n hasNext,\n } = initialPage;\n\n const total = maybeTotal ?? items.length;\n\n this.queryClient.setQueryData<DataResultKeyed<T>>(\n this.queryKeyOptions.queryKey,\n {\n items,\n total,\n available,\n cursor,\n hasNext,\n },\n );\n }\n\n animationFramePromise = () =>\n new Promise<void>((resolve) => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n resolve();\n });\n });\n });\n\n onError = action((err: unknown) => {\n if (err == null) {\n return;\n }\n\n const { onlineState, events, errorMonitor } = this;\n console.error(err);\n\n const { isOnline } = onlineState;\n\n if (!(err instanceof OfflineError)) {\n const handled = events.onError?.({\n err,\n isOnline,\n });\n\n if (!handled) {\n errorMonitor.captureException(err);\n }\n }\n\n this.getCurrentQuery().invalidate();\n this._resetReactQuery();\n this.updateStatus();\n });\n\n _currentQueryPromise?: Promise<void>;\n\n getCurrentQuery() {\n const query = this.queryObserver.getCurrentQuery();\n return query as unknown as Query<T>;\n }\n\n get paginationMode() {\n return this._paginationMode;\n }\n\n _getProcessedResult({\n unprocessedPages,\n unprocessedTotal,\n currentItemsMap,\n }: {\n unprocessedPages: T[][];\n unprocessedTotal: number;\n currentItemsMap: Map<string, KeyedItem<T>>;\n }) {\n const { emitter, result } = this;\n const { originQuery } = result;\n\n const beforeAddNewPagesListeners = emitter.listeners('beforeAddNewPages');\n\n const processedPages = beforeAddNewPagesListeners.reduce(\n (pages, listener) =>\n listener({\n pages,\n currentItemsMap,\n originQuery,\n }),\n unprocessedPages,\n );\n\n const processedTotal = this._getProcessedTotal(unprocessedTotal);\n\n return {\n processedPages,\n processedTotal,\n };\n }\n\n _getProcessedTotal(unprocessedTotal: number) {\n const { emitter, result } = this;\n const { originQuery } = result;\n\n const beforeSetTotalListeners = emitter.listeners('beforeSetTotal');\n return beforeSetTotalListeners.reduce(\n (total, listener) =>\n listener({\n total,\n originQuery,\n }),\n unprocessedTotal,\n );\n }\n\n _addToFetchesHistory(newPages: DataResultKeyed<T>[]) {\n const { page, cursor, offset } = this.query.asComputed;\n\n this.fetchesHistory.push({\n itemsKeys: newPages\n .flatMap((p) => p.items)\n .map((item) => this.itemKey(item)),\n queryPageInfo: {\n page,\n cursor,\n offset,\n },\n });\n }\n\n updateResult(queries: Query<T>[]) {\n const { result, paginationMode, emitter } = this;\n\n const newPages = queries\n .map((reactQuery) => reactQuery.state.data)\n .filter((d): d is DataResultKeyed<T> => d != null);\n\n this.updateStatus();\n\n if (newPages.length) {\n emitter.emit('beforeResultUpdated');\n\n const lastPage = newPages[newPages.length - 1];\n const { available, cursor, hasNext } = lastPage;\n\n const unprocessedTotal = lastPage.total ?? lastPage.items.length;\n const unprocessedPages = newPages.map((data) => data.items);\n\n const { processedPages, processedTotal } = this._getProcessedResult({\n unprocessedPages,\n unprocessedTotal,\n currentItemsMap: result._keyedItemsMap,\n });\n\n result.addPages({\n unprocessed: unprocessedPages,\n processed: processedPages,\n });\n\n result.setTotals({\n unprocessed: unprocessedTotal,\n processed: processedTotal,\n });\n\n this._addToFetchesHistory(newPages);\n\n result.setSupportTotal(lastPage.total != null);\n result.setHasNext(hasNext);\n\n paginationMode.setCursor(cursor);\n if (available != null) {\n result.available = available;\n }\n this.lifecycleState = 'result';\n\n emitter.emit('resultUpdated');\n\n return {\n newPages,\n };\n }\n\n return null;\n }\n\n whenNotIdle(fn: (...args: any[]) => unknown) {\n return (...args: any[]) => {\n if (this.result.status.isIdle) {\n return;\n }\n\n fn(...args);\n };\n }\n\n updateStatus() {\n const { queryObserver, result, query } = this;\n const { status, error, isFetching } = queryObserver.getOptimisticResult(\n queryObserver.options,\n );\n\n result.status = {\n ...queryStatus[status],\n isFetching,\n error,\n } as QueryResultStatus<DataResultKeyed<T>, unknown>;\n result.originQuery = query.asComputed;\n }\n\n fetch() {\n const { queryObserver, onlineState, emitter } = this;\n\n queryObserver.setOptions(\n {\n ...queryObserver.options,\n ...this.queryKeyOptions,\n enabled: true,\n },\n {\n onError: true,\n },\n );\n\n const currentQuery = this.getCurrentQuery();\n this._currentQueryPromise = new Promise<void>((resolve) => {\n if (currentQuery.promise) {\n currentQuery.promise.then(() => resolve()).catch(() => resolve());\n } else {\n resolve();\n }\n });\n\n const isStale = currentQuery.isStale();\n\n const fetchListeners = emitter.listeners('fetch');\n const onResultListeners = fetchListeners.map((l) => l({ isStale }));\n\n if (!onlineState.isOnline) {\n currentQuery.dispatch({\n type: 'error',\n error: new OfflineError('CollectionState.fetch: offline'),\n });\n }\n\n this.updateStatus();\n\n return {\n currentQuery,\n isStale,\n onResultListeners,\n promise: this._currentQueryPromise,\n };\n }\n\n get totalPages() {\n const {\n result: {\n _totals: { unprocessed: total },\n },\n query: {\n pagination: { limit },\n },\n } = this;\n return Math.ceil(total / limit);\n }\n\n get total() {\n return this.result.total;\n }\n\n get totalStatus() {\n return this.result.totalStatus;\n }\n\n get fetchedLastPage() {\n const {\n paginationMode: { fetchedLastPage },\n } = this;\n return fetchedLastPage;\n }\n\n private readonly fetchNextPage = action(async () => {\n const {\n query,\n result,\n events: { onNewPageAdded, onNewPageStart },\n emitter,\n } = this;\n // if current page has an error, do not skip to next page\n if (!result.status.isError) {\n query.pagination.nextPage();\n }\n\n this.lifecycleState = 'fetchMore';\n\n const onNewPageAddedListeners = emitter\n .listeners('newPageStart')\n .map((l) => l());\n const maybeOnNewPageAdded = onNewPageStart?.({\n query: query.asComputed,\n });\n\n const { promise, currentQuery, onResultListeners } = this.fetch();\n await promise;\n\n runInAction(() => {\n if (promise === this._currentQueryPromise) {\n const updateResultInfo = this.updateResult([currentQuery]);\n\n onResultListeners.forEach((l) => l?.());\n\n if (updateResultInfo) {\n const { newPages } = updateResultInfo;\n const onNewPageAddedParams = {\n totalNewItems: newPages.reduce(\n (agg, page) => agg + page.items.length,\n 0,\n ),\n newPages,\n query: result.originQuery,\n result: result.asComputed,\n };\n onNewPageAddedListeners.forEach((l) => l(onNewPageAddedParams));\n if (maybeOnNewPageAdded != null) {\n maybeOnNewPageAdded(onNewPageAddedParams);\n }\n onNewPageAdded?.(onNewPageAddedParams);\n }\n }\n });\n });\n\n async fetchNextPageIfNeeded() {\n const { result, fetchedLastPage, lifecycleState } = this;\n if (\n lifecycleState !== 'refresh' &&\n !result.status.isFetching &&\n !fetchedLastPage\n ) {\n await this.fetchNextPage();\n }\n }\n\n // for rendering only a single page (<PaginationTable />)\n async clearAndMoveToPage(\n page: number,\n options: { wait?: { min: number; max: number } } = {},\n ) {\n let minLoaderTime = 0;\n const { wait = { min: 200, max: 500 } } = options;\n const {\n query,\n result,\n events: { onNewPageStart },\n } = this;\n const { pagination } = query;\n pagination.page = page;\n\n const maybeOnNewPageAdded = onNewPageStart?.({\n query: query.asComputed,\n });\n\n const { promise, currentQuery, onResultListeners } = this.fetch();\n const fetchPromise = promise;\n\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const maxWaitPromise = new Promise<void>((resolve) => {\n timeoutId = setTimeout(() => {\n // timeoutId was not cleared yet, start showing a loader and set minimal time for the loader to show\n minLoaderTime = wait.min;\n this.clearResultBeforeRefresh();\n resolve();\n }, wait.max);\n });\n\n // minimal time to wait (usually scrolling to top time) before applying the new result\n const minWaitPromise = new Promise((resolve) => {\n setTimeout(resolve, wait.min);\n });\n\n await Promise.race([maxWaitPromise, fetchPromise]);\n\n if (timeoutId != null) {\n clearTimeout(timeoutId);\n }\n\n if (minLoaderTime) {\n await new Promise((resolve) => setTimeout(resolve, minLoaderTime));\n }\n\n await minWaitPromise;\n await fetchPromise;\n\n if (promise === this._currentQueryPromise) {\n runInAction(() => {\n result.clear();\n const updateResultInfo = this.updateResult([currentQuery]);\n onResultListeners.forEach((l) => l?.());\n if (updateResultInfo) {\n const { newPages } = updateResultInfo;\n if (maybeOnNewPageAdded != null) {\n maybeOnNewPageAdded({\n totalNewItems: newPages.reduce(\n (agg, page) => agg + page.items.length,\n 0,\n ),\n query: result.originQuery,\n result: result.asComputed,\n });\n }\n }\n });\n }\n }\n\n clearResultBeforeRefresh() {\n const { result } = this;\n this.lifecycleState = 'refresh';\n result.clear();\n }\n\n async moveToFirstPage({\n onResultUpdated,\n }: {\n onResultUpdated?: OnResultUpdated<F>;\n } = {}) {\n const {\n query: { pagination },\n } = this;\n\n pagination.page = 1;\n pagination.cursor = initialCursor;\n\n await this.fetchAndReplaceResult({ onResultUpdated });\n }\n\n invalidate({ filters }: { filters?: FiltersKey<F> } = {}) {\n const { queryCache, queryName } = this;\n const queryLookup = {};\n if (filters) {\n Object.assign(queryLookup, {\n filtersKey: filters,\n });\n }\n\n queryCache\n .findAll({ queryKey: [queryName, queryLookup] })\n .forEach((q) => q.invalidate());\n }\n\n clearResultAndMoveToStart({\n onResultUpdated,\n force,\n filters,\n }: {\n onResultUpdated?: OnResultUpdated<F>;\n force?: boolean;\n filters?: FiltersKey<F>;\n } = {}) {\n if (force) {\n this.invalidate({ filters });\n }\n this._resetReactQuery();\n this.clearResultBeforeRefresh();\n return this.moveToFirstPage({ onResultUpdated });\n }\n\n sort(\n col: Sortable,\n {\n clearResult,\n multiple,\n forceDirection,\n }: {\n clearResult?: boolean;\n multiple?: boolean;\n forceDirection?: SortOrder;\n } = {},\n ) {\n const { query, emitter } = this;\n\n emitter.emit('beforeSortStart', {\n origin: 'ColumnHeader',\n });\n\n query.sort.changeSort(col, {\n multiple,\n forceDirection,\n });\n\n emitter.emit('sortStart', { col });\n\n return this.scheduleSort({\n clearResult,\n multiple,\n forceDirection,\n });\n }\n\n async fetchAndReplaceResult({\n onResultUpdated,\n }: {\n onResultUpdated?: OnResultUpdated<F>;\n } = {}) {\n const { result, query, emitter } = this;\n\n const { promise, currentQuery, isStale, onResultListeners } = this.fetch();\n // page=1 means starting over, i.e refresh\n if (query.pagination.page === 1) {\n emitter.emit('refresh', { isStale });\n }\n\n await promise;\n\n if (promise === this._currentQueryPromise) {\n runInAction(() => {\n result.slice(0, query.pagination.page - 1);\n this.emitter.emit('refreshUpdateResult');\n this.updateResult([currentQuery]);\n onResultListeners.forEach((l) => l?.());\n onResultUpdated?.({\n query: result.originQuery,\n result: result.asComputed,\n });\n });\n }\n\n return currentQuery;\n }\n\n search(\n value: string,\n { force, clearResult }: { force?: boolean; clearResult?: boolean } = {},\n ) {\n const { query } = this;\n const { search } = query;\n if (force || value !== search.value) {\n search.changeValue(value);\n this.scheduleSearch(clearResult);\n }\n }\n\n clearSearch() {\n const {\n query,\n events: { onSearchResults },\n emitter,\n } = this;\n const { search } = query;\n if (search.value === '') {\n return;\n }\n\n search.changeValue('');\n emitter.emit('clearSearch');\n\n if (this.selectionConsistencyMode === 'clear') {\n this.bulkSelect.resetToDefaults();\n }\n\n return this.clearResultAndMoveToStart({ onResultUpdated: onSearchResults });\n }\n\n get filters() {\n return this.query.filters;\n }\n\n changeItem(newItem: T) {\n return this.changeItems([newItem]);\n }\n\n changeItems(newItems: T[]) {\n const changeResult = this.result.changeItems(newItems);\n\n if (changeResult != null) {\n this.invalidate();\n\n return changeResult.rollback;\n }\n\n return undefined;\n }\n\n addItem(newItem: T) {\n return this.addItems([newItem]);\n }\n\n addItems(newItems: T[]) {\n const changeResult = this.result.addItems(newItems);\n this.invalidate();\n return changeResult.rollback;\n }\n\n async refreshCurrentPage({ noInvalidate }: { noInvalidate?: boolean } = {}) {\n const { emitter } = this;\n\n if (!noInvalidate) {\n this.invalidate();\n }\n\n this._resetReactQuery();\n emitter.emit('refreshCurrentPage');\n\n await this.fetchAndReplaceResult();\n }\n\n async refreshAllPages({\n beforeUpdateResult,\n filters,\n }: {\n beforeUpdateResult?: () => unknown;\n filters?: FiltersKey<F>;\n } = {}) {\n const { query, result, paginationMode, emitter } = this;\n const { pagination } = query;\n const { page: currentPage } = pagination;\n\n this.invalidate({ filters });\n\n const promises: Promise<Query<T>>[] = [];\n\n pagination.cursor = initialCursor;\n\n emitter.emit('refreshAllPages');\n emitter.emit('refresh', { isStale: true }); // Because of invalidation above, all queries are now stale\n\n let lastPagePromise = undefined as Promise<unknown> | undefined;\n\n for (let page = 1; page <= currentPage; page++) {\n pagination.page = page;\n this._resetReactQuery();\n const { currentQuery: pageQuery, promise } = this.fetch();\n if (pageQuery.promise) {\n if (paginationMode.id === 'cursor') {\n await pageQuery.promise;\n runInAction(\n () => (pagination.cursor = pageQuery.state.data?.cursor ?? null),\n );\n }\n promises.push(pageQuery.promise.then(() => pageQuery));\n }\n\n if (page === currentPage) {\n lastPagePromise = promise;\n }\n }\n\n this.updateStatus();\n\n const results = await Promise.all(promises);\n\n runInAction(() => {\n beforeUpdateResult?.();\n if (lastPagePromise === this._currentQueryPromise) {\n result.slice(currentPage);\n this.emitter.emit('refreshUpdateResult');\n this.updateResult(results);\n }\n });\n }\n\n get hasAvailableItems() {\n return this.result.hasAvailableItems;\n }\n\n resetFiltersAndRefresh() {\n const { query } = this;\n query.resetFilters({ emitEvents: ['change', 'refresh'] });\n }\n\n resetCustomFiltersAndRefresh() {\n const { query } = this;\n query.resetCustomFilters({ emitEvents: ['change', 'refresh'] });\n }\n\n async initialFetch() {\n const {\n result,\n events: { onInitialPageFetched },\n emitter,\n query: { pagination },\n } = this;\n\n const prevQuery = this.getCurrentQuery();\n\n if (!result.status.isIdle && !result.status.isError) {\n return prevQuery.promise;\n }\n\n this._resetReactQuery();\n\n pagination.page = 1;\n pagination.cursor = initialCursor;\n\n this.lifecycleState = 'refresh';\n const isStale = prevQuery.isStale();\n const beforeInitialFetchListeners = emitter.listeners('beforeInitialFetch');\n await Promise.all(beforeInitialFetchListeners.map((f) => f({ isStale })));\n\n // reset paging state again for any possible edge case caused by external side effect while waiting `beforeInitialFetchListeners`\n runInAction(() => {\n pagination.page = 1;\n pagination.cursor = initialCursor;\n this.lifecycleState = 'refresh';\n });\n\n const currentQuery = await this.fetchAndReplaceResult();\n await currentQuery.promise;\n this.emitter.emit('ready');\n runInAction(() => {\n const { total, available } = result;\n onInitialPageFetched?.({\n result: {\n total,\n available: available ?? 0,\n },\n query: result.originQuery,\n });\n });\n }\n\n _recoverIfError = action(() => {\n const { onlineState } = this;\n const { focusManager } = onlineState;\n\n if (\n focusManager.isFocused() &&\n onlineState.isOnline &&\n this.result.status.isError\n ) {\n if (this.lifecycleState === 'fetchMore') {\n // error state is not shown, fetch next page\n this.fetchNextPageIfNeeded();\n } else {\n // error state is shown, move to start\n this.clearResultAndMoveToStart({ force: true });\n }\n }\n });\n\n onOnlineStateChange = (isOnline: boolean) => {\n const currentQuery = this.getCurrentQuery();\n\n if (isOnline) {\n this._recoverIfError();\n } else if (!isOnline && currentQuery.state.isPaused) {\n currentQuery.dispatch({\n type: 'error',\n error: new OfflineError('CollectionState.onOnlineStateChange: offline'),\n });\n this.updateStatus();\n }\n };\n\n retryErrorState = action(() => {\n const { initTask } = this;\n\n if (initTask.status.isError) {\n initTask.runOnce();\n } else {\n this.clearResultAndMoveToStart();\n }\n });\n\n init({\n skipInitialFetch,\n skipFilterListeners,\n }: { skipInitialFetch?: boolean; skipFilterListeners?: boolean } = {}) {\n const { bulkSelect, onlineState, query, initTask, result } = this;\n const { focusManager } = onlineState;\n\n result.originQuery = query.asComputed;\n\n onlineState.events.on('change', this.onOnlineStateChange);\n\n const disposers = [\n query.init({ skipFilterListeners }),\n this._registerQueryEvents(),\n result.init(),\n bulkSelect.init(),\n // react-query considers \"mounted\" only if listeners are subscribed\n this.queryObserver.subscribe(() => {}),\n focusManager.subscribe(this._recoverIfError),\n ];\n\n initTask.runOnce(async () => {\n await Promise.all([\n skipInitialFetch ? null : this.initialFetch(),\n this.initDependencies?.(),\n ]);\n });\n\n return action(() => {\n onlineState.events.off('change', this.onOnlineStateChange);\n disposers.forEach((disposer) => disposer());\n initTask.status = {\n ...queryStatus.idle,\n };\n });\n }\n\n _registerQueryEvents() {\n const { query } = this;\n const disposers = [\n addEventListener(query.events, 'refresh', (opts) => {\n if (this.selectionConsistencyMode === 'clear') {\n this.bulkSelect.resetToDefaults();\n }\n\n if (this.deferInitialLoading) {\n this.refreshPromises.addPromise(this.animationFramePromise);\n }\n\n if (opts?.clearResult !== false) {\n this.clearResultBeforeRefresh();\n } else {\n this.scrollableContent?.scrollTo({ top: 0, behavior: 'smooth' });\n }\n\n this.moveToFirstPage();\n }),\n addEventListener(query.events, 'scheduleRefresh', (opts) => {\n this.scheduleSearch(opts?.clearResult);\n }),\n ...(query.refreshOnColumnsChange\n ? [\n reaction(\n () => query.fieldsKeyHash,\n () => {\n this.clearResultBeforeRefresh();\n this.moveToFirstPage();\n },\n ),\n ]\n : []),\n ];\n\n return () => {\n disposers.forEach((d) => d());\n };\n }\n\n getItem(key: string): T | undefined | null {\n const keyedItem = this.result.get(key);\n return keyedItem?.item;\n }\n\n getKeyedItem(key: string): KeyedItem<T> | undefined | null {\n return this.result.get(key);\n }\n\n getKeyedItemByIndex(index: number): KeyedItem<T> | null {\n return this.result.keyedItems[index];\n }\n\n get keyedItems() {\n return this.result.keyedItems;\n }\n\n addRefreshPromise<P>(createPromise: () => Promise<P>) {\n return this.refreshPromises.addPromise(createPromise);\n }\n\n _commonDynamicBiParams(query = this.result.originQuery): {\n currentFilters?: string;\n currentSortOrder?: string;\n filteredListSize?: number;\n initialItems?: number;\n numSortedColumns?: number;\n csid?: string;\n } {\n const { result, fqdn } = this;\n\n return {\n ...fqdn,\n currentFilters: JSON.stringify(query.filtersKey),\n currentSortOrder: query.sort?.length\n ? JSON.stringify(query.sort)\n : undefined,\n filteredListSize: result.total,\n initialItems: result.size,\n numSortedColumns: query.sort?.length,\n };\n }\n\n get showInitialLoader() {\n const {\n initTask: {\n status: { isLoading },\n },\n initialPromises: { isLoadingPromises },\n } = this;\n return isLoading || isLoadingPromises;\n }\n\n get showRefreshLoader() {\n const {\n refreshPromises: { isLoadingPromises },\n result: { status },\n lifecycleState,\n } = this;\n return (\n isLoadingPromises ||\n Boolean(status.isFetching && lifecycleState === 'refresh')\n );\n }\n\n get showEmptyState() {\n const {\n lifecycleState,\n result: { isEmpty },\n } = this;\n return lifecycleState === 'result' && isEmpty;\n }\n\n get showErrorState() {\n const {\n result: { status },\n lifecycleState,\n } = this;\n return (\n !status.isFetching && status.isError && lifecycleState !== 'fetchMore'\n );\n }\n\n _topNotification = new TransitionState<string | null>();\n\n get topNotification(): {\n text: string | null | undefined;\n readonly show: boolean;\n } {\n const { _topNotification } = this;\n return {\n set text(t: string | null | undefined) {\n _topNotification.set(t);\n },\n get text() {\n return runInAction(() => _topNotification.data);\n },\n get show() {\n return runInAction(() => _topNotification.show);\n },\n };\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAmBA,IAAAC,KAAA,GAAAD,OAAA;AAMA,IAAAE,KAAA,GAAAF,OAAA;AAQA,IAAAG,OAAA,GAAAH,OAAA;AAEA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,iBAAA,GAAAL,OAAA;AACA,IAAAM,gBAAA,GAAAN,OAAA;AACA,IAAAO,cAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AACA,IAAAS,eAAA,GAAAT,OAAA;AACA,IAAAU,UAAA,GAAAV,OAAA;AAOA,IAAAW,KAAA,GAAAX,OAAA;AAEA,IAAAY,gBAAA,GAAAZ,OAAA;AAGA,IAAAa,gBAAA,GAAAb,OAAA;AAEA,MAAMc,WAAW,GAAG,CAAC;AA6Kd,MAAMC,eAAe,CAE5B;EA6EE,IAAIC,eAAeA,CAAA,EAAG;IACpB,MAAM;MAAEC;IAAM,CAAC,GAAG,IAAI;IACtB,OAAO;MACLC,QAAQ,EAAE,IAAI,CAACC,SAAS,CAACF,KAAK,CAACG,UAAU;IAC3C,CAAC;EACH;EAEA,IAAIC,WAAWA,CAAA,EAAG;IAChB,OAAO,IAAI,CAACC,MAAM,CAACD,WAAW;EAChC;EAEA,IAAIE,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAACD,MAAM,CAACC,MAAM;EAC3B;EAEAC,QAAQA,CAAA,EAAG;IACT,OAAO,IAAI,CAACC,WAAW,CAACD,QAAQ;EAClC;EAEA,IAAIE,iBAAiBA,CAAA,EAAG;IACtB,IACE,IAAI,CAACC,kBAAkB,IAAI,IAAI,IAC/BC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EACrC;MACA,MAAM,IAAIC,KAAK,CAAC,sCAAsC,CAAC;IACzD;IACA,OAAO,IAAI,CAACJ,kBAAkB;EAChC;EAEAK,WAAWA,CAACC,MAAmC,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,6BA3FF,IAAI;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,mBA0BhC,IAAIC,oBAAY,CAAC,CAAC;IAAA,IAAAF,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,2BAQV,IAAIE,4BAAa,CAAC,CAAC;IAAA,IAAAH,gBAAA,CAAAC,OAAA,2BACnB,IAAIE,4BAAa,CAAC,CAAC;IAAA,IAAAH,gBAAA,CAAAC,OAAA,oBAE1B,IAAIG,oBAAS,CAAC,CAAC;IAEnC;AACF;AACA;AACA;IAHE,IAAAJ,gBAAA,CAAAC,OAAA,0BAIqD,QAAQ;IAAA,IAAAD,gBAAA,CAAAC,OAAA,qBAEhDf,UAAgC,IAAK;MAChD,MAAM;QAAEmB;MAAU,CAAC,GAAG,IAAI;MAC1B,MAAM;QACJC,OAAO;QACPC,UAAU;QACVC,MAAM;QACNC,gBAAgB;QAChBC,6BAA6B;QAC7BC,uBAAuB;QACvBC,OAAO;QACP;QACA,GAAGC;MACL,CAAC,GAAG3B,UAAU;MAEd,OAAO,CAACmB,SAAS,EAAEQ,aAAa,CAAC;IACnC,CAAC;IAAA,IAAAb,gBAAA,CAAAC,OAAA,oBAoOU,MACTY,aAA+B,IACC;MAChC,MAAM;QACJC,KAAK;QACLC,KAAK;QACLC,SAAS,GAAG,IAAI;QAChBC,MAAM,GAAG,IAAI;QACb,GAAGC;MACL,CAAC,GAAG,MAAM,IAAI,CAACC,SAAS,CAACN,aAAa,CAAC;MAEvC,OAAO;QACLC,KAAK;QACLC,KAAK;QACLC,SAAS;QACTC,MAAM;QACN,GAAGC;MACL,CAAC;IACH,CAAC;IAAA,IAAAlB,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,iCA8BuB,MACtB,IAAImB,OAAO,CAAQC,OAAO,IAAK;MAC7BC,qBAAqB,CAAC,MAAM;QAC1BA,qBAAqB,CAAC,MAAM;UAC1BD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAAA,IAAArB,gBAAA,CAAAC,OAAA,mBAEM,IAAAsB,YAAM,EAAEC,GAAY,IAAK;MACjC,IAAIA,GAAG,IAAI,IAAI,EAAE;QACf;MACF;MAEA,MAAM;QAAEjC,WAAW;QAAEkC,MAAM;QAAEC;MAAa,CAAC,GAAG,IAAI;MAClDC,OAAO,CAACC,KAAK,CAACJ,GAAG,CAAC;MAElB,MAAM;QAAElC;MAAS,CAAC,GAAGC,WAAW;MAEhC,IAAI,EAAEiC,GAAG,YAAYK,kBAAY,CAAC,EAAE;QAClC,MAAMC,OAAO,GAAGL,MAAM,CAACM,OAAO,oBAAdN,MAAM,CAACM,OAAO,CAAG;UAC/BP,GAAG;UACHlC;QACF,CAAC,CAAC;QAEF,IAAI,CAACwC,OAAO,EAAE;UACZJ,YAAY,CAACM,gBAAgB,CAACR,GAAG,CAAC;QACpC;MACF;MAEA,IAAI,CAACS,eAAe,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;MACnC,IAAI,CAACC,gBAAgB,CAAC,CAAC;MACvB,IAAI,CAACC,YAAY,CAAC,CAAC;IACrB,CAAC,CAAC;IAAA,IAAApC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,yBAkO+B,IAAAsB,YAAM,EAAC,YAAY;MAClD,MAAM;QACJxC,KAAK;QACLK,MAAM;QACNqC,MAAM,EAAE;UAAEY,cAAc;UAAEC;QAAe,CAAC;QAC1CC;MACF,CAAC,GAAG,IAAI;MACR;MACA,IAAI,CAACnD,MAAM,CAACC,MAAM,CAACmD,OAAO,EAAE;QAC1BzD,KAAK,CAAC0D,UAAU,CAACC,QAAQ,CAAC,CAAC;MAC7B;MAEA,IAAI,CAACC,cAAc,GAAG,WAAW;MAEjC,MAAMC,uBAAuB,GAAGL,OAAO,CACpCM,SAAS,CAAC,cAAc,CAAC,CACzBC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC;MAClB,MAAMC,mBAAmB,GAAGV,cAAc,oBAAdA,cAAc,CAAG;QAC3CvD,KAAK,EAAEA,KAAK,CAACG;MACf,CAAC,CAAC;MAEF,MAAM;QAAE+D,OAAO;QAAEC,YAAY;QAAEC;MAAkB,CAAC,GAAG,IAAI,CAACC,KAAK,CAAC,CAAC;MACjE,MAAMH,OAAO;MAEb,IAAAI,iBAAW,EAAC,MAAM;QAChB,IAAIJ,OAAO,KAAK,IAAI,CAACK,oBAAoB,EAAE;UACzC,MAAMC,gBAAgB,GAAG,IAAI,CAACC,YAAY,CAAC,CAACN,YAAY,CAAC,CAAC;UAE1DC,iBAAiB,CAACM,OAAO,CAAEV,CAAC,IAAKA,CAAC,oBAADA,CAAC,CAAG,CAAC,CAAC;UAEvC,IAAIQ,gBAAgB,EAAE;YACpB,MAAM;cAAEG;YAAS,CAAC,GAAGH,gBAAgB;YACrC,MAAMI,oBAAoB,GAAG;cAC3BC,aAAa,EAAEF,QAAQ,CAACG,MAAM,CAC5B,CAACC,GAAG,EAAEC,IAAI,KAAKD,GAAG,GAAGC,IAAI,CAACjD,KAAK,CAACkD,MAAM,EACtC,CACF,CAAC;cACDN,QAAQ;cACR3E,KAAK,EAAEK,MAAM,CAACD,WAAW;cACzBC,MAAM,EAAEA,MAAM,CAACF;YACjB,CAAC;YACD0D,uBAAuB,CAACa,OAAO,CAAEV,CAAC,IAAKA,CAAC,CAACY,oBAAoB,CAAC,CAAC;YAC/D,IAAIX,mBAAmB,IAAI,IAAI,EAAE;cAC/BA,mBAAmB,CAACW,oBAAoB,CAAC;YAC3C;YACAtB,cAAc,YAAdA,cAAc,CAAGsB,oBAAoB,CAAC;UACxC;QACF;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAAA,IAAA3D,gBAAA,CAAAC,OAAA,2BAwYgB,IAAAsB,YAAM,EAAC,MAAM;MAC7B,MAAM;QAAEhC;MAAY,CAAC,GAAG,IAAI;MAC5B,MAAM;QAAE0E;MAAa,CAAC,GAAG1E,WAAW;MAEpC,IACE0E,YAAY,CAACC,SAAS,CAAC,CAAC,IACxB3E,WAAW,CAACD,QAAQ,IACpB,IAAI,CAACF,MAAM,CAACC,MAAM,CAACmD,OAAO,EAC1B;QACA,IAAI,IAAI,CAACG,cAAc,KAAK,WAAW,EAAE;UACvC;UACA,IAAI,CAACwB,qBAAqB,CAAC,CAAC;QAC9B,CAAC,MAAM;UACL;UACA,IAAI,CAACC,yBAAyB,CAAC;YAAEC,KAAK,EAAE;UAAK,CAAC,CAAC;QACjD;MACF;IACF,CAAC,CAAC;IAAA,IAAArE,gBAAA,CAAAC,OAAA,+BAEqBX,QAAiB,IAAK;MAC3C,MAAM4D,YAAY,GAAG,IAAI,CAACjB,eAAe,CAAC,CAAC;MAE3C,IAAI3C,QAAQ,EAAE;QACZ,IAAI,CAACgF,eAAe,CAAC,CAAC;MACxB,CAAC,MAAM,IAAI,CAAChF,QAAQ,IAAI4D,YAAY,CAACqB,KAAK,CAACC,QAAQ,EAAE;QACnDtB,YAAY,CAACuB,QAAQ,CAAC;UACpBC,IAAI,EAAE,OAAO;UACb9C,KAAK,EAAE,IAAIC,kBAAY,CAAC,8CAA8C;QACxE,CAAC,CAAC;QACF,IAAI,CAACO,YAAY,CAAC,CAAC;MACrB;IACF,CAAC;IAAA,IAAApC,gBAAA,CAAAC,OAAA,2BAEiB,IAAAsB,YAAM,EAAC,MAAM;MAC7B,MAAM;QAAEoD;MAAS,CAAC,GAAG,IAAI;MAEzB,IAAIA,QAAQ,CAACtF,MAAM,CAACmD,OAAO,EAAE;QAC3BmC,QAAQ,CAACC,OAAO,CAAC,CAAC;MACpB,CAAC,MAAM;QACL,IAAI,CAACR,yBAAyB,CAAC,CAAC;MAClC;IACF,CAAC,CAAC;IAAA,IAAApE,gBAAA,CAAAC,OAAA,4BAmKiB,IAAI4E,gCAAe,CAAgB,CAAC;IA5nCrD,IAAI,CAACC,MAAM,GAAG/E,MAAM,CAAC+E,MAAM;IAC3B,IAAI,CAACC,iBAAiB,GAAGhF,MAAM,CAACgF,iBAAiB;IACjD,IAAI,CAACC,gBAAgB,GAAGjF,MAAM,CAACiF,gBAAgB;IAC/C,IAAAC,oBAAc,EAAC,IAAI,EAAE;MACnBd,qBAAqB,EAAE5C,YAAM,CAAC2D,KAAK;MACnCC,kBAAkB,EAAE5D,YAAM,CAAC2D,KAAK;MAChCd,yBAAyB,EAAE7C,YAAM,CAAC2D,KAAK;MACvCE,eAAe,EAAE7D,YAAM,CAAC2D,KAAK;MAC7B9C,YAAY,EAAEb,YAAM,CAAC2D,KAAK;MAC1B1B,YAAY,EAAEjC,YAAM,CAAC2D,KAAK;MAC1B1E,MAAM,EAAEe,YAAM;MACd8D,IAAI,EAAE9D,YAAM;MACZ6B,KAAK,EAAE7B,YAAM;MACb+D,IAAI,EAAE/D,YAAM;MACZgE,cAAc,EAAEhE,YAAM;MACtBiE,YAAY,EAAEjE,YAAM;MACpBkE,UAAU,EAAEC,cAAQ;MACpBC,iBAAiB,EAAED,cAAQ;MAC3BE,iBAAiB,EAAEF,cAAQ;MAC3BG,iBAAiB,EAAEH,cAAQ;MAC3BI,cAAc,EAAEJ,cAAQ;MACxBK,cAAc,EAAEL,cAAQ;MACxBM,sBAAsB,EAAEzE,YAAM,CAAC2D,KAAK;MACpCvC,cAAc,EAAEsD,gBAAU,CAACC,GAAG;MAC9BC,wBAAwB,EAAE5E,YAAM;MAChC6E,iBAAiB,EAAEH,gBAAU,CAACC,GAAG;MACjCG,sBAAsB,EAAE9E;IAC1B,CAAC,CAAC;IAEF,IAAI,CAAClB,SAAS,GAAGN,MAAM,CAACM,SAAS;IACjC,IAAI,CAACiG,IAAI,GAAGvG,MAAM,CAACuG,IAAI;IACvB,IAAI,CAACC,mBAAmB,GAAGxG,MAAM,CAACwG,mBAAmB;IACrD,IAAI,CAACC,UAAU,GAAGzG,MAAM,CAACyG,UAAU;IACnC,IAAI,CAAC9E,YAAY,GAAG3B,MAAM,CAAC2B,YAAY;IACvC,IAAI,CAAC+E,YAAY,GAAG1G,MAAM,CAAC0G,YAAY;IACvC,IAAI,CAAClH,WAAW,GAAGQ,MAAM,CAACR,WAAW;IACrC,IAAI,CAACmH,OAAO,GAAG3G,MAAM,CAAC2G,OAAO;IAE7B,IAAI,CAACC,iBAAiB,GAAG5G,MAAM,CAAC4G,iBAAiB;IACjD,IAAI,CAACC,OAAO,GAAG7G,MAAM,CAAC6G,OAAO;IAC7B,IAAI,CAACC,QAAQ,GAAG9G,MAAM,CAAC8G,QAAQ;IAC/B,IAAI,CAACC,SAAS,GAAG/G,MAAM,CAAC+G,SAAS;IACjC,IAAI,CAAC3F,SAAS,GAAGpB,MAAM,CAACoB,SAAS;IACjC,IAAI,CAACM,MAAM,GAAG1B,MAAM,CAAC0B,MAAM,IAAI,CAAC,CAAC;IAEjC,IAAI,CAACsF,gBAAgB,GAAGhH,MAAM,CAACgH,gBAAgB;IAE/C,IAAI,CAACC,SAAS,GAAGjH,MAAM,CAACiH,SAAS,KAAK,OAAO;MAAEC,MAAM,EAAEA,CAAA,KAAM,CAAC;IAAE,CAAC,CAAC,CAAC;IAEnE,MAAMC,mBAAmB,GAAG;MAC1BC,OAAO,EAAE,IAAA5F,YAAM,EAAC,MAAM,IAAI,CAAC6F,QAAQ,CAAC,IAAI,CAACrI,KAAK,CAACG,UAAU,CAAC,CAAC;MAC3DmI,gBAAgB,EAAE,IAAI;MACtBC,QAAQ,EAAE,KAAK;MACfC,OAAO,EAAE,KAAK;MACdC,UAAU,EAAE,GAAG;MACfC,SAAS,EAAE,MAAM;MACjB1F,OAAO,EAAE,IAAI,CAACA,OAAO;MACrB2F,cAAc,EAAE,KAAK;MACrBC,YAAY,EAAE,KAAK;MACnB,GAAG5H,MAAM,CAAC6H;IACZ,CAAC;IAED,IAAI,CAACC,WAAW,GAAG,IAAIC,iBAAW,CAAC;MACjCtB,UAAU,EAAE,IAAI,CAACA,UAAU;MAC3BuB,cAAc,EAAE;QACdC,OAAO,EAAEd;MACX;IACF,CAAC,CAAC;IAEF,IAAI,CAACe,aAAa,GAAG,IAAIC,mBAAa,CACpC,IAAI,CAACL,WAAW,EAChB;MACEM,KAAK,EAAEA,CAACC,YAAY,EAAExG,KAAK,KAAK;QAC9B,IAAIwG,YAAY,GAAGxJ,WAAW,EAAE;UAAA,IAAAyJ,kBAAA;UAC9B,CAAAA,kBAAA,OAAI,CAAC5B,YAAY,aAAjB4B,kBAAA,CAAmBC,kBAAkB,YAArCD,kBAAA,CAAmBC,kBAAkB,CAAG1G,KAAK,CAAC;UAC9C,OAAO,IAAI;QACb;QAEA,OAAO,KAAK;MACd,CAAC;MACD,GAAGsF;IACL,CACF,CAAC;IAED,IAAI,CAACnI,KAAK,GAAG,IAAIwJ,sBAAU,CAAC;MAC1BjI,OAAO,EAAEP,MAAM,CAACO,OAAO;MACvBE,MAAM,EAAET,MAAM,CAACS,MAAM;MACrBgI,KAAK,EAAEzI,MAAM,CAACyI,KAAK;MACnB9B,OAAO,EAAE3G,MAAM,CAACgF,iBAAiB,GAAGhF,MAAM,CAAC2G,OAAO,GAAG+B,SAAS;MAC9DC,sBAAsB,EAAE3I,MAAM,CAAC2I;IACjC,CAAC,CAAC;IAEF,IAAI,CAACC,kBAAkB,GACrB5I,MAAM,CAAC6I,iBAAiB,IACvB;MAAEC,OAAO,EAAE9I,MAAM,CAAC+I;IAAe,CAAuB;IAE3D,IAAI,CAACC,eAAe,GAAG,IAAIC,8BAAc,CAAC,IAAI,CAAC;IAE/C,IAAI,CAACC,wBAAwB,GAC3BlJ,MAAM,CAACkJ,wBAAwB,IAAI,UAAU;IAE/C,IAAI,CAAC7J,MAAM,GAAG,IAAI8J,kCAAgB,CAAO;MACvCtC,OAAO,EAAE7G,MAAM,CAAC6G,OAAO;MACvBzH,WAAW,EAAE,IAAI,CAACJ,KAAK,CAACoK,UAAU,CAAC,CAAC;MACpCC,UAAU,EAAErJ,MAAM,CAACqJ,UAAU,GACzB,IAAIC,gCAAe,CAAO;QACxBC,UAAU,EAAE,IAAI;QAChB9C,UAAU,EAAE,IAAI,CAACA,UAAU;QAC3B4C,UAAU,EAAErJ,MAAM,CAACqJ;MACrB,CAAC,CAAC,GACFX;IACN,CAAC,CAAC;IAEF,IAAI,CAACtG,gBAAgB,CAAC,CAAC;IAEvB,IAAI,CAACoH,cAAc,GAAG,EAAE;IAExB,IAAI,CAACC,UAAU,GAAG,IAAIC,gCAAe,CAAI;MACvCC,yBAAyB,EAAE3J,MAAM,CAAC2J,yBAAyB;MAC3DC,oBAAoB,EAAE5J,MAAM,CAAC4J,oBAAoB;MACjDL,UAAU,EAAE,IAAI;MAChBM,WAAW,EAAEA,CAAA,KAAM;QAAA,IAAAC,qBAAA;QACjB,CAAAA,qBAAA,OAAI,CAACzD,iBAAiB,aAAtByD,qBAAA,CAAwBC,QAAQ,CAAC;UAC/BC,GAAG,EAAE,CAAC;UACNC,IAAI,EAAE;QACR,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;IAEF,IAAIjK,MAAM,CAACkK,WAAW,EAAE;MACtB,IAAI,CAAC1E,cAAc,CAACxF,MAAM,CAACkK,WAAW,CAAC;IACzC;IAEA,IAAIlK,MAAM,CAACwG,mBAAmB,EAAE;MAC9B,IAAI,CAAC2D,eAAe,CAACC,UAAU,CAAC,IAAI,CAACC,qBAAqB,CAAC;IAC7D;IAEA,IAAI,CAACC,QAAQ,GAAG,IAAA9I,YAAM,EAAC,CAAC;MAAE+I;IAAuC,CAAC,KAAK;MACrE,IAAI,CAAC/H,OAAO,CAACgI,IAAI,CAAC,MAAM,EAAE;QAAED;MAAY,CAAC,CAAC;MAC1C,IAAIA,WAAW,EAAE;QACf,IAAI,CAACnE,wBAAwB,CAAC,CAAC;MACjC;MACA,OAAO,IAAI,CAACqE,eAAe,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,IAAI,CAACC,YAAY,GAAG,IAAI,CAACC,WAAW,CAClC,IAAI,CAAC5F,MAAM,CAAC6F,QAAQ,CAAC,IAAI,CAACN,QAAQ,EAAE,GAAG,CACzC,CAAC;IAED,IAAI,CAACO,UAAU,GAAG,IAAArJ,YAAM,EAAC,MAAO+I,WAAqB,IAAK;MACxD,MAAM;QACJ7I,MAAM,EAAE;UAAEoJ,QAAQ;UAAEC;QAAgB,CAAC;QACrCvI,OAAO;QACPxD;MACF,CAAC,GAAG,IAAI;MAER,MAAMgM,kBAAkB,GAAGxI,OAAO,CAC/BM,SAAS,CAAC,aAAa,CAAC,CACxBC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC;MAClB8H,QAAQ,YAARA,QAAQ,CAAG;QACT9L,KAAK,EAAEA,KAAK,CAACG;MACf,CAAC,CAAC;MACFqD,OAAO,CAACgI,IAAI,CAAC,QAAQ,EAAE;QAAED;MAAY,CAAC,CAAC;MAEvC,IAAIA,WAAW,EAAE;QACf,IAAI,CAACnE,wBAAwB,CAAC,CAAC;MACjC;MAEA,IAAI,IAAI,CAAC8C,wBAAwB,KAAK,OAAO,EAAE;QAC7C,IAAI,CAACO,UAAU,CAACwB,eAAe,CAAC,CAAC;MACnC;MAEA,OAAO,IAAI,CAACR,eAAe,CAAC;QAC1BS,eAAe,EAAGlL,MAAM,IAAK;UAC3BgL,kBAAkB,CAACtH,OAAO,CAAEV,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC;UACtC+H,eAAe,YAAfA,eAAe,CAAG/K,MAAM,CAAC;QAC3B;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,CAACmL,cAAc,GAAG,IAAI,CAACpG,MAAM,CAAC6F,QAAQ,CAAC,IAAI,CAACC,UAAU,EAAE,GAAG,CAAC;EAClE;EAEAzI,gBAAgBA,CAAA,EAAG;IACjB,IAAI,CAAC8F,aAAa,CAACkD,UAAU,CAC3B;MACE,GAAG,IAAI,CAAClD,aAAa,CAACmD,OAAO;MAC7B,GAAG,IAAI,CAACtM,eAAe;MACvByI,OAAO,EAAE;IACX,CAAC,EACD;MACExF,OAAO,EAAE;IACX,CACF,CAAC;EACH;EA2BAwD,cAAcA,CAAC0E,WAA6B,EAAE;IAC5C,MAAM;MACJnJ,KAAK;MACLC,KAAK,EAAEsK,UAAU;MACjBrK,SAAS,GAAG,IAAI;MAChBC,MAAM,GAAG,IAAI;MACbqK;IACF,CAAC,GAAGrB,WAAW;IAEf,MAAMlJ,KAAK,GAAGsK,UAAU,IAAIvK,KAAK,CAACkD,MAAM;IAExC,IAAI,CAAC6D,WAAW,CAAC0D,YAAY,CAC3B,IAAI,CAACzM,eAAe,CAACE,QAAQ,EAC7B;MACE8B,KAAK;MACLC,KAAK;MACLC,SAAS;MACTC,MAAM;MACNqK;IACF,CACF,CAAC;EACH;EAuCArJ,eAAeA,CAAA,EAAG;IAChB,MAAMlD,KAAK,GAAG,IAAI,CAACkJ,aAAa,CAAChG,eAAe,CAAC,CAAC;IAClD,OAAOlD,KAAK;EACd;EAEA,IAAI+J,cAAcA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACC,eAAe;EAC7B;EAEAyC,mBAAmBA,CAAC;IAClBC,gBAAgB;IAChBC,gBAAgB;IAChBC;EAKF,CAAC,EAAE;IACD,MAAM;MAAEpJ,OAAO;MAAEnD;IAAO,CAAC,GAAG,IAAI;IAChC,MAAM;MAAED;IAAY,CAAC,GAAGC,MAAM;IAE9B,MAAMwM,0BAA0B,GAAGrJ,OAAO,CAACM,SAAS,CAAC,mBAAmB,CAAC;IAEzE,MAAMgJ,cAAc,GAAGD,0BAA0B,CAAC/H,MAAM,CACtD,CAACiI,KAAK,EAAEC,QAAQ,KACdA,QAAQ,CAAC;MACPD,KAAK;MACLH,eAAe;MACfxM;IACF,CAAC,CAAC,EACJsM,gBACF,CAAC;IAED,MAAMO,cAAc,GAAG,IAAI,CAACC,kBAAkB,CAACP,gBAAgB,CAAC;IAEhE,OAAO;MACLG,cAAc;MACdG;IACF,CAAC;EACH;EAEAC,kBAAkBA,CAACP,gBAAwB,EAAE;IAC3C,MAAM;MAAEnJ,OAAO;MAAEnD;IAAO,CAAC,GAAG,IAAI;IAChC,MAAM;MAAED;IAAY,CAAC,GAAGC,MAAM;IAE9B,MAAM8M,uBAAuB,GAAG3J,OAAO,CAACM,SAAS,CAAC,gBAAgB,CAAC;IACnE,OAAOqJ,uBAAuB,CAACrI,MAAM,CACnC,CAAC9C,KAAK,EAAEgL,QAAQ,KACdA,QAAQ,CAAC;MACPhL,KAAK;MACL5B;IACF,CAAC,CAAC,EACJuM,gBACF,CAAC;EACH;EAEAS,oBAAoBA,CAACzI,QAA8B,EAAE;IACnD,MAAM;MAAEK,IAAI;MAAE9C,MAAM;MAAEmL;IAAO,CAAC,GAAG,IAAI,CAACrN,KAAK,CAACG,UAAU;IAEtD,IAAI,CAACqK,cAAc,CAAC8C,IAAI,CAAC;MACvBC,SAAS,EAAE5I,QAAQ,CAChB6I,OAAO,CAAEC,CAAC,IAAKA,CAAC,CAAC1L,KAAK,CAAC,CACvBgC,GAAG,CAAE2J,IAAI,IAAK,IAAI,CAAC7F,OAAO,CAAC6F,IAAI,CAAC,CAAC;MACpCC,aAAa,EAAE;QACb3I,IAAI;QACJ9C,MAAM;QACNmL;MACF;IACF,CAAC,CAAC;EACJ;EAEA5I,YAAYA,CAACwE,OAAmB,EAAE;IAChC,MAAM;MAAE5I,MAAM;MAAE0J,cAAc;MAAEvG;IAAQ,CAAC,GAAG,IAAI;IAEhD,MAAMmB,QAAQ,GAAGsE,OAAO,CACrBlF,GAAG,CAAE6J,UAAU,IAAKA,UAAU,CAACpI,KAAK,CAACqI,IAAI,CAAC,CAC1CC,MAAM,CAAEC,CAAC,IAA8BA,CAAC,IAAI,IAAI,CAAC;IAEpD,IAAI,CAAC1K,YAAY,CAAC,CAAC;IAEnB,IAAIsB,QAAQ,CAACM,MAAM,EAAE;MACnBzB,OAAO,CAACgI,IAAI,CAAC,qBAAqB,CAAC;MAEnC,MAAMwC,QAAQ,GAAGrJ,QAAQ,CAACA,QAAQ,CAACM,MAAM,GAAG,CAAC,CAAC;MAC9C,MAAM;QAAEhD,SAAS;QAAEC,MAAM;QAAEqK;MAAQ,CAAC,GAAGyB,QAAQ;MAE/C,MAAMrB,gBAAgB,GAAGqB,QAAQ,CAAChM,KAAK,IAAIgM,QAAQ,CAACjM,KAAK,CAACkD,MAAM;MAChE,MAAMyH,gBAAgB,GAAG/H,QAAQ,CAACZ,GAAG,CAAE8J,IAAI,IAAKA,IAAI,CAAC9L,KAAK,CAAC;MAE3D,MAAM;QAAE+K,cAAc;QAAEG;MAAe,CAAC,GAAG,IAAI,CAACR,mBAAmB,CAAC;QAClEC,gBAAgB;QAChBC,gBAAgB;QAChBC,eAAe,EAAEvM,MAAM,CAAC4N;MAC1B,CAAC,CAAC;MAEF5N,MAAM,CAAC6N,QAAQ,CAAC;QACdC,WAAW,EAAEzB,gBAAgB;QAC7B0B,SAAS,EAAEtB;MACb,CAAC,CAAC;MAEFzM,MAAM,CAACgO,SAAS,CAAC;QACfF,WAAW,EAAExB,gBAAgB;QAC7ByB,SAAS,EAAEnB;MACb,CAAC,CAAC;MAEF,IAAI,CAACG,oBAAoB,CAACzI,QAAQ,CAAC;MAEnCtE,MAAM,CAACiO,eAAe,CAACN,QAAQ,CAAChM,KAAK,IAAI,IAAI,CAAC;MAC9C3B,MAAM,CAACkO,UAAU,CAAChC,OAAO,CAAC;MAE1BxC,cAAc,CAACyE,SAAS,CAACtM,MAAM,CAAC;MAChC,IAAID,SAAS,IAAI,IAAI,EAAE;QACrB5B,MAAM,CAAC4B,SAAS,GAAGA,SAAS;MAC9B;MACA,IAAI,CAAC2B,cAAc,GAAG,QAAQ;MAE9BJ,OAAO,CAACgI,IAAI,CAAC,eAAe,CAAC;MAE7B,OAAO;QACL7G;MACF,CAAC;IACH;IAEA,OAAO,IAAI;EACb;EAEAgH,WAAWA,CAAC8C,EAA+B,EAAE;IAC3C,OAAO,CAAC,GAAGC,IAAW,KAAK;MACzB,IAAI,IAAI,CAACrO,MAAM,CAACC,MAAM,CAACqO,MAAM,EAAE;QAC7B;MACF;MAEAF,EAAE,CAAC,GAAGC,IAAI,CAAC;IACb,CAAC;EACH;EAEArL,YAAYA,CAAA,EAAG;IACb,MAAM;MAAE6F,aAAa;MAAE7I,MAAM;MAAEL;IAAM,CAAC,GAAG,IAAI;IAC7C,MAAM;MAAEM,MAAM;MAAEuC,KAAK;MAAE+L;IAAW,CAAC,GAAG1F,aAAa,CAAC2F,mBAAmB,CACrE3F,aAAa,CAACmD,OAChB,CAAC;IAEDhM,MAAM,CAACC,MAAM,GAAG;MACd,GAAGwO,kBAAW,CAACxO,MAAM,CAAC;MACtBsO,UAAU;MACV/L;IACF,CAAmD;IACnDxC,MAAM,CAACD,WAAW,GAAGJ,KAAK,CAACG,UAAU;EACvC;EAEAkE,KAAKA,CAAA,EAAG;IACN,MAAM;MAAE6E,aAAa;MAAE1I,WAAW;MAAEgD;IAAQ,CAAC,GAAG,IAAI;IAEpD0F,aAAa,CAACkD,UAAU,CACtB;MACE,GAAGlD,aAAa,CAACmD,OAAO;MACxB,GAAG,IAAI,CAACtM,eAAe;MACvByI,OAAO,EAAE;IACX,CAAC,EACD;MACExF,OAAO,EAAE;IACX,CACF,CAAC;IAED,MAAMmB,YAAY,GAAG,IAAI,CAACjB,eAAe,CAAC,CAAC;IAC3C,IAAI,CAACqB,oBAAoB,GAAG,IAAIlC,OAAO,CAAQC,OAAO,IAAK;MACzD,IAAI6B,YAAY,CAACD,OAAO,EAAE;QACxBC,YAAY,CAACD,OAAO,CAAC6K,IAAI,CAAC,MAAMzM,OAAO,CAAC,CAAC,CAAC,CAAC0M,KAAK,CAAC,MAAM1M,OAAO,CAAC,CAAC,CAAC;MACnE,CAAC,MAAM;QACLA,OAAO,CAAC,CAAC;MACX;IACF,CAAC,CAAC;IAEF,MAAM2M,OAAO,GAAG9K,YAAY,CAAC8K,OAAO,CAAC,CAAC;IAEtC,MAAMC,cAAc,GAAG1L,OAAO,CAACM,SAAS,CAAC,OAAO,CAAC;IACjD,MAAMM,iBAAiB,GAAG8K,cAAc,CAACnL,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAAC;MAAEiL;IAAQ,CAAC,CAAC,CAAC;IAEnE,IAAI,CAACzO,WAAW,CAACD,QAAQ,EAAE;MACzB4D,YAAY,CAACuB,QAAQ,CAAC;QACpBC,IAAI,EAAE,OAAO;QACb9C,KAAK,EAAE,IAAIC,kBAAY,CAAC,gCAAgC;MAC1D,CAAC,CAAC;IACJ;IAEA,IAAI,CAACO,YAAY,CAAC,CAAC;IAEnB,OAAO;MACLc,YAAY;MACZ8K,OAAO;MACP7K,iBAAiB;MACjBF,OAAO,EAAE,IAAI,CAACK;IAChB,CAAC;EACH;EAEA,IAAImC,UAAUA,CAAA,EAAG;IACf,MAAM;MACJrG,MAAM,EAAE;QACN8O,OAAO,EAAE;UAAEhB,WAAW,EAAEnM;QAAM;MAChC,CAAC;MACDhC,KAAK,EAAE;QACL0D,UAAU,EAAE;UAAE+F;QAAM;MACtB;IACF,CAAC,GAAG,IAAI;IACR,OAAO2F,IAAI,CAACC,IAAI,CAACrN,KAAK,GAAGyH,KAAK,CAAC;EACjC;EAEA,IAAIzH,KAAKA,CAAA,EAAG;IACV,OAAO,IAAI,CAAC3B,MAAM,CAAC2B,KAAK;EAC1B;EAEA,IAAIsN,WAAWA,CAAA,EAAG;IAChB,OAAO,IAAI,CAACjP,MAAM,CAACiP,WAAW;EAChC;EAEA,IAAIC,eAAeA,CAAA,EAAG;IACpB,MAAM;MACJxF,cAAc,EAAE;QAAEwF;MAAgB;IACpC,CAAC,GAAG,IAAI;IACR,OAAOA,eAAe;EACxB;EAqDA,MAAMnK,qBAAqBA,CAAA,EAAG;IAC5B,MAAM;MAAE/E,MAAM;MAAEkP,eAAe;MAAE3L;IAAe,CAAC,GAAG,IAAI;IACxD,IACEA,cAAc,KAAK,SAAS,IAC5B,CAACvD,MAAM,CAACC,MAAM,CAACsO,UAAU,IACzB,CAACW,eAAe,EAChB;MACA,MAAM,IAAI,CAACC,aAAa,CAAC,CAAC;IAC5B;EACF;;EAEA;EACA,MAAMpJ,kBAAkBA,CACtBpB,IAAY,EACZqH,OAAgD,GAAG,CAAC,CAAC,EACrD;IACA,IAAIoD,aAAa,GAAG,CAAC;IACrB,MAAM;MAAEC,IAAI,GAAG;QAAEC,GAAG,EAAE,GAAG;QAAEC,GAAG,EAAE;MAAI;IAAE,CAAC,GAAGvD,OAAO;IACjD,MAAM;MACJrM,KAAK;MACLK,MAAM;MACNqC,MAAM,EAAE;QAAEa;MAAe;IAC3B,CAAC,GAAG,IAAI;IACR,MAAM;MAAEG;IAAW,CAAC,GAAG1D,KAAK;IAC5B0D,UAAU,CAACsB,IAAI,GAAGA,IAAI;IAEtB,MAAMf,mBAAmB,GAAGV,cAAc,oBAAdA,cAAc,CAAG;MAC3CvD,KAAK,EAAEA,KAAK,CAACG;IACf,CAAC,CAAC;IAEF,MAAM;MAAE+D,OAAO;MAAEC,YAAY;MAAEC;IAAkB,CAAC,GAAG,IAAI,CAACC,KAAK,CAAC,CAAC;IACjE,MAAMwL,YAAY,GAAG3L,OAAO;IAE5B,IAAI4L,SAA+C,GAAG,IAAI;IAE1D,MAAMC,cAAc,GAAG,IAAI1N,OAAO,CAAQC,OAAO,IAAK;MACpDwN,SAAS,GAAGE,UAAU,CAAC,MAAM;QAC3B;QACAP,aAAa,GAAGC,IAAI,CAACC,GAAG;QACxB,IAAI,CAACvI,wBAAwB,CAAC,CAAC;QAC/B9E,OAAO,CAAC,CAAC;MACX,CAAC,EAAEoN,IAAI,CAACE,GAAG,CAAC;IACd,CAAC,CAAC;;IAEF;IACA,MAAMK,cAAc,GAAG,IAAI5N,OAAO,CAAEC,OAAO,IAAK;MAC9C0N,UAAU,CAAC1N,OAAO,EAAEoN,IAAI,CAACC,GAAG,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAMtN,OAAO,CAAC6N,IAAI,CAAC,CAACH,cAAc,EAAEF,YAAY,CAAC,CAAC;IAElD,IAAIC,SAAS,IAAI,IAAI,EAAE;MACrBK,YAAY,CAACL,SAAS,CAAC;IACzB;IAEA,IAAIL,aAAa,EAAE;MACjB,MAAM,IAAIpN,OAAO,CAAEC,OAAO,IAAK0N,UAAU,CAAC1N,OAAO,EAAEmN,aAAa,CAAC,CAAC;IACpE;IAEA,MAAMQ,cAAc;IACpB,MAAMJ,YAAY;IAElB,IAAI3L,OAAO,KAAK,IAAI,CAACK,oBAAoB,EAAE;MACzC,IAAAD,iBAAW,EAAC,MAAM;QAChBjE,MAAM,CAAC+P,KAAK,CAAC,CAAC;QACd,MAAM5L,gBAAgB,GAAG,IAAI,CAACC,YAAY,CAAC,CAACN,YAAY,CAAC,CAAC;QAC1DC,iBAAiB,CAACM,OAAO,CAAEV,CAAC,IAAKA,CAAC,oBAADA,CAAC,CAAG,CAAC,CAAC;QACvC,IAAIQ,gBAAgB,EAAE;UACpB,MAAM;YAAEG;UAAS,CAAC,GAAGH,gBAAgB;UACrC,IAAIP,mBAAmB,IAAI,IAAI,EAAE;YAC/BA,mBAAmB,CAAC;cAClBY,aAAa,EAAEF,QAAQ,CAACG,MAAM,CAC5B,CAACC,GAAG,EAAEC,IAAI,KAAKD,GAAG,GAAGC,IAAI,CAACjD,KAAK,CAACkD,MAAM,EACtC,CACF,CAAC;cACDjF,KAAK,EAAEK,MAAM,CAACD,WAAW;cACzBC,MAAM,EAAEA,MAAM,CAACF;YACjB,CAAC,CAAC;UACJ;QACF;MACF,CAAC,CAAC;IACJ;EACF;EAEAiH,wBAAwBA,CAAA,EAAG;IACzB,MAAM;MAAE/G;IAAO,CAAC,GAAG,IAAI;IACvB,IAAI,CAACuD,cAAc,GAAG,SAAS;IAC/BvD,MAAM,CAAC+P,KAAK,CAAC,CAAC;EAChB;EAEA,MAAM3E,eAAeA,CAAC;IACpBS;EAGF,CAAC,GAAG,CAAC,CAAC,EAAE;IACN,MAAM;MACJlM,KAAK,EAAE;QAAE0D;MAAW;IACtB,CAAC,GAAG,IAAI;IAERA,UAAU,CAACsB,IAAI,GAAG,CAAC;IACnBtB,UAAU,CAACxB,MAAM,GAAGmO,yBAAa;IAEjC,MAAM,IAAI,CAACC,qBAAqB,CAAC;MAAEpE;IAAgB,CAAC,CAAC;EACvD;EAEA/I,UAAUA,CAAC;IAAE5B;EAAqC,CAAC,GAAG,CAAC,CAAC,EAAE;IACxD,MAAM;MAAEkG,UAAU;MAAEnG;IAAU,CAAC,GAAG,IAAI;IACtC,MAAMiP,WAAW,GAAG,CAAC,CAAC;IACtB,IAAIhP,OAAO,EAAE;MACXiP,MAAM,CAACC,MAAM,CAACF,WAAW,EAAE;QACzBG,UAAU,EAAEnP;MACd,CAAC,CAAC;IACJ;IAEAkG,UAAU,CACPkJ,OAAO,CAAC;MAAE1Q,QAAQ,EAAE,CAACqB,SAAS,EAAEiP,WAAW;IAAE,CAAC,CAAC,CAC/C7L,OAAO,CAAEkM,CAAC,IAAKA,CAAC,CAACzN,UAAU,CAAC,CAAC,CAAC;EACnC;EAEAkC,yBAAyBA,CAAC;IACxB6G,eAAe;IACf5G,KAAK;IACL/D;EAKF,CAAC,GAAG,CAAC,CAAC,EAAE;IACN,IAAI+D,KAAK,EAAE;MACT,IAAI,CAACnC,UAAU,CAAC;QAAE5B;MAAQ,CAAC,CAAC;IAC9B;IACA,IAAI,CAAC6B,gBAAgB,CAAC,CAAC;IACvB,IAAI,CAACgE,wBAAwB,CAAC,CAAC;IAC/B,OAAO,IAAI,CAACqE,eAAe,CAAC;MAAES;IAAgB,CAAC,CAAC;EAClD;EAEA5F,IAAIA,CACFuK,GAAa,EACb;IACEtF,WAAW;IACXuF,QAAQ;IACRC;EAKF,CAAC,GAAG,CAAC,CAAC,EACN;IACA,MAAM;MAAE/Q,KAAK;MAAEwD;IAAQ,CAAC,GAAG,IAAI;IAE/BA,OAAO,CAACgI,IAAI,CAAC,iBAAiB,EAAE;MAC9BwF,MAAM,EAAE;IACV,CAAC,CAAC;IAEFhR,KAAK,CAACsG,IAAI,CAAC2K,UAAU,CAACJ,GAAG,EAAE;MACzBC,QAAQ;MACRC;IACF,CAAC,CAAC;IAEFvN,OAAO,CAACgI,IAAI,CAAC,WAAW,EAAE;MAAEqF;IAAI,CAAC,CAAC;IAElC,OAAO,IAAI,CAACnF,YAAY,CAAC;MACvBH,WAAW;MACXuF,QAAQ;MACRC;IACF,CAAC,CAAC;EACJ;EAEA,MAAMT,qBAAqBA,CAAC;IAC1BpE;EAGF,CAAC,GAAG,CAAC,CAAC,EAAE;IACN,MAAM;MAAE7L,MAAM;MAAEL,KAAK;MAAEwD;IAAQ,CAAC,GAAG,IAAI;IAEvC,MAAM;MAAEU,OAAO;MAAEC,YAAY;MAAE8K,OAAO;MAAE7K;IAAkB,CAAC,GAAG,IAAI,CAACC,KAAK,CAAC,CAAC;IAC1E;IACA,IAAIrE,KAAK,CAAC0D,UAAU,CAACsB,IAAI,KAAK,CAAC,EAAE;MAC/BxB,OAAO,CAACgI,IAAI,CAAC,SAAS,EAAE;QAAEyD;MAAQ,CAAC,CAAC;IACtC;IAEA,MAAM/K,OAAO;IAEb,IAAIA,OAAO,KAAK,IAAI,CAACK,oBAAoB,EAAE;MACzC,IAAAD,iBAAW,EAAC,MAAM;QAChBjE,MAAM,CAAC6Q,KAAK,CAAC,CAAC,EAAElR,KAAK,CAAC0D,UAAU,CAACsB,IAAI,GAAG,CAAC,CAAC;QAC1C,IAAI,CAACxB,OAAO,CAACgI,IAAI,CAAC,qBAAqB,CAAC;QACxC,IAAI,CAAC/G,YAAY,CAAC,CAACN,YAAY,CAAC,CAAC;QACjCC,iBAAiB,CAACM,OAAO,CAAEV,CAAC,IAAKA,CAAC,oBAADA,CAAC,CAAG,CAAC,CAAC;QACvCkI,eAAe,YAAfA,eAAe,CAAG;UAChBlM,KAAK,EAAEK,MAAM,CAACD,WAAW;UACzBC,MAAM,EAAEA,MAAM,CAACF;QACjB,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,OAAOgE,YAAY;EACrB;EAEA1C,MAAMA,CACJ0P,KAAa,EACb;IAAE7L,KAAK;IAAEiG;EAAwD,CAAC,GAAG,CAAC,CAAC,EACvE;IACA,MAAM;MAAEvL;IAAM,CAAC,GAAG,IAAI;IACtB,MAAM;MAAEyB;IAAO,CAAC,GAAGzB,KAAK;IACxB,IAAIsF,KAAK,IAAI6L,KAAK,KAAK1P,MAAM,CAAC0P,KAAK,EAAE;MACnC1P,MAAM,CAAC2P,WAAW,CAACD,KAAK,CAAC;MACzB,IAAI,CAAChF,cAAc,CAACZ,WAAW,CAAC;IAClC;EACF;EAEA8F,WAAWA,CAAA,EAAG;IACZ,MAAM;MACJrR,KAAK;MACL0C,MAAM,EAAE;QAAEqJ;MAAgB,CAAC;MAC3BvI;IACF,CAAC,GAAG,IAAI;IACR,MAAM;MAAE/B;IAAO,CAAC,GAAGzB,KAAK;IACxB,IAAIyB,MAAM,CAAC0P,KAAK,KAAK,EAAE,EAAE;MACvB;IACF;IAEA1P,MAAM,CAAC2P,WAAW,CAAC,EAAE,CAAC;IACtB5N,OAAO,CAACgI,IAAI,CAAC,aAAa,CAAC;IAE3B,IAAI,IAAI,CAACtB,wBAAwB,KAAK,OAAO,EAAE;MAC7C,IAAI,CAACO,UAAU,CAACwB,eAAe,CAAC,CAAC;IACnC;IAEA,OAAO,IAAI,CAAC5G,yBAAyB,CAAC;MAAE6G,eAAe,EAAEH;IAAgB,CAAC,CAAC;EAC7E;EAEA,IAAIxK,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACvB,KAAK,CAACuB,OAAO;EAC3B;EAEA+P,UAAUA,CAACC,OAAU,EAAE;IACrB,OAAO,IAAI,CAACC,WAAW,CAAC,CAACD,OAAO,CAAC,CAAC;EACpC;EAEAC,WAAWA,CAACC,QAAa,EAAE;IACzB,MAAMC,YAAY,GAAG,IAAI,CAACrR,MAAM,CAACmR,WAAW,CAACC,QAAQ,CAAC;IAEtD,IAAIC,YAAY,IAAI,IAAI,EAAE;MACxB,IAAI,CAACvO,UAAU,CAAC,CAAC;MAEjB,OAAOuO,YAAY,CAACC,QAAQ;IAC9B;IAEA,OAAOjI,SAAS;EAClB;EAEAkI,OAAOA,CAACL,OAAU,EAAE;IAClB,OAAO,IAAI,CAACM,QAAQ,CAAC,CAACN,OAAO,CAAC,CAAC;EACjC;EAEAM,QAAQA,CAACJ,QAAa,EAAE;IACtB,MAAMC,YAAY,GAAG,IAAI,CAACrR,MAAM,CAACwR,QAAQ,CAACJ,QAAQ,CAAC;IACnD,IAAI,CAACtO,UAAU,CAAC,CAAC;IACjB,OAAOuO,YAAY,CAACC,QAAQ;EAC9B;EAEA,MAAMG,kBAAkBA,CAAC;IAAEC;EAAyC,CAAC,GAAG,CAAC,CAAC,EAAE;IAC1E,MAAM;MAAEvO;IAAQ,CAAC,GAAG,IAAI;IAExB,IAAI,CAACuO,YAAY,EAAE;MACjB,IAAI,CAAC5O,UAAU,CAAC,CAAC;IACnB;IAEA,IAAI,CAACC,gBAAgB,CAAC,CAAC;IACvBI,OAAO,CAACgI,IAAI,CAAC,oBAAoB,CAAC;IAElC,MAAM,IAAI,CAAC8E,qBAAqB,CAAC,CAAC;EACpC;EAEA,MAAMjK,eAAeA,CAAC;IACpB2L,kBAAkB;IAClBzQ;EAIF,CAAC,GAAG,CAAC,CAAC,EAAE;IACN,MAAM;MAAEvB,KAAK;MAAEK,MAAM;MAAE0J,cAAc;MAAEvG;IAAQ,CAAC,GAAG,IAAI;IACvD,MAAM;MAAEE;IAAW,CAAC,GAAG1D,KAAK;IAC5B,MAAM;MAAEgF,IAAI,EAAEiN;IAAY,CAAC,GAAGvO,UAAU;IAExC,IAAI,CAACP,UAAU,CAAC;MAAE5B;IAAQ,CAAC,CAAC;IAE5B,MAAM2Q,QAA6B,GAAG,EAAE;IAExCxO,UAAU,CAACxB,MAAM,GAAGmO,yBAAa;IAEjC7M,OAAO,CAACgI,IAAI,CAAC,iBAAiB,CAAC;IAC/BhI,OAAO,CAACgI,IAAI,CAAC,SAAS,EAAE;MAAEyD,OAAO,EAAE;IAAK,CAAC,CAAC,CAAC,CAAC;;IAE5C,IAAIkD,eAAe,GAAGzI,SAAyC;IAE/D,KAAK,IAAI1E,IAAI,GAAG,CAAC,EAAEA,IAAI,IAAIiN,WAAW,EAAEjN,IAAI,EAAE,EAAE;MAC9CtB,UAAU,CAACsB,IAAI,GAAGA,IAAI;MACtB,IAAI,CAAC5B,gBAAgB,CAAC,CAAC;MACvB,MAAM;QAAEe,YAAY,EAAEiO,SAAS;QAAElO;MAAQ,CAAC,GAAG,IAAI,CAACG,KAAK,CAAC,CAAC;MACzD,IAAI+N,SAAS,CAAClO,OAAO,EAAE;QACrB,IAAI6F,cAAc,CAACsI,EAAE,KAAK,QAAQ,EAAE;UAClC,MAAMD,SAAS,CAAClO,OAAO;UACvB,IAAAI,iBAAW,EACT;YAAA,IAAAgO,qBAAA;YAAA,OAAO5O,UAAU,CAACxB,MAAM,GAAG,EAAAoQ,qBAAA,GAAAF,SAAS,CAAC5M,KAAK,CAACqI,IAAI,qBAApByE,qBAAA,CAAsBpQ,MAAM,KAAI,IAAI;UAAA,CACjE,CAAC;QACH;QACAgQ,QAAQ,CAAC5E,IAAI,CAAC8E,SAAS,CAAClO,OAAO,CAAC6K,IAAI,CAAC,MAAMqD,SAAS,CAAC,CAAC;MACxD;MAEA,IAAIpN,IAAI,KAAKiN,WAAW,EAAE;QACxBE,eAAe,GAAGjO,OAAO;MAC3B;IACF;IAEA,IAAI,CAACb,YAAY,CAAC,CAAC;IAEnB,MAAMkP,OAAO,GAAG,MAAMlQ,OAAO,CAACmQ,GAAG,CAACN,QAAQ,CAAC;IAE3C,IAAA5N,iBAAW,EAAC,MAAM;MAChB0N,kBAAkB,YAAlBA,kBAAkB,CAAG,CAAC;MACtB,IAAIG,eAAe,KAAK,IAAI,CAAC5N,oBAAoB,EAAE;QACjDlE,MAAM,CAAC6Q,KAAK,CAACe,WAAW,CAAC;QACzB,IAAI,CAACzO,OAAO,CAACgI,IAAI,CAAC,qBAAqB,CAAC;QACxC,IAAI,CAAC/G,YAAY,CAAC8N,OAAO,CAAC;MAC5B;IACF,CAAC,CAAC;EACJ;EAEA,IAAI3L,iBAAiBA,CAAA,EAAG;IACtB,OAAO,IAAI,CAACvG,MAAM,CAACuG,iBAAiB;EACtC;EAEAK,sBAAsBA,CAAA,EAAG;IACvB,MAAM;MAAEjH;IAAM,CAAC,GAAG,IAAI;IACtBA,KAAK,CAACyS,YAAY,CAAC;MAAEC,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS;IAAE,CAAC,CAAC;EAC3D;EAEAC,4BAA4BA,CAAA,EAAG;IAC7B,MAAM;MAAE3S;IAAM,CAAC,GAAG,IAAI;IACtBA,KAAK,CAAC4S,kBAAkB,CAAC;MAAEF,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS;IAAE,CAAC,CAAC;EACjE;EAEA,MAAMjM,YAAYA,CAAA,EAAG;IACnB,MAAM;MACJpG,MAAM;MACNqC,MAAM,EAAE;QAAEmQ;MAAqB,CAAC;MAChCrP,OAAO;MACPxD,KAAK,EAAE;QAAE0D;MAAW;IACtB,CAAC,GAAG,IAAI;IAER,MAAMoP,SAAS,GAAG,IAAI,CAAC5P,eAAe,CAAC,CAAC;IAExC,IAAI,CAAC7C,MAAM,CAACC,MAAM,CAACqO,MAAM,IAAI,CAACtO,MAAM,CAACC,MAAM,CAACmD,OAAO,EAAE;MACnD,OAAOqP,SAAS,CAAC5O,OAAO;IAC1B;IAEA,IAAI,CAACd,gBAAgB,CAAC,CAAC;IAEvBM,UAAU,CAACsB,IAAI,GAAG,CAAC;IACnBtB,UAAU,CAACxB,MAAM,GAAGmO,yBAAa;IAEjC,IAAI,CAACzM,cAAc,GAAG,SAAS;IAC/B,MAAMqL,OAAO,GAAG6D,SAAS,CAAC7D,OAAO,CAAC,CAAC;IACnC,MAAM8D,2BAA2B,GAAGvP,OAAO,CAACM,SAAS,CAAC,oBAAoB,CAAC;IAC3E,MAAMzB,OAAO,CAACmQ,GAAG,CAACO,2BAA2B,CAAChP,GAAG,CAAEiP,CAAC,IAAKA,CAAC,CAAC;MAAE/D;IAAQ,CAAC,CAAC,CAAC,CAAC;;IAEzE;IACA,IAAA3K,iBAAW,EAAC,MAAM;MAChBZ,UAAU,CAACsB,IAAI,GAAG,CAAC;MACnBtB,UAAU,CAACxB,MAAM,GAAGmO,yBAAa;MACjC,IAAI,CAACzM,cAAc,GAAG,SAAS;IACjC,CAAC,CAAC;IAEF,MAAMO,YAAY,GAAG,MAAM,IAAI,CAACmM,qBAAqB,CAAC,CAAC;IACvD,MAAMnM,YAAY,CAACD,OAAO;IAC1B,IAAI,CAACV,OAAO,CAACgI,IAAI,CAAC,OAAO,CAAC;IAC1B,IAAAlH,iBAAW,EAAC,MAAM;MAChB,MAAM;QAAEtC,KAAK;QAAEC;MAAU,CAAC,GAAG5B,MAAM;MACnCwS,oBAAoB,YAApBA,oBAAoB,CAAG;QACrBxS,MAAM,EAAE;UACN2B,KAAK;UACLC,SAAS,EAAEA,SAAS,IAAI;QAC1B,CAAC;QACDjC,KAAK,EAAEK,MAAM,CAACD;MAChB,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EA6CAmG,IAAIA,CAAC;IACH0M,gBAAgB;IAChBC;EAC6D,CAAC,GAAG,CAAC,CAAC,EAAE;IACrE,MAAM;MAAEzI,UAAU;MAAEjK,WAAW;MAAER,KAAK;MAAE4F,QAAQ;MAAEvF;IAAO,CAAC,GAAG,IAAI;IACjE,MAAM;MAAE6E;IAAa,CAAC,GAAG1E,WAAW;IAEpCH,MAAM,CAACD,WAAW,GAAGJ,KAAK,CAACG,UAAU;IAErCK,WAAW,CAACkC,MAAM,CAACyQ,EAAE,CAAC,QAAQ,EAAE,IAAI,CAACC,mBAAmB,CAAC;IAEzD,MAAMC,SAAS,GAAG,CAChBrT,KAAK,CAACuG,IAAI,CAAC;MAAE2M;IAAoB,CAAC,CAAC,EACnC,IAAI,CAACI,oBAAoB,CAAC,CAAC,EAC3BjT,MAAM,CAACkG,IAAI,CAAC,CAAC,EACbkE,UAAU,CAAClE,IAAI,CAAC,CAAC;IACjB;IACA,IAAI,CAAC2C,aAAa,CAACqK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EACtCrO,YAAY,CAACqO,SAAS,CAAC,IAAI,CAAChO,eAAe,CAAC,CAC7C;IAEDK,QAAQ,CAACC,OAAO,CAAC,YAAY;MAAA,IAAA2N,qBAAA;MAC3B,MAAMnR,OAAO,CAACmQ,GAAG,CAAC,CAChBS,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAACxM,YAAY,CAAC,CAAC,GAAA+M,qBAAA,GAC7C,IAAI,CAACxL,gBAAgB,qBAArBwL,qBAAA,CAAAC,IAAA,KAAwB,CAAC,CAC1B,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,IAAAjR,YAAM,EAAC,MAAM;MAClBhC,WAAW,CAACkC,MAAM,CAACgR,GAAG,CAAC,QAAQ,EAAE,IAAI,CAACN,mBAAmB,CAAC;MAC1DC,SAAS,CAAC3O,OAAO,CAAEiP,QAAQ,IAAKA,QAAQ,CAAC,CAAC,CAAC;MAC3C/N,QAAQ,CAACtF,MAAM,GAAG;QAChB,GAAGwO,kBAAW,CAAC8E;MACjB,CAAC;IACH,CAAC,CAAC;EACJ;EAEAN,oBAAoBA,CAAA,EAAG;IACrB,MAAM;MAAEtT;IAAM,CAAC,GAAG,IAAI;IACtB,MAAMqT,SAAS,GAAG,CAChB,IAAAQ,sBAAgB,EAAC7T,KAAK,CAAC0C,MAAM,EAAE,SAAS,EAAGoR,IAAI,IAAK;MAClD,IAAI,IAAI,CAAC5J,wBAAwB,KAAK,OAAO,EAAE;QAC7C,IAAI,CAACO,UAAU,CAACwB,eAAe,CAAC,CAAC;MACnC;MAEA,IAAI,IAAI,CAACzE,mBAAmB,EAAE;QAC5B,IAAI,CAACuM,eAAe,CAAC3I,UAAU,CAAC,IAAI,CAACC,qBAAqB,CAAC;MAC7D;MAEA,IAAI,CAAAyI,IAAI,oBAAJA,IAAI,CAAEvI,WAAW,MAAK,KAAK,EAAE;QAC/B,IAAI,CAACnE,wBAAwB,CAAC,CAAC;MACjC,CAAC,MAAM;QAAA,IAAA4M,sBAAA;QACL,CAAAA,sBAAA,OAAI,CAAC3M,iBAAiB,aAAtB2M,sBAAA,CAAwBjJ,QAAQ,CAAC;UAAEC,GAAG,EAAE,CAAC;UAAEiJ,QAAQ,EAAE;QAAS,CAAC,CAAC;MAClE;MAEA,IAAI,CAACxI,eAAe,CAAC,CAAC;IACxB,CAAC,CAAC,EACF,IAAAoI,sBAAgB,EAAC7T,KAAK,CAAC0C,MAAM,EAAE,iBAAiB,EAAGoR,IAAI,IAAK;MAC1D,IAAI,CAAC3H,cAAc,CAAC2H,IAAI,oBAAJA,IAAI,CAAEvI,WAAW,CAAC;IACxC,CAAC,CAAC,EACF,IAAIvL,KAAK,CAAC2J,sBAAsB,GAC5B,CACE,IAAAuK,cAAQ,EACN,MAAMlU,KAAK,CAACmU,aAAa,EACzB,MAAM;MACJ,IAAI,CAAC/M,wBAAwB,CAAC,CAAC;MAC/B,IAAI,CAACqE,eAAe,CAAC,CAAC;IACxB,CACF,CAAC,CACF,GACD,EAAE,CAAC,CACR;IAED,OAAO,MAAM;MACX4H,SAAS,CAAC3O,OAAO,CAAEqJ,CAAC,IAAKA,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;EACH;EAEAqG,OAAOA,CAACC,GAAW,EAAwB;IACzC,MAAMC,SAAS,GAAG,IAAI,CAACjU,MAAM,CAACkU,GAAG,CAACF,GAAG,CAAC;IACtC,OAAOC,SAAS,oBAATA,SAAS,CAAE5G,IAAI;EACxB;EAEA8G,YAAYA,CAACH,GAAW,EAAmC;IACzD,OAAO,IAAI,CAAChU,MAAM,CAACkU,GAAG,CAACF,GAAG,CAAC;EAC7B;EAEAI,mBAAmBA,CAACC,KAAa,EAAuB;IACtD,OAAO,IAAI,CAACrU,MAAM,CAACsU,UAAU,CAACD,KAAK,CAAC;EACtC;EAEA,IAAIC,UAAUA,CAAA,EAAG;IACf,OAAO,IAAI,CAACtU,MAAM,CAACsU,UAAU;EAC/B;EAEAC,iBAAiBA,CAAIC,aAA+B,EAAE;IACpD,OAAO,IAAI,CAACd,eAAe,CAAC3I,UAAU,CAACyJ,aAAa,CAAC;EACvD;EAEAvN,sBAAsBA,CAACtH,KAAK,GAAG,IAAI,CAACK,MAAM,CAACD,WAAW,EAOpD;IAAA,IAAA0U,WAAA,EAAAC,YAAA;IACA,MAAM;MAAE1U,MAAM;MAAEkH;IAAK,CAAC,GAAG,IAAI;IAE7B,OAAO;MACL,GAAGA,IAAI;MACPyN,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAClV,KAAK,CAAC0Q,UAAU,CAAC;MAChDyE,gBAAgB,EAAE,CAAAL,WAAA,GAAA9U,KAAK,CAACsG,IAAI,aAAVwO,WAAA,CAAY7P,MAAM,GAChCgQ,IAAI,CAACC,SAAS,CAAClV,KAAK,CAACsG,IAAI,CAAC,GAC1BoD,SAAS;MACb0L,gBAAgB,EAAE/U,MAAM,CAAC2B,KAAK;MAC9BqT,YAAY,EAAEhV,MAAM,CAACiV,IAAI;MACzBC,gBAAgB,GAAAR,YAAA,GAAE/U,KAAK,CAACsG,IAAI,qBAAVyO,YAAA,CAAY9P;IAChC,CAAC;EACH;EAEA,IAAI4B,iBAAiBA,CAAA,EAAG;IACtB,MAAM;MACJjB,QAAQ,EAAE;QACRtF,MAAM,EAAE;UAAEkV;QAAU;MACtB,CAAC;MACDrK,eAAe,EAAE;QAAEsK;MAAkB;IACvC,CAAC,GAAG,IAAI;IACR,OAAOD,SAAS,IAAIC,iBAAiB;EACvC;EAEA,IAAI3O,iBAAiBA,CAAA,EAAG;IACtB,MAAM;MACJiN,eAAe,EAAE;QAAE0B;MAAkB,CAAC;MACtCpV,MAAM,EAAE;QAAEC;MAAO,CAAC;MAClBsD;IACF,CAAC,GAAG,IAAI;IACR,OACE6R,iBAAiB,IACjBC,OAAO,CAACpV,MAAM,CAACsO,UAAU,IAAIhL,cAAc,KAAK,SAAS,CAAC;EAE9D;EAEA,IAAImD,cAAcA,CAAA,EAAG;IACnB,MAAM;MACJnD,cAAc;MACdvD,MAAM,EAAE;QAAEsV;MAAQ;IACpB,CAAC,GAAG,IAAI;IACR,OAAO/R,cAAc,KAAK,QAAQ,IAAI+R,OAAO;EAC/C;EAEA,IAAI3O,cAAcA,CAAA,EAAG;IACnB,MAAM;MACJ3G,MAAM,EAAE;QAAEC;MAAO,CAAC;MAClBsD;IACF,CAAC,GAAG,IAAI;IACR,OACE,CAACtD,MAAM,CAACsO,UAAU,IAAItO,MAAM,CAACmD,OAAO,IAAIG,cAAc,KAAK,WAAW;EAE1E;EAIA,IAAIgS,eAAeA,CAAA,EAGjB;IACA,MAAM;MAAEC;IAAiB,CAAC,GAAG,IAAI;IACjC,OAAO;MACL,IAAIC,IAAIA,CAACC,CAA4B,EAAE;QACrCF,gBAAgB,CAACG,GAAG,CAACD,CAAC,CAAC;MACzB,CAAC;MACD,IAAID,IAAIA,CAAA,EAAG;QACT,OAAO,IAAAxR,iBAAW,EAAC,MAAMuR,gBAAgB,CAAChI,IAAI,CAAC;MACjD,CAAC;MACD,IAAIoI,IAAIA,CAAA,EAAG;QACT,OAAO,IAAA3R,iBAAW,EAAC,MAAMuR,gBAAgB,CAACI,IAAI,CAAC;MACjD;IACF,CAAC;EACH;AACF;AAACC,OAAA,CAAApW,eAAA,GAAAA,eAAA","ignoreList":[]}
1
+ {"version":3,"names":["_model","require","_core","_mobx","_events","_QueryState","_QueryResultState","_BulkSelectState","_PromisesState","_Pagination","_PaginationMode","_TaskState","_util","_TransitionState","_FetchTotalState","MAX_RETRIES","CollectionState","queryKeyOptions","query","queryKey","_queryKey","asComputed","originQuery","result","status","isOnline","onlineState","optimisticActions","_optimisticActions","process","env","NODE_ENV","Error","constructor","params","_defineProperty2","default","EventEmitter","PromisesState","TaskState","queryName","filters","rawFilters","search","hasActiveFilters","hasNonPersistentActiveFilters","nonPersistentFiltersKey","columns","computedQuery","items","total","available","cursor","rest","fetchData","Promise","resolve","requestAnimationFrame","action","err","events","errorMonitor","console","error","OfflineError","handled","onError","captureException","getCurrentQuery","invalidate","_resetReactQuery","updateStatus","onNewPageAdded","onNewPageStart","emitter","isError","pagination","nextPage","lifecycleState","onNewPageAddedListeners","listeners","map","l","maybeOnNewPageAdded","promise","currentQuery","onResultListeners","fetch","runInAction","_currentQueryPromise","updateResultInfo","updateResult","forEach","newPages","onNewPageAddedParams","totalNewItems","reduce","agg","page","length","focusManager","isFocused","fetchNextPageIfNeeded","clearResultAndMoveToStart","force","_recoverIfError","state","isPaused","dispatch","type","initTask","runOnce","TransitionState","lodash","persistQueryToUrl","toExtendedFields","hooks","makeObservable","bound","clearAndMoveToPage","refreshAllPages","sort","init","setInitialPage","initialFetch","totalPages","computed","hasAvailableItems","showInitialLoader","showRefreshLoader","showEmptyState","showErrorState","resetFiltersAndRefresh","observable","ref","clearResultBeforeRefresh","scrollableContent","_commonDynamicBiParams","fqdn","deferInitialLoading","queryCache","errorHandler","history","fetchErrorMessage","itemKey","itemName","translate","initDependencies","showToast","remove","defaultQueryOptions","queryFn","_queryFn","keepPreviousData","suspense","enabled","retryDelay","staleTime","refetchOnMount","retryOnMount","queryOptions","queryClient","QueryClient","defaultOptions","queries","queryObserver","QueryObserver","retry","failureCount","_this$errorHandler","reportRetryAttempt","QueryState","limit","undefined","refreshOnColumnsChange","_paginationModeRef","paginationModeRef","current","paginationMode","_paginationMode","PaginationMode","selectionConsistencyMode","QueryResultState","toComputed","fetchTotal","FetchTotalState","collection","fetchesHistory","bulkSelect","BulkSelectState","disableAutoSelectAllCount","useNewSelectAllLogic","scrollToTop","_this$scrollableConte","scrollTo","top","left","initialPage","initialPromises","addPromise","animationFramePromise","_runSort","clearResult","emit","moveToFirstPage","scheduleSort","whenNotIdle","debounce","_runSearch","onSearch","onSearchResults","searchEndListeners","resetToDefaults","onResultUpdated","scheduleSearch","setOptions","options","maybeTotal","hasNext","setQueryData","_getProcessedResult","unprocessedPages","unprocessedTotal","currentItemsMap","beforeAddNewPagesListeners","processedPages","pages","listener","processedTotal","_getProcessedTotal","beforeSetTotalListeners","_addToFetchesHistory","offset","push","itemsKeys","flatMap","p","item","queryPageInfo","reactQuery","data","filter","d","lastPage","_keyedItemsMap","addPages","unprocessed","processed","setTotals","setSupportTotal","setHasNext","setCursor","fn","args","isIdle","isFetching","getOptimisticResult","queryStatus","then","catch","isStale","fetchListeners","_totals","Math","ceil","totalStatus","fetchedLastPage","fetchNextPage","minLoaderTime","wait","min","max","fetchPromise","timeoutId","maxWaitPromise","setTimeout","minWaitPromise","race","clearTimeout","clear","initialCursor","fetchAndReplaceResult","queryLookup","Object","assign","filtersKey","findAll","q","col","multiple","forceDirection","origin","changeSort","slice","value","changeValue","clearSearch","changeItem","newItem","changeItems","newItems","changeResult","rollback","addItem","addItems","refreshCurrentPage","noInvalidate","beforeUpdateResult","currentPage","promises","lastPagePromise","pageQuery","id","_pageQuery$state$data","results","all","resetFilters","emitEvents","resetCustomFiltersAndRefresh","resetCustomFilters","onInitialPageFetched","prevQuery","beforeInitialFetchListeners","f","skipInitialFetch","skipFilterListeners","on","onOnlineStateChange","disposers","_registerQueryEvents","subscribe","_this$initDependencie","call","off","disposer","idle","addEventListener","opts","refreshPromises","_this$scrollableConte2","behavior","reaction","fieldsKeyHash","getItem","key","keyedItem","get","getKeyedItem","getKeyedItemByIndex","index","keyedItems","addRefreshPromise","createPromise","_query$sort","_query$sort2","currentFilters","JSON","stringify","currentSortOrder","filteredListSize","initialItems","size","numSortedColumns","isLoading","isLoadingPromises","Boolean","isEmpty","topNotification","_topNotification","text","t","set","show","exports"],"sources":["../../../src/state/CollectionState.ts"],"sourcesContent":["import {\n CollectionEvents,\n ComputedQuery,\n ComputedQueryFull,\n DataResultKeyed,\n DataResultRaw,\n Filter,\n FiltersKey,\n FiltersMap,\n Fqdn,\n KeyedItem,\n OnResultUpdated,\n PatternsErrorHandler,\n QueryOptions,\n QueryResultStatus,\n queryStatus,\n ShowToast,\n SortOrder,\n} from '../model';\nimport {\n Query as ReactQuery,\n QueryCache,\n QueryClient,\n QueryObserver,\n} from 'react-query/core';\nimport {\n action,\n computed,\n makeObservable,\n observable,\n reaction,\n runInAction,\n} from 'mobx';\nimport { EventEmitter } from 'events';\nimport { History } from 'history';\nimport { QueryState } from './QueryState';\nimport { QueryResultState } from './QueryResultState';\nimport { BulkSelectState } from './BulkSelectState';\nimport { PromisesState } from './PromisesState';\nimport { initialCursor } from './Pagination';\nimport { PaginationMode, PaginationModeRef } from './PaginationMode';\nimport { TaskState } from './TaskState';\nimport {\n ErrorMonitor,\n ExtendedFields,\n PartialLodash,\n Translate,\n} from '../services';\nimport { addEventListener, OfflineError, TypedEmitter } from '../util';\nimport { OnlineState } from './OnlineState';\nimport { TransitionState } from './TransitionState';\nimport { Sortable } from './SortState';\nimport { CollectionOptimisticActions } from './CollectionOptimisticActions';\nimport { FetchTotalState } from './FetchTotalState';\n\nconst MAX_RETRIES = 3;\n\ntype Query<T> = Omit<ReactQuery<DataResultKeyed<T>>, 'promise' | 'dispatch'> & {\n promise?: Promise<unknown>;\n dispatch: (action: { type: string; error: unknown }) => void;\n};\n\nexport interface CollectionStateEvents<T, F extends FiltersMap> {\n triggerReachBottomListener: () => unknown;\n beforeAddNewPages: (params: {\n pages: T[][];\n currentItemsMap: Map<string, KeyedItem<T>>;\n originQuery: ComputedQueryFull<F>;\n }) => T[][];\n beforeSetTotal: (params: {\n total: number;\n originQuery: ComputedQuery<F>;\n }) => number;\n resultUpdated: () => unknown;\n beforeResultUpdated: () => unknown;\n ready: () => unknown;\n collectionLayout: () => unknown;\n fetch: (params: { isStale: boolean }) => void | undefined | (() => unknown);\n refresh: (params: { isStale: boolean }) => unknown;\n refreshCurrentPage: () => unknown;\n refreshAllPages: () => unknown;\n refreshUpdateResult: () => unknown;\n searchStart: () => () => unknown;\n search: (params: { clearResult?: boolean }) => unknown;\n clearSearch: () => unknown;\n newPageStart: () => (params: {\n totalNewItems: number;\n newPages: DataResultKeyed<T>[];\n }) => unknown;\n beforeSortStart: (params: {\n origin?: 'SidePanel' | 'ColumnHeader';\n }) => unknown;\n sortStart: (params: { col: { id: string } }) => unknown;\n sort: (params: { clearResult?: boolean }) => unknown;\n beforeClearFilters: (params: { origin: string }) => unknown;\n}\n\n/**\n * Hooks for extending or customizing the lifecycle of a collection state.\n *\n * Unlike regular events (which are fire-and-forget), hooks can return a value\n * that is consumed by the process they are part of. This allows business logic\n * to influence behavior at specific points in the flow.\n */\nexport interface CollectionStateHooks {\n beforeInitialFetch: (params: {\n isStale: boolean;\n }) => unknown | Promise<unknown>;\n}\n\ninterface ScrollableContent {\n scrollTo: (options: ScrollToOptions) => void;\n}\n\nexport interface CollectionStateParams<T, F extends FiltersMap> {\n readonly queryCache: QueryCache;\n readonly queryName: string;\n readonly fqdn?: Fqdn;\n readonly filters: F;\n readonly search?: Filter<string>;\n readonly errorMonitor: ErrorMonitor;\n readonly errorHandler: PatternsErrorHandler | undefined;\n readonly onlineState: OnlineState;\n readonly history: History;\n readonly showToast?: ShowToast;\n readonly translate: Translate;\n readonly itemKey: (item: T) => string;\n readonly toExtendedFields?: (item: T) => ExtendedFields | undefined | null;\n readonly initDependencies?: () => Promise<unknown>;\n\n readonly fetchData: (query: ComputedQuery<F>) => Promise<DataResultRaw<T>>;\n readonly fetchTotal?: (query: ComputedQuery<F>) => Promise<number>;\n readonly fetchErrorMessage?: (params: {\n err: unknown;\n isOnline: boolean;\n }) => string | null | undefined;\n readonly itemName: (item: T) => string;\n readonly deferInitialLoading?: boolean;\n readonly events?: CollectionEvents<F>;\n readonly persistQueryToUrl?: boolean;\n readonly refreshOnColumnsChange?: boolean;\n readonly limit?: number;\n readonly initialPage?: DataResultRaw<T>;\n readonly queryOptions?: QueryOptions;\n readonly paginationMode?: 'cursor' | 'offset';\n readonly paginationModeRef?: PaginationModeRef;\n readonly selectionConsistencyMode?: 'preserve' | 'clear';\n readonly disableAutoSelectAllCount?: boolean;\n readonly useNewSelectAllLogic?: boolean;\n readonly lodash: PartialLodash;\n readonly hooks?: TypedEmitter<CollectionStateHooks>;\n}\n\nexport interface CollectionStatePublicAPI<T, F extends FiltersMap> {\n /**\n * Invalidates all cache records for this collection.<br>\n * Optional parameters:<br>\n * `filters` - Clears only a specific part of the cache, for example: `invalidate({ filters: { status: ['active'] } })`\n * @external\n */\n invalidate(params?: {\n filters?: { [P in keyof F]?: string[] | undefined | null };\n }): void;\n\n /**\n * Invalidates cache and refreshes all previously fetched pages, without showing a loading indication.<br>\n * Optional parameters:<br>\n * - `beforeUpdateResult` - A callback function that will be called before updating the result.<br>\n * - `filters` - Invalidates only a specific part of the cache, for example: `refreshAllPages({ filters: { status: ['active'] } })`.\n * @external\n */\n refreshAllPages(params?: {\n beforeUpdateResult?: () => unknown;\n filters?: { [P in keyof F]?: string[] | undefined | null };\n }): Promise<void>;\n\n /**\n * Invalidates cache and refreshes current page, without showing a loading indication.<br>\n * Optional parameters:<br>\n * - `noInvalidate` - Refreshes current page without invalidating cache.\n * @external\n */\n refreshCurrentPage(params?: { noInvalidate?: boolean }): Promise<void>;\n\n /**\n * Clears all data from the collection and goes back to the first page and refreshes the first page data, while showing a loading indication.<br>\n * Optional parameters:<br>\n * - `force` - Invalidates the cache and resets react-query observer.\n * - `filters` - Clears only a specific part of the cache, for example: `invalidate({ filters: { status: ['active'] } })`\n * @external\n */\n clearResultAndMoveToStart(params?: {\n force?: boolean;\n filters?: { [P in keyof F]?: string[] | undefined | null };\n }): Promise<void>;\n\n /**\n * Triggers retry when collection fails to load\n * @external\n */\n retryErrorState(): void;\n\n /**\n * [BulkSelectState](./?path=/story/common-state--bulkselectstate)\n * @external\n */\n bulkSelect: BulkSelectState<T>;\n\n /**\n * [ComputedQuery](./?path=/story/common-types--computedquery) instance. Holds all the relevant variables to query the server API with.\n */\n originQuery: ComputedQueryFull<F>;\n\n /**\n * Status of the query. Contains boolean flags of `isIdle`, `isError`, `isLoading`, `isFetching`, `isSuccess`.\n * The difference between `isLoading` and `isFetching` is that `isLoading` is true during the initial query, `isFetching` is true during the next queries.\n * @external\n */\n status: QueryResultStatus<DataResultKeyed<T>, unknown>;\n\n /**\n * The total number of items, as was returned from the last query.\n * @external\n */\n total: number;\n\n /**\n * All the keyed items of the collection\n * @external\n */\n keyedItems: KeyedItem<T>[];\n\n /**\n * Get an item object according to its key\n * @external\n * @param key The key of the wanted item\n * @returns The wanted item\n */\n getItem(key: string): T | undefined | null;\n}\n\nexport class CollectionState<T, F extends FiltersMap = FiltersMap>\n implements CollectionStatePublicAPI<T, F>\n{\n readonly query: QueryState<F>;\n readonly _paginationModeRef;\n private readonly _paginationMode: PaginationMode<T, F>;\n readonly selectionConsistencyMode: 'preserve' | 'clear';\n readonly result: QueryResultState<T, F>;\n readonly fetchesHistory: {\n itemsKeys: string[];\n queryPageInfo: {\n page: number;\n cursor: string | null | undefined;\n offset: number;\n };\n }[];\n readonly bulkSelect: BulkSelectState<T>;\n scrollableContent?: ScrollableContent | null = null;\n readonly errorMonitor: ErrorMonitor;\n readonly errorHandler;\n\n readonly queryCache: QueryCache;\n readonly queryClient: QueryClient;\n\n readonly queryObserver: QueryObserver<DataResultKeyed<T>>;\n readonly queryName;\n readonly fqdn;\n readonly fetchErrorMessage: CollectionStateParams<T, F>['fetchErrorMessage'];\n readonly itemName: CollectionStateParams<T, F>['itemName'];\n readonly itemKey: CollectionStateParams<T, F>['itemKey'];\n readonly toExtendedFields?;\n readonly translate: Translate;\n readonly fetchData: CollectionStateParams<T, F>['fetchData'];\n readonly lodash;\n\n readonly deferInitialLoading?: boolean;\n readonly persistQueryToUrl;\n\n _optimisticActions?: CollectionOptimisticActions<T, F>;\n beforeSetData?: () => void | Promise<unknown>;\n readonly showToast: ShowToast;\n\n readonly events: CollectionEvents<F>;\n readonly emitter = new EventEmitter() as TypedEmitter<\n CollectionStateEvents<T, F>\n >;\n readonly hooks;\n\n readonly onlineState: OnlineState;\n readonly history: History;\n\n readonly initDependencies?: () => Promise<unknown>;\n readonly initialPromises = new PromisesState();\n readonly refreshPromises = new PromisesState();\n\n readonly initTask = new TaskState();\n\n /**\n * Possible flows:\n * result->refresh, refresh->result, result->fetchMore, fetchMore->result, refresh->refresh, fetchMore->fetchMore\n */\n lifecycleState: 'result' | 'refresh' | 'fetchMore' = 'result';\n\n _queryKey = (asComputed: ComputedQueryFull<F>) => {\n const { queryName } = this;\n const {\n filters,\n rawFilters,\n search,\n hasActiveFilters,\n hasNonPersistentActiveFilters,\n nonPersistentFiltersKey,\n columns,\n // Pick only properties relevant to `queryKey` uniqueness\n ...computedQuery\n } = asComputed;\n\n return [queryName, computedQuery] as const;\n };\n\n get queryKeyOptions() {\n const { query } = this;\n return {\n queryKey: this._queryKey(query.asComputed),\n };\n }\n\n get originQuery() {\n return this.result.originQuery;\n }\n\n get status() {\n return this.result.status;\n }\n\n isOnline() {\n return this.onlineState.isOnline;\n }\n\n get optimisticActions() {\n if (\n this._optimisticActions == null &&\n process.env.NODE_ENV !== 'production'\n ) {\n throw new Error('optimisticActions is not initialized');\n }\n return this._optimisticActions as CollectionOptimisticActions<T, F>;\n }\n\n constructor(params: CollectionStateParams<T, F>) {\n this.lodash = params.lodash;\n this.persistQueryToUrl = params.persistQueryToUrl;\n this.toExtendedFields = params.toExtendedFields;\n this.hooks =\n params.hooks ??\n (new EventEmitter() as TypedEmitter<CollectionStateHooks>);\n makeObservable(this, {\n fetchNextPageIfNeeded: action.bound,\n clearAndMoveToPage: action.bound,\n clearResultAndMoveToStart: action.bound,\n refreshAllPages: action.bound,\n updateStatus: action.bound,\n updateResult: action.bound,\n search: action,\n sort: action,\n fetch: action,\n init: action,\n setInitialPage: action,\n initialFetch: action,\n totalPages: computed,\n hasAvailableItems: computed,\n showInitialLoader: computed,\n showRefreshLoader: computed,\n showEmptyState: computed,\n showErrorState: computed,\n resetFiltersAndRefresh: action.bound,\n lifecycleState: observable.ref,\n clearResultBeforeRefresh: action,\n scrollableContent: observable.ref,\n _commonDynamicBiParams: action,\n });\n\n this.queryName = params.queryName;\n this.fqdn = params.fqdn;\n this.deferInitialLoading = params.deferInitialLoading;\n this.queryCache = params.queryCache;\n this.errorMonitor = params.errorMonitor;\n this.errorHandler = params.errorHandler;\n this.onlineState = params.onlineState;\n this.history = params.history;\n\n this.fetchErrorMessage = params.fetchErrorMessage;\n this.itemKey = params.itemKey;\n this.itemName = params.itemName;\n this.translate = params.translate;\n this.fetchData = params.fetchData;\n this.events = params.events ?? {};\n\n this.initDependencies = params.initDependencies;\n\n this.showToast = params.showToast ?? (() => ({ remove: () => {} }));\n\n const defaultQueryOptions = {\n queryFn: action(() => this._queryFn(this.query.asComputed)),\n keepPreviousData: true,\n suspense: false,\n enabled: false,\n retryDelay: 200,\n staleTime: 120000,\n onError: this.onError,\n refetchOnMount: false,\n retryOnMount: false,\n ...params.queryOptions,\n };\n\n this.queryClient = new QueryClient({\n queryCache: this.queryCache,\n defaultOptions: {\n queries: defaultQueryOptions,\n },\n });\n\n this.queryObserver = new QueryObserver<DataResultKeyed<T>>(\n this.queryClient,\n {\n retry: (failureCount, error) => {\n if (failureCount < MAX_RETRIES) {\n this.errorHandler?.reportRetryAttempt?.(error);\n return true;\n }\n\n return false;\n },\n ...defaultQueryOptions,\n },\n );\n\n this.query = new QueryState({\n filters: params.filters,\n search: params.search,\n limit: params.limit,\n history: params.persistQueryToUrl ? params.history : undefined,\n refreshOnColumnsChange: params.refreshOnColumnsChange,\n });\n\n this._paginationModeRef =\n params.paginationModeRef ??\n ({ current: params.paginationMode } as PaginationModeRef);\n\n this._paginationMode = new PaginationMode(this);\n\n this.selectionConsistencyMode =\n params.selectionConsistencyMode ?? 'preserve';\n\n this.result = new QueryResultState<T, F>({\n itemKey: params.itemKey,\n originQuery: this.query.toComputed(),\n fetchTotal: params.fetchTotal\n ? new FetchTotalState<T, F>({\n collection: this,\n queryCache: this.queryCache,\n fetchTotal: params.fetchTotal,\n })\n : undefined,\n });\n\n this._resetReactQuery();\n\n this.fetchesHistory = [];\n\n this.bulkSelect = new BulkSelectState<T>({\n disableAutoSelectAllCount: params.disableAutoSelectAllCount,\n useNewSelectAllLogic: params.useNewSelectAllLogic,\n collection: this,\n scrollToTop: () => {\n this.scrollableContent?.scrollTo({\n top: 0,\n left: 0,\n });\n },\n });\n\n if (params.initialPage) {\n this.setInitialPage(params.initialPage);\n }\n\n if (params.deferInitialLoading) {\n this.initialPromises.addPromise(this.animationFramePromise);\n }\n\n this._runSort = action(({ clearResult }: { clearResult?: boolean }) => {\n this.emitter.emit('sort', { clearResult });\n if (clearResult) {\n this.clearResultBeforeRefresh();\n }\n return this.moveToFirstPage();\n });\n\n this.scheduleSort = this.whenNotIdle(\n this.lodash.debounce(this._runSort, 300),\n );\n\n this._runSearch = action(async (clearResult?: boolean) => {\n const {\n events: { onSearch, onSearchResults },\n emitter,\n query,\n } = this;\n\n const searchEndListeners = emitter\n .listeners('searchStart')\n .map((l) => l());\n onSearch?.({\n query: query.asComputed,\n });\n emitter.emit('search', { clearResult });\n\n if (clearResult) {\n this.clearResultBeforeRefresh();\n }\n\n if (this.selectionConsistencyMode === 'clear') {\n this.bulkSelect.resetToDefaults();\n }\n\n return this.moveToFirstPage({\n onResultUpdated: (params) => {\n searchEndListeners.forEach((l) => l());\n onSearchResults?.(params);\n },\n });\n });\n\n this.scheduleSearch = this.lodash.debounce(this._runSearch, 300);\n }\n\n _resetReactQuery() {\n this.queryObserver.setOptions(\n {\n ...this.queryObserver.options,\n ...this.queryKeyOptions,\n enabled: false,\n },\n {\n onError: true,\n },\n );\n }\n\n _queryFn = async (\n computedQuery: ComputedQuery<F>,\n ): Promise<DataResultKeyed<T>> => {\n const {\n items,\n total,\n available = null,\n cursor = null,\n ...rest\n } = await this.fetchData(computedQuery);\n\n return {\n items,\n total,\n available,\n cursor,\n ...rest,\n };\n };\n\n scheduleSort;\n private readonly scheduleSearch;\n readonly _runSearch;\n readonly _runSort;\n\n setInitialPage(initialPage: DataResultRaw<T>) {\n const {\n items,\n total: maybeTotal,\n available = null,\n cursor = null,\n hasNext,\n } = initialPage;\n\n const total = maybeTotal ?? items.length;\n\n this.queryClient.setQueryData<DataResultKeyed<T>>(\n this.queryKeyOptions.queryKey,\n {\n items,\n total,\n available,\n cursor,\n hasNext,\n },\n );\n }\n\n animationFramePromise = () =>\n new Promise<void>((resolve) => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n resolve();\n });\n });\n });\n\n onError = action((err: unknown) => {\n if (err == null) {\n return;\n }\n\n const { onlineState, events, errorMonitor } = this;\n console.error(err);\n\n const { isOnline } = onlineState;\n\n if (!(err instanceof OfflineError)) {\n const handled = events.onError?.({\n err,\n isOnline,\n });\n\n if (!handled) {\n errorMonitor.captureException(err);\n }\n }\n\n this.getCurrentQuery().invalidate();\n this._resetReactQuery();\n this.updateStatus();\n });\n\n _currentQueryPromise?: Promise<void>;\n\n getCurrentQuery() {\n const query = this.queryObserver.getCurrentQuery();\n return query as unknown as Query<T>;\n }\n\n get paginationMode() {\n return this._paginationMode;\n }\n\n _getProcessedResult({\n unprocessedPages,\n unprocessedTotal,\n currentItemsMap,\n }: {\n unprocessedPages: T[][];\n unprocessedTotal: number;\n currentItemsMap: Map<string, KeyedItem<T>>;\n }) {\n const { emitter, result } = this;\n const { originQuery } = result;\n\n const beforeAddNewPagesListeners = emitter.listeners('beforeAddNewPages');\n\n const processedPages = beforeAddNewPagesListeners.reduce(\n (pages, listener) =>\n listener({\n pages,\n currentItemsMap,\n originQuery,\n }),\n unprocessedPages,\n );\n\n const processedTotal = this._getProcessedTotal(unprocessedTotal);\n\n return {\n processedPages,\n processedTotal,\n };\n }\n\n _getProcessedTotal(unprocessedTotal: number) {\n const { emitter, result } = this;\n const { originQuery } = result;\n\n const beforeSetTotalListeners = emitter.listeners('beforeSetTotal');\n return beforeSetTotalListeners.reduce(\n (total, listener) =>\n listener({\n total,\n originQuery,\n }),\n unprocessedTotal,\n );\n }\n\n _addToFetchesHistory(newPages: DataResultKeyed<T>[]) {\n const { page, cursor, offset } = this.query.asComputed;\n\n this.fetchesHistory.push({\n itemsKeys: newPages\n .flatMap((p) => p.items)\n .map((item) => this.itemKey(item)),\n queryPageInfo: {\n page,\n cursor,\n offset,\n },\n });\n }\n\n updateResult(queries: Query<T>[]) {\n const { result, paginationMode, emitter } = this;\n\n const newPages = queries\n .map((reactQuery) => reactQuery.state.data)\n .filter((d): d is DataResultKeyed<T> => d != null);\n\n this.updateStatus();\n\n if (newPages.length) {\n emitter.emit('beforeResultUpdated');\n\n const lastPage = newPages[newPages.length - 1];\n const { available, cursor, hasNext } = lastPage;\n\n const unprocessedTotal = lastPage.total ?? lastPage.items.length;\n const unprocessedPages = newPages.map((data) => data.items);\n\n const { processedPages, processedTotal } = this._getProcessedResult({\n unprocessedPages,\n unprocessedTotal,\n currentItemsMap: result._keyedItemsMap,\n });\n\n result.addPages({\n unprocessed: unprocessedPages,\n processed: processedPages,\n });\n\n result.setTotals({\n unprocessed: unprocessedTotal,\n processed: processedTotal,\n });\n\n this._addToFetchesHistory(newPages);\n\n result.setSupportTotal(lastPage.total != null);\n result.setHasNext(hasNext);\n\n paginationMode.setCursor(cursor);\n if (available != null) {\n result.available = available;\n }\n this.lifecycleState = 'result';\n\n emitter.emit('resultUpdated');\n\n return {\n newPages,\n };\n }\n\n return null;\n }\n\n whenNotIdle(fn: (...args: any[]) => unknown) {\n return (...args: any[]) => {\n if (this.result.status.isIdle) {\n return;\n }\n\n fn(...args);\n };\n }\n\n updateStatus() {\n const { queryObserver, result, query } = this;\n const { status, error, isFetching } = queryObserver.getOptimisticResult(\n queryObserver.options,\n );\n\n result.status = {\n ...queryStatus[status],\n isFetching,\n error,\n } as QueryResultStatus<DataResultKeyed<T>, unknown>;\n result.originQuery = query.asComputed;\n }\n\n fetch() {\n const { queryObserver, onlineState, emitter } = this;\n\n queryObserver.setOptions(\n {\n ...queryObserver.options,\n ...this.queryKeyOptions,\n enabled: true,\n },\n {\n onError: true,\n },\n );\n\n const currentQuery = this.getCurrentQuery();\n this._currentQueryPromise = new Promise<void>((resolve) => {\n if (currentQuery.promise) {\n currentQuery.promise.then(() => resolve()).catch(() => resolve());\n } else {\n resolve();\n }\n });\n\n const isStale = currentQuery.isStale();\n\n const fetchListeners = emitter.listeners('fetch');\n const onResultListeners = fetchListeners.map((l) => l({ isStale }));\n\n if (!onlineState.isOnline) {\n currentQuery.dispatch({\n type: 'error',\n error: new OfflineError('CollectionState.fetch: offline'),\n });\n }\n\n this.updateStatus();\n\n return {\n currentQuery,\n isStale,\n onResultListeners,\n promise: this._currentQueryPromise,\n };\n }\n\n get totalPages() {\n const {\n result: {\n _totals: { unprocessed: total },\n },\n query: {\n pagination: { limit },\n },\n } = this;\n return Math.ceil(total / limit);\n }\n\n get total() {\n return this.result.total;\n }\n\n get totalStatus() {\n return this.result.totalStatus;\n }\n\n get fetchedLastPage() {\n const {\n paginationMode: { fetchedLastPage },\n } = this;\n return fetchedLastPage;\n }\n\n private readonly fetchNextPage = action(async () => {\n const {\n query,\n result,\n events: { onNewPageAdded, onNewPageStart },\n emitter,\n } = this;\n // if current page has an error, do not skip to next page\n if (!result.status.isError) {\n query.pagination.nextPage();\n }\n\n this.lifecycleState = 'fetchMore';\n\n const onNewPageAddedListeners = emitter\n .listeners('newPageStart')\n .map((l) => l());\n const maybeOnNewPageAdded = onNewPageStart?.({\n query: query.asComputed,\n });\n\n const { promise, currentQuery, onResultListeners } = this.fetch();\n await promise;\n\n runInAction(() => {\n if (promise === this._currentQueryPromise) {\n const updateResultInfo = this.updateResult([currentQuery]);\n\n onResultListeners.forEach((l) => l?.());\n\n if (updateResultInfo) {\n const { newPages } = updateResultInfo;\n const onNewPageAddedParams = {\n totalNewItems: newPages.reduce(\n (agg, page) => agg + page.items.length,\n 0,\n ),\n newPages,\n query: result.originQuery,\n result: result.asComputed,\n };\n onNewPageAddedListeners.forEach((l) => l(onNewPageAddedParams));\n if (maybeOnNewPageAdded != null) {\n maybeOnNewPageAdded(onNewPageAddedParams);\n }\n onNewPageAdded?.(onNewPageAddedParams);\n }\n }\n });\n });\n\n async fetchNextPageIfNeeded() {\n const { result, fetchedLastPage, lifecycleState } = this;\n if (\n lifecycleState !== 'refresh' &&\n !result.status.isFetching &&\n !fetchedLastPage\n ) {\n await this.fetchNextPage();\n }\n }\n\n // for rendering only a single page (<PaginationTable />)\n async clearAndMoveToPage(\n page: number,\n options: { wait?: { min: number; max: number } } = {},\n ) {\n let minLoaderTime = 0;\n const { wait = { min: 200, max: 500 } } = options;\n const {\n query,\n result,\n events: { onNewPageStart },\n } = this;\n const { pagination } = query;\n pagination.page = page;\n\n const maybeOnNewPageAdded = onNewPageStart?.({\n query: query.asComputed,\n });\n\n const { promise, currentQuery, onResultListeners } = this.fetch();\n const fetchPromise = promise;\n\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const maxWaitPromise = new Promise<void>((resolve) => {\n timeoutId = setTimeout(() => {\n // timeoutId was not cleared yet, start showing a loader and set minimal time for the loader to show\n minLoaderTime = wait.min;\n this.clearResultBeforeRefresh();\n resolve();\n }, wait.max);\n });\n\n // minimal time to wait (usually scrolling to top time) before applying the new result\n const minWaitPromise = new Promise((resolve) => {\n setTimeout(resolve, wait.min);\n });\n\n await Promise.race([maxWaitPromise, fetchPromise]);\n\n if (timeoutId != null) {\n clearTimeout(timeoutId);\n }\n\n if (minLoaderTime) {\n await new Promise((resolve) => setTimeout(resolve, minLoaderTime));\n }\n\n await minWaitPromise;\n await fetchPromise;\n\n if (promise === this._currentQueryPromise) {\n runInAction(() => {\n result.clear();\n const updateResultInfo = this.updateResult([currentQuery]);\n onResultListeners.forEach((l) => l?.());\n if (updateResultInfo) {\n const { newPages } = updateResultInfo;\n if (maybeOnNewPageAdded != null) {\n maybeOnNewPageAdded({\n totalNewItems: newPages.reduce(\n (agg, page) => agg + page.items.length,\n 0,\n ),\n query: result.originQuery,\n result: result.asComputed,\n });\n }\n }\n });\n }\n }\n\n clearResultBeforeRefresh() {\n const { result } = this;\n this.lifecycleState = 'refresh';\n result.clear();\n }\n\n async moveToFirstPage({\n onResultUpdated,\n }: {\n onResultUpdated?: OnResultUpdated<F>;\n } = {}) {\n const {\n query: { pagination },\n } = this;\n\n pagination.page = 1;\n pagination.cursor = initialCursor;\n\n await this.fetchAndReplaceResult({ onResultUpdated });\n }\n\n invalidate({ filters }: { filters?: FiltersKey<F> } = {}) {\n const { queryCache, queryName } = this;\n const queryLookup = {};\n if (filters) {\n Object.assign(queryLookup, {\n filtersKey: filters,\n });\n }\n\n queryCache\n .findAll({ queryKey: [queryName, queryLookup] })\n .forEach((q) => q.invalidate());\n }\n\n clearResultAndMoveToStart({\n onResultUpdated,\n force,\n filters,\n }: {\n onResultUpdated?: OnResultUpdated<F>;\n force?: boolean;\n filters?: FiltersKey<F>;\n } = {}) {\n if (force) {\n this.invalidate({ filters });\n }\n this._resetReactQuery();\n this.clearResultBeforeRefresh();\n return this.moveToFirstPage({ onResultUpdated });\n }\n\n sort(\n col: Sortable,\n {\n clearResult,\n multiple,\n forceDirection,\n }: {\n clearResult?: boolean;\n multiple?: boolean;\n forceDirection?: SortOrder;\n } = {},\n ) {\n const { query, emitter } = this;\n\n emitter.emit('beforeSortStart', {\n origin: 'ColumnHeader',\n });\n\n query.sort.changeSort(col, {\n multiple,\n forceDirection,\n });\n\n emitter.emit('sortStart', { col });\n\n return this.scheduleSort({\n clearResult,\n multiple,\n forceDirection,\n });\n }\n\n async fetchAndReplaceResult({\n onResultUpdated,\n }: {\n onResultUpdated?: OnResultUpdated<F>;\n } = {}) {\n const { result, query, emitter } = this;\n\n const { promise, currentQuery, isStale, onResultListeners } = this.fetch();\n // page=1 means starting over, i.e refresh\n if (query.pagination.page === 1) {\n emitter.emit('refresh', { isStale });\n }\n\n await promise;\n\n if (promise === this._currentQueryPromise) {\n runInAction(() => {\n result.slice(0, query.pagination.page - 1);\n this.emitter.emit('refreshUpdateResult');\n this.updateResult([currentQuery]);\n onResultListeners.forEach((l) => l?.());\n onResultUpdated?.({\n query: result.originQuery,\n result: result.asComputed,\n });\n });\n }\n\n return currentQuery;\n }\n\n search(\n value: string,\n { force, clearResult }: { force?: boolean; clearResult?: boolean } = {},\n ) {\n const { query } = this;\n const { search } = query;\n if (force || value !== search.value) {\n search.changeValue(value);\n this.scheduleSearch(clearResult);\n }\n }\n\n clearSearch() {\n const {\n query,\n events: { onSearchResults },\n emitter,\n } = this;\n const { search } = query;\n if (search.value === '') {\n return;\n }\n\n search.changeValue('');\n emitter.emit('clearSearch');\n\n if (this.selectionConsistencyMode === 'clear') {\n this.bulkSelect.resetToDefaults();\n }\n\n return this.clearResultAndMoveToStart({ onResultUpdated: onSearchResults });\n }\n\n get filters() {\n return this.query.filters;\n }\n\n changeItem(newItem: T) {\n return this.changeItems([newItem]);\n }\n\n changeItems(newItems: T[]) {\n const changeResult = this.result.changeItems(newItems);\n\n if (changeResult != null) {\n this.invalidate();\n\n return changeResult.rollback;\n }\n\n return undefined;\n }\n\n addItem(newItem: T) {\n return this.addItems([newItem]);\n }\n\n addItems(newItems: T[]) {\n const changeResult = this.result.addItems(newItems);\n this.invalidate();\n return changeResult.rollback;\n }\n\n async refreshCurrentPage({ noInvalidate }: { noInvalidate?: boolean } = {}) {\n const { emitter } = this;\n\n if (!noInvalidate) {\n this.invalidate();\n }\n\n this._resetReactQuery();\n emitter.emit('refreshCurrentPage');\n\n await this.fetchAndReplaceResult();\n }\n\n async refreshAllPages({\n beforeUpdateResult,\n filters,\n }: {\n beforeUpdateResult?: () => unknown;\n filters?: FiltersKey<F>;\n } = {}) {\n const { query, result, paginationMode, emitter } = this;\n const { pagination } = query;\n const { page: currentPage } = pagination;\n\n this.invalidate({ filters });\n\n const promises: Promise<Query<T>>[] = [];\n\n pagination.cursor = initialCursor;\n\n emitter.emit('refreshAllPages');\n emitter.emit('refresh', { isStale: true }); // Because of invalidation above, all queries are now stale\n\n let lastPagePromise = undefined as Promise<unknown> | undefined;\n\n for (let page = 1; page <= currentPage; page++) {\n pagination.page = page;\n this._resetReactQuery();\n const { currentQuery: pageQuery, promise } = this.fetch();\n if (pageQuery.promise) {\n if (paginationMode.id === 'cursor') {\n await pageQuery.promise;\n runInAction(\n () => (pagination.cursor = pageQuery.state.data?.cursor ?? null),\n );\n }\n promises.push(pageQuery.promise.then(() => pageQuery));\n }\n\n if (page === currentPage) {\n lastPagePromise = promise;\n }\n }\n\n this.updateStatus();\n\n const results = await Promise.all(promises);\n\n runInAction(() => {\n beforeUpdateResult?.();\n if (lastPagePromise === this._currentQueryPromise) {\n result.slice(currentPage);\n this.emitter.emit('refreshUpdateResult');\n this.updateResult(results);\n }\n });\n }\n\n get hasAvailableItems() {\n return this.result.hasAvailableItems;\n }\n\n resetFiltersAndRefresh() {\n const { query } = this;\n query.resetFilters({ emitEvents: ['change', 'refresh'] });\n }\n\n resetCustomFiltersAndRefresh() {\n const { query } = this;\n query.resetCustomFilters({ emitEvents: ['change', 'refresh'] });\n }\n\n async initialFetch() {\n const {\n result,\n events: { onInitialPageFetched },\n hooks,\n query: { pagination },\n } = this;\n\n const prevQuery = this.getCurrentQuery();\n\n if (!result.status.isIdle && !result.status.isError) {\n return prevQuery.promise;\n }\n\n this._resetReactQuery();\n\n pagination.page = 1;\n pagination.cursor = initialCursor;\n\n this.lifecycleState = 'refresh';\n const isStale = prevQuery.isStale();\n const beforeInitialFetchListeners = hooks.listeners('beforeInitialFetch');\n await Promise.all(beforeInitialFetchListeners.map((f) => f({ isStale })));\n\n // reset paging state again for any possible edge case caused by external side effect while waiting `beforeInitialFetchListeners`\n runInAction(() => {\n pagination.page = 1;\n pagination.cursor = initialCursor;\n this.lifecycleState = 'refresh';\n });\n\n const currentQuery = await this.fetchAndReplaceResult();\n await currentQuery.promise;\n this.emitter.emit('ready');\n runInAction(() => {\n const { total, available } = result;\n onInitialPageFetched?.({\n result: {\n total,\n available: available ?? 0,\n },\n query: result.originQuery,\n });\n });\n }\n\n _recoverIfError = action(() => {\n const { onlineState } = this;\n const { focusManager } = onlineState;\n\n if (\n focusManager.isFocused() &&\n onlineState.isOnline &&\n this.result.status.isError\n ) {\n if (this.lifecycleState === 'fetchMore') {\n // error state is not shown, fetch next page\n this.fetchNextPageIfNeeded();\n } else {\n // error state is shown, move to start\n this.clearResultAndMoveToStart({ force: true });\n }\n }\n });\n\n onOnlineStateChange = (isOnline: boolean) => {\n const currentQuery = this.getCurrentQuery();\n\n if (isOnline) {\n this._recoverIfError();\n } else if (!isOnline && currentQuery.state.isPaused) {\n currentQuery.dispatch({\n type: 'error',\n error: new OfflineError('CollectionState.onOnlineStateChange: offline'),\n });\n this.updateStatus();\n }\n };\n\n retryErrorState = action(() => {\n const { initTask } = this;\n\n if (initTask.status.isError) {\n initTask.runOnce();\n } else {\n this.clearResultAndMoveToStart();\n }\n });\n\n init({\n skipInitialFetch,\n skipFilterListeners,\n }: { skipInitialFetch?: boolean; skipFilterListeners?: boolean } = {}) {\n const { bulkSelect, onlineState, query, initTask, result } = this;\n const { focusManager } = onlineState;\n\n result.originQuery = query.asComputed;\n\n onlineState.events.on('change', this.onOnlineStateChange);\n\n const disposers = [\n query.init({ skipFilterListeners }),\n this._registerQueryEvents(),\n result.init(),\n bulkSelect.init(),\n // react-query considers \"mounted\" only if listeners are subscribed\n this.queryObserver.subscribe(() => {}),\n focusManager.subscribe(this._recoverIfError),\n ];\n\n initTask.runOnce(async () => {\n await Promise.all([\n skipInitialFetch ? null : this.initialFetch(),\n this.initDependencies?.(),\n ]);\n });\n\n return action(() => {\n onlineState.events.off('change', this.onOnlineStateChange);\n disposers.forEach((disposer) => disposer());\n initTask.status = {\n ...queryStatus.idle,\n };\n });\n }\n\n _registerQueryEvents() {\n const { query } = this;\n const disposers = [\n addEventListener(query.events, 'refresh', (opts) => {\n if (this.selectionConsistencyMode === 'clear') {\n this.bulkSelect.resetToDefaults();\n }\n\n if (this.deferInitialLoading) {\n this.refreshPromises.addPromise(this.animationFramePromise);\n }\n\n if (opts?.clearResult !== false) {\n this.clearResultBeforeRefresh();\n } else {\n this.scrollableContent?.scrollTo({ top: 0, behavior: 'smooth' });\n }\n\n this.moveToFirstPage();\n }),\n addEventListener(query.events, 'scheduleRefresh', (opts) => {\n this.scheduleSearch(opts?.clearResult);\n }),\n ...(query.refreshOnColumnsChange\n ? [\n reaction(\n () => query.fieldsKeyHash,\n () => {\n this.clearResultBeforeRefresh();\n this.moveToFirstPage();\n },\n ),\n ]\n : []),\n ];\n\n return () => {\n disposers.forEach((d) => d());\n };\n }\n\n getItem(key: string): T | undefined | null {\n const keyedItem = this.result.get(key);\n return keyedItem?.item;\n }\n\n getKeyedItem(key: string): KeyedItem<T> | undefined | null {\n return this.result.get(key);\n }\n\n getKeyedItemByIndex(index: number): KeyedItem<T> | null {\n return this.result.keyedItems[index];\n }\n\n get keyedItems() {\n return this.result.keyedItems;\n }\n\n addRefreshPromise<P>(createPromise: () => Promise<P>) {\n return this.refreshPromises.addPromise(createPromise);\n }\n\n _commonDynamicBiParams(query = this.result.originQuery): {\n currentFilters?: string;\n currentSortOrder?: string;\n filteredListSize?: number;\n initialItems?: number;\n numSortedColumns?: number;\n csid?: string;\n } {\n const { result, fqdn } = this;\n\n return {\n ...fqdn,\n currentFilters: JSON.stringify(query.filtersKey),\n currentSortOrder: query.sort?.length\n ? JSON.stringify(query.sort)\n : undefined,\n filteredListSize: result.total,\n initialItems: result.size,\n numSortedColumns: query.sort?.length,\n };\n }\n\n get showInitialLoader() {\n const {\n initTask: {\n status: { isLoading },\n },\n initialPromises: { isLoadingPromises },\n } = this;\n return isLoading || isLoadingPromises;\n }\n\n get showRefreshLoader() {\n const {\n refreshPromises: { isLoadingPromises },\n result: { status },\n lifecycleState,\n } = this;\n return (\n isLoadingPromises ||\n Boolean(status.isFetching && lifecycleState === 'refresh')\n );\n }\n\n get showEmptyState() {\n const {\n lifecycleState,\n result: { isEmpty },\n } = this;\n return lifecycleState === 'result' && isEmpty;\n }\n\n get showErrorState() {\n const {\n result: { status },\n lifecycleState,\n } = this;\n return (\n !status.isFetching && status.isError && lifecycleState !== 'fetchMore'\n );\n }\n\n _topNotification = new TransitionState<string | null>();\n\n get topNotification(): {\n text: string | null | undefined;\n readonly show: boolean;\n } {\n const { _topNotification } = this;\n return {\n set text(t: string | null | undefined) {\n _topNotification.set(t);\n },\n get text() {\n return runInAction(() => _topNotification.data);\n },\n get show() {\n return runInAction(() => _topNotification.show);\n },\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}