@wix/bex-core 1.429.0 → 1.431.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/assets/locale/messages_cs.json +2 -2
- package/dist/cjs/assets/locale/messages_nl.json +3 -3
- package/dist/cjs/hooks/collectionConfig.js.map +1 -1
- package/dist/cjs/model/dataResultRaw/dataResultRaw.js.map +1 -1
- package/dist/cjs/model/filter.js.map +1 -1
- package/dist/cjs/state/ArrayFilterState/ArrayFilterState.js.map +1 -1
- package/dist/cjs/state/CollectionOptimisticActions.js +1 -0
- package/dist/cjs/state/CollectionOptimisticActions.js.map +1 -1
- package/dist/cjs/state/CustomFilterState/CustomFilterState.js.map +1 -1
- package/dist/cjs/state/QueryPendingState.js +7 -18
- package/dist/cjs/state/QueryPendingState.js.map +1 -1
- package/dist/cjs/state/RangeFilterState/RangeFilterState.js.map +1 -1
- package/dist/cjs/state/StringFilterState/StringFilterState.js.map +1 -1
- package/dist/cjs/state/index.js +0 -7
- package/dist/cjs/state/index.js.map +1 -1
- package/dist/esm/assets/locale/messages_cs.json +2 -2
- package/dist/esm/assets/locale/messages_nl.json +3 -3
- package/dist/esm/state/ArrayFilterState/ArrayFilterState.js.map +1 -1
- package/dist/esm/state/CollectionOptimisticActions.js +1 -0
- package/dist/esm/state/CollectionOptimisticActions.js.map +1 -1
- package/dist/esm/state/CustomFilterState/CustomFilterState.js.map +1 -1
- package/dist/esm/state/QueryPendingState.js +4 -14
- package/dist/esm/state/QueryPendingState.js.map +1 -1
- package/dist/esm/state/RangeFilterState/RangeFilterState.js.map +1 -1
- package/dist/esm/state/StringFilterState/StringFilterState.js.map +1 -1
- package/dist/esm/state/index.js +0 -1
- package/dist/esm/state/index.js.map +1 -1
- package/dist/types/hooks/collectionConfig.d.ts +14 -1
- package/dist/types/hooks/collectionConfig.d.ts.map +1 -1
- package/dist/types/model/dataResultRaw/dataResultRaw.d.ts +4 -0
- package/dist/types/model/dataResultRaw/dataResultRaw.d.ts.map +1 -1
- package/dist/types/model/filter.d.ts +5 -0
- package/dist/types/model/filter.d.ts.map +1 -1
- package/dist/types/state/ArrayFilterState/ArrayFilterState.d.ts +4 -0
- package/dist/types/state/ArrayFilterState/ArrayFilterState.d.ts.map +1 -1
- package/dist/types/state/CollectionOptimisticActions.d.ts.map +1 -1
- package/dist/types/state/CustomFilterState/CustomFilterState.d.ts +11 -0
- package/dist/types/state/CustomFilterState/CustomFilterState.d.ts.map +1 -1
- package/dist/types/state/QueryPendingState.d.ts +2 -9
- package/dist/types/state/QueryPendingState.d.ts.map +1 -1
- package/dist/types/state/RangeFilterState/RangeFilterState.d.ts +5 -0
- package/dist/types/state/RangeFilterState/RangeFilterState.d.ts.map +1 -1
- package/dist/types/state/StringFilterState/StringFilterState.d.ts +8 -0
- package/dist/types/state/StringFilterState/StringFilterState.d.ts.map +1 -1
- package/dist/types/state/index.d.ts +0 -1
- package/dist/types/state/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/state/applyFiltersExperimentEnabled.js +0 -10
- package/dist/cjs/state/applyFiltersExperimentEnabled.js.map +0 -1
- package/dist/esm/state/applyFiltersExperimentEnabled.js +0 -5
- package/dist/esm/state/applyFiltersExperimentEnabled.js.map +0 -1
- package/dist/types/state/applyFiltersExperimentEnabled.d.ts +0 -5
- package/dist/types/state/applyFiltersExperimentEnabled.d.ts.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cairo.emptyState.premium.text": "
|
|
2
|
+
"cairo.emptyState.premium.text": "Upgradujte web a získáte přístup k více funkcím.",
|
|
3
3
|
"cairo.customFields.fieldType.shortText": "Krátký text",
|
|
4
4
|
"cairo.delete.button": "Odstranit",
|
|
5
5
|
"cairo.deselectAll": "Zrušit výběr všech",
|
|
@@ -334,7 +334,7 @@
|
|
|
334
334
|
"cairo.customFields.addCustomField.modal.PII.learnMore": "Zjistit více",
|
|
335
335
|
"cairo.tags.manageTags.modal.list.input.cancel.CTA": "Zpět",
|
|
336
336
|
"cairo.customFields.archive.modal.description": "Toto pole a informace, které v něm byly shromážděny, budou archivovány a nelze je obnovit.",
|
|
337
|
-
"cairo.emptyState.premium.title": "
|
|
337
|
+
"cairo.emptyState.premium.title": "Upgradujte na plán",
|
|
338
338
|
"cairo.customFields.fieldType.numberDecimal": "Číslo (desetinné)",
|
|
339
339
|
"cairo.manageView.saveView.error.toast": "Vaše zobrazení nebylo kvůli technickým potížím uloženo.",
|
|
340
340
|
"cairo.entityPage.newPageName.title": "New {Entity Name}",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cairo.emptyState.premium.text": "
|
|
2
|
+
"cairo.emptyState.premium.text": "Krijg toegang tot meer functies door je website te upgraden.",
|
|
3
3
|
"cairo.customFields.fieldType.shortText": "Korte tekst",
|
|
4
4
|
"cairo.delete.button": "Verwijderen",
|
|
5
5
|
"cairo.deselectAll": "Alles deselecteren",
|
|
@@ -334,7 +334,7 @@
|
|
|
334
334
|
"cairo.customFields.addCustomField.modal.PII.learnMore": "Lees meer",
|
|
335
335
|
"cairo.tags.manageTags.modal.list.input.cancel.CTA": "Annuleren",
|
|
336
336
|
"cairo.customFields.archive.modal.description": "Dit veld en de daarin verzamelde informatie wordt gearchiveerd en kan niet hersteld worden.",
|
|
337
|
-
"cairo.emptyState.premium.title": "
|
|
337
|
+
"cairo.emptyState.premium.title": "Upgraden naar een abonnement",
|
|
338
338
|
"cairo.customFields.fieldType.numberDecimal": "Getal (decimaal)",
|
|
339
339
|
"cairo.manageView.saveView.error.toast": "Je weergave is vanwege een technisch probleem niet opgeslagen.",
|
|
340
340
|
"cairo.entityPage.newPageName.title": "New {Entity Name}",
|
|
@@ -406,7 +406,7 @@
|
|
|
406
406
|
"cairo.passiveEmptyState.subtitle": "Je zult toegevoegde items hier kunnen zien.",
|
|
407
407
|
"cairo.tags.collectionPage.popover.loadTags.error.body": "Kan tags niet laden vanwege een technisch probleem aan onze kant.",
|
|
408
408
|
"cairo.table.advanced-sorting.button.cta": "Sorteren",
|
|
409
|
-
"cairo.emptyState.premium.cta": "
|
|
409
|
+
"cairo.emptyState.premium.cta": "Upgraden",
|
|
410
410
|
"cairo.manageView.Rename.disabled.predefinedView.tooltip": "Dit is een vooraf ingestelde weergave. Om deze weergave een naam te geven, kies je voor de optie 'Als nieuwe weergave opslaan'.",
|
|
411
411
|
"cairo.customFields.addCustomField.modal.fieldType.placeholder": "Veldtype selecteren",
|
|
412
412
|
"cairo.customFields.fieldType.checkbox.Name.placeholder": "bijv. Geabonneerd",
|
|
@@ -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 */\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 */\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 */\n queryName: string;\n\n /**\n * Entity Fqdn, used in features where the fqdn is needed to manage the data (like DataExtension).\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
|
|
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/dataResultRaw/dataResultRaw.ts"],"sourcesContent":["export interface DataResultRaw<T> {\n /**\n * Array of items returned from the server\n */\n items: T[];\n /**\n * Total items available in the server, *after* applying filters. If not provided, offset pagination will not work correctly.\n * @default `items.length`\n */\n total?: number | null;\n /**\n * Total items available in the server, *before* applying filters\n */\n available?: number;\n /**\n * In case of cursor pagination, this will be the value that will be sent in the query on the next page request\n */\n cursor?: string | undefined | null;\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../../src/model/dataResultRaw/dataResultRaw.ts"],"sourcesContent":["export interface DataResultRaw<T> {\n /**\n * Array of items returned from the server\n * @external\n */\n items: T[];\n /**\n * Total items available in the server, *after* applying filters. If not provided, offset pagination will not work correctly.\n * @default `items.length`\n * @external\n */\n total?: number | null;\n /**\n * Total items available in the server, *before* applying filters\n * @external\n */\n available?: number;\n /**\n * In case of cursor pagination, this will be the value that will be sent in the query on the next page request\n * @external\n */\n cursor?: string | undefined | null;\n}\n"],"mappings":""}
|
|
@@ -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 */\n persistent?: boolean;\n /**\n * The value to initialize the filter with (Optional)\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 */\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 */\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 */\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":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","require","_mobx","ArrayFilterState","constructor","params","_defineProperty2","default","EventEmitter","name","persistent","defaultValue","parse","simplify","value","itemKey","itemName","entityName","_value","initialValue","matches","item","key","length","some","v","equals","makeObservable","observable","ref","isEmpty","computed","size","reset","action","setValue","changeValue","scheduleRefresh","clone","toArray","toQueryString","JSON","stringify","map","applyFromQueryString","str","maybeArr","Array","isArray","filter","_","encode","decode","raw","emitEvents","options","event","events","emit","refresh","hasDiff","items","every","i","remove","keysToRemove","Set","has","exports","stringsArrayFilter","arrayFilter","idNameArrayFilter","id","idArrayFilter","idNameArrayFilterNum","String"],"sources":["../../../../src/state/ArrayFilterState/ArrayFilterState.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { action, computed, makeObservable, observable } from 'mobx';\nimport {\n ChangeValueOptions,\n Filter,\n FilterEvents,\n FilterStateBaseParams,\n} from '../../model';\n\nexport interface ArrayFilterStateParams<T> extends FilterStateBaseParams<T[]> {\n /**\n * The value to set the value to, when clearing the filter (Optional)\n */\n defaultValue?: T[];\n /**\n * Convert a unknown object to a T.<br>\n * If the function returns null, the item will be skipped when we try to deserializate it from an array.\n * @param value\n */\n readonly parse: (\n value: Record<string, unknown> | string | null | undefined,\n ) => T | null;\n /**\n * Return a simplified form of an item for serialization.\n * @param value\n */\n readonly simplify?: (value: T) => Partial<T>;\n\n /**\n * Indicates whether an item matches the current value of the filter\n */\n readonly matches?: (item: T, value: T[]) => boolean;\n\n readonly equals?: (item1: T, item2: T) => boolean;\n}\n\nexport class ArrayFilterState<T> implements Filter<T[]> {\n _value: T[];\n\n name: string;\n persistent;\n defaultValue: T[];\n readonly parse: ArrayFilterStateParams<T>['parse'];\n readonly simplify: (value: T) => Partial<T>;\n readonly itemKey: (item: T) => string;\n readonly itemName: (item: T) => string;\n readonly entityName: (pluralization: number) => string;\n readonly equals?: (item1: T, item2: T) => boolean;\n\n readonly events = new EventEmitter() as FilterEvents;\n\n readonly matches: (item: T, value: T[]) => boolean;\n\n constructor(params: Readonly<ArrayFilterStateParams<T>>) {\n this.name = params.name ?? '';\n this.persistent = params.persistent;\n this.defaultValue = params.defaultValue ?? [];\n this.parse = params.parse;\n this.simplify = params.simplify ?? ((value) => value);\n this.itemKey = params.itemKey;\n this.itemName = params.itemName;\n this.entityName = params.entityName ?? (() => '');\n this._value = params.initialValue ?? this.defaultValue;\n this.matches =\n params.matches ??\n ((item, value) => {\n const { itemKey } = this;\n const key = typeof item === 'string' ? item : itemKey(item);\n return (\n value == null ||\n !value.length ||\n value.some((v) => itemKey(v) === key)\n );\n });\n this.equals = params.equals;\n\n makeObservable(this, {\n _value: observable.ref,\n defaultValue: observable.ref,\n persistent: observable.ref,\n isEmpty: computed,\n size: computed,\n value: computed,\n reset: action,\n setValue: action,\n changeValue: action,\n scheduleRefresh: action,\n clone: action,\n });\n }\n\n get value() {\n return this._value;\n }\n\n get toArray() {\n return this._value;\n }\n\n get isEmpty() {\n return !this.size;\n }\n\n get size() {\n return this._value.length;\n }\n\n get toQueryString() {\n return JSON.stringify(this._value.map(this.simplify));\n }\n\n applyFromQueryString(str: string) {\n try {\n const maybeArr = JSON.parse(str) as unknown;\n if (Array.isArray(maybeArr)) {\n this.setValue(\n maybeArr.map(this.parse).filter((value): value is T => value != null),\n );\n }\n } catch (_) {}\n }\n\n encode(value: T[]) {\n return value.map(this.simplify);\n }\n\n decode(raw: unknown) {\n if (Array.isArray(raw)) {\n return raw.map(this.parse).filter((value): value is T => value != null);\n }\n\n return [];\n }\n\n setValue(value: T[], { emitEvents, ...options }: ChangeValueOptions = {}) {\n this._value = value;\n if (emitEvents) {\n for (const event of emitEvents) {\n this.events.emit(event, options);\n }\n }\n }\n\n changeValue(\n value: T[],\n { emitEvents = [], ...options }: ChangeValueOptions = {},\n ) {\n this.setValue(value, { ...options, emitEvents: ['change', ...emitEvents] });\n }\n\n refresh(value: T[], options?: ChangeValueOptions) {\n this.changeValue(value, {\n ...options,\n emitEvents: ['refresh'],\n });\n }\n\n scheduleRefresh(value: T[]) {\n this.changeValue(value, { emitEvents: ['scheduleRefresh'] });\n }\n\n reset(options: ChangeValueOptions = {}) {\n this.setValue(this.defaultValue, options);\n }\n\n hasDiff(items: T[]) {\n const { value } = this;\n return (\n value.length !== items.length ||\n value.some((item) =>\n items.every((i) => this.itemKey(i) !== this.itemKey(item)),\n )\n );\n }\n\n remove(items: T[], options: ChangeValueOptions = {}) {\n const { itemKey } = this;\n const keysToRemove = new Set(items.map(itemKey));\n this.setValue(\n this._value.filter((item) => !keysToRemove.has(itemKey(item))),\n options,\n );\n }\n\n clone(params: Partial<ArrayFilterStateParams<T>>): ArrayFilterState<T> {\n const {\n entityName,\n itemName,\n itemKey,\n simplify,\n parse,\n defaultValue,\n value: initialValue,\n matches,\n persistent,\n name,\n } = this;\n return new ArrayFilterState({\n entityName,\n itemName,\n itemKey,\n simplify,\n parse,\n defaultValue,\n initialValue,\n matches,\n persistent,\n name,\n ...params,\n });\n }\n}\n\nexport const stringsArrayFilter = <T extends string>(\n params?: Partial<ArrayFilterStateParams<T>>,\n) =>\n new ArrayFilterState<T>({\n itemKey: (item) => item,\n itemName: (item) => item,\n parse: (value) => {\n if (value == null || typeof value !== 'string') {\n return null;\n }\n return value as T;\n },\n simplify: (value) => value,\n ...params,\n });\n\nexport const arrayFilter = <T>(params: ArrayFilterStateParams<T>) =>\n new ArrayFilterState<T>(params);\n\nexport const idNameArrayFilter = <T extends { id: string; name: string }>(\n params?: Partial<ArrayFilterStateParams<T>>,\n) =>\n new ArrayFilterState<T>({\n itemKey: (item) => item.id,\n itemName: (item) => item.name,\n parse: (value) => {\n if (\n value == null ||\n typeof value === 'string' ||\n typeof value.id !== 'string' ||\n typeof value.name !== 'string'\n ) {\n return null;\n }\n return value as T;\n },\n simplify: (value) =>\n ({\n id: value.id,\n name: value.name,\n } as Partial<T>),\n ...params,\n });\n\nexport const idArrayFilter = <T extends { id: string }>(\n params?: Partial<ArrayFilterStateParams<T>>,\n) =>\n new ArrayFilterState<T>({\n itemKey: (item) => item.id,\n itemName: () => '',\n parse: (value) => {\n if (\n value == null ||\n typeof value === 'string' ||\n typeof value.id !== 'string'\n ) {\n return null;\n }\n return value as T;\n },\n simplify: (value) =>\n ({\n id: value.id,\n } as Partial<T>),\n ...params,\n });\n\nexport const idNameArrayFilterNum = <T extends { id: number; name: string }>(\n params?: Partial<ArrayFilterStateParams<T>>,\n) =>\n new ArrayFilterState<T>({\n itemKey: (item) => String(item.id),\n itemName: (item) => item.name,\n parse: (value) => {\n if (\n value == null ||\n typeof value === 'string' ||\n typeof value.id !== 'number' ||\n typeof value.name !== 'string'\n ) {\n return null;\n }\n return value as T;\n },\n simplify: (value) =>\n ({\n id: value.id,\n name: value.name,\n } as Partial<T>),\n ...params,\n });\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_events","require","_mobx","ArrayFilterState","constructor","params","_defineProperty2","default","EventEmitter","name","persistent","defaultValue","parse","simplify","value","itemKey","itemName","entityName","_value","initialValue","matches","item","key","length","some","v","equals","makeObservable","observable","ref","isEmpty","computed","size","reset","action","setValue","changeValue","scheduleRefresh","clone","toArray","toQueryString","JSON","stringify","map","applyFromQueryString","str","maybeArr","Array","isArray","filter","_","encode","decode","raw","emitEvents","options","event","events","emit","refresh","hasDiff","items","every","i","remove","keysToRemove","Set","has","exports","stringsArrayFilter","arrayFilter","idNameArrayFilter","id","idArrayFilter","idNameArrayFilterNum","String"],"sources":["../../../../src/state/ArrayFilterState/ArrayFilterState.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { action, computed, makeObservable, observable } from 'mobx';\nimport {\n ChangeValueOptions,\n Filter,\n FilterEvents,\n FilterStateBaseParams,\n} from '../../model';\n\nexport interface ArrayFilterStateParams<T> extends FilterStateBaseParams<T[]> {\n /**\n * The value to set the value to, when clearing the filter (Optional)\n * @external\n */\n defaultValue?: T[];\n /**\n * Convert a unknown object to a T.<br>\n * If the function returns null, the item will be skipped when we try to deserializate it from an array.\n * @param value\n * @external\n */\n readonly parse: (\n value: Record<string, unknown> | string | null | undefined,\n ) => T | null;\n /**\n * Return a simplified form of an item for serialization.\n * @param value\n * @external\n */\n readonly simplify?: (value: T) => Partial<T>;\n\n /**\n * Indicates whether an item matches the current value of the filter\n * @external\n */\n readonly matches?: (item: T, value: T[]) => boolean;\n\n readonly equals?: (item1: T, item2: T) => boolean;\n}\n\nexport class ArrayFilterState<T> implements Filter<T[]> {\n _value: T[];\n\n name: string;\n persistent;\n defaultValue: T[];\n readonly parse: ArrayFilterStateParams<T>['parse'];\n readonly simplify: (value: T) => Partial<T>;\n readonly itemKey: (item: T) => string;\n readonly itemName: (item: T) => string;\n readonly entityName: (pluralization: number) => string;\n readonly equals?: (item1: T, item2: T) => boolean;\n\n readonly events = new EventEmitter() as FilterEvents;\n\n readonly matches: (item: T, value: T[]) => boolean;\n\n constructor(params: Readonly<ArrayFilterStateParams<T>>) {\n this.name = params.name ?? '';\n this.persistent = params.persistent;\n this.defaultValue = params.defaultValue ?? [];\n this.parse = params.parse;\n this.simplify = params.simplify ?? ((value) => value);\n this.itemKey = params.itemKey;\n this.itemName = params.itemName;\n this.entityName = params.entityName ?? (() => '');\n this._value = params.initialValue ?? this.defaultValue;\n this.matches =\n params.matches ??\n ((item, value) => {\n const { itemKey } = this;\n const key = typeof item === 'string' ? item : itemKey(item);\n return (\n value == null ||\n !value.length ||\n value.some((v) => itemKey(v) === key)\n );\n });\n this.equals = params.equals;\n\n makeObservable(this, {\n _value: observable.ref,\n defaultValue: observable.ref,\n persistent: observable.ref,\n isEmpty: computed,\n size: computed,\n value: computed,\n reset: action,\n setValue: action,\n changeValue: action,\n scheduleRefresh: action,\n clone: action,\n });\n }\n\n get value() {\n return this._value;\n }\n\n get toArray() {\n return this._value;\n }\n\n get isEmpty() {\n return !this.size;\n }\n\n get size() {\n return this._value.length;\n }\n\n get toQueryString() {\n return JSON.stringify(this._value.map(this.simplify));\n }\n\n applyFromQueryString(str: string) {\n try {\n const maybeArr = JSON.parse(str) as unknown;\n if (Array.isArray(maybeArr)) {\n this.setValue(\n maybeArr.map(this.parse).filter((value): value is T => value != null),\n );\n }\n } catch (_) {}\n }\n\n encode(value: T[]) {\n return value.map(this.simplify);\n }\n\n decode(raw: unknown) {\n if (Array.isArray(raw)) {\n return raw.map(this.parse).filter((value): value is T => value != null);\n }\n\n return [];\n }\n\n setValue(value: T[], { emitEvents, ...options }: ChangeValueOptions = {}) {\n this._value = value;\n if (emitEvents) {\n for (const event of emitEvents) {\n this.events.emit(event, options);\n }\n }\n }\n\n changeValue(\n value: T[],\n { emitEvents = [], ...options }: ChangeValueOptions = {},\n ) {\n this.setValue(value, { ...options, emitEvents: ['change', ...emitEvents] });\n }\n\n refresh(value: T[], options?: ChangeValueOptions) {\n this.changeValue(value, {\n ...options,\n emitEvents: ['refresh'],\n });\n }\n\n scheduleRefresh(value: T[]) {\n this.changeValue(value, { emitEvents: ['scheduleRefresh'] });\n }\n\n reset(options: ChangeValueOptions = {}) {\n this.setValue(this.defaultValue, options);\n }\n\n hasDiff(items: T[]) {\n const { value } = this;\n return (\n value.length !== items.length ||\n value.some((item) =>\n items.every((i) => this.itemKey(i) !== this.itemKey(item)),\n )\n );\n }\n\n remove(items: T[], options: ChangeValueOptions = {}) {\n const { itemKey } = this;\n const keysToRemove = new Set(items.map(itemKey));\n this.setValue(\n this._value.filter((item) => !keysToRemove.has(itemKey(item))),\n options,\n );\n }\n\n clone(params: Partial<ArrayFilterStateParams<T>>): ArrayFilterState<T> {\n const {\n entityName,\n itemName,\n itemKey,\n simplify,\n parse,\n defaultValue,\n value: initialValue,\n matches,\n persistent,\n name,\n } = this;\n return new ArrayFilterState({\n entityName,\n itemName,\n itemKey,\n simplify,\n parse,\n defaultValue,\n initialValue,\n matches,\n persistent,\n name,\n ...params,\n });\n }\n}\n\nexport const stringsArrayFilter = <T extends string>(\n params?: Partial<ArrayFilterStateParams<T>>,\n) =>\n new ArrayFilterState<T>({\n itemKey: (item) => item,\n itemName: (item) => item,\n parse: (value) => {\n if (value == null || typeof value !== 'string') {\n return null;\n }\n return value as T;\n },\n simplify: (value) => value,\n ...params,\n });\n\nexport const arrayFilter = <T>(params: ArrayFilterStateParams<T>) =>\n new ArrayFilterState<T>(params);\n\nexport const idNameArrayFilter = <T extends { id: string; name: string }>(\n params?: Partial<ArrayFilterStateParams<T>>,\n) =>\n new ArrayFilterState<T>({\n itemKey: (item) => item.id,\n itemName: (item) => item.name,\n parse: (value) => {\n if (\n value == null ||\n typeof value === 'string' ||\n typeof value.id !== 'string' ||\n typeof value.name !== 'string'\n ) {\n return null;\n }\n return value as T;\n },\n simplify: (value) =>\n ({\n id: value.id,\n name: value.name,\n } as Partial<T>),\n ...params,\n });\n\nexport const idArrayFilter = <T extends { id: string }>(\n params?: Partial<ArrayFilterStateParams<T>>,\n) =>\n new ArrayFilterState<T>({\n itemKey: (item) => item.id,\n itemName: () => '',\n parse: (value) => {\n if (\n value == null ||\n typeof value === 'string' ||\n typeof value.id !== 'string'\n ) {\n return null;\n }\n return value as T;\n },\n simplify: (value) =>\n ({\n id: value.id,\n } as Partial<T>),\n ...params,\n });\n\nexport const idNameArrayFilterNum = <T extends { id: number; name: string }>(\n params?: Partial<ArrayFilterStateParams<T>>,\n) =>\n new ArrayFilterState<T>({\n itemKey: (item) => String(item.id),\n itemName: (item) => item.name,\n parse: (value) => {\n if (\n value == null ||\n typeof value === 'string' ||\n typeof value.id !== 'number' ||\n typeof value.name !== 'string'\n ) {\n return null;\n }\n return value as T;\n },\n simplify: (value) =>\n ({\n id: value.id,\n name: value.name,\n } as Partial<T>),\n ...params,\n });\n"],"mappings":"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"}
|
|
@@ -275,6 +275,7 @@ class CollectionOptimisticActions {
|
|
|
275
275
|
patchedItems: new Map(submitResult.map(item => [itemKey(item), item]))
|
|
276
276
|
});
|
|
277
277
|
this.replacePatchAndReprocess(updatedOptimisticPatch, optimisticPatch);
|
|
278
|
+
this._clearPatchOnNextResultOrUnmount(updatedOptimisticPatch);
|
|
278
279
|
return submitResult;
|
|
279
280
|
}),
|
|
280
281
|
onRollback: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_mobx","require","_CollectionOptimisticActionsState","_CollectionOptimisticProcessor","_CollectionOptimisticPatch","_CollectionOptimisticExecutor","_events","_QueryResultSimulationDefault","_CollectionOptimisticSequenceExecutor","CollectionOptimisticActions","_queryNames","collection","queryName","collections","map","c","constructor","params","_defineProperty2","default","EventEmitter","Map","action","patch","state","noInvalidate","patches","remove","invalidate","forEach","p","refreshAllPages","events","clearPatch","off","_clearPatch","onRefresh","isStale","once","on","emit","CollectionOptimisticActionsState","source","patchesCache","container","cacheNamespace","resultSimulationDefault","QueryResultSimulationDefault","predicate","orderBy","createdAt","executor","CollectionOptimisticExecutor","batchWait","errorMonitor","showToast","translate","lodash","processors","push","CollectionOptimisticProcessor","optimistic","_optimisticActions","makeObservable","pushPatchAndReprocess","replacePatchAndReprocess","rollback","bound","clear","move","pendingMovePatches","computed","Array","isArray","hasRunningSequence","from","sequences","values","some","s","seq","running","filter","newPatch","oldPatch","oldPatchIndex","findIndex","addOne","item","addMany","items","itemKey","result","submit","serverEventuallyUpdated","onUndo","onTryAgain","onError","optimisticPatch","OptimisticPatch","queryCache","queryNames","actionType","patchedItems","originalItems","originalTotal","total","get","selector","has","_clearPatchOnNextResultOrUnmount","execute","actions","reduce","patchedItemsEntries","key","set","onRollback","eventuallyUpdated","onEventuallyUpdated","createOne","createMany","optimisticPatchParams","submitResult","updatedOptimisticPatch","updateMany","keepPosition","_result$get","originalItem","enqueueMovePatch","query","filtersKeyHash","event","_initSequence","CollectionOptimisticSequenceExecutor","err","pendingPatches","_p$move","Error","message","reorderModeCanceledMessage","biName","onClick","sequence","collectionSnapshot","updateOne","updateAll","patchOrFn","originQuery","itemPredicate","updatedAt","Date","deleteMany","deleteOne","deleteAll","initCollection","processor","dispose","init","i","indexOf","splice","emitRefresh","emitBeforeResultUpdated","emitter","disposers","reaction","isEmpty","_pages","unprocessed","flatMap","page","length","allFilteredOut","fetchNextPageIfNeeded","disposer","remaining","exports"],"sources":["../../../src/state/CollectionOptimisticActions.ts"],"sourcesContent":["import { ActionMove, ComputedQuery, FiltersMap, ToastConfig } from '../model';\nimport {\n action,\n computed,\n IObservableArray,\n makeObservable,\n reaction,\n} from 'mobx';\nimport { CollectionState } from './CollectionState';\nimport { Order } from './QueryResultSimulation';\nimport { CollectionOptimisticActionsState } from './CollectionOptimisticActionsState';\nimport { CollectionOptimisticProcessor } from './CollectionOptimisticProcessor';\nimport {\n OptimisticPatch,\n OptimisticPatchParams,\n} from './CollectionOptimisticPatch';\nimport {\n CollectionOptimisticExecutor,\n EventuallyUpdated,\n} from './CollectionOptimisticExecutor';\nimport { EventEmitter } from 'events';\nimport { TypedEmitter } from '../util';\nimport { QueryResultSimulationDefault } from './QueryResultSimulationDefault';\nimport { CollectionOptimisticSequenceExecutor } from './CollectionOptimisticSequenceExecutor';\nimport { ModalLayoutProps } from '../services';\n\nexport interface OptimisticActionBasis {\n showUndoToast?: boolean;\n showUndoSuccessToast?: boolean;\n onUndo?: () => void;\n errorToast?: (err: unknown) => ToastConfig | string;\n onError?: (err: unknown) => void;\n onTryAgain?: () => void | Promise<void>;\n successToast?: ToastConfig | string;\n serverEventuallyUpdated?: EventuallyUpdated;\n}\n\nexport interface UpdateAllParams<R> extends OptimisticActionBasis {\n submit: () => Promise<R>;\n keepPosition?: boolean;\n}\n\nexport interface UpdateManyParams<T, R> extends OptimisticActionBasis {\n submit: (items: T[]) => Promise<R>;\n keepPosition?: boolean;\n}\n\nexport interface MoveParams<T, R> extends OptimisticActionBasis {\n submit?: (params: ActionMove<T>) => Promise<R>;\n collectionSnapshot: { [key: string]: string | number | undefined };\n}\n\nexport interface AddManyParams<T, R> extends OptimisticActionBasis {\n submit?: (items: T[]) => Promise<R>;\n}\n\nexport interface CreateManyParams<T> extends OptimisticActionBasis {\n submit: (items: T[]) => Promise<T[]>;\n}\n\nexport interface DeleteManyParams<T, R> extends OptimisticActionBasis {\n submit: (items: T[]) => Promise<R>;\n}\n\nexport interface DeleteAllParams<R> extends OptimisticActionBasis {\n submit: () => Promise<R>;\n}\n\nexport interface CollectionOptimisticActionsBaseParams<\n T,\n F extends FiltersMap,\n> {\n readonly predicate?: (\n computedQuery: ComputedQuery<F>,\n ) => (item: T) => boolean;\n readonly orderBy?: (computedQuery: ComputedQuery<F>) => Order<T>[];\n readonly createdAt?: (item: T) => Date;\n readonly batchWait?: number;\n readonly noInvalidate?: boolean;\n readonly cacheNamespace?: string;\n}\n\nexport interface CollectionOptimisticActionsParams<T, F extends FiltersMap>\n extends CollectionOptimisticActionsBaseParams<T, F> {\n readonly collection: CollectionState<T, F>;\n readonly collections?: CollectionState<T, F>[];\n readonly container: {\n patchesCache: Map<string, IObservableArray<OptimisticPatch<T>>>;\n events: TypedEmitter<{\n navigation: () => ModalLayoutProps | null | undefined;\n }>;\n };\n}\n\nexport class CollectionOptimisticActions<T, F extends FiltersMap> {\n readonly collection;\n readonly collections;\n readonly predicate: (computedQuery: ComputedQuery<F>) => (item: T) => boolean;\n readonly orderBy: (computedQuery: ComputedQuery<F>) => Order<T>[];\n readonly createdAt?: (item: T) => Date;\n readonly events = new EventEmitter() as TypedEmitter<{\n reprocess: () => void;\n updated: () => void;\n refresh: (params: { isStale: boolean }) => void;\n unmount: () => void;\n beforeResultUpdated: () => void;\n dragAndDropSequenceError: (params: {\n patches: OptimisticPatch<T>[];\n }) => void;\n dragAndDropSequenceRetry: (params: {\n patches: OptimisticPatch<T>[];\n }) => void;\n }>;\n readonly noInvalidate;\n\n readonly state;\n\n readonly processors: CollectionOptimisticProcessor<T, F>[] = [];\n readonly executor: CollectionOptimisticExecutor<OptimisticPatch<T>>;\n readonly sequences = new Map<string, CollectionOptimisticSequenceExecutor>();\n\n readonly resultSimulationDefault;\n readonly reorderModeCanceledMessage = 'REORDER_MODE_CANCELED';\n\n _resumeNavigation: (() => void) | null = null;\n\n _orderByMode: 'orders' | 'moves' = 'orders';\n\n get _queryNames() {\n return [\n this.collection.queryName,\n ...this.collections.map((c) => c.queryName),\n ];\n }\n\n constructor(params: CollectionOptimisticActionsParams<T, F>) {\n this.collection = params.collection;\n this.collections = params.collections ?? [];\n\n this.state = new CollectionOptimisticActionsState<T>({\n source: this.collection,\n patchesCache: params.container.patchesCache,\n cacheNamespace: params.cacheNamespace,\n });\n\n this.resultSimulationDefault = new QueryResultSimulationDefault({\n collection: this.collection,\n });\n\n this.predicate = params.predicate ?? this.resultSimulationDefault.predicate;\n this.orderBy = params.orderBy ?? this.resultSimulationDefault.orderBy;\n this.createdAt = params.createdAt;\n this.noInvalidate = params.noInvalidate;\n\n this.executor = new CollectionOptimisticExecutor({\n batchWait: params.batchWait ?? 0,\n errorMonitor: this.collection.errorMonitor,\n showToast: this.collection.showToast,\n translate: this.collection.translate,\n lodash: this.collection.lodash,\n container: params.container,\n });\n\n this.processors.push(\n new CollectionOptimisticProcessor({\n ...params,\n optimistic: this,\n }),\n );\n\n if (params.collections != null) {\n params.collections.forEach((collection) => {\n this.processors.push(\n new CollectionOptimisticProcessor({\n ...params,\n collection,\n optimistic: this,\n }),\n );\n });\n }\n\n this.collection._optimisticActions = this;\n\n makeObservable(this, {\n pushPatchAndReprocess: action,\n replacePatchAndReprocess: action,\n rollback: action.bound,\n clear: action,\n move: action,\n pendingMovePatches: computed,\n });\n }\n\n rollback(patch: OptimisticPatch<T> | OptimisticPatch<T>[]) {\n const { events, state } = this;\n const patches = Array.isArray(patch) ? patch : [patch];\n\n for (const p of patches) {\n state.patches.remove(p);\n }\n\n events.emit('reprocess');\n }\n\n private _clearPatch = action((patch: OptimisticPatch<T>) => {\n const { state, collection, collections, noInvalidate } = this;\n if (noInvalidate) {\n return;\n }\n\n state.patches.remove(patch);\n collection.invalidate();\n collections.forEach((p) => p.refreshAllPages());\n });\n\n _clearPatchOnNextResultOrUnmount = (patch: OptimisticPatch<T>) => {\n const { events } = this;\n\n const clearPatch = () => {\n events.off('unmount', clearPatch);\n this._clearPatch(patch);\n };\n\n const onRefresh = ({ isStale }: { isStale: boolean }) => {\n events.off('refresh', onRefresh);\n\n // clear only when results are not going to come from cache\n if (isStale) {\n events.once('beforeResultUpdated', clearPatch);\n }\n };\n\n // Clear the patch on the next collection result update to eliminate inconsistencies between server state and local patches\n events.on('refresh', onRefresh);\n // since not clearing the patch immediately, clear it on unmount if was not cleared yet\n events.on('unmount', clearPatch);\n\n events.emit('updated');\n };\n\n get hasRunningSequence() {\n return Array.from(this.sequences.values()).some((s) => s.seq.state.running);\n }\n\n get pendingMovePatches() {\n return this.state.patches.filter((p) => p.move);\n }\n\n pushPatchAndReprocess(patch: OptimisticPatch<T> | OptimisticPatch<T>[]) {\n const { state, events } = this;\n const patches = Array.isArray(patch) ? patch : [patch];\n state.patches.push(...patches);\n events.emit('reprocess');\n }\n\n replacePatchAndReprocess(\n newPatch: OptimisticPatch<T>,\n oldPatch: OptimisticPatch<T>,\n ) {\n const { state, events } = this;\n\n const oldPatchIndex = state.patches.findIndex(\n (patch) => patch === oldPatch,\n );\n state.patches[oldPatchIndex] = newPatch;\n events.emit('reprocess');\n }\n\n /**\n * @deprecated Use createOne instead\n */\n addOne<R>(item: T, params: AddManyParams<T, R> = {}) {\n return this.addMany([item], params);\n }\n\n /**\n * @deprecated Use createMany instead\n */\n addMany<R>(items: T[], params: AddManyParams<T, R> = {}) {\n const { collection, executor } = this;\n const { itemKey, result } = collection;\n const { submit, serverEventuallyUpdated, onUndo, onTryAgain, onError } =\n params;\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches: this.state.patches,\n actionType: 'createMany',\n patchedItems: new Map(items.map((item) => [itemKey(item), item])),\n originalItems: new Map(),\n originalTotal: result.total,\n patch: (item, { patchedItems }) => patchedItems.get(itemKey(item)),\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n return executor.execute([optimisticPatch], {\n ...params,\n submit: action((actions) =>\n submit?.(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'createMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n ),\n ),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n createOne(item: T, params: CreateManyParams<T>) {\n this.createMany([item], params);\n }\n\n createMany(items: T[], params: CreateManyParams<T>) {\n const { collection, executor } = this;\n const { itemKey, result } = collection;\n const { submit, serverEventuallyUpdated, onUndo, onTryAgain, onError } =\n params;\n\n const optimisticPatchParams: OptimisticPatchParams<T> = {\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches: this.state.patches,\n actionType: 'createMany',\n patchedItems: new Map(items.map((item) => [itemKey(item), item])),\n originalItems: new Map(),\n originalTotal: result.total,\n patch: (item, { patchedItems }) => patchedItems.get(itemKey(item)),\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n };\n\n const optimisticPatch = new OptimisticPatch<T>(optimisticPatchParams);\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n return executor.execute([optimisticPatch], {\n ...params,\n submit: action(async (actions) => {\n const submitResult = await submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'createMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n );\n\n const updatedOptimisticPatch = new OptimisticPatch({\n ...optimisticPatchParams,\n patchedItems: new Map(\n submitResult.map((item) => [itemKey(item), item]),\n ),\n });\n\n this.replacePatchAndReprocess(updatedOptimisticPatch, optimisticPatch);\n return submitResult;\n }),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n async updateMany<R>(items: T[], params: UpdateManyParams<T, R>) {\n const { executor, collection } = this;\n const { itemKey, result } = collection;\n const {\n submit,\n serverEventuallyUpdated,\n keepPosition,\n onUndo,\n onTryAgain,\n onError,\n } = params;\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches: this.state.patches,\n actionType: 'updateMany',\n keepPosition,\n patchedItems: new Map(items.map((item) => [itemKey(item), item])),\n originalItems: new Map(\n items.map((item) => {\n const key = itemKey(item);\n const originalItem = result.get(itemKey(item))?.item ?? item;\n return [key, originalItem];\n }),\n ),\n originalTotal: result.total,\n patch: (item, { patchedItems }) => patchedItems.get(itemKey(item)),\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n return executor.execute([optimisticPatch], {\n ...params,\n submit: action((actions) =>\n submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'updateMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n ),\n ),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n enqueueMovePatch<R>(\n optimisticPatch: OptimisticPatch<T>,\n params: MoveParams<T, R>,\n ) {\n const { submit, onTryAgain } = params;\n const { collection, state, events } = this;\n const { query } = collection;\n const { patches } = state;\n\n const { filtersKeyHash } = query;\n\n const event = optimisticPatch.move;\n\n if (event == null) {\n return;\n }\n\n const _initSequence = () => {\n const { sequences } = this;\n const seq =\n sequences.get(filtersKeyHash) ??\n new CollectionOptimisticSequenceExecutor({\n showToast: collection.showToast,\n translate: collection.translate,\n errorMonitor: collection.errorMonitor,\n onRollback: (err) => {\n const pendingPatches = patches.filter(\n (p) => p.move?.filtersKeyHash === filtersKeyHash,\n );\n this.rollback(pendingPatches);\n\n if (\n err instanceof Error &&\n err.message === this.reorderModeCanceledMessage\n ) {\n executor.seq.clear();\n return;\n }\n\n events.emit('dragAndDropSequenceError', {\n patches: pendingPatches,\n });\n executor.seq.clear();\n return {\n message: collection.translate('cairo.dragAndDrop.error.toast'),\n biName: 'cairo-drag-and-drop-submit-error',\n action: {\n onClick: async () => {\n this.pushPatchAndReprocess(pendingPatches);\n for (const p of pendingPatches) {\n this.enqueueMovePatch(p, params);\n }\n events.emit('dragAndDropSequenceRetry', {\n patches: pendingPatches,\n });\n\n await onTryAgain?.();\n },\n },\n };\n },\n });\n\n if (!sequences.has(filtersKeyHash)) {\n sequences.set(filtersKeyHash, seq);\n }\n\n return seq;\n };\n\n const executor = _initSequence();\n\n executor.sequence({\n submit: () => submit?.(event),\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n });\n }\n\n async move<R>(event: ActionMove<T>, params: MoveParams<T, R>) {\n const { collection, state } = this;\n const { itemKey, result, query } = collection;\n const { patches } = state;\n\n const { filtersKeyHash } = query;\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches,\n actionType: 'move',\n patchedItems: new Map(),\n originalItems: new Map(),\n originalTotal: result.total,\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n move: {\n ...event,\n filtersKeyHash,\n },\n collectionSnapshot: params.collectionSnapshot,\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n this.enqueueMovePatch(optimisticPatch, params);\n }\n\n async updateOne<R>(item: T, params: UpdateManyParams<T, R>) {\n return this.updateMany([item], params);\n }\n\n /**\n * @deprecated `updateAll(fn)` API is not recommended as it's not possible to calculate \"optimistic total\", prefer updateAll(patchObject) API.\n */\n async updateAll<R>(\n patchOrFn: (item: T) => Partial<T>,\n params: UpdateAllParams<R>,\n ): Promise<void>;\n\n async updateAll<R>(\n patchOrFn: Partial<T>,\n params: UpdateAllParams<R>,\n ): Promise<void>;\n\n async updateAll<R>(\n patchOrFn: ((item: T) => Partial<T>) | Partial<T>,\n params: UpdateAllParams<R>,\n ) {\n const { executor, collection, predicate, createdAt } = this;\n const {\n submit,\n serverEventuallyUpdated,\n keepPosition,\n onUndo,\n onTryAgain,\n onError,\n } = params;\n const {\n itemKey,\n result: { originQuery, items, total },\n } = collection;\n\n const itemPredicate = predicate(originQuery);\n\n const updatedAt = new Date();\n\n const { patch, actionType } =\n typeof patchOrFn === 'function'\n ? { actionType: 'updateAll' as const, patch: patchOrFn }\n : {\n actionType: 'updateAllConst' as const,\n patch: (item: T) => ({ ...item, ...patchOrFn }),\n };\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n patches: this.state.patches,\n actionType,\n keepPosition,\n queryNames: this._queryNames,\n patchedItems: new Map(\n items.map((item) => [itemKey(item), { ...item, ...patch(item) }]),\n ),\n originalItems: new Map(items.map((item) => [itemKey(item), item])),\n originalTotal: total,\n selector: (item) =>\n itemPredicate(item) &&\n (createdAt == null || createdAt(item) <= updatedAt),\n patch,\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n executor.execute([optimisticPatch], {\n ...params,\n submit,\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n deleteMany<R>(items: T[], params: DeleteManyParams<T, R>) {\n const { executor, collection } = this;\n const {\n itemKey,\n result: { total },\n } = collection;\n const { submit, serverEventuallyUpdated, onUndo, onTryAgain, onError } =\n params;\n\n const patchedItems = new Map(items.map((item) => [itemKey(item), item]));\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n patches: this.state.patches,\n actionType: 'deleteMany',\n patchedItems,\n queryNames: this._queryNames,\n originalItems: patchedItems,\n originalTotal: total,\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n executor.execute([optimisticPatch], {\n ...params,\n submit: action((actions) =>\n submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'deleteMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n ),\n ),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n deleteOne<R>(item: T, params: DeleteManyParams<T, R>) {\n return this.deleteMany([item], params);\n }\n\n async deleteAll<R>(params: UpdateAllParams<R>) {\n const { executor, collection, predicate, createdAt } = this;\n const { submit, serverEventuallyUpdated, onUndo, onTryAgain, onError } =\n params;\n const {\n itemKey,\n result: { originQuery, items, total },\n } = collection;\n\n const itemPredicate = predicate(originQuery);\n\n const updatedAt = new Date();\n\n const patchedItems = new Map(items.map((item) => [itemKey(item), item]));\n\n const optimisticPatch = new OptimisticPatch({\n patches: this.state.patches,\n queryCache: collection.queryCache,\n actionType: 'deleteAll',\n patchedItems,\n queryNames: this._queryNames,\n originalItems: patchedItems,\n originalTotal: total,\n selector: (item) =>\n itemPredicate(item) &&\n (createdAt == null || createdAt(item) <= updatedAt),\n });\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n executor.execute([optimisticPatch], {\n ...params,\n submit,\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n initCollection(collection: CollectionState<T, F>) {\n this.collections.push(collection);\n const processor = new CollectionOptimisticProcessor({\n collection,\n optimistic: this,\n orderBy: this.orderBy,\n predicate: this.predicate,\n });\n\n const dispose = processor.init();\n\n return () => {\n const i = this.collections.indexOf(collection);\n if (i !== -1) {\n this.collections.splice(i, 1);\n }\n dispose();\n };\n }\n\n init() {\n const { collection, processors, events } = this;\n\n const emitRefresh = (params: { isStale: boolean }) => {\n events.emit('refresh', params);\n };\n const emitBeforeResultUpdated = () => events.emit('beforeResultUpdated');\n\n collection.emitter.on('refresh', emitRefresh);\n collection.emitter.on('beforeResultUpdated', emitBeforeResultUpdated);\n\n const disposers = [\n reaction(\n () => {\n const {\n result: { isEmpty, _pages },\n } = collection;\n const unprocessed = _pages.unprocessed.flatMap((page) => page);\n return isEmpty && unprocessed.length > 0;\n },\n (allFilteredOut) => {\n if (allFilteredOut) {\n collection.fetchNextPageIfNeeded();\n }\n },\n ),\n ...processors.map((p) => p.init()),\n ];\n\n return () => {\n collection.emitter.off('refresh', emitRefresh);\n collection.emitter.off('beforeResultUpdated', emitBeforeResultUpdated);\n disposers.forEach((disposer) => disposer());\n events.emit('unmount');\n };\n }\n\n clear() {\n const { patches } = this.state;\n const remaining = patches.clear();\n for (const patch of remaining) {\n if (!patch.isStale) {\n patches.push(patch);\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_mobx","require","_CollectionOptimisticActionsState","_CollectionOptimisticProcessor","_CollectionOptimisticPatch","_CollectionOptimisticExecutor","_events","_QueryResultSimulationDefault","_CollectionOptimisticSequenceExecutor","CollectionOptimisticActions","_queryNames","collection","queryName","collections","map","c","constructor","params","_defineProperty2","default","EventEmitter","Map","action","patch","state","noInvalidate","patches","remove","invalidate","forEach","p","refreshAllPages","events","clearPatch","off","_clearPatch","onRefresh","isStale","once","on","emit","CollectionOptimisticActionsState","source","patchesCache","container","cacheNamespace","resultSimulationDefault","QueryResultSimulationDefault","predicate","orderBy","createdAt","executor","CollectionOptimisticExecutor","batchWait","errorMonitor","showToast","translate","lodash","processors","push","CollectionOptimisticProcessor","optimistic","_optimisticActions","makeObservable","pushPatchAndReprocess","replacePatchAndReprocess","rollback","bound","clear","move","pendingMovePatches","computed","Array","isArray","hasRunningSequence","from","sequences","values","some","s","seq","running","filter","newPatch","oldPatch","oldPatchIndex","findIndex","addOne","item","addMany","items","itemKey","result","submit","serverEventuallyUpdated","onUndo","onTryAgain","onError","optimisticPatch","OptimisticPatch","queryCache","queryNames","actionType","patchedItems","originalItems","originalTotal","total","get","selector","has","_clearPatchOnNextResultOrUnmount","execute","actions","reduce","patchedItemsEntries","key","set","onRollback","eventuallyUpdated","onEventuallyUpdated","createOne","createMany","optimisticPatchParams","submitResult","updatedOptimisticPatch","updateMany","keepPosition","_result$get","originalItem","enqueueMovePatch","query","filtersKeyHash","event","_initSequence","CollectionOptimisticSequenceExecutor","err","pendingPatches","_p$move","Error","message","reorderModeCanceledMessage","biName","onClick","sequence","collectionSnapshot","updateOne","updateAll","patchOrFn","originQuery","itemPredicate","updatedAt","Date","deleteMany","deleteOne","deleteAll","initCollection","processor","dispose","init","i","indexOf","splice","emitRefresh","emitBeforeResultUpdated","emitter","disposers","reaction","isEmpty","_pages","unprocessed","flatMap","page","length","allFilteredOut","fetchNextPageIfNeeded","disposer","remaining","exports"],"sources":["../../../src/state/CollectionOptimisticActions.ts"],"sourcesContent":["import { ActionMove, ComputedQuery, FiltersMap, ToastConfig } from '../model';\nimport {\n action,\n computed,\n IObservableArray,\n makeObservable,\n reaction,\n} from 'mobx';\nimport { CollectionState } from './CollectionState';\nimport { Order } from './QueryResultSimulation';\nimport { CollectionOptimisticActionsState } from './CollectionOptimisticActionsState';\nimport { CollectionOptimisticProcessor } from './CollectionOptimisticProcessor';\nimport {\n OptimisticPatch,\n OptimisticPatchParams,\n} from './CollectionOptimisticPatch';\nimport {\n CollectionOptimisticExecutor,\n EventuallyUpdated,\n} from './CollectionOptimisticExecutor';\nimport { EventEmitter } from 'events';\nimport { TypedEmitter } from '../util';\nimport { QueryResultSimulationDefault } from './QueryResultSimulationDefault';\nimport { CollectionOptimisticSequenceExecutor } from './CollectionOptimisticSequenceExecutor';\nimport { ModalLayoutProps } from '../services';\n\nexport interface OptimisticActionBasis {\n showUndoToast?: boolean;\n showUndoSuccessToast?: boolean;\n onUndo?: () => void;\n errorToast?: (err: unknown) => ToastConfig | string;\n onError?: (err: unknown) => void;\n onTryAgain?: () => void | Promise<void>;\n successToast?: ToastConfig | string;\n serverEventuallyUpdated?: EventuallyUpdated;\n}\n\nexport interface UpdateAllParams<R> extends OptimisticActionBasis {\n submit: () => Promise<R>;\n keepPosition?: boolean;\n}\n\nexport interface UpdateManyParams<T, R> extends OptimisticActionBasis {\n submit: (items: T[]) => Promise<R>;\n keepPosition?: boolean;\n}\n\nexport interface MoveParams<T, R> extends OptimisticActionBasis {\n submit?: (params: ActionMove<T>) => Promise<R>;\n collectionSnapshot: { [key: string]: string | number | undefined };\n}\n\nexport interface AddManyParams<T, R> extends OptimisticActionBasis {\n submit?: (items: T[]) => Promise<R>;\n}\n\nexport interface CreateManyParams<T> extends OptimisticActionBasis {\n submit: (items: T[]) => Promise<T[]>;\n}\n\nexport interface DeleteManyParams<T, R> extends OptimisticActionBasis {\n submit: (items: T[]) => Promise<R>;\n}\n\nexport interface DeleteAllParams<R> extends OptimisticActionBasis {\n submit: () => Promise<R>;\n}\n\nexport interface CollectionOptimisticActionsBaseParams<\n T,\n F extends FiltersMap,\n> {\n readonly predicate?: (\n computedQuery: ComputedQuery<F>,\n ) => (item: T) => boolean;\n readonly orderBy?: (computedQuery: ComputedQuery<F>) => Order<T>[];\n readonly createdAt?: (item: T) => Date;\n readonly batchWait?: number;\n readonly noInvalidate?: boolean;\n readonly cacheNamespace?: string;\n}\n\nexport interface CollectionOptimisticActionsParams<T, F extends FiltersMap>\n extends CollectionOptimisticActionsBaseParams<T, F> {\n readonly collection: CollectionState<T, F>;\n readonly collections?: CollectionState<T, F>[];\n readonly container: {\n patchesCache: Map<string, IObservableArray<OptimisticPatch<T>>>;\n events: TypedEmitter<{\n navigation: () => ModalLayoutProps | null | undefined;\n }>;\n };\n}\n\nexport class CollectionOptimisticActions<T, F extends FiltersMap> {\n readonly collection;\n readonly collections;\n readonly predicate: (computedQuery: ComputedQuery<F>) => (item: T) => boolean;\n readonly orderBy: (computedQuery: ComputedQuery<F>) => Order<T>[];\n readonly createdAt?: (item: T) => Date;\n readonly events = new EventEmitter() as TypedEmitter<{\n reprocess: () => void;\n updated: () => void;\n refresh: (params: { isStale: boolean }) => void;\n unmount: () => void;\n beforeResultUpdated: () => void;\n dragAndDropSequenceError: (params: {\n patches: OptimisticPatch<T>[];\n }) => void;\n dragAndDropSequenceRetry: (params: {\n patches: OptimisticPatch<T>[];\n }) => void;\n }>;\n readonly noInvalidate;\n\n readonly state;\n\n readonly processors: CollectionOptimisticProcessor<T, F>[] = [];\n readonly executor: CollectionOptimisticExecutor<OptimisticPatch<T>>;\n readonly sequences = new Map<string, CollectionOptimisticSequenceExecutor>();\n\n readonly resultSimulationDefault;\n readonly reorderModeCanceledMessage = 'REORDER_MODE_CANCELED';\n\n _resumeNavigation: (() => void) | null = null;\n\n _orderByMode: 'orders' | 'moves' = 'orders';\n\n get _queryNames() {\n return [\n this.collection.queryName,\n ...this.collections.map((c) => c.queryName),\n ];\n }\n\n constructor(params: CollectionOptimisticActionsParams<T, F>) {\n this.collection = params.collection;\n this.collections = params.collections ?? [];\n\n this.state = new CollectionOptimisticActionsState<T>({\n source: this.collection,\n patchesCache: params.container.patchesCache,\n cacheNamespace: params.cacheNamespace,\n });\n\n this.resultSimulationDefault = new QueryResultSimulationDefault({\n collection: this.collection,\n });\n\n this.predicate = params.predicate ?? this.resultSimulationDefault.predicate;\n this.orderBy = params.orderBy ?? this.resultSimulationDefault.orderBy;\n this.createdAt = params.createdAt;\n this.noInvalidate = params.noInvalidate;\n\n this.executor = new CollectionOptimisticExecutor({\n batchWait: params.batchWait ?? 0,\n errorMonitor: this.collection.errorMonitor,\n showToast: this.collection.showToast,\n translate: this.collection.translate,\n lodash: this.collection.lodash,\n container: params.container,\n });\n\n this.processors.push(\n new CollectionOptimisticProcessor({\n ...params,\n optimistic: this,\n }),\n );\n\n if (params.collections != null) {\n params.collections.forEach((collection) => {\n this.processors.push(\n new CollectionOptimisticProcessor({\n ...params,\n collection,\n optimistic: this,\n }),\n );\n });\n }\n\n this.collection._optimisticActions = this;\n\n makeObservable(this, {\n pushPatchAndReprocess: action,\n replacePatchAndReprocess: action,\n rollback: action.bound,\n clear: action,\n move: action,\n pendingMovePatches: computed,\n });\n }\n\n rollback(patch: OptimisticPatch<T> | OptimisticPatch<T>[]) {\n const { events, state } = this;\n const patches = Array.isArray(patch) ? patch : [patch];\n\n for (const p of patches) {\n state.patches.remove(p);\n }\n\n events.emit('reprocess');\n }\n\n private _clearPatch = action((patch: OptimisticPatch<T>) => {\n const { state, collection, collections, noInvalidate } = this;\n if (noInvalidate) {\n return;\n }\n\n state.patches.remove(patch);\n collection.invalidate();\n collections.forEach((p) => p.refreshAllPages());\n });\n\n _clearPatchOnNextResultOrUnmount = (patch: OptimisticPatch<T>) => {\n const { events } = this;\n\n const clearPatch = () => {\n events.off('unmount', clearPatch);\n this._clearPatch(patch);\n };\n\n const onRefresh = ({ isStale }: { isStale: boolean }) => {\n events.off('refresh', onRefresh);\n\n // clear only when results are not going to come from cache\n if (isStale) {\n events.once('beforeResultUpdated', clearPatch);\n }\n };\n\n // Clear the patch on the next collection result update to eliminate inconsistencies between server state and local patches\n events.on('refresh', onRefresh);\n // since not clearing the patch immediately, clear it on unmount if was not cleared yet\n events.on('unmount', clearPatch);\n\n events.emit('updated');\n };\n\n get hasRunningSequence() {\n return Array.from(this.sequences.values()).some((s) => s.seq.state.running);\n }\n\n get pendingMovePatches() {\n return this.state.patches.filter((p) => p.move);\n }\n\n pushPatchAndReprocess(patch: OptimisticPatch<T> | OptimisticPatch<T>[]) {\n const { state, events } = this;\n const patches = Array.isArray(patch) ? patch : [patch];\n state.patches.push(...patches);\n events.emit('reprocess');\n }\n\n replacePatchAndReprocess(\n newPatch: OptimisticPatch<T>,\n oldPatch: OptimisticPatch<T>,\n ) {\n const { state, events } = this;\n\n const oldPatchIndex = state.patches.findIndex(\n (patch) => patch === oldPatch,\n );\n state.patches[oldPatchIndex] = newPatch;\n events.emit('reprocess');\n }\n\n /**\n * @deprecated Use createOne instead\n */\n addOne<R>(item: T, params: AddManyParams<T, R> = {}) {\n return this.addMany([item], params);\n }\n\n /**\n * @deprecated Use createMany instead\n */\n addMany<R>(items: T[], params: AddManyParams<T, R> = {}) {\n const { collection, executor } = this;\n const { itemKey, result } = collection;\n const { submit, serverEventuallyUpdated, onUndo, onTryAgain, onError } =\n params;\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches: this.state.patches,\n actionType: 'createMany',\n patchedItems: new Map(items.map((item) => [itemKey(item), item])),\n originalItems: new Map(),\n originalTotal: result.total,\n patch: (item, { patchedItems }) => patchedItems.get(itemKey(item)),\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n return executor.execute([optimisticPatch], {\n ...params,\n submit: action((actions) =>\n submit?.(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'createMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n ),\n ),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n createOne(item: T, params: CreateManyParams<T>) {\n this.createMany([item], params);\n }\n\n createMany(items: T[], params: CreateManyParams<T>) {\n const { collection, executor } = this;\n const { itemKey, result } = collection;\n const { submit, serverEventuallyUpdated, onUndo, onTryAgain, onError } =\n params;\n\n const optimisticPatchParams: OptimisticPatchParams<T> = {\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches: this.state.patches,\n actionType: 'createMany',\n patchedItems: new Map(items.map((item) => [itemKey(item), item])),\n originalItems: new Map(),\n originalTotal: result.total,\n patch: (item, { patchedItems }) => patchedItems.get(itemKey(item)),\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n };\n\n const optimisticPatch = new OptimisticPatch<T>(optimisticPatchParams);\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n return executor.execute([optimisticPatch], {\n ...params,\n submit: action(async (actions) => {\n const submitResult = await submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'createMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n );\n\n const updatedOptimisticPatch = new OptimisticPatch({\n ...optimisticPatchParams,\n patchedItems: new Map(\n submitResult.map((item) => [itemKey(item), item]),\n ),\n });\n\n this.replacePatchAndReprocess(updatedOptimisticPatch, optimisticPatch);\n this._clearPatchOnNextResultOrUnmount(updatedOptimisticPatch);\n return submitResult;\n }),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n async updateMany<R>(items: T[], params: UpdateManyParams<T, R>) {\n const { executor, collection } = this;\n const { itemKey, result } = collection;\n const {\n submit,\n serverEventuallyUpdated,\n keepPosition,\n onUndo,\n onTryAgain,\n onError,\n } = params;\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches: this.state.patches,\n actionType: 'updateMany',\n keepPosition,\n patchedItems: new Map(items.map((item) => [itemKey(item), item])),\n originalItems: new Map(\n items.map((item) => {\n const key = itemKey(item);\n const originalItem = result.get(itemKey(item))?.item ?? item;\n return [key, originalItem];\n }),\n ),\n originalTotal: result.total,\n patch: (item, { patchedItems }) => patchedItems.get(itemKey(item)),\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n return executor.execute([optimisticPatch], {\n ...params,\n submit: action((actions) =>\n submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'updateMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n ),\n ),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n enqueueMovePatch<R>(\n optimisticPatch: OptimisticPatch<T>,\n params: MoveParams<T, R>,\n ) {\n const { submit, onTryAgain } = params;\n const { collection, state, events } = this;\n const { query } = collection;\n const { patches } = state;\n\n const { filtersKeyHash } = query;\n\n const event = optimisticPatch.move;\n\n if (event == null) {\n return;\n }\n\n const _initSequence = () => {\n const { sequences } = this;\n const seq =\n sequences.get(filtersKeyHash) ??\n new CollectionOptimisticSequenceExecutor({\n showToast: collection.showToast,\n translate: collection.translate,\n errorMonitor: collection.errorMonitor,\n onRollback: (err) => {\n const pendingPatches = patches.filter(\n (p) => p.move?.filtersKeyHash === filtersKeyHash,\n );\n this.rollback(pendingPatches);\n\n if (\n err instanceof Error &&\n err.message === this.reorderModeCanceledMessage\n ) {\n executor.seq.clear();\n return;\n }\n\n events.emit('dragAndDropSequenceError', {\n patches: pendingPatches,\n });\n executor.seq.clear();\n return {\n message: collection.translate('cairo.dragAndDrop.error.toast'),\n biName: 'cairo-drag-and-drop-submit-error',\n action: {\n onClick: async () => {\n this.pushPatchAndReprocess(pendingPatches);\n for (const p of pendingPatches) {\n this.enqueueMovePatch(p, params);\n }\n events.emit('dragAndDropSequenceRetry', {\n patches: pendingPatches,\n });\n\n await onTryAgain?.();\n },\n },\n };\n },\n });\n\n if (!sequences.has(filtersKeyHash)) {\n sequences.set(filtersKeyHash, seq);\n }\n\n return seq;\n };\n\n const executor = _initSequence();\n\n executor.sequence({\n submit: () => submit?.(event),\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n });\n }\n\n async move<R>(event: ActionMove<T>, params: MoveParams<T, R>) {\n const { collection, state } = this;\n const { itemKey, result, query } = collection;\n const { patches } = state;\n\n const { filtersKeyHash } = query;\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n queryNames: this._queryNames,\n patches,\n actionType: 'move',\n patchedItems: new Map(),\n originalItems: new Map(),\n originalTotal: result.total,\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n move: {\n ...event,\n filtersKeyHash,\n },\n collectionSnapshot: params.collectionSnapshot,\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n this.enqueueMovePatch(optimisticPatch, params);\n }\n\n async updateOne<R>(item: T, params: UpdateManyParams<T, R>) {\n return this.updateMany([item], params);\n }\n\n /**\n * @deprecated `updateAll(fn)` API is not recommended as it's not possible to calculate \"optimistic total\", prefer updateAll(patchObject) API.\n */\n async updateAll<R>(\n patchOrFn: (item: T) => Partial<T>,\n params: UpdateAllParams<R>,\n ): Promise<void>;\n\n async updateAll<R>(\n patchOrFn: Partial<T>,\n params: UpdateAllParams<R>,\n ): Promise<void>;\n\n async updateAll<R>(\n patchOrFn: ((item: T) => Partial<T>) | Partial<T>,\n params: UpdateAllParams<R>,\n ) {\n const { executor, collection, predicate, createdAt } = this;\n const {\n submit,\n serverEventuallyUpdated,\n keepPosition,\n onUndo,\n onTryAgain,\n onError,\n } = params;\n const {\n itemKey,\n result: { originQuery, items, total },\n } = collection;\n\n const itemPredicate = predicate(originQuery);\n\n const updatedAt = new Date();\n\n const { patch, actionType } =\n typeof patchOrFn === 'function'\n ? { actionType: 'updateAll' as const, patch: patchOrFn }\n : {\n actionType: 'updateAllConst' as const,\n patch: (item: T) => ({ ...item, ...patchOrFn }),\n };\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n patches: this.state.patches,\n actionType,\n keepPosition,\n queryNames: this._queryNames,\n patchedItems: new Map(\n items.map((item) => [itemKey(item), { ...item, ...patch(item) }]),\n ),\n originalItems: new Map(items.map((item) => [itemKey(item), item])),\n originalTotal: total,\n selector: (item) =>\n itemPredicate(item) &&\n (createdAt == null || createdAt(item) <= updatedAt),\n patch,\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n executor.execute([optimisticPatch], {\n ...params,\n submit,\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n deleteMany<R>(items: T[], params: DeleteManyParams<T, R>) {\n const { executor, collection } = this;\n const {\n itemKey,\n result: { total },\n } = collection;\n const { submit, serverEventuallyUpdated, onUndo, onTryAgain, onError } =\n params;\n\n const patchedItems = new Map(items.map((item) => [itemKey(item), item]));\n\n const optimisticPatch = new OptimisticPatch({\n queryCache: collection.queryCache,\n patches: this.state.patches,\n actionType: 'deleteMany',\n patchedItems,\n queryNames: this._queryNames,\n originalItems: patchedItems,\n originalTotal: total,\n selector: (item, { patchedItems }) => patchedItems.has(itemKey(item)),\n });\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n executor.execute([optimisticPatch], {\n ...params,\n submit: action((actions) =>\n submit(\n Array.from(\n actions\n .filter(({ actionType }) => actionType === 'deleteMany')\n .reduce((map, { patchedItemsEntries }) => {\n for (const [key, item] of patchedItemsEntries) {\n map.set(key, item);\n }\n return map;\n }, new Map<string, T>())\n .values(),\n ),\n ),\n ),\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n deleteOne<R>(item: T, params: DeleteManyParams<T, R>) {\n return this.deleteMany([item], params);\n }\n\n async deleteAll<R>(params: UpdateAllParams<R>) {\n const { executor, collection, predicate, createdAt } = this;\n const { submit, serverEventuallyUpdated, onUndo, onTryAgain, onError } =\n params;\n const {\n itemKey,\n result: { originQuery, items, total },\n } = collection;\n\n const itemPredicate = predicate(originQuery);\n\n const updatedAt = new Date();\n\n const patchedItems = new Map(items.map((item) => [itemKey(item), item]));\n\n const optimisticPatch = new OptimisticPatch({\n patches: this.state.patches,\n queryCache: collection.queryCache,\n actionType: 'deleteAll',\n patchedItems,\n queryNames: this._queryNames,\n originalItems: patchedItems,\n originalTotal: total,\n selector: (item) =>\n itemPredicate(item) &&\n (createdAt == null || createdAt(item) <= updatedAt),\n });\n\n optimisticPatch.events.on(\n 'scheduleRemoval',\n this._clearPatchOnNextResultOrUnmount,\n );\n\n this.pushPatchAndReprocess(optimisticPatch);\n\n executor.execute([optimisticPatch], {\n ...params,\n submit,\n onRollback: () => {\n this.rollback(optimisticPatch);\n },\n eventuallyUpdated: serverEventuallyUpdated,\n onEventuallyUpdated: optimisticPatch.onEventuallyUpdated,\n onTryAgain: async () => {\n this.pushPatchAndReprocess(optimisticPatch);\n await onTryAgain?.();\n },\n onError,\n onUndo,\n });\n }\n\n initCollection(collection: CollectionState<T, F>) {\n this.collections.push(collection);\n const processor = new CollectionOptimisticProcessor({\n collection,\n optimistic: this,\n orderBy: this.orderBy,\n predicate: this.predicate,\n });\n\n const dispose = processor.init();\n\n return () => {\n const i = this.collections.indexOf(collection);\n if (i !== -1) {\n this.collections.splice(i, 1);\n }\n dispose();\n };\n }\n\n init() {\n const { collection, processors, events } = this;\n\n const emitRefresh = (params: { isStale: boolean }) => {\n events.emit('refresh', params);\n };\n const emitBeforeResultUpdated = () => events.emit('beforeResultUpdated');\n\n collection.emitter.on('refresh', emitRefresh);\n collection.emitter.on('beforeResultUpdated', emitBeforeResultUpdated);\n\n const disposers = [\n reaction(\n () => {\n const {\n result: { isEmpty, _pages },\n } = collection;\n const unprocessed = _pages.unprocessed.flatMap((page) => page);\n return isEmpty && unprocessed.length > 0;\n },\n (allFilteredOut) => {\n if (allFilteredOut) {\n collection.fetchNextPageIfNeeded();\n }\n },\n ),\n ...processors.map((p) => p.init()),\n ];\n\n return () => {\n collection.emitter.off('refresh', emitRefresh);\n collection.emitter.off('beforeResultUpdated', emitBeforeResultUpdated);\n disposers.forEach((disposer) => disposer());\n events.emit('unmount');\n };\n }\n\n clear() {\n const { patches } = this.state;\n const remaining = patches.clear();\n for (const patch of remaining) {\n if (!patch.isStale) {\n patches.push(patch);\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","require","_mobx","CustomFilterState","constructor","params","_defineProperty2","default","EventEmitter","name","persistent","defaultValue","_value","initialValue","_isEmpty","isEmpty","_size","size","value","_toQueryString","toQueryString","_fromQueryString","fromQueryString","_toArray","toArray","_remove","remove","_hasDiff","hasDiff","data","itemKey","itemName","decode","encode","entityName","matches","equals","makeObservable","observable","ref","computed","reset","action","setValue","changeValue","scheduleRefresh","clone","emitEvents","options","event","events","emit","refresh","JSON","stringify","applyFromQueryString","str","raw","parse","e","items","exports","customFilter"],"sources":["../../../../src/state/CustomFilterState/CustomFilterState.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { action, computed, makeObservable, observable } from 'mobx';\nimport {\n ChangeValueOptions,\n Filter,\n FilterEvents,\n FilterItem,\n FilterStateBaseParams,\n} from '../../model';\n\nexport interface CustomFilterStateParams<T> extends FilterStateBaseParams<T> {\n /**\n * The value to set the value to, when clearing the filter.\n */\n defaultValue: T;\n /**\n * Indicates whether nothing is selected.<br>\n * For example, when implementing a range filter, when both minimum and maximum inputs are empty\n */\n isEmpty: (value: T) => boolean;\n /**\n * Indicates the number of effective filters.<br>\n * For example, when implementing a range filter, 1 when only minimum/maximum are entered, 2 - when both entered.\n * @default A function that 0 when `isEmpty` returns true, and 1 otherwise.\n */\n size?: (value: T) => number;\n /**\n * Convert the filter value to a string, to be stored in a URL.\n */\n toQueryString?: (value: T) => string;\n /**\n * Convert the a string value to the filter value, to be retrieved from a URL.\n */\n fromQueryString?: (str: string) => T;\n\n /**\n * Convert a unknown object to a T.<br>\n * If the function returns null, the item will be skipped when we try to deserializate it from an array.\n * @param value\n */\n readonly decode: (value: unknown) => T;\n /**\n * Return a simplified form of an item for serialization.\n * @param value\n */\n readonly encode: (value: T) => unknown;\n\n /**\n * Flatten the correct selection to an array, to be shown in the table sub-toolbar in a tag list.\n * Usually this will return an array with a single item, but it gives control when we want to show more than a 1 tag in the tag list.\n */\n toArray: (value: T) => FilterItem<T>[];\n /**\n * Remove a tag from the tag list.\n * @default A function that returns `defaultValue`.\n */\n remove?: (item: FilterItem<T>[], value: T) => T;\n /**\n * Indicates whether current filter value is different than `data`\n */\n hasDiff?: (data: T) => boolean;\n /**\n * Indicates whether an item matches the current value of the filter\n */\n matches?: (item: FilterItem<T>, value: T) => boolean;\n\n equals?: (item1: FilterItem<T>, item2: FilterItem<T>) => boolean;\n}\n\nexport class CustomFilterState<T> implements Filter<T> {\n name: string;\n persistent;\n defaultValue: T;\n _value: T;\n private readonly _isEmpty: CustomFilterStateParams<T>['isEmpty'];\n private readonly _size: (value: T) => number;\n private readonly _toQueryString?: CustomFilterStateParams<T>['toQueryString'];\n private readonly _fromQueryString?: CustomFilterStateParams<T>['fromQueryString'];\n private readonly _toArray: CustomFilterStateParams<T>['toArray'];\n private readonly _remove;\n private readonly _hasDiff;\n readonly decode;\n readonly encode;\n\n readonly itemKey: (item: FilterItem<T>) => string;\n readonly itemName: (item: FilterItem<T>) => string;\n readonly entityName: (pluralization: number) => string;\n readonly matches: (item: FilterItem<T>, value: T) => boolean;\n readonly equals?: (item1: FilterItem<T>, item2: FilterItem<T>) => boolean;\n\n readonly events = new EventEmitter() as FilterEvents;\n\n constructor(params: Readonly<CustomFilterStateParams<T>>) {\n this.name = params.name ?? '';\n this.persistent = params.persistent;\n this.defaultValue = params.defaultValue;\n this._value = params.initialValue ?? params.defaultValue;\n this._isEmpty = params.isEmpty;\n this._size = params.size ?? ((value) => (this._isEmpty(value) ? 0 : 1));\n this._toQueryString = params.toQueryString;\n this._fromQueryString = params.fromQueryString;\n this._toArray = params.toArray;\n this._remove = params.remove ?? (() => this.defaultValue);\n this._hasDiff = params.hasDiff ?? ((data) => data !== this.value);\n this.itemKey = params.itemKey;\n this.itemName = params.itemName;\n this.decode = params.decode;\n this.encode = params.encode;\n this.entityName = params.entityName ?? (() => '');\n this.matches = params.matches ?? (() => false);\n this.equals = params.equals;\n\n makeObservable(this, {\n _value: observable.ref,\n persistent: observable.ref,\n isEmpty: computed,\n size: computed,\n value: computed,\n reset: action,\n setValue: action,\n changeValue: action,\n scheduleRefresh: action,\n clone: action,\n });\n }\n\n get value() {\n return this._value;\n }\n\n get toArray() {\n return this._toArray(this._value);\n }\n\n get isEmpty() {\n return this._isEmpty(this.value);\n }\n\n get size() {\n return this._size(this.value);\n }\n\n setValue(value: T, { emitEvents, ...options }: ChangeValueOptions = {}) {\n this._value = value;\n if (emitEvents) {\n for (const event of emitEvents) {\n this.events.emit(event, options);\n }\n }\n }\n\n changeValue(\n value: T,\n { emitEvents = [], ...options }: ChangeValueOptions = {},\n ) {\n this.setValue(value, { ...options, emitEvents: ['change', ...emitEvents] });\n }\n\n refresh(value: T, options?: ChangeValueOptions) {\n this.changeValue(value, { ...options, emitEvents: ['refresh'] });\n }\n\n scheduleRefresh(value: T) {\n this.changeValue(value, { emitEvents: ['scheduleRefresh'] });\n }\n\n get toQueryString() {\n const { _toQueryString, encode, value } = this;\n if (_toQueryString) {\n return _toQueryString(value);\n }\n\n return JSON.stringify(encode(value));\n }\n\n applyFromQueryString(str: string) {\n const { _fromQueryString, decode } = this;\n\n if (_fromQueryString) {\n this.setValue(_fromQueryString(str));\n } else {\n try {\n const raw = JSON.parse(str) as unknown;\n this.setValue(decode(raw));\n } catch (e) {}\n }\n }\n\n reset(options: ChangeValueOptions = {}) {\n this.setValue(this.defaultValue, options);\n }\n\n remove(items: FilterItem<T>[], options: ChangeValueOptions = {}) {\n this.setValue(this._remove(items, this.value), options);\n }\n\n hasDiff(data: T) {\n return this._hasDiff(data);\n }\n\n clone(params: Partial<CustomFilterStateParams<T>>) {\n const {\n entityName,\n itemName,\n itemKey,\n encode,\n decode,\n _isEmpty: isEmpty,\n _remove: remove,\n _size: size,\n _fromQueryString: fromQueryString,\n _toArray: toArray,\n _toQueryString: toQueryString,\n defaultValue,\n value: initialValue,\n matches,\n persistent,\n name,\n } = this;\n return new CustomFilterState<T>({\n entityName,\n itemName,\n itemKey,\n encode,\n decode,\n isEmpty,\n remove,\n size,\n fromQueryString,\n toArray,\n toQueryString,\n defaultValue,\n initialValue,\n matches,\n persistent,\n name,\n ...params,\n });\n }\n}\n\nexport const customFilter = <T>(params: CustomFilterStateParams<T>) =>\n new CustomFilterState(params);\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAoEO,MAAME,iBAAiB,CAAyB;EAuBrDC,WAAWA,CAACC,MAA4C,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;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,kBAFxC,IAAIC,oBAAY,CAAC,CAAC;IAGlC,IAAI,CAACC,IAAI,GAAGJ,MAAM,CAACI,IAAI,IAAI,EAAE;IAC7B,IAAI,CAACC,UAAU,GAAGL,MAAM,CAACK,UAAU;IACnC,IAAI,CAACC,YAAY,GAAGN,MAAM,CAACM,YAAY;IACvC,IAAI,CAACC,MAAM,GAAGP,MAAM,CAACQ,YAAY,IAAIR,MAAM,CAACM,YAAY;IACxD,IAAI,CAACG,QAAQ,GAAGT,MAAM,CAACU,OAAO;IAC9B,IAAI,CAACC,KAAK,GAAGX,MAAM,CAACY,IAAI,KAAMC,KAAK,IAAM,IAAI,CAACJ,QAAQ,CAACI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACvE,IAAI,CAACC,cAAc,GAAGd,MAAM,CAACe,aAAa;IAC1C,IAAI,CAACC,gBAAgB,GAAGhB,MAAM,CAACiB,eAAe;IAC9C,IAAI,CAACC,QAAQ,GAAGlB,MAAM,CAACmB,OAAO;IAC9B,IAAI,CAACC,OAAO,GAAGpB,MAAM,CAACqB,MAAM,KAAK,MAAM,IAAI,CAACf,YAAY,CAAC;IACzD,IAAI,CAACgB,QAAQ,GAAGtB,MAAM,CAACuB,OAAO,KAAMC,IAAI,IAAKA,IAAI,KAAK,IAAI,CAACX,KAAK,CAAC;IACjE,IAAI,CAACY,OAAO,GAAGzB,MAAM,CAACyB,OAAO;IAC7B,IAAI,CAACC,QAAQ,GAAG1B,MAAM,CAAC0B,QAAQ;IAC/B,IAAI,CAACC,MAAM,GAAG3B,MAAM,CAAC2B,MAAM;IAC3B,IAAI,CAACC,MAAM,GAAG5B,MAAM,CAAC4B,MAAM;IAC3B,IAAI,CAACC,UAAU,GAAG7B,MAAM,CAAC6B,UAAU,KAAK,MAAM,EAAE,CAAC;IACjD,IAAI,CAACC,OAAO,GAAG9B,MAAM,CAAC8B,OAAO,KAAK,MAAM,KAAK,CAAC;IAC9C,IAAI,CAACC,MAAM,GAAG/B,MAAM,CAAC+B,MAAM;IAE3B,IAAAC,oBAAc,EAAC,IAAI,EAAE;MACnBzB,MAAM,EAAE0B,gBAAU,CAACC,GAAG;MACtB7B,UAAU,EAAE4B,gBAAU,CAACC,GAAG;MAC1BxB,OAAO,EAAEyB,cAAQ;MACjBvB,IAAI,EAAEuB,cAAQ;MACdtB,KAAK,EAAEsB,cAAQ;MACfC,KAAK,EAAEC,YAAM;MACbC,QAAQ,EAAED,YAAM;MAChBE,WAAW,EAAEF,YAAM;MACnBG,eAAe,EAAEH,YAAM;MACvBI,KAAK,EAAEJ;IACT,CAAC,CAAC;EACJ;EAEA,IAAIxB,KAAKA,CAAA,EAAG;IACV,OAAO,IAAI,CAACN,MAAM;EACpB;EAEA,IAAIY,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACD,QAAQ,CAAC,IAAI,CAACX,MAAM,CAAC;EACnC;EAEA,IAAIG,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACD,QAAQ,CAAC,IAAI,CAACI,KAAK,CAAC;EAClC;EAEA,IAAID,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAACD,KAAK,CAAC,IAAI,CAACE,KAAK,CAAC;EAC/B;EAEAyB,QAAQA,CAACzB,KAAQ,EAAE;IAAE6B,UAAU;IAAE,GAAGC;EAA4B,CAAC,GAAG,CAAC,CAAC,EAAE;IACtE,IAAI,CAACpC,MAAM,GAAGM,KAAK;IACnB,IAAI6B,UAAU,EAAE;MACd,KAAK,MAAME,KAAK,IAAIF,UAAU,EAAE;QAC9B,IAAI,CAACG,MAAM,CAACC,IAAI,CAACF,KAAK,EAAED,OAAO,CAAC;MAClC;IACF;EACF;EAEAJ,WAAWA,CACT1B,KAAQ,EACR;IAAE6B,UAAU,GAAG,EAAE;IAAE,GAAGC;EAA4B,CAAC,GAAG,CAAC,CAAC,EACxD;IACA,IAAI,CAACL,QAAQ,CAACzB,KAAK,EAAE;MAAE,GAAG8B,OAAO;MAAED,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAGA,UAAU;IAAE,CAAC,CAAC;EAC7E;EAEAK,OAAOA,CAAClC,KAAQ,EAAE8B,OAA4B,EAAE;IAC9C,IAAI,CAACJ,WAAW,CAAC1B,KAAK,EAAE;MAAE,GAAG8B,OAAO;MAAED,UAAU,EAAE,CAAC,SAAS;IAAE,CAAC,CAAC;EAClE;EAEAF,eAAeA,CAAC3B,KAAQ,EAAE;IACxB,IAAI,CAAC0B,WAAW,CAAC1B,KAAK,EAAE;MAAE6B,UAAU,EAAE,CAAC,iBAAiB;IAAE,CAAC,CAAC;EAC9D;EAEA,IAAI3B,aAAaA,CAAA,EAAG;IAClB,MAAM;MAAED,cAAc;MAAEc,MAAM;MAAEf;IAAM,CAAC,GAAG,IAAI;IAC9C,IAAIC,cAAc,EAAE;MAClB,OAAOA,cAAc,CAACD,KAAK,CAAC;IAC9B;IAEA,OAAOmC,IAAI,CAACC,SAAS,CAACrB,MAAM,CAACf,KAAK,CAAC,CAAC;EACtC;EAEAqC,oBAAoBA,CAACC,GAAW,EAAE;IAChC,MAAM;MAAEnC,gBAAgB;MAAEW;IAAO,CAAC,GAAG,IAAI;IAEzC,IAAIX,gBAAgB,EAAE;MACpB,IAAI,CAACsB,QAAQ,CAACtB,gBAAgB,CAACmC,GAAG,CAAC,CAAC;IACtC,CAAC,MAAM;MACL,IAAI;QACF,MAAMC,GAAG,GAAGJ,IAAI,CAACK,KAAK,CAACF,GAAG,CAAY;QACtC,IAAI,CAACb,QAAQ,CAACX,MAAM,CAACyB,GAAG,CAAC,CAAC;MAC5B,CAAC,CAAC,OAAOE,CAAC,EAAE,CAAC;IACf;EACF;EAEAlB,KAAKA,CAACO,OAA2B,GAAG,CAAC,CAAC,EAAE;IACtC,IAAI,CAACL,QAAQ,CAAC,IAAI,CAAChC,YAAY,EAAEqC,OAAO,CAAC;EAC3C;EAEAtB,MAAMA,CAACkC,KAAsB,EAAEZ,OAA2B,GAAG,CAAC,CAAC,EAAE;IAC/D,IAAI,CAACL,QAAQ,CAAC,IAAI,CAAClB,OAAO,CAACmC,KAAK,EAAE,IAAI,CAAC1C,KAAK,CAAC,EAAE8B,OAAO,CAAC;EACzD;EAEApB,OAAOA,CAACC,IAAO,EAAE;IACf,OAAO,IAAI,CAACF,QAAQ,CAACE,IAAI,CAAC;EAC5B;EAEAiB,KAAKA,CAACzC,MAA2C,EAAE;IACjD,MAAM;MACJ6B,UAAU;MACVH,QAAQ;MACRD,OAAO;MACPG,MAAM;MACND,MAAM;MACNlB,QAAQ,EAAEC,OAAO;MACjBU,OAAO,EAAEC,MAAM;MACfV,KAAK,EAAEC,IAAI;MACXI,gBAAgB,EAAEC,eAAe;MACjCC,QAAQ,EAAEC,OAAO;MACjBL,cAAc,EAAEC,aAAa;MAC7BT,YAAY;MACZO,KAAK,EAAEL,YAAY;MACnBsB,OAAO;MACPzB,UAAU;MACVD;IACF,CAAC,GAAG,IAAI;IACR,OAAO,IAAIN,iBAAiB,CAAI;MAC9B+B,UAAU;MACVH,QAAQ;MACRD,OAAO;MACPG,MAAM;MACND,MAAM;MACNjB,OAAO;MACPW,MAAM;MACNT,IAAI;MACJK,eAAe;MACfE,OAAO;MACPJ,aAAa;MACbT,YAAY;MACZE,YAAY;MACZsB,OAAO;MACPzB,UAAU;MACVD,IAAI;MACJ,GAAGJ;IACL,CAAC,CAAC;EACJ;AACF;AAACwD,OAAA,CAAA1D,iBAAA,GAAAA,iBAAA;AAEM,MAAM2D,YAAY,GAAOzD,MAAkC,IAChE,IAAIF,iBAAiB,CAACE,MAAM,CAAC;AAACwD,OAAA,CAAAC,YAAA,GAAAA,YAAA"}
|
|
1
|
+
{"version":3,"names":["_events","require","_mobx","CustomFilterState","constructor","params","_defineProperty2","default","EventEmitter","name","persistent","defaultValue","_value","initialValue","_isEmpty","isEmpty","_size","size","value","_toQueryString","toQueryString","_fromQueryString","fromQueryString","_toArray","toArray","_remove","remove","_hasDiff","hasDiff","data","itemKey","itemName","decode","encode","entityName","matches","equals","makeObservable","observable","ref","computed","reset","action","setValue","changeValue","scheduleRefresh","clone","emitEvents","options","event","events","emit","refresh","JSON","stringify","applyFromQueryString","str","raw","parse","e","items","exports","customFilter"],"sources":["../../../../src/state/CustomFilterState/CustomFilterState.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { action, computed, makeObservable, observable } from 'mobx';\nimport {\n ChangeValueOptions,\n Filter,\n FilterEvents,\n FilterItem,\n FilterStateBaseParams,\n} from '../../model';\n\nexport interface CustomFilterStateParams<T> extends FilterStateBaseParams<T> {\n /**\n * The value to set the value to, when clearing the filter.\n * @external\n */\n defaultValue: T;\n /**\n * Indicates whether nothing is selected.<br>\n * For example, when implementing a range filter, when both minimum and maximum inputs are empty\n * @external\n */\n isEmpty: (value: T) => boolean;\n /**\n * Indicates the number of effective filters.<br>\n * For example, when implementing a range filter, 1 when only minimum/maximum are entered, 2 - when both entered.\n * @default A function that 0 when `isEmpty` returns true, and 1 otherwise.\n * @external\n */\n size?: (value: T) => number;\n /**\n * Convert the filter value to a string, to be stored in a URL.\n * @external\n */\n toQueryString?: (value: T) => string;\n /**\n * Convert the a string value to the filter value, to be retrieved from a URL.\n * @external\n */\n fromQueryString?: (str: string) => T;\n\n /**\n * Convert a unknown object to a T.<br>\n * If the function returns null, the item will be skipped when we try to deserializate it from an array.\n * @param value\n * @external\n */\n readonly decode: (value: unknown) => T;\n /**\n * Return a simplified form of an item for serialization.\n * @param value\n * @external\n */\n readonly encode: (value: T) => unknown;\n\n /**\n * Flatten the correct selection to an array, to be shown in the table sub-toolbar in a tag list.\n * Usually this will return an array with a single item, but it gives control when we want to show more than a 1 tag in the tag list.\n * @external\n */\n toArray: (value: T) => FilterItem<T>[];\n /**\n * Remove a tag from the tag list.\n * @default A function that returns `defaultValue`.\n * @external\n */\n remove?: (item: FilterItem<T>[], value: T) => T;\n /**\n * Indicates whether current filter value is different than `data`\n * @external\n */\n hasDiff?: (data: T) => boolean;\n /**\n * Indicates whether an item matches the current value of the filter\n * @external\n */\n matches?: (item: FilterItem<T>, value: T) => boolean;\n\n equals?: (item1: FilterItem<T>, item2: FilterItem<T>) => boolean;\n}\n\nexport class CustomFilterState<T> implements Filter<T> {\n name: string;\n persistent;\n defaultValue: T;\n _value: T;\n private readonly _isEmpty: CustomFilterStateParams<T>['isEmpty'];\n private readonly _size: (value: T) => number;\n private readonly _toQueryString?: CustomFilterStateParams<T>['toQueryString'];\n private readonly _fromQueryString?: CustomFilterStateParams<T>['fromQueryString'];\n private readonly _toArray: CustomFilterStateParams<T>['toArray'];\n private readonly _remove;\n private readonly _hasDiff;\n readonly decode;\n readonly encode;\n\n readonly itemKey: (item: FilterItem<T>) => string;\n readonly itemName: (item: FilterItem<T>) => string;\n readonly entityName: (pluralization: number) => string;\n readonly matches: (item: FilterItem<T>, value: T) => boolean;\n readonly equals?: (item1: FilterItem<T>, item2: FilterItem<T>) => boolean;\n\n readonly events = new EventEmitter() as FilterEvents;\n\n constructor(params: Readonly<CustomFilterStateParams<T>>) {\n this.name = params.name ?? '';\n this.persistent = params.persistent;\n this.defaultValue = params.defaultValue;\n this._value = params.initialValue ?? params.defaultValue;\n this._isEmpty = params.isEmpty;\n this._size = params.size ?? ((value) => (this._isEmpty(value) ? 0 : 1));\n this._toQueryString = params.toQueryString;\n this._fromQueryString = params.fromQueryString;\n this._toArray = params.toArray;\n this._remove = params.remove ?? (() => this.defaultValue);\n this._hasDiff = params.hasDiff ?? ((data) => data !== this.value);\n this.itemKey = params.itemKey;\n this.itemName = params.itemName;\n this.decode = params.decode;\n this.encode = params.encode;\n this.entityName = params.entityName ?? (() => '');\n this.matches = params.matches ?? (() => false);\n this.equals = params.equals;\n\n makeObservable(this, {\n _value: observable.ref,\n persistent: observable.ref,\n isEmpty: computed,\n size: computed,\n value: computed,\n reset: action,\n setValue: action,\n changeValue: action,\n scheduleRefresh: action,\n clone: action,\n });\n }\n\n get value() {\n return this._value;\n }\n\n get toArray() {\n return this._toArray(this._value);\n }\n\n get isEmpty() {\n return this._isEmpty(this.value);\n }\n\n get size() {\n return this._size(this.value);\n }\n\n setValue(value: T, { emitEvents, ...options }: ChangeValueOptions = {}) {\n this._value = value;\n if (emitEvents) {\n for (const event of emitEvents) {\n this.events.emit(event, options);\n }\n }\n }\n\n changeValue(\n value: T,\n { emitEvents = [], ...options }: ChangeValueOptions = {},\n ) {\n this.setValue(value, { ...options, emitEvents: ['change', ...emitEvents] });\n }\n\n refresh(value: T, options?: ChangeValueOptions) {\n this.changeValue(value, { ...options, emitEvents: ['refresh'] });\n }\n\n scheduleRefresh(value: T) {\n this.changeValue(value, { emitEvents: ['scheduleRefresh'] });\n }\n\n get toQueryString() {\n const { _toQueryString, encode, value } = this;\n if (_toQueryString) {\n return _toQueryString(value);\n }\n\n return JSON.stringify(encode(value));\n }\n\n applyFromQueryString(str: string) {\n const { _fromQueryString, decode } = this;\n\n if (_fromQueryString) {\n this.setValue(_fromQueryString(str));\n } else {\n try {\n const raw = JSON.parse(str) as unknown;\n this.setValue(decode(raw));\n } catch (e) {}\n }\n }\n\n reset(options: ChangeValueOptions = {}) {\n this.setValue(this.defaultValue, options);\n }\n\n remove(items: FilterItem<T>[], options: ChangeValueOptions = {}) {\n this.setValue(this._remove(items, this.value), options);\n }\n\n hasDiff(data: T) {\n return this._hasDiff(data);\n }\n\n clone(params: Partial<CustomFilterStateParams<T>>) {\n const {\n entityName,\n itemName,\n itemKey,\n encode,\n decode,\n _isEmpty: isEmpty,\n _remove: remove,\n _size: size,\n _fromQueryString: fromQueryString,\n _toArray: toArray,\n _toQueryString: toQueryString,\n defaultValue,\n value: initialValue,\n matches,\n persistent,\n name,\n } = this;\n return new CustomFilterState<T>({\n entityName,\n itemName,\n itemKey,\n encode,\n decode,\n isEmpty,\n remove,\n size,\n fromQueryString,\n toArray,\n toQueryString,\n defaultValue,\n initialValue,\n matches,\n persistent,\n name,\n ...params,\n });\n }\n}\n\nexport const customFilter = <T>(params: CustomFilterStateParams<T>) =>\n new CustomFilterState(params);\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AA+EO,MAAME,iBAAiB,CAAyB;EAuBrDC,WAAWA,CAACC,MAA4C,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;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,kBAFxC,IAAIC,oBAAY,CAAC,CAAC;IAGlC,IAAI,CAACC,IAAI,GAAGJ,MAAM,CAACI,IAAI,IAAI,EAAE;IAC7B,IAAI,CAACC,UAAU,GAAGL,MAAM,CAACK,UAAU;IACnC,IAAI,CAACC,YAAY,GAAGN,MAAM,CAACM,YAAY;IACvC,IAAI,CAACC,MAAM,GAAGP,MAAM,CAACQ,YAAY,IAAIR,MAAM,CAACM,YAAY;IACxD,IAAI,CAACG,QAAQ,GAAGT,MAAM,CAACU,OAAO;IAC9B,IAAI,CAACC,KAAK,GAAGX,MAAM,CAACY,IAAI,KAAMC,KAAK,IAAM,IAAI,CAACJ,QAAQ,CAACI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACvE,IAAI,CAACC,cAAc,GAAGd,MAAM,CAACe,aAAa;IAC1C,IAAI,CAACC,gBAAgB,GAAGhB,MAAM,CAACiB,eAAe;IAC9C,IAAI,CAACC,QAAQ,GAAGlB,MAAM,CAACmB,OAAO;IAC9B,IAAI,CAACC,OAAO,GAAGpB,MAAM,CAACqB,MAAM,KAAK,MAAM,IAAI,CAACf,YAAY,CAAC;IACzD,IAAI,CAACgB,QAAQ,GAAGtB,MAAM,CAACuB,OAAO,KAAMC,IAAI,IAAKA,IAAI,KAAK,IAAI,CAACX,KAAK,CAAC;IACjE,IAAI,CAACY,OAAO,GAAGzB,MAAM,CAACyB,OAAO;IAC7B,IAAI,CAACC,QAAQ,GAAG1B,MAAM,CAAC0B,QAAQ;IAC/B,IAAI,CAACC,MAAM,GAAG3B,MAAM,CAAC2B,MAAM;IAC3B,IAAI,CAACC,MAAM,GAAG5B,MAAM,CAAC4B,MAAM;IAC3B,IAAI,CAACC,UAAU,GAAG7B,MAAM,CAAC6B,UAAU,KAAK,MAAM,EAAE,CAAC;IACjD,IAAI,CAACC,OAAO,GAAG9B,MAAM,CAAC8B,OAAO,KAAK,MAAM,KAAK,CAAC;IAC9C,IAAI,CAACC,MAAM,GAAG/B,MAAM,CAAC+B,MAAM;IAE3B,IAAAC,oBAAc,EAAC,IAAI,EAAE;MACnBzB,MAAM,EAAE0B,gBAAU,CAACC,GAAG;MACtB7B,UAAU,EAAE4B,gBAAU,CAACC,GAAG;MAC1BxB,OAAO,EAAEyB,cAAQ;MACjBvB,IAAI,EAAEuB,cAAQ;MACdtB,KAAK,EAAEsB,cAAQ;MACfC,KAAK,EAAEC,YAAM;MACbC,QAAQ,EAAED,YAAM;MAChBE,WAAW,EAAEF,YAAM;MACnBG,eAAe,EAAEH,YAAM;MACvBI,KAAK,EAAEJ;IACT,CAAC,CAAC;EACJ;EAEA,IAAIxB,KAAKA,CAAA,EAAG;IACV,OAAO,IAAI,CAACN,MAAM;EACpB;EAEA,IAAIY,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACD,QAAQ,CAAC,IAAI,CAACX,MAAM,CAAC;EACnC;EAEA,IAAIG,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACD,QAAQ,CAAC,IAAI,CAACI,KAAK,CAAC;EAClC;EAEA,IAAID,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAACD,KAAK,CAAC,IAAI,CAACE,KAAK,CAAC;EAC/B;EAEAyB,QAAQA,CAACzB,KAAQ,EAAE;IAAE6B,UAAU;IAAE,GAAGC;EAA4B,CAAC,GAAG,CAAC,CAAC,EAAE;IACtE,IAAI,CAACpC,MAAM,GAAGM,KAAK;IACnB,IAAI6B,UAAU,EAAE;MACd,KAAK,MAAME,KAAK,IAAIF,UAAU,EAAE;QAC9B,IAAI,CAACG,MAAM,CAACC,IAAI,CAACF,KAAK,EAAED,OAAO,CAAC;MAClC;IACF;EACF;EAEAJ,WAAWA,CACT1B,KAAQ,EACR;IAAE6B,UAAU,GAAG,EAAE;IAAE,GAAGC;EAA4B,CAAC,GAAG,CAAC,CAAC,EACxD;IACA,IAAI,CAACL,QAAQ,CAACzB,KAAK,EAAE;MAAE,GAAG8B,OAAO;MAAED,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAGA,UAAU;IAAE,CAAC,CAAC;EAC7E;EAEAK,OAAOA,CAAClC,KAAQ,EAAE8B,OAA4B,EAAE;IAC9C,IAAI,CAACJ,WAAW,CAAC1B,KAAK,EAAE;MAAE,GAAG8B,OAAO;MAAED,UAAU,EAAE,CAAC,SAAS;IAAE,CAAC,CAAC;EAClE;EAEAF,eAAeA,CAAC3B,KAAQ,EAAE;IACxB,IAAI,CAAC0B,WAAW,CAAC1B,KAAK,EAAE;MAAE6B,UAAU,EAAE,CAAC,iBAAiB;IAAE,CAAC,CAAC;EAC9D;EAEA,IAAI3B,aAAaA,CAAA,EAAG;IAClB,MAAM;MAAED,cAAc;MAAEc,MAAM;MAAEf;IAAM,CAAC,GAAG,IAAI;IAC9C,IAAIC,cAAc,EAAE;MAClB,OAAOA,cAAc,CAACD,KAAK,CAAC;IAC9B;IAEA,OAAOmC,IAAI,CAACC,SAAS,CAACrB,MAAM,CAACf,KAAK,CAAC,CAAC;EACtC;EAEAqC,oBAAoBA,CAACC,GAAW,EAAE;IAChC,MAAM;MAAEnC,gBAAgB;MAAEW;IAAO,CAAC,GAAG,IAAI;IAEzC,IAAIX,gBAAgB,EAAE;MACpB,IAAI,CAACsB,QAAQ,CAACtB,gBAAgB,CAACmC,GAAG,CAAC,CAAC;IACtC,CAAC,MAAM;MACL,IAAI;QACF,MAAMC,GAAG,GAAGJ,IAAI,CAACK,KAAK,CAACF,GAAG,CAAY;QACtC,IAAI,CAACb,QAAQ,CAACX,MAAM,CAACyB,GAAG,CAAC,CAAC;MAC5B,CAAC,CAAC,OAAOE,CAAC,EAAE,CAAC;IACf;EACF;EAEAlB,KAAKA,CAACO,OAA2B,GAAG,CAAC,CAAC,EAAE;IACtC,IAAI,CAACL,QAAQ,CAAC,IAAI,CAAChC,YAAY,EAAEqC,OAAO,CAAC;EAC3C;EAEAtB,MAAMA,CAACkC,KAAsB,EAAEZ,OAA2B,GAAG,CAAC,CAAC,EAAE;IAC/D,IAAI,CAACL,QAAQ,CAAC,IAAI,CAAClB,OAAO,CAACmC,KAAK,EAAE,IAAI,CAAC1C,KAAK,CAAC,EAAE8B,OAAO,CAAC;EACzD;EAEApB,OAAOA,CAACC,IAAO,EAAE;IACf,OAAO,IAAI,CAACF,QAAQ,CAACE,IAAI,CAAC;EAC5B;EAEAiB,KAAKA,CAACzC,MAA2C,EAAE;IACjD,MAAM;MACJ6B,UAAU;MACVH,QAAQ;MACRD,OAAO;MACPG,MAAM;MACND,MAAM;MACNlB,QAAQ,EAAEC,OAAO;MACjBU,OAAO,EAAEC,MAAM;MACfV,KAAK,EAAEC,IAAI;MACXI,gBAAgB,EAAEC,eAAe;MACjCC,QAAQ,EAAEC,OAAO;MACjBL,cAAc,EAAEC,aAAa;MAC7BT,YAAY;MACZO,KAAK,EAAEL,YAAY;MACnBsB,OAAO;MACPzB,UAAU;MACVD;IACF,CAAC,GAAG,IAAI;IACR,OAAO,IAAIN,iBAAiB,CAAI;MAC9B+B,UAAU;MACVH,QAAQ;MACRD,OAAO;MACPG,MAAM;MACND,MAAM;MACNjB,OAAO;MACPW,MAAM;MACNT,IAAI;MACJK,eAAe;MACfE,OAAO;MACPJ,aAAa;MACbT,YAAY;MACZE,YAAY;MACZsB,OAAO;MACPzB,UAAU;MACVD,IAAI;MACJ,GAAGJ;IACL,CAAC,CAAC;EACJ;AACF;AAACwD,OAAA,CAAA1D,iBAAA,GAAAA,iBAAA;AAEM,MAAM2D,YAAY,GAAOzD,MAAkC,IAChE,IAAIF,iBAAiB,CAACE,MAAM,CAAC;AAACwD,OAAA,CAAAC,YAAA,GAAAA,YAAA"}
|
|
@@ -24,7 +24,6 @@ class QueryPendingState {
|
|
|
24
24
|
(0, _defineProperty2.default)(this, "filters", void 0);
|
|
25
25
|
(0, _defineProperty2.default)(this, "container", void 0);
|
|
26
26
|
(0, _defineProperty2.default)(this, "toolbar", void 0);
|
|
27
|
-
(0, _defineProperty2.default)(this, "_applyFiltersExperimentEnabled", void 0);
|
|
28
27
|
(0, _defineProperty2.default)(this, "discardChangesModal", new _ConditionalModalState.ConditionalModalState());
|
|
29
28
|
(0, _defineProperty2.default)(this, "bi", void 0);
|
|
30
29
|
(0, _defineProperty2.default)(this, "shouldTrackFilter", () => {
|
|
@@ -36,7 +35,6 @@ class QueryPendingState {
|
|
|
36
35
|
});
|
|
37
36
|
this.container = params.container;
|
|
38
37
|
this.toolbar = params.toolbar;
|
|
39
|
-
this._applyFiltersExperimentEnabled = params.applyFiltersExperimentEnabled;
|
|
40
38
|
const allFilters = this.multi.collections.reduce((filters, {
|
|
41
39
|
query
|
|
42
40
|
}) => {
|
|
@@ -55,7 +53,7 @@ class QueryPendingState {
|
|
|
55
53
|
apply: _mobx.action,
|
|
56
54
|
revert: _mobx.action,
|
|
57
55
|
clearSelected: _mobx.action,
|
|
58
|
-
|
|
56
|
+
getApplicableFilter: _mobx.action,
|
|
59
57
|
hasChanged: _mobx.computed,
|
|
60
58
|
trackedFilters: _mobx.computed,
|
|
61
59
|
trackedFiltersCount: _mobx.computed
|
|
@@ -69,11 +67,8 @@ class QueryPendingState {
|
|
|
69
67
|
pending
|
|
70
68
|
}) => size + pending.size, 0);
|
|
71
69
|
}
|
|
72
|
-
get applyFiltersExperimentEnabled() {
|
|
73
|
-
return this._applyFiltersExperimentEnabled(this.container);
|
|
74
|
-
}
|
|
75
70
|
async onCloseFiltersPanelClick() {
|
|
76
|
-
if (!this.
|
|
71
|
+
if (!this.hasChanged) {
|
|
77
72
|
return;
|
|
78
73
|
}
|
|
79
74
|
this.discardChangesModal.open(null);
|
|
@@ -88,14 +83,11 @@ class QueryPendingState {
|
|
|
88
83
|
}
|
|
89
84
|
return result;
|
|
90
85
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}) => origin === filter)) == null ? void 0 : _this$trackedFilters$.pending) ?? filter;
|
|
97
|
-
}
|
|
98
|
-
return filter;
|
|
86
|
+
getApplicableFilter(filter) {
|
|
87
|
+
var _this$trackedFilters$;
|
|
88
|
+
return ((_this$trackedFilters$ = this.trackedFilters.find(({
|
|
89
|
+
origin
|
|
90
|
+
}) => origin === filter)) == null ? void 0 : _this$trackedFilters$.pending) ?? filter;
|
|
99
91
|
}
|
|
100
92
|
revert() {
|
|
101
93
|
this.trackedFilters.forEach(({
|
|
@@ -132,9 +124,6 @@ class QueryPendingState {
|
|
|
132
124
|
});
|
|
133
125
|
}
|
|
134
126
|
init() {
|
|
135
|
-
if (!this.applyFiltersExperimentEnabled) {
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
127
|
const disposers = [this.bi.init(), ...this.filters.map(({
|
|
139
128
|
pending,
|
|
140
129
|
origin
|