@wix/bex-core 1.438.0 → 1.439.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 (37) hide show
  1. package/dist/cjs/InMemoryBackend/InMemoryBackend.js.map +1 -1
  2. package/dist/cjs/assets/locale/messages_cs.json +1 -1
  3. package/dist/cjs/assets/locale/messages_es.json +1 -1
  4. package/dist/cjs/hooks/collectionConfig.js.map +1 -1
  5. package/dist/cjs/model/computedQuery/computedQuery.js.map +1 -1
  6. package/dist/cjs/model/filter.js.map +1 -1
  7. package/dist/cjs/services/mapGuidComponentIdToNonGuid.js +2 -0
  8. package/dist/cjs/services/mapGuidComponentIdToNonGuid.js.map +1 -1
  9. package/dist/cjs/state/CollectionOptimisticActions.js +13 -77
  10. package/dist/cjs/state/CollectionOptimisticActions.js.map +1 -1
  11. package/dist/cjs/state/CollectionState.js +1 -13
  12. package/dist/cjs/state/CollectionState.js.map +1 -1
  13. package/dist/cjs/state/StringFilterState/StringFilterState.js.map +1 -1
  14. package/dist/cjs/testkit/CairoContainer.driver.js +0 -1
  15. package/dist/cjs/testkit/CairoContainer.driver.js.map +1 -1
  16. package/dist/esm/assets/locale/messages_cs.json +1 -1
  17. package/dist/esm/assets/locale/messages_es.json +1 -1
  18. package/dist/esm/services/mapGuidComponentIdToNonGuid.js +2 -0
  19. package/dist/esm/services/mapGuidComponentIdToNonGuid.js.map +1 -1
  20. package/dist/esm/state/CollectionOptimisticActions.js +16 -63
  21. package/dist/esm/state/CollectionOptimisticActions.js.map +1 -1
  22. package/dist/esm/state/CollectionState.js +0 -11
  23. package/dist/esm/state/CollectionState.js.map +1 -1
  24. package/dist/esm/testkit/CairoContainer.driver.js +0 -2
  25. package/dist/esm/testkit/CairoContainer.driver.js.map +1 -1
  26. package/dist/types/InMemoryBackend/InMemoryBackend.d.ts +4 -4
  27. package/dist/types/hooks/collectionConfig.d.ts +5 -5
  28. package/dist/types/model/computedQuery/computedQuery.d.ts +2 -2
  29. package/dist/types/model/filter.d.ts +1 -1
  30. package/dist/types/services/mapGuidComponentIdToNonGuid.d.ts.map +1 -1
  31. package/dist/types/state/CollectionOptimisticActions.d.ts +8 -181
  32. package/dist/types/state/CollectionOptimisticActions.d.ts.map +1 -1
  33. package/dist/types/state/CollectionState.d.ts +5 -34
  34. package/dist/types/state/CollectionState.d.ts.map +1 -1
  35. package/dist/types/state/StringFilterState/StringFilterState.d.ts +1 -1
  36. package/dist/types/testkit/CairoContainer.driver.d.ts.map +1 -1
  37. package/package.json +4 -6
@@ -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","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","has","move","from","after","array","fromKey","toKey","fromIndex","splice","toIndex","i","len","updateAll","patch","patchedItems","unshift","newItems","key","entries","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\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-models--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-models--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-models--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\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 events = new EventEmitter() as TypedEmitter<{\n updatedMany: () => void;\n updateAll: () => void;\n deleteAll: () => void;\n fetchDataStart: (query: BackendQuery<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.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 } = this;\n\n const category = hashQueryKey([{ filters }]);\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: {\n from: IndexedItem<T>;\n after: IndexedItem<T> | null;\n over: IndexedItem<T>;\n filters: RawFilters<F>;\n }[],\n params: {\n delay?: Delay;\n throwError?: () => unknown;\n } = {},\n ) {\n const { itemKey } = this;\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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"}
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","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","has","move","from","after","array","fromKey","toKey","fromIndex","splice","toIndex","i","len","updateAll","patch","patchedItems","unshift","newItems","key","entries","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](/pages/cairo/?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\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](/pages/cairo/?path=/story/common-models--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](/pages/cairo/?path=/story/common-models--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](/pages/cairo/?path=/story/common-models--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\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 events = new EventEmitter() as TypedEmitter<{\n updatedMany: () => void;\n updateAll: () => void;\n deleteAll: () => void;\n fetchDataStart: (query: BackendQuery<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.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 } = this;\n\n const category = hashQueryKey([{ filters }]);\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: {\n from: IndexedItem<T>;\n after: IndexedItem<T> | null;\n over: IndexedItem<T>;\n filters: RawFilters<F>;\n }[],\n params: {\n delay?: Delay;\n throwError?: () => unknown;\n } = {},\n ) {\n const { itemKey } = this;\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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"}
@@ -405,7 +405,7 @@
405
405
  "cairo.passiveEmptyState.subtitle": "Až budete mít nějaké položky, uvidíte je zde.",
406
406
  "cairo.tags.collectionPage.popover.loadTags.error.body": "Tagy se nepodařilo načíst kvůli technickým potížím na naší straně.",
407
407
  "cairo.table.advanced-sorting.button.cta": "Třídit",
408
- "cairo.emptyState.premium.cta": "Upgradovat",
408
+ "cairo.emptyState.premium.cta": "Upgrade",
409
409
  "cairo.manageView.Rename.disabled.predefinedView.tooltip": "Toto je přednastavené zobrazení. Pokud chcete toto zobrazení přejmenovat, uložte jej jako nové zobrazení.",
410
410
  "cairo.customFields.addCustomField.modal.fieldType.placeholder": "Vyberte typ",
411
411
  "cairo.customFields.fieldType.checkbox.Name.placeholder": "Např. Přihlášeni k odběru",
@@ -1,5 +1,5 @@
1
1
  {
2
- "cairo.emptyState.premium.text": "Accede a más funciones haciendo Upgrade a tu sitio.",
2
+ "cairo.emptyState.premium.text": "Accede a más funciones al hacer Upgrade a tu sitio.",
3
3
  "cairo.customFields.fieldType.shortText": "Texto corto",
4
4
  "cairo.delete.button": "Eliminar",
5
5
  "cairo.deselectAll": "Deseleccionar todos",
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/hooks/collectionConfig.ts"],"sourcesContent":["import {\n CollectionEvents,\n ComputedQuery,\n DataResultRaw,\n Filter,\n FiltersMap,\n QueryOptions,\n} from '../model';\nimport { ExtendedFields } from '../services';\n\nexport interface CollectionConfigBase<T, F extends FiltersMap> {\n /**\n * Disables \"Select All\" server simulation for bulk selection\n * @external\n */\n disableAutoSelectAllCount?: boolean;\n /**\n * Enable new \"Select All\" logic - unchecking items after \"Select All\" will not fallback to specific selection.\n * This means that the \"Total selected\" in `<BulkActionToolbar/>` and `<MultiBulkActionToolbar />` will show `total - unchekedItems` and\n * `isSelectAll` attribute will be true.\n *\n * When enabling this behavior you will receive a list of unselected ids (`unchekedItems`), `isSelectAll:true`, and `currentFilters`.\n * It is important to ensure that your server can query using those properties and retrieve the selected IDs\n * Here is the list of bulkActionToolbar's [attributes](./?path=/story/components-collection--table).\n * @external\n */\n useNewSelectAllLogic?: boolean;\n /**\n * The query name used for cache purposes. This should be a unique value per API endpoint consumed inside the `fetchData` function.<br>\n * It's recommended to use the [Fqdn](https://bo.wix.com/wix-docs/rnd/p13n-guidelines---aips/guidance-aips/wix-api-basics/[1009]-fqdn) of the service used in `fetchData` as `queryName`.<br>\n * Either a string or a Fqdn object\n * @external\n */\n queryName: string;\n\n /**\n * Entity Fqdn, used in features where the fqdn is needed to manage the data (like DataExtension).\n * @external\n */\n fqdn?: string;\n\n /**\n * The `ExtendedFields` object used to render custom field values\n * Optional in case your data complies to the type `{ extendedFields: ExtendedFields }`\n */\n toExtendedFields?: (item: T) => ExtendedFields | undefined;\n\n /**\n * Toast message to show when fetching from the server is failed.\n * If the function returns nullish value, no toast will be shown.\n * @external\n */\n fetchErrorMessage: (params: {\n err: unknown;\n isOnline: boolean;\n }) => string | null | undefined;\n\n /**\n * @deprecated No longer required / used\n */\n entityName?: (pluralization: number) => string;\n\n search?: Filter<string>;\n queryOptions?: QueryOptions;\n /**\n * Persist the selected filters, search & sort in the query parameters of the URL.<br/>\n * For improved readability, sort & columns are formatted in CSV-like formatting, i.e \"?sort=name+desc,price+asc\". Do not use commas and/or spaces for your columns IDs.<br>\n * Note: The filters from the selected view will be persist, but the actual view will not be selected\n * @default false\n */\n persistQueryToUrl?: boolean;\n /**\n * Refreshes the collection when columns selection is changed. The selected columns are passed via `fetchData(query.columns)`.\n * @default false\n * @external\n */\n refreshOnColumnsChange?: boolean;\n initialPage?: DataResultRaw<T>;\n deferInitialLoading?: boolean;\n\n /**\n * Indicates whether to preserve or clear selection after applying a new search / filter.\n * @default preserve\n * @external\n */\n selectionConsistencyMode?: 'preserve' | 'clear';\n /**\n * Optional callbacks for various events of the collection state lifecycle\n * - `onInitialPageFetched` - when the first page of items is ready\n * - `onSearch` - when fetching new items as a result new search\n * - `onSearchResults` - when the result of a search is ready\n * - `onNewPageStart` - when starting to load the next page of items\n * - `onNewPageAdded` - when the result of the next page is ready\n * - `onError` - When `fetchData` throws an error. Return `true` from this function if the error was reported and shouldn't be reported again internally.\n */\n events?: CollectionEvents<F>;\n}\n\nexport interface CollectionConfigAnyPaginationMode<T, F extends FiltersMap>\n extends CollectionConfigBase<T, F> {\n /**\n * A function that integrates with the API to fetch the collection data from.<br>\n * Accepts the following parameters:\n * - `query`: A [ComputedQuery](./?path=/story/common-models--computedquery) instance. Holds all the relevant variables to query the server API with.\n *\n * The function must return a promise of [DataResultRaw](./?path=/story/common-models--dataresultraw)\n * @external\n */\n fetchData: (query: ComputedQuery<F>) => Promise<DataResultRaw<T>>;\n /**\n * Defines the filters that the collection supports. Optional if the collection should not have filters.<br>\n * Either of:\n * - [ArrayFilter](./?path=/story/common-factories--arrayfilter)\n * - [CustomFilter](./?path=/story/common-factories--customfilter)\n * @external\n */\n filters: F;\n /**\n * The item name which is used in many messages through cairo\n *\n * for example \"{entity} \"{itemName}\" was deleted successfully.\"\n * \"Contact \"Johnny Doe\" was deleted successfully.\"\n *\n * Optional in case your data complies to the type `{ name: string }`\n * @external\n */\n itemName: (item: T) => string;\n /**\n * The item key, usually the id, need to be unique within the collection\n * Optional in case your data complies to the type `{ id: string }`\n * @external\n */\n itemKey: (item: T) => string;\n /**\n * Number of items to fetch on each page\n * @external\n */\n limit?: number;\n}\n\nexport interface CollectionConfig<T, F extends FiltersMap>\n extends CollectionConfigAnyPaginationMode<T, F> {\n /**\n * Indicates what type of pagination the `fetchData` function supports.<br>\n * In case the server accepts the `query.offset` parameter - pass `'offset'`\n * In case the server returns a `cursor` from `fetchData` - pass `'cursor'`\n * @default offset\n * @external\n */\n paginationMode?: 'cursor' | 'offset';\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/hooks/collectionConfig.ts"],"sourcesContent":["import {\n CollectionEvents,\n ComputedQuery,\n DataResultRaw,\n Filter,\n FiltersMap,\n QueryOptions,\n} from '../model';\nimport { ExtendedFields } from '../services';\n\nexport interface CollectionConfigBase<T, F extends FiltersMap> {\n /**\n * Disables \"Select All\" server simulation for bulk selection\n * @external\n */\n disableAutoSelectAllCount?: boolean;\n /**\n * Enable new \"Select All\" logic - unchecking items after \"Select All\" will not fallback to specific selection.\n * This means that the \"Total selected\" in `<BulkActionToolbar/>` and `<MultiBulkActionToolbar />` will show `total - unchekedItems` and\n * `isSelectAll` attribute will be true.\n *\n * When enabling this behavior you will receive a list of unselected ids (`unchekedItems`), `isSelectAll:true`, and `currentFilters`.\n * It is important to ensure that your server can query using those properties and retrieve the selected IDs\n * Here is the list of bulkActionToolbar's [attributes](/pages/cairo/?path=/story/components-collection--table).\n * @external\n */\n useNewSelectAllLogic?: boolean;\n /**\n * The query name used for cache purposes. This should be a unique value per API endpoint consumed inside the `fetchData` function.<br>\n * It's recommended to use the [Fqdn](https://bo.wix.com/wix-docs/rnd/p13n-guidelines---aips/guidance-aips/wix-api-basics/[1009]-fqdn) of the service used in `fetchData` as `queryName`.<br>\n * Either a string or a Fqdn object\n * @external\n */\n queryName: string;\n\n /**\n * Entity Fqdn, used in features where the fqdn is needed to manage the data (like DataExtension).\n * @external\n */\n fqdn?: string;\n\n /**\n * The `ExtendedFields` object used to render custom field values\n * Optional in case your data complies to the type `{ extendedFields: ExtendedFields }`\n */\n toExtendedFields?: (item: T) => ExtendedFields | undefined;\n\n /**\n * Toast message to show when fetching from the server is failed.\n * If the function returns nullish value, no toast will be shown.\n * @external\n */\n fetchErrorMessage: (params: {\n err: unknown;\n isOnline: boolean;\n }) => string | null | undefined;\n\n /**\n * @deprecated No longer required / used\n */\n entityName?: (pluralization: number) => string;\n\n search?: Filter<string>;\n queryOptions?: QueryOptions;\n /**\n * Persist the selected filters, search & sort in the query parameters of the URL.<br/>\n * For improved readability, sort & columns are formatted in CSV-like formatting, i.e \"?sort=name+desc,price+asc\". Do not use commas and/or spaces for your columns IDs.<br>\n * Note: The filters from the selected view will be persist, but the actual view will not be selected\n * @default false\n */\n persistQueryToUrl?: boolean;\n /**\n * Refreshes the collection when columns selection is changed. The selected columns are passed via `fetchData(query.columns)`.\n * @default false\n * @external\n */\n refreshOnColumnsChange?: boolean;\n initialPage?: DataResultRaw<T>;\n deferInitialLoading?: boolean;\n\n /**\n * Indicates whether to preserve or clear selection after applying a new search / filter.\n * @default preserve\n * @external\n */\n selectionConsistencyMode?: 'preserve' | 'clear';\n /**\n * Optional callbacks for various events of the collection state lifecycle\n * - `onInitialPageFetched` - when the first page of items is ready\n * - `onSearch` - when fetching new items as a result new search\n * - `onSearchResults` - when the result of a search is ready\n * - `onNewPageStart` - when starting to load the next page of items\n * - `onNewPageAdded` - when the result of the next page is ready\n * - `onError` - When `fetchData` throws an error. Return `true` from this function if the error was reported and shouldn't be reported again internally.\n */\n events?: CollectionEvents<F>;\n}\n\nexport interface CollectionConfigAnyPaginationMode<T, F extends FiltersMap>\n extends CollectionConfigBase<T, F> {\n /**\n * A function that integrates with the API to fetch the collection data from.<br>\n * Accepts the following parameters:\n * - `query`: A [ComputedQuery](/pages/cairo/?path=/story/common-models--computedquery) instance. Holds all the relevant variables to query the server API with.\n *\n * The function must return a promise of [DataResultRaw](/pages/cairo/?path=/story/common-models--dataresultraw)\n * @external\n */\n fetchData: (query: ComputedQuery<F>) => Promise<DataResultRaw<T>>;\n /**\n * Defines the filters that the collection supports. Optional if the collection should not have filters.<br>\n * Either of:\n * - [ArrayFilter](/pages/cairo/?path=/story/common-factories--arrayfilter)\n * - [CustomFilter](/pages/cairo/?path=/story/common-factories--customfilter)\n * @external\n */\n filters: F;\n /**\n * The item name which is used in many messages through cairo\n *\n * for example \"{entity} \"{itemName}\" was deleted successfully.\"\n * \"Contact \"Johnny Doe\" was deleted successfully.\"\n *\n * Optional in case your data complies to the type `{ name: string }`\n * @external\n */\n itemName: (item: T) => string;\n /**\n * The item key, usually the id, need to be unique within the collection\n * Optional in case your data complies to the type `{ id: string }`\n * @external\n */\n itemKey: (item: T) => string;\n /**\n * Number of items to fetch on each page\n * @external\n */\n limit?: number;\n}\n\nexport interface CollectionConfig<T, F extends FiltersMap>\n extends CollectionConfigAnyPaginationMode<T, F> {\n /**\n * Indicates what type of pagination the `fetchData` function supports.<br>\n * In case the server accepts the `query.offset` parameter - pass `'offset'`\n * In case the server returns a `cursor` from `fetchData` - pass `'cursor'`\n * @default offset\n * @external\n */\n paginationMode?: 'cursor' | 'offset';\n}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../../src/model/computedQuery/computedQuery.ts"],"sourcesContent":["import { SortDirection } from '../commonTypes';\nimport { Filter, FiltersMap, OptionalFiltersMap } from '../filter';\n\nexport type ExtractFilterValue<T> = T extends Filter<infer U> ? U : undefined;\n\nexport type RawFilters<F extends FiltersMap> = Partial<{\n [P in keyof F]: ExtractFilterValue<F[P]>;\n}>;\n\nexport type FiltersKey<F extends FiltersMap> = Partial<{\n [P in keyof F]: string[] | undefined | null;\n}>;\n\nexport type AllFilters<F extends FiltersMap> = F & { search: Filter<string> };\n\nexport type FiltersValues<F extends FiltersMap> = {\n [P in keyof F]: {\n value?: ExtractFilterValue<F[P]>;\n };\n};\n\nexport interface Sort {\n field: string;\n direction: SortDirection;\n}\n\nexport interface ComputedQuery<F extends FiltersMap = OptionalFiltersMap> {\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 * Current search term (defaults to `''` for empty search)\n */\n rawSearch: 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 * Same as `filters` but defaults to `undefined` for empty filter values\n */\n rawFilters: RawFilters<F>;\n /**\n * Whether at least one filter is not empty\n */\n hasActiveFilters: boolean;\n /**\n * Whether at least one filter is not empty, not including tabs\n */\n hasNonPersistentActiveFilters: boolean;\n /**\n * Current sort applied to the collection.\n */\n sort?: { fieldName: string; order: 'asc' | 'desc' }[];\n\n /**\n * @deprecated Use `fields` instead\n */\n columns?: string[];\n /**\n * Array of projected fields. A list of specific field names to fetch. Use this to optimize your server query to load only needed columns. Note that a mapping between client-side columns to server-fields is usually required.\n * Use `refreshOnColumnsChange` of [useCollection](./?path=/story/common-hooks--usecollection) to control whether the collection should be refreshed when this value changes.\n */\n fields?: string[];\n}\n\nexport interface ComputedQueryFull<F extends FiltersMap = OptionalFiltersMap>\n extends ComputedQuery<F> {\n filtersKey: FiltersKey<F>;\n nonPersistentFiltersKey: FiltersKey<F>;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../../src/model/computedQuery/computedQuery.ts"],"sourcesContent":["import { SortDirection } from '../commonTypes';\nimport { Filter, FiltersMap, OptionalFiltersMap } from '../filter';\n\nexport type ExtractFilterValue<T> = T extends Filter<infer U> ? U : undefined;\n\nexport type RawFilters<F extends FiltersMap> = Partial<{\n [P in keyof F]: ExtractFilterValue<F[P]>;\n}>;\n\nexport type FiltersKey<F extends FiltersMap> = Partial<{\n [P in keyof F]: string[] | undefined | null;\n}>;\n\nexport type AllFilters<F extends FiltersMap> = F & { search: Filter<string> };\n\nexport type FiltersValues<F extends FiltersMap> = {\n [P in keyof F]: {\n value?: ExtractFilterValue<F[P]>;\n };\n};\n\nexport interface Sort {\n field: string;\n direction: SortDirection;\n}\n\nexport interface ComputedQuery<F extends FiltersMap = OptionalFiltersMap> {\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 * Current search term (defaults to `''` for empty search)\n */\n rawSearch: 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](/pages/cairo/?path=/story/common-hooks--usecollection).\n */\n filters: RawFilters<F>;\n /**\n * Same as `filters` but defaults to `undefined` for empty filter values\n */\n rawFilters: RawFilters<F>;\n /**\n * Whether at least one filter is not empty\n */\n hasActiveFilters: boolean;\n /**\n * Whether at least one filter is not empty, not including tabs\n */\n hasNonPersistentActiveFilters: boolean;\n /**\n * Current sort applied to the collection.\n */\n sort?: { fieldName: string; order: 'asc' | 'desc' }[];\n\n /**\n * @deprecated Use `fields` instead\n */\n columns?: string[];\n /**\n * Array of projected fields. A list of specific field names to fetch. Use this to optimize your server query to load only needed columns. Note that a mapping between client-side columns to server-fields is usually required.\n * Use `refreshOnColumnsChange` of [useCollection](/pages/cairo/?path=/story/common-hooks--usecollection) to control whether the collection should be refreshed when this value changes.\n */\n fields?: string[];\n}\n\nexport interface ComputedQueryFull<F extends FiltersMap = OptionalFiltersMap>\n extends ComputedQuery<F> {\n filtersKey: FiltersKey<F>;\n nonPersistentFiltersKey: FiltersKey<F>;\n}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/model/filter.ts"],"sourcesContent":["import { TypedEmitter } from '../util';\n\n/*\nchange - whenever we want to notify that the value was changed, for additional side effects, i.e BI events. For example, when initializing the value, we don't want to emit this event.\nrefresh - the collection should be refreshed as a result of this change\nscheduleRefresh - the collection should schedule a refresh as a result of this change\n */\ntype FilterEvent = 'change' | 'refresh' | 'scheduleRefresh' | 'beforeRefresh';\n\nexport interface ChangeValueOptions {\n emitEvents?: FilterEvent[];\n clearResult?: boolean;\n actionType?: 'add' | 'remove';\n clickedValueKey?: string;\n}\n\nexport type FilterItem<T> = T extends (infer V)[] ? V : T;\n\nexport interface FilterEventOptions {\n clearResult?: boolean;\n actionType?: 'add' | 'remove';\n clickedValueKey?: string;\n}\n\ninterface FilterEventsSchema {\n refresh: (opt: FilterEventOptions | undefined) => unknown;\n beforeRefresh: (opt: FilterEventOptions | undefined) => unknown;\n change: (opt?: FilterEventOptions) => unknown;\n scheduleRefresh: (opt?: FilterEventOptions) => unknown;\n}\n\nexport type FilterEvents = TypedEmitter<FilterEventsSchema>;\n\nexport interface Filter<T> {\n events: TypedEmitter<FilterEventsSchema>;\n name: string;\n persistent?: boolean;\n readonly value: T;\n readonly toArray: FilterItem<T>[];\n readonly isEmpty: boolean;\n readonly toQueryString: string;\n readonly decode: (value: unknown) => T;\n readonly encode: (value: T) => unknown;\n readonly size: number;\n readonly itemKey: (item: FilterItem<T>) => string;\n readonly itemName: (item: FilterItem<T>) => string;\n readonly matches: (item: FilterItem<T>, value: T) => boolean;\n readonly entityName: (pluralization: number) => string;\n readonly equals?: (item1: FilterItem<T>, item2: FilterItem<T>) => boolean;\n\n applyFromQueryString(str: string): void;\n setValue(value: T, options?: ChangeValueOptions): void;\n changeValue(value: T, options?: ChangeValueOptions): void;\n refresh(value: T, options?: ChangeValueOptions): void;\n scheduleRefresh(value: T): void;\n reset(options?: ChangeValueOptions): void;\n remove(items: FilterItem<T>[], options?: ChangeValueOptions): void;\n clone(...args: any[]): Filter<T>;\n hasDiff(items: T): boolean;\n}\n\nexport interface FilterStateBaseParams<T> {\n name?: string;\n /**\n * Marks the filter as a \"context\" or \"scope\" filter. This makes the filter not be visible in the sub-toolbar tag list, not saved in views, not counted as \"X filters applied\".\n * @external\n */\n persistent?: boolean;\n /**\n * The value to initialize the filter with (Optional)\n * @external\n */\n initialValue?: T;\n\n /**\n * A callback function that accepts an item and returns a unique ID of it. typically `item.id`.\n * @external\n */\n itemKey: (item: FilterItem<T>) => string;\n /**\n * A callback function that accepts an item and returns the item name which is used in many messages through cairo\n * @external\n */\n itemName: (item: FilterItem<T>) => string;\n /**\n * @deprecated No longer required. To customize filters panel accordion item label pass [accordionItemProps.label](./?path=/story/components-filters--filterprops) prop to the filter component\n */\n entityName?: (pluralization: number) => string;\n\n /**\n * A function which accepts 2 items and returns true if they are equal\n * @external\n */\n equals?: (item1: FilterItem<T>, item2: FilterItem<T>) => boolean;\n}\n\nexport type FiltersMap = { [key: string]: Filter<any> | undefined };\nexport type OptionalFiltersMap = { [key: string]: undefined };\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/model/filter.ts"],"sourcesContent":["import { TypedEmitter } from '../util';\n\n/*\nchange - whenever we want to notify that the value was changed, for additional side effects, i.e BI events. For example, when initializing the value, we don't want to emit this event.\nrefresh - the collection should be refreshed as a result of this change\nscheduleRefresh - the collection should schedule a refresh as a result of this change\n */\ntype FilterEvent = 'change' | 'refresh' | 'scheduleRefresh' | 'beforeRefresh';\n\nexport interface ChangeValueOptions {\n emitEvents?: FilterEvent[];\n clearResult?: boolean;\n actionType?: 'add' | 'remove';\n clickedValueKey?: string;\n}\n\nexport type FilterItem<T> = T extends (infer V)[] ? V : T;\n\nexport interface FilterEventOptions {\n clearResult?: boolean;\n actionType?: 'add' | 'remove';\n clickedValueKey?: string;\n}\n\ninterface FilterEventsSchema {\n refresh: (opt: FilterEventOptions | undefined) => unknown;\n beforeRefresh: (opt: FilterEventOptions | undefined) => unknown;\n change: (opt?: FilterEventOptions) => unknown;\n scheduleRefresh: (opt?: FilterEventOptions) => unknown;\n}\n\nexport type FilterEvents = TypedEmitter<FilterEventsSchema>;\n\nexport interface Filter<T> {\n events: TypedEmitter<FilterEventsSchema>;\n name: string;\n persistent?: boolean;\n readonly value: T;\n readonly toArray: FilterItem<T>[];\n readonly isEmpty: boolean;\n readonly toQueryString: string;\n readonly decode: (value: unknown) => T;\n readonly encode: (value: T) => unknown;\n readonly size: number;\n readonly itemKey: (item: FilterItem<T>) => string;\n readonly itemName: (item: FilterItem<T>) => string;\n readonly matches: (item: FilterItem<T>, value: T) => boolean;\n readonly entityName: (pluralization: number) => string;\n readonly equals?: (item1: FilterItem<T>, item2: FilterItem<T>) => boolean;\n\n applyFromQueryString(str: string): void;\n setValue(value: T, options?: ChangeValueOptions): void;\n changeValue(value: T, options?: ChangeValueOptions): void;\n refresh(value: T, options?: ChangeValueOptions): void;\n scheduleRefresh(value: T): void;\n reset(options?: ChangeValueOptions): void;\n remove(items: FilterItem<T>[], options?: ChangeValueOptions): void;\n clone(...args: any[]): Filter<T>;\n hasDiff(items: T): boolean;\n}\n\nexport interface FilterStateBaseParams<T> {\n name?: string;\n /**\n * Marks the filter as a \"context\" or \"scope\" filter. This makes the filter not be visible in the sub-toolbar tag list, not saved in views, not counted as \"X filters applied\".\n * @external\n */\n persistent?: boolean;\n /**\n * The value to initialize the filter with (Optional)\n * @external\n */\n initialValue?: T;\n\n /**\n * A callback function that accepts an item and returns a unique ID of it. typically `item.id`.\n * @external\n */\n itemKey: (item: FilterItem<T>) => string;\n /**\n * A callback function that accepts an item and returns the item name which is used in many messages through cairo\n * @external\n */\n itemName: (item: FilterItem<T>) => string;\n /**\n * @deprecated No longer required. To customize filters panel accordion item label pass [accordionItemProps.label](/pages/cairo/?path=/story/components-filters--filterprops) prop to the filter component\n */\n entityName?: (pluralization: number) => string;\n\n /**\n * A function which accepts 2 items and returns true if they are equal\n * @external\n */\n equals?: (item1: FilterItem<T>, item2: FilterItem<T>) => boolean;\n}\n\nexport type FiltersMap = { [key: string]: Filter<any> | undefined };\nexport type OptionalFiltersMap = { [key: string]: undefined };\n"],"mappings":""}
@@ -6,6 +6,8 @@ exports.mapGuidComponentIdToNonGuid = mapGuidComponentIdToNonGuid;
6
6
  const GuidComponentIdToNonGuid = exports.GuidComponentIdToNonGuid = {
7
7
  'b5dfad3d-0bbb-4e8a-8630-c70e0abc4ae4': 'restaurants-menus-management-items',
8
8
  'e7b7afbb-6d4e-46b2-8bd6-0af78dc9d21e': 'membership-lazy-component',
9
+ '6eba1ac9-67bd-4868-a5ff-6c8ac03e5388': 'contacts-page-component',
10
+ 'bdd09dca-7cc9-4524-81d7-c9336071b33e': 'contacts-page-component',
9
11
  'c821a776-85a9-4340-ae94-e08876c99944': 'wixstores-dashboard-product-list.pages.index',
10
12
  '79dbb935-d823-4feb-9272-ef2cbcf2aafd': 'subscriptions-bm',
11
13
  '4309112c-adcb-4a9d-8027-454b107afe76': 'cairo-example-bm.pages.infinite-scroll-table-v2'
@@ -1 +1 @@
1
- {"version":3,"names":["GuidComponentIdToNonGuid","exports","mapGuidComponentIdToNonGuid","componentId"],"sources":["../../../src/services/mapGuidComponentIdToNonGuid.ts"],"sourcesContent":["export const GuidComponentIdToNonGuid: Record<string, string> = {\n 'b5dfad3d-0bbb-4e8a-8630-c70e0abc4ae4': 'restaurants-menus-management-items',\n 'e7b7afbb-6d4e-46b2-8bd6-0af78dc9d21e': 'membership-lazy-component',\n 'c821a776-85a9-4340-ae94-e08876c99944':\n 'wixstores-dashboard-product-list.pages.index',\n '79dbb935-d823-4feb-9272-ef2cbcf2aafd': 'subscriptions-bm',\n '4309112c-adcb-4a9d-8027-454b107afe76':\n 'cairo-example-bm.pages.infinite-scroll-table-v2',\n};\n\nexport function mapGuidComponentIdToNonGuid(componentId: string): string {\n if (GuidComponentIdToNonGuid[componentId]) {\n return GuidComponentIdToNonGuid[componentId];\n }\n return componentId;\n}\n"],"mappings":";;;;;AAAO,MAAMA,wBAAgD,GAAAC,OAAA,CAAAD,wBAAA,GAAG;EAC9D,sCAAsC,EAAE,oCAAoC;EAC5E,sCAAsC,EAAE,2BAA2B;EACnE,sCAAsC,EACpC,8CAA8C;EAChD,sCAAsC,EAAE,kBAAkB;EAC1D,sCAAsC,EACpC;AACJ,CAAC;AAEM,SAASE,2BAA2BA,CAACC,WAAmB,EAAU;EACvE,IAAIH,wBAAwB,CAACG,WAAW,CAAC,EAAE;IACzC,OAAOH,wBAAwB,CAACG,WAAW,CAAC;EAC9C;EACA,OAAOA,WAAW;AACpB"}
1
+ {"version":3,"names":["GuidComponentIdToNonGuid","exports","mapGuidComponentIdToNonGuid","componentId"],"sources":["../../../src/services/mapGuidComponentIdToNonGuid.ts"],"sourcesContent":["export const GuidComponentIdToNonGuid: Record<string, string> = {\n 'b5dfad3d-0bbb-4e8a-8630-c70e0abc4ae4': 'restaurants-menus-management-items',\n 'e7b7afbb-6d4e-46b2-8bd6-0af78dc9d21e': 'membership-lazy-component',\n '6eba1ac9-67bd-4868-a5ff-6c8ac03e5388': 'contacts-page-component',\n 'bdd09dca-7cc9-4524-81d7-c9336071b33e': 'contacts-page-component',\n 'c821a776-85a9-4340-ae94-e08876c99944':\n 'wixstores-dashboard-product-list.pages.index',\n '79dbb935-d823-4feb-9272-ef2cbcf2aafd': 'subscriptions-bm',\n '4309112c-adcb-4a9d-8027-454b107afe76':\n 'cairo-example-bm.pages.infinite-scroll-table-v2',\n};\n\nexport function mapGuidComponentIdToNonGuid(componentId: string): string {\n if (GuidComponentIdToNonGuid[componentId]) {\n return GuidComponentIdToNonGuid[componentId];\n }\n return componentId;\n}\n"],"mappings":";;;;;AAAO,MAAMA,wBAAgD,GAAAC,OAAA,CAAAD,wBAAA,GAAG;EAC9D,sCAAsC,EAAE,oCAAoC;EAC5E,sCAAsC,EAAE,2BAA2B;EACnE,sCAAsC,EAAE,yBAAyB;EACjE,sCAAsC,EAAE,yBAAyB;EACjE,sCAAsC,EACpC,8CAA8C;EAChD,sCAAsC,EAAE,kBAAkB;EAC1D,sCAAsC,EACpC;AACJ,CAAC;AAEM,SAASE,2BAA2BA,CAACC,WAAmB,EAAU;EACvE,IAAIH,wBAAwB,CAACG,WAAW,CAAC,EAAE;IACzC,OAAOH,wBAAwB,CAACG,WAAW,CAAC;EAC9C;EACA,OAAOA,WAAW;AACpB"}
@@ -13,6 +13,9 @@ var _events = require("events");
13
13
  var _QueryResultSimulationDefault = require("./QueryResultSimulationDefault");
14
14
  var _CollectionOptimisticSequenceExecutor = require("./CollectionOptimisticSequenceExecutor");
15
15
  class CollectionOptimisticActions {
16
+ get _queryNames() {
17
+ return [this.collection.queryName, ...this.collections.map(c => c.queryName)];
18
+ }
16
19
  constructor(params) {
17
20
  (0, _defineProperty2.default)(this, "collection", void 0);
18
21
  (0, _defineProperty2.default)(this, "collections", void 0);
@@ -113,15 +116,6 @@ class CollectionOptimisticActions {
113
116
  pendingMovePatches: _mobx.computed
114
117
  });
115
118
  }
116
- get _queryNames() {
117
- return [this.collection.queryName, ...this.collections.map(c => c.queryName)];
118
- }
119
- get hasRunningSequence() {
120
- return Array.from(this.sequences.values()).some(s => s.seq.state.running);
121
- }
122
- get pendingMovePatches() {
123
- return this.state.patches.filter(p => p.move);
124
- }
125
119
  rollback(patch) {
126
120
  const {
127
121
  events,
@@ -133,6 +127,12 @@ class CollectionOptimisticActions {
133
127
  }
134
128
  events.emit('reprocess');
135
129
  }
130
+ get hasRunningSequence() {
131
+ return Array.from(this.sequences.values()).some(s => s.seq.state.running);
132
+ }
133
+ get pendingMovePatches() {
134
+ return this.state.patches.filter(p => p.move);
135
+ }
136
136
  pushPatchAndReprocess(patch) {
137
137
  const {
138
138
  state,
@@ -154,9 +154,6 @@ class CollectionOptimisticActions {
154
154
 
155
155
  /**
156
156
  * @deprecated Use createOne instead
157
- * Adds a single item to the collection.
158
- * @param item - The item to add.
159
- * @param params - Additional parameters for the operation.
160
157
  */
161
158
  addOne(item, params = {}) {
162
159
  return this.addMany([item], params);
@@ -164,9 +161,6 @@ class CollectionOptimisticActions {
164
161
 
165
162
  /**
166
163
  * @deprecated Use createMany instead
167
- * Adds multiple items to the collection.
168
- * @param items - The items to add.
169
- * @param params - Additional parameters for the operation.
170
164
  */
171
165
  addMany(items, params = {}) {
172
166
  const {
@@ -226,23 +220,9 @@ class CollectionOptimisticActions {
226
220
  onUndo
227
221
  });
228
222
  }
229
-
230
- /**
231
- * Creates a single item in the collection.
232
- * @param item - The item to create.
233
- * @param params - Additional parameters for the operation.
234
- * @external
235
- */
236
223
  createOne(item, params) {
237
224
  this.createMany([item], params);
238
225
  }
239
-
240
- /**
241
- * Creates multiple items in the collection.
242
- * @param items - The items to create.
243
- * @param params - Additional parameters for the operation.
244
- * @external
245
- */
246
226
  createMany(items, params) {
247
227
  const {
248
228
  collection,
@@ -311,14 +291,7 @@ class CollectionOptimisticActions {
311
291
  onUndo
312
292
  });
313
293
  }
314
-
315
- /**
316
- * Updates multiple items in the collection.
317
- * @param items - The items to update.
318
- * @param params - Additional parameters for the update operation.
319
- * @external
320
- */
321
- updateMany(items, params) {
294
+ async updateMany(items, params) {
322
295
  const {
323
296
  executor,
324
297
  collection
@@ -494,32 +467,15 @@ class CollectionOptimisticActions {
494
467
  optimisticPatch.events.on('scheduleRemoval', this._clearPatchOnNextResultOrUnmount);
495
468
  this.enqueueMovePatch(optimisticPatch, params);
496
469
  }
497
-
498
- /**
499
- * Updates a single item in the collection.
500
- * @param item - The item to update.
501
- * @param params - Additional parameters for the operation.
502
- * @external
503
- */
504
- updateOne(item, params) {
470
+ async updateOne(item, params) {
505
471
  return this.updateMany([item], params);
506
472
  }
507
473
 
508
474
  /**
509
475
  * @deprecated `updateAll(fn)` API is not recommended as it's not possible to calculate "optimistic total", prefer updateAll(patchObject) API.
510
- * Updates all items in the collection based on a function or a patch object.
511
- * @param patchOrFn - A function or a patch object to apply to each item.
512
- * @param params - Additional parameters for the operation.
513
476
  */
514
477
 
515
- /**
516
- * Updates all items in the collection based on a patch object.
517
- * @param patchOrFn - A function or a patch object to apply to each item.
518
- * @param params - Additional parameters for the operation.
519
- * @external
520
- */
521
-
522
- updateAll(patchOrFn, params) {
478
+ async updateAll(patchOrFn, params) {
523
479
  const {
524
480
  executor,
525
481
  collection,
@@ -590,13 +546,6 @@ class CollectionOptimisticActions {
590
546
  onUndo
591
547
  });
592
548
  }
593
-
594
- /**
595
- * Deletes multiple items from the collection.
596
- * @param items - An array of items to delete.
597
- * @param params - Additional parameters for the delete operation.
598
- * @external
599
- */
600
549
  deleteMany(items, params) {
601
550
  const {
602
551
  executor,
@@ -655,23 +604,10 @@ class CollectionOptimisticActions {
655
604
  onUndo
656
605
  });
657
606
  }
658
-
659
- /**
660
- * Deletes a single item from the collection.
661
- * @param item - The item to delete.
662
- * @param params - Additional parameters for the operation.
663
- * @external
664
- */
665
607
  deleteOne(item, params) {
666
608
  return this.deleteMany([item], params);
667
609
  }
668
-
669
- /**
670
- * Deletes all items from the collection.
671
- * @param params - Additional parameters for the operation.
672
- * @external
673
- */
674
- deleteAll(params) {
610
+ async deleteAll(params) {
675
611
  const {
676
612
  executor,
677
613
  collection,