@wix/bex-core 1.411.0 → 1.412.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_it.json +7 -7
- package/dist/cjs/assets/locale/messages_no.json +3 -3
- package/dist/cjs/model/filter.js.map +1 -1
- package/dist/cjs/state/ArrayFilterState/ArrayFilterState.js +2 -0
- package/dist/cjs/state/ArrayFilterState/ArrayFilterState.js.map +1 -1
- package/dist/cjs/state/CustomFilterState/CustomFilterState.js +2 -0
- package/dist/cjs/state/CustomFilterState/CustomFilterState.js.map +1 -1
- package/dist/cjs/state/RangeFilterState/RangeFilterState.js +51 -14
- package/dist/cjs/state/RangeFilterState/RangeFilterState.js.map +1 -1
- package/dist/cjs/state/RangeFilterState/dateRangeUtils.js +130 -0
- package/dist/cjs/state/RangeFilterState/dateRangeUtils.js.map +1 -0
- package/dist/cjs/state/RangeFilterState/index.js +6 -0
- package/dist/cjs/state/RangeFilterState/index.js.map +1 -1
- package/dist/cjs/state/StringFilterState/StringFilterState.js +2 -0
- package/dist/cjs/state/StringFilterState/StringFilterState.js.map +1 -1
- package/dist/esm/assets/locale/messages_it.json +7 -7
- package/dist/esm/assets/locale/messages_no.json +3 -3
- package/dist/esm/state/ArrayFilterState/ArrayFilterState.js +1 -0
- package/dist/esm/state/ArrayFilterState/ArrayFilterState.js.map +1 -1
- package/dist/esm/state/CustomFilterState/CustomFilterState.js +1 -0
- package/dist/esm/state/CustomFilterState/CustomFilterState.js.map +1 -1
- package/dist/esm/state/RangeFilterState/RangeFilterState.js +50 -22
- package/dist/esm/state/RangeFilterState/RangeFilterState.js.map +1 -1
- package/dist/esm/state/RangeFilterState/dateRangeUtils.js +107 -0
- package/dist/esm/state/RangeFilterState/dateRangeUtils.js.map +1 -0
- package/dist/esm/state/RangeFilterState/index.js +1 -0
- package/dist/esm/state/RangeFilterState/index.js.map +1 -1
- package/dist/esm/state/StringFilterState/StringFilterState.js +1 -0
- package/dist/esm/state/StringFilterState/StringFilterState.js.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 +2 -0
- package/dist/types/state/ArrayFilterState/ArrayFilterState.d.ts.map +1 -1
- package/dist/types/state/CustomFilterState/CustomFilterState.d.ts +2 -0
- package/dist/types/state/CustomFilterState/CustomFilterState.d.ts.map +1 -1
- package/dist/types/state/RangeFilterState/RangeFilterState.d.ts +16 -1
- package/dist/types/state/RangeFilterState/RangeFilterState.d.ts.map +1 -1
- package/dist/types/state/RangeFilterState/dateRangeUtils.d.ts +31 -0
- package/dist/types/state/RangeFilterState/dateRangeUtils.d.ts.map +1 -0
- package/dist/types/state/RangeFilterState/index.d.ts +1 -0
- package/dist/types/state/RangeFilterState/index.d.ts.map +1 -1
- package/dist/types/state/StringFilterState/StringFilterState.d.ts +2 -0
- package/dist/types/state/StringFilterState/StringFilterState.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -79,9 +79,9 @@
|
|
|
79
79
|
"cairo.entityPage.widgetError.TPAconnectionFail.CTA": "Ricarica sezione",
|
|
80
80
|
"cairo.dragAndDrop.error.toast": "A causa di un problema tecnico, le modifiche che hai apportato all'ordine degli elementi non sono state salvate.",
|
|
81
81
|
"cairo.table.custom-columns.subtitle": "Scegli quali colonne mostrare.",
|
|
82
|
-
"cairo.customFields.addCustomField.modal.advancedSettings.read": "
|
|
82
|
+
"cairo.customFields.addCustomField.modal.advancedSettings.read": "Lettura",
|
|
83
83
|
"cairo.customFields.fieldType.dateAndTime.Name.placeholder": "es.: data e ora",
|
|
84
|
-
"cairo.customFields.addCustomField.modal.PII": "Questo campo non può
|
|
84
|
+
"cairo.customFields.addCustomField.modal.PII": "Questo campo non può essere usato per memorizzare informazioni personali (PII).",
|
|
85
85
|
"cairo.dragAndDrop.reorderMode.toolbar.title.learnMore": "Learn more",
|
|
86
86
|
"cairo.dragAndDrop.reorderMode.toolbar.title": "Changes in order will be reflected in your live site.",
|
|
87
87
|
"cairo.customFields.addCustomField.modal.cancel.CTA": "Annulla",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"cairo.manageView.Delete.CTA.error.toast": "Si è verificato un problema tecnico e la visualizzazione non è stata eliminata.",
|
|
102
102
|
"cairo.dragAndDrop.reorder-cancelled.sr": "Spostamento annullato.",
|
|
103
103
|
"cairo.appliedFilters.discardChanges.description": "I filtri che hai selezionato non saranno applicati a questa vista.",
|
|
104
|
-
"cairo.customFields.addCustomField.modal.advancedSettings.write": "
|
|
104
|
+
"cairo.customFields.addCustomField.modal.advancedSettings.write": "Scrittura",
|
|
105
105
|
"cairo.pickerModal.back.button": "Indietro",
|
|
106
106
|
"cairo.manageView.Delete.disabled.predefinedView.tooltip": "Questa visualizzazione non può essere eliminata.",
|
|
107
107
|
"cairo.tags.manageTags.modal.toast.delete.success": "Tag eliminato.",
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
"cairo.moreActions": "Altre azioni",
|
|
124
124
|
"cairo.viewDropdown.allOrders.defaultViews": "Tutti gli ordini",
|
|
125
125
|
"cairo.viewsDropdown.nothingMatches.text": "Non ci sono visualizzazioni. Prova con una nuova ricerca.",
|
|
126
|
-
"cairo.customFields.addCustomField.modal.advancedSettings.readPermissions.tooltip": "Imposta le autorizzazioni per questo campo. I collaboratori del sito hanno le autorizzazioni di lettura e scrittura in
|
|
126
|
+
"cairo.customFields.addCustomField.modal.advancedSettings.readPermissions.tooltip": "Imposta le autorizzazioni per questo campo. I collaboratori del sito hanno le autorizzazioni di lettura e scrittura in modo predefinito.",
|
|
127
127
|
"cairo.manageView.CTA": "Gestisci vista",
|
|
128
128
|
"cairo.filtersPanel.header": "Filtra",
|
|
129
129
|
"cairo.emptyState.filters.nothingFound.clearFilters.CTA": "Rimuovi filtri",
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
"cairo.manageView.setAsDefault.reset.success.toast": "La vista predefinita è stata ripristinata.",
|
|
151
151
|
"Cairo.tags.manageTags.modal.toast.undo.CTA": "Annulla",
|
|
152
152
|
"cairo.customFields.addCustomField.CTA": "Aggiungi campo",
|
|
153
|
-
"cairo.customFields.addCustomField.modal.fieldType": "Tipo campo",
|
|
153
|
+
"cairo.customFields.addCustomField.modal.fieldType": "Tipo di campo",
|
|
154
154
|
"cairo.filtersPanel.done.button": "Fatto",
|
|
155
155
|
"cairo.emptyState.subtitle.nothingAvailable": "Nessun risultato.",
|
|
156
156
|
"cairo.tags.tagsWidget.create.CTA": "Crea tag",
|
|
@@ -220,7 +220,7 @@
|
|
|
220
220
|
"cairo.page.loadError.failedState.title": "Impossibile caricare questa pagina",
|
|
221
221
|
"cairo.bulkSelected.selectUpTo": "Seleziona fino a {max} elementi.",
|
|
222
222
|
"cairo.manageView.saveChanges.CTA": "Salva modifiche",
|
|
223
|
-
"cairo.customFields.archive.CTA": "
|
|
223
|
+
"cairo.customFields.archive.CTA": "Archivia",
|
|
224
224
|
"cairo.tags.tagsWidget.noPermissions.tooltip": "You need “Permission Type” permission to\nmanage tags. Contact \"Owner\" for access.",
|
|
225
225
|
"cairo.customFields.addCustomField.modal.advancedSettings.readPermissions": "Autorizzazioni",
|
|
226
226
|
"cairo.tags.manageTags.modal.deleteModal.body": "<text>Il tag <name>\"{name}</name> \" potrebbe essere in uso. L'eliminazione di questo tag lo rimuoverà anche da tutti gli elementi a cui è assegnato.</text>",
|
|
@@ -360,7 +360,7 @@
|
|
|
360
360
|
"cairo.offline": "Al momento sei offline.",
|
|
361
361
|
"cairo.export.leaveSiteTitle": "Vuoi uscire dal sito?",
|
|
362
362
|
"cairo.customFields.editCustomField.save.CTA": "Salva",
|
|
363
|
-
"cairo.customFields.manageFields.title": "Gestisci campi personalizzati",
|
|
363
|
+
"cairo.customFields.manageFields.title": "Gestisci i campi personalizzati",
|
|
364
364
|
"cairo.technical.error.title": "Impossibile caricare gli articoli",
|
|
365
365
|
"cairo.customFields.fieldType.shortText.placeholder": "es.: Roma",
|
|
366
366
|
"cairo.tags.manageTags.modal.emptyState.body": "I tag ti aiutano a filtrare e a organizzare i tuoi elementi.",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"cairo.appliedFilters.applyAndClose.CTA": "Bruk filtre og lukk",
|
|
40
40
|
"cairo.table.saveViewModal.nameLabel": "Navn",
|
|
41
41
|
"cairo.manageView.setAsDefault.error.toast": "På grunn av et teknisk problem ble ikke «{viewName}» angitt som standardvisning.",
|
|
42
|
-
"cairo.customFields.editCustomField.modal.title": "Rediger
|
|
42
|
+
"cairo.customFields.editCustomField.modal.title": "Rediger egendefinert felt",
|
|
43
43
|
"cairo.deleteSuccess": "«{itemName}» ble slettet.",
|
|
44
44
|
"cairo.export.databaseIssueMessage": "Det oppsto et midlertidig problem hos oss, og eksporten kunne ikke lagres. Kontakt brukerstøtte for å få hjelp.",
|
|
45
45
|
"cairo.saveView.Success.toast": "«{viewName}« ble lagret.",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"cairo.deleteModal.title": "Sikker på at du vil slette dette?",
|
|
90
90
|
"cairo.customFields.booleanValue.true": "Ja",
|
|
91
91
|
"cairo.tags.manageTags.modal.list.action.delete.CTA": "Slett",
|
|
92
|
-
"cairo.customFields.addCustomField.modal.advancedSettings.key.tooltip": "Denne nøkkelen brukes i koden din.
|
|
92
|
+
"cairo.customFields.addCustomField.modal.advancedSettings.key.tooltip": "Denne nøkkelen brukes i koden din. Den kan ikke endres senere.",
|
|
93
93
|
"cairo.filtersPanel.dateRange.title": "Datointervall",
|
|
94
94
|
"section.header.folders": "Mapper",
|
|
95
95
|
"cairo.tags.manageTags.modal.list.input.save.CTA": "Lagre",
|
|
@@ -172,7 +172,7 @@
|
|
|
172
172
|
"cairo.customFields.emptyStatePassive.title": "No fields yet",
|
|
173
173
|
"cairo.customFields.entityPage.title": "Egendefinerte felt",
|
|
174
174
|
"cairo.dragAndDrop.reorderMode.toolbar.save.cta": "Save Order",
|
|
175
|
-
"cairo.customFields.archive.modal.title": "Vil du arkivere
|
|
175
|
+
"cairo.customFields.archive.modal.title": "Vil du arkivere det egendefinerte feltet?",
|
|
176
176
|
"cairo.manageView.Rename.Success.toast": "«{oldViewName}» har skiftet navn til «{newViewName}».",
|
|
177
177
|
"cairo.table.deleteViewModal.deleteButton": "Slett visning",
|
|
178
178
|
"cairo.export.offlineMessage": "Eksporten fortsetter så snart internettforbindelsen er gjenopprettet.",
|
|
@@ -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\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\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 */\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":""}
|
|
@@ -17,6 +17,7 @@ class ArrayFilterState {
|
|
|
17
17
|
(0, _defineProperty2.default)(this, "itemKey", void 0);
|
|
18
18
|
(0, _defineProperty2.default)(this, "itemName", void 0);
|
|
19
19
|
(0, _defineProperty2.default)(this, "entityName", void 0);
|
|
20
|
+
(0, _defineProperty2.default)(this, "equals", void 0);
|
|
20
21
|
(0, _defineProperty2.default)(this, "events", new _events.EventEmitter());
|
|
21
22
|
(0, _defineProperty2.default)(this, "matches", void 0);
|
|
22
23
|
this.name = params.name ?? '';
|
|
@@ -35,6 +36,7 @@ class ArrayFilterState {
|
|
|
35
36
|
const key = typeof item === 'string' ? item : itemKey(item);
|
|
36
37
|
return value == null || !value.length || value.some(v => itemKey(v) === key);
|
|
37
38
|
});
|
|
39
|
+
this.equals = params.equals;
|
|
38
40
|
(0, _mobx.makeObservable)(this, {
|
|
39
41
|
_value: _mobx.observable.ref,
|
|
40
42
|
defaultValue: _mobx.observable.ref,
|
|
@@ -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","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\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\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\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 */\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":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAmCO,MAAME,gBAAgB,CAA2B;EAiBtDC,WAAWA,CAACC,MAA2C,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,kBAJvC,IAAIC,oBAAY,CAAC,CAAC;IAAA,IAAAF,gBAAA,CAAAC,OAAA;IAKlC,IAAI,CAACE,IAAI,GAAGJ,MAAM,CAACI,IAAI,IAAI,EAAE;IAC7B,IAAI,CAACC,UAAU,GAAGL,MAAM,CAACK,UAAU;IACnC,IAAI,CAACC,YAAY,GAAGN,MAAM,CAACM,YAAY,IAAI,EAAE;IAC7C,IAAI,CAACC,KAAK,GAAGP,MAAM,CAACO,KAAK;IACzB,IAAI,CAACC,QAAQ,GAAGR,MAAM,CAACQ,QAAQ,KAAMC,KAAK,IAAKA,KAAK,CAAC;IACrD,IAAI,CAACC,OAAO,GAAGV,MAAM,CAACU,OAAO;IAC7B,IAAI,CAACC,QAAQ,GAAGX,MAAM,CAACW,QAAQ;IAC/B,IAAI,CAACC,UAAU,GAAGZ,MAAM,CAACY,UAAU,KAAK,MAAM,EAAE,CAAC;IACjD,IAAI,CAACC,MAAM,GAAGb,MAAM,CAACc,YAAY,IAAI,IAAI,CAACR,YAAY;IACtD,IAAI,CAACS,OAAO,GACVf,MAAM,CAACe,OAAO,KACb,CAACC,IAAI,EAAEP,KAAK,KAAK;MAChB,MAAM;QAAEC;MAAQ,CAAC,GAAG,IAAI;MACxB,MAAMO,GAAG,GAAG,OAAOD,IAAI,KAAK,QAAQ,GAAGA,IAAI,GAAGN,OAAO,CAACM,IAAI,CAAC;MAC3D,OACEP,KAAK,IAAI,IAAI,IACb,CAACA,KAAK,CAACS,MAAM,IACbT,KAAK,CAACU,IAAI,CAAEC,CAAC,IAAKV,OAAO,CAACU,CAAC,CAAC,KAAKH,GAAG,CAAC;IAEzC,CAAC,CAAC;IACJ,IAAI,CAACI,MAAM,GAAGrB,MAAM,CAACqB,MAAM;IAE3B,IAAAC,oBAAc,EAAC,IAAI,EAAE;MACnBT,MAAM,EAAEU,gBAAU,CAACC,GAAG;MACtBlB,YAAY,EAAEiB,gBAAU,CAACC,GAAG;MAC5BnB,UAAU,EAAEkB,gBAAU,CAACC,GAAG;MAC1BC,OAAO,EAAEC,cAAQ;MACjBC,IAAI,EAAED,cAAQ;MACdjB,KAAK,EAAEiB,cAAQ;MACfE,KAAK,EAAEC,YAAM;MACbC,QAAQ,EAAED,YAAM;MAChBE,WAAW,EAAEF,YAAM;MACnBG,eAAe,EAAEH,YAAM;MACvBI,KAAK,EAAEJ;IACT,CAAC,CAAC;EACJ;EAEA,IAAIpB,KAAKA,CAAA,EAAG;IACV,OAAO,IAAI,CAACI,MAAM;EACpB;EAEA,IAAIqB,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACrB,MAAM;EACpB;EAEA,IAAIY,OAAOA,CAAA,EAAG;IACZ,OAAO,CAAC,IAAI,CAACE,IAAI;EACnB;EAEA,IAAIA,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAACd,MAAM,CAACK,MAAM;EAC3B;EAEA,IAAIiB,aAAaA,CAAA,EAAG;IAClB,OAAOC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACxB,MAAM,CAACyB,GAAG,CAAC,IAAI,CAAC9B,QAAQ,CAAC,CAAC;EACvD;EAEA+B,oBAAoBA,CAACC,GAAW,EAAE;IAChC,IAAI;MACF,MAAMC,QAAQ,GAAGL,IAAI,CAAC7B,KAAK,CAACiC,GAAG,CAAY;MAC3C,IAAIE,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,EAAE;QAC3B,IAAI,CAACX,QAAQ,CACXW,QAAQ,CAACH,GAAG,CAAC,IAAI,CAAC/B,KAAK,CAAC,CAACqC,MAAM,CAAEnC,KAAK,IAAiBA,KAAK,IAAI,IAAI,CACtE,CAAC;MACH;IACF,CAAC,CAAC,OAAOoC,CAAC,EAAE,CAAC;EACf;EAEAC,MAAMA,CAACrC,KAAU,EAAE;IACjB,OAAOA,KAAK,CAAC6B,GAAG,CAAC,IAAI,CAAC9B,QAAQ,CAAC;EACjC;EAEAuC,MAAMA,CAACC,GAAY,EAAE;IACnB,IAAIN,KAAK,CAACC,OAAO,CAACK,GAAG,CAAC,EAAE;MACtB,OAAOA,GAAG,CAACV,GAAG,CAAC,IAAI,CAAC/B,KAAK,CAAC,CAACqC,MAAM,CAAEnC,KAAK,IAAiBA,KAAK,IAAI,IAAI,CAAC;IACzE;IAEA,OAAO,EAAE;EACX;EAEAqB,QAAQA,CAACrB,KAAU,EAAE;IAAEwC,UAAU;IAAE,GAAGC;EAA4B,CAAC,GAAG,CAAC,CAAC,EAAE;IACxE,IAAI,CAACrC,MAAM,GAAGJ,KAAK;IACnB,IAAIwC,UAAU,EAAE;MACd,KAAK,MAAME,KAAK,IAAIF,UAAU,EAAE;QAC9B,IAAI,CAACG,MAAM,CAACC,IAAI,CAACF,KAAK,EAAED,OAAO,CAAC;MAClC;IACF;EACF;EAEAnB,WAAWA,CACTtB,KAAU,EACV;IAAEwC,UAAU,GAAG,EAAE;IAAE,GAAGC;EAA4B,CAAC,GAAG,CAAC,CAAC,EACxD;IACA,IAAI,CAACpB,QAAQ,CAACrB,KAAK,EAAE;MAAE,GAAGyC,OAAO;MAAED,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAGA,UAAU;IAAE,CAAC,CAAC;EAC7E;EAEAK,OAAOA,CAAC7C,KAAU,EAAEyC,OAA4B,EAAE;IAChD,IAAI,CAACnB,WAAW,CAACtB,KAAK,EAAE;MACtB,GAAGyC,OAAO;MACVD,UAAU,EAAE,CAAC,SAAS;IACxB,CAAC,CAAC;EACJ;EAEAjB,eAAeA,CAACvB,KAAU,EAAE;IAC1B,IAAI,CAACsB,WAAW,CAACtB,KAAK,EAAE;MAAEwC,UAAU,EAAE,CAAC,iBAAiB;IAAE,CAAC,CAAC;EAC9D;EAEArB,KAAKA,CAACsB,OAA2B,GAAG,CAAC,CAAC,EAAE;IACtC,IAAI,CAACpB,QAAQ,CAAC,IAAI,CAACxB,YAAY,EAAE4C,OAAO,CAAC;EAC3C;EAEAK,OAAOA,CAACC,KAAU,EAAE;IAClB,MAAM;MAAE/C;IAAM,CAAC,GAAG,IAAI;IACtB,OACEA,KAAK,CAACS,MAAM,KAAKsC,KAAK,CAACtC,MAAM,IAC7BT,KAAK,CAACU,IAAI,CAAEH,IAAI,IACdwC,KAAK,CAACC,KAAK,CAAEC,CAAC,IAAK,IAAI,CAAChD,OAAO,CAACgD,CAAC,CAAC,KAAK,IAAI,CAAChD,OAAO,CAACM,IAAI,CAAC,CAC3D,CAAC;EAEL;EAEA2C,MAAMA,CAACH,KAAU,EAAEN,OAA2B,GAAG,CAAC,CAAC,EAAE;IACnD,MAAM;MAAExC;IAAQ,CAAC,GAAG,IAAI;IACxB,MAAMkD,YAAY,GAAG,IAAIC,GAAG,CAACL,KAAK,CAAClB,GAAG,CAAC5B,OAAO,CAAC,CAAC;IAChD,IAAI,CAACoB,QAAQ,CACX,IAAI,CAACjB,MAAM,CAAC+B,MAAM,CAAE5B,IAAI,IAAK,CAAC4C,YAAY,CAACE,GAAG,CAACpD,OAAO,CAACM,IAAI,CAAC,CAAC,CAAC,EAC9DkC,OACF,CAAC;EACH;EAEAjB,KAAKA,CAACjC,MAA0C,EAAuB;IACrE,MAAM;MACJY,UAAU;MACVD,QAAQ;MACRD,OAAO;MACPF,QAAQ;MACRD,KAAK;MACLD,YAAY;MACZG,KAAK,EAAEK,YAAY;MACnBC,OAAO;MACPV,UAAU;MACVD;IACF,CAAC,GAAG,IAAI;IACR,OAAO,IAAIN,gBAAgB,CAAC;MAC1Bc,UAAU;MACVD,QAAQ;MACRD,OAAO;MACPF,QAAQ;MACRD,KAAK;MACLD,YAAY;MACZQ,YAAY;MACZC,OAAO;MACPV,UAAU;MACVD,IAAI;MACJ,GAAGJ;IACL,CAAC,CAAC;EACJ;AACF;AAAC+D,OAAA,CAAAjE,gBAAA,GAAAA,gBAAA;AAEM,MAAMkE,kBAAkB,GAC7BhE,MAA2C,IAE3C,IAAIF,gBAAgB,CAAI;EACtBY,OAAO,EAAGM,IAAI,IAAKA,IAAI;EACvBL,QAAQ,EAAGK,IAAI,IAAKA,IAAI;EACxBT,KAAK,EAAGE,KAAK,IAAK;IAChB,IAAIA,KAAK,IAAI,IAAI,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC9C,OAAO,IAAI;IACb;IACA,OAAOA,KAAK;EACd,CAAC;EACDD,QAAQ,EAAGC,KAAK,IAAKA,KAAK;EAC1B,GAAGT;AACL,CAAC,CAAC;AAAC+D,OAAA,CAAAC,kBAAA,GAAAA,kBAAA;AAEE,MAAMC,WAAW,GAAOjE,MAAiC,IAC9D,IAAIF,gBAAgB,CAAIE,MAAM,CAAC;AAAC+D,OAAA,CAAAE,WAAA,GAAAA,WAAA;AAE3B,MAAMC,iBAAiB,GAC5BlE,MAA2C,IAE3C,IAAIF,gBAAgB,CAAI;EACtBY,OAAO,EAAGM,IAAI,IAAKA,IAAI,CAACmD,EAAE;EAC1BxD,QAAQ,EAAGK,IAAI,IAAKA,IAAI,CAACZ,IAAI;EAC7BG,KAAK,EAAGE,KAAK,IAAK;IAChB,IACEA,KAAK,IAAI,IAAI,IACb,OAAOA,KAAK,KAAK,QAAQ,IACzB,OAAOA,KAAK,CAAC0D,EAAE,KAAK,QAAQ,IAC5B,OAAO1D,KAAK,CAACL,IAAI,KAAK,QAAQ,EAC9B;MACA,OAAO,IAAI;IACb;IACA,OAAOK,KAAK;EACd,CAAC;EACDD,QAAQ,EAAGC,KAAK,KACb;IACC0D,EAAE,EAAE1D,KAAK,CAAC0D,EAAE;IACZ/D,IAAI,EAAEK,KAAK,CAACL;EACd,CAAC,CAAe;EAClB,GAAGJ;AACL,CAAC,CAAC;AAAC+D,OAAA,CAAAG,iBAAA,GAAAA,iBAAA;AAEE,MAAME,aAAa,GACxBpE,MAA2C,IAE3C,IAAIF,gBAAgB,CAAI;EACtBY,OAAO,EAAGM,IAAI,IAAKA,IAAI,CAACmD,EAAE;EAC1BxD,QAAQ,EAAEA,CAAA,KAAM,EAAE;EAClBJ,KAAK,EAAGE,KAAK,IAAK;IAChB,IACEA,KAAK,IAAI,IAAI,IACb,OAAOA,KAAK,KAAK,QAAQ,IACzB,OAAOA,KAAK,CAAC0D,EAAE,KAAK,QAAQ,EAC5B;MACA,OAAO,IAAI;IACb;IACA,OAAO1D,KAAK;EACd,CAAC;EACDD,QAAQ,EAAGC,KAAK,KACb;IACC0D,EAAE,EAAE1D,KAAK,CAAC0D;EACZ,CAAC,CAAe;EAClB,GAAGnE;AACL,CAAC,CAAC;AAAC+D,OAAA,CAAAK,aAAA,GAAAA,aAAA;AAEE,MAAMC,oBAAoB,GAC/BrE,MAA2C,IAE3C,IAAIF,gBAAgB,CAAI;EACtBY,OAAO,EAAGM,IAAI,IAAKsD,MAAM,CAACtD,IAAI,CAACmD,EAAE,CAAC;EAClCxD,QAAQ,EAAGK,IAAI,IAAKA,IAAI,CAACZ,IAAI;EAC7BG,KAAK,EAAGE,KAAK,IAAK;IAChB,IACEA,KAAK,IAAI,IAAI,IACb,OAAOA,KAAK,KAAK,QAAQ,IACzB,OAAOA,KAAK,CAAC0D,EAAE,KAAK,QAAQ,IAC5B,OAAO1D,KAAK,CAACL,IAAI,KAAK,QAAQ,EAC9B;MACA,OAAO,IAAI;IACb;IACA,OAAOK,KAAK;EACd,CAAC;EACDD,QAAQ,EAAGC,KAAK,KACb;IACC0D,EAAE,EAAE1D,KAAK,CAAC0D,EAAE;IACZ/D,IAAI,EAAEK,KAAK,CAACL;EACd,CAAC,CAAe;EAClB,GAAGJ;AACL,CAAC,CAAC;AAAC+D,OAAA,CAAAM,oBAAA,GAAAA,oBAAA"}
|
|
@@ -25,6 +25,7 @@ class CustomFilterState {
|
|
|
25
25
|
(0, _defineProperty2.default)(this, "itemName", void 0);
|
|
26
26
|
(0, _defineProperty2.default)(this, "entityName", void 0);
|
|
27
27
|
(0, _defineProperty2.default)(this, "matches", void 0);
|
|
28
|
+
(0, _defineProperty2.default)(this, "equals", void 0);
|
|
28
29
|
(0, _defineProperty2.default)(this, "events", new _events.EventEmitter());
|
|
29
30
|
this.name = params.name ?? '';
|
|
30
31
|
this.persistent = params.persistent;
|
|
@@ -43,6 +44,7 @@ class CustomFilterState {
|
|
|
43
44
|
this.encode = params.encode;
|
|
44
45
|
this.entityName = params.entityName ?? (() => '');
|
|
45
46
|
this.matches = params.matches ?? (() => false);
|
|
47
|
+
this.equals = params.equals;
|
|
46
48
|
(0, _mobx.makeObservable)(this, {
|
|
47
49
|
_value: _mobx.observable.ref,
|
|
48
50
|
persistent: _mobx.observable.ref,
|
|
@@ -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","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\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\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\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":"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"}
|
|
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":"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"}
|
|
@@ -6,6 +6,7 @@ exports.toString = exports.rangeFilter = exports.dateRangeFilter = exports.Range
|
|
|
6
6
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
7
|
var _events = require("events");
|
|
8
8
|
var _mobx = require("mobx");
|
|
9
|
+
var _dateRangeUtils = require("./dateRangeUtils");
|
|
9
10
|
function isRecord(thing) {
|
|
10
11
|
return thing != null;
|
|
11
12
|
}
|
|
@@ -17,6 +18,9 @@ class RangeFilterState {
|
|
|
17
18
|
(0, _defineProperty2.default)(this, "itemKey", void 0);
|
|
18
19
|
(0, _defineProperty2.default)(this, "itemName", void 0);
|
|
19
20
|
(0, _defineProperty2.default)(this, "entityName", void 0);
|
|
21
|
+
(0, _defineProperty2.default)(this, "equals", void 0);
|
|
22
|
+
(0, _defineProperty2.default)(this, "isEmptyPreset", void 0);
|
|
23
|
+
(0, _defineProperty2.default)(this, "parsePreset", void 0);
|
|
20
24
|
(0, _defineProperty2.default)(this, "parse", void 0);
|
|
21
25
|
(0, _defineProperty2.default)(this, "simplify", void 0);
|
|
22
26
|
(0, _defineProperty2.default)(this, "matches", void 0);
|
|
@@ -29,9 +33,12 @@ class RangeFilterState {
|
|
|
29
33
|
this.itemName = params.itemName;
|
|
30
34
|
this.entityName = params.entityName ?? (() => '');
|
|
31
35
|
this.parse = params.parse;
|
|
36
|
+
this.parsePreset = params.parsePreset ?? (() => this.emptyValue);
|
|
37
|
+
this.isEmptyPreset = params.isEmptyPreset ?? (() => true);
|
|
32
38
|
this.simplify = params.simplify ?? (value => value);
|
|
33
39
|
this.matches = params.matches ?? ((item, value) => this.itemName(item) === this.itemName(value));
|
|
34
40
|
this._value = params.initialValue ?? this.emptyValue;
|
|
41
|
+
this.equals = params.equals;
|
|
35
42
|
(0, _mobx.makeObservable)(this, {
|
|
36
43
|
_value: _mobx.observable.ref,
|
|
37
44
|
persistent: _mobx.observable.ref,
|
|
@@ -55,7 +62,7 @@ class RangeFilterState {
|
|
|
55
62
|
return [this._value];
|
|
56
63
|
}
|
|
57
64
|
get isEmpty() {
|
|
58
|
-
return !this._value.from && !this._value.to;
|
|
65
|
+
return !this._value.from && !this._value.to && this.isEmptyPreset(this._value.preset);
|
|
59
66
|
}
|
|
60
67
|
get size() {
|
|
61
68
|
return this.isEmpty ? 0 : 1;
|
|
@@ -64,6 +71,11 @@ class RangeFilterState {
|
|
|
64
71
|
return this.itemKey(this._value);
|
|
65
72
|
}
|
|
66
73
|
encode(value) {
|
|
74
|
+
if (!this.isEmptyPreset(value.preset)) {
|
|
75
|
+
return {
|
|
76
|
+
preset: value.preset
|
|
77
|
+
};
|
|
78
|
+
}
|
|
67
79
|
return {
|
|
68
80
|
...(value.from && {
|
|
69
81
|
from: this.simplify(value.from)
|
|
@@ -75,22 +87,26 @@ class RangeFilterState {
|
|
|
75
87
|
}
|
|
76
88
|
decode(raw) {
|
|
77
89
|
if (typeof raw === 'string') {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return {
|
|
81
|
-
from,
|
|
82
|
-
to
|
|
83
|
-
};
|
|
90
|
+
if (!raw.includes('/') && !this.isEmptyPreset(raw)) {
|
|
91
|
+
return this.parsePreset(raw);
|
|
84
92
|
}
|
|
93
|
+
const [from, to] = raw.split('/').map(this.parse);
|
|
94
|
+
return {
|
|
95
|
+
from,
|
|
96
|
+
to
|
|
97
|
+
};
|
|
85
98
|
}
|
|
86
99
|
if (isRecord(raw)) {
|
|
87
100
|
const [from, to] = [raw.from, raw.to].map(this.parse);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
to
|
|
92
|
-
};
|
|
101
|
+
const preset = typeof raw.preset === 'string' ? raw.preset : undefined;
|
|
102
|
+
if (!this.isEmptyPreset(preset)) {
|
|
103
|
+
return this.parsePreset(preset);
|
|
93
104
|
}
|
|
105
|
+
return {
|
|
106
|
+
from,
|
|
107
|
+
to,
|
|
108
|
+
preset
|
|
109
|
+
};
|
|
94
110
|
}
|
|
95
111
|
return this.emptyValue;
|
|
96
112
|
}
|
|
@@ -152,7 +168,10 @@ class RangeFilterState {
|
|
|
152
168
|
itemName,
|
|
153
169
|
parse,
|
|
154
170
|
name,
|
|
155
|
-
simplify
|
|
171
|
+
simplify,
|
|
172
|
+
isEmptyPreset,
|
|
173
|
+
parsePreset,
|
|
174
|
+
equals
|
|
156
175
|
} = this;
|
|
157
176
|
return new RangeFilterState({
|
|
158
177
|
entityName,
|
|
@@ -164,6 +183,9 @@ class RangeFilterState {
|
|
|
164
183
|
parse,
|
|
165
184
|
name,
|
|
166
185
|
simplify,
|
|
186
|
+
isEmptyPreset,
|
|
187
|
+
parsePreset,
|
|
188
|
+
equals,
|
|
167
189
|
...params
|
|
168
190
|
});
|
|
169
191
|
}
|
|
@@ -171,8 +193,14 @@ class RangeFilterState {
|
|
|
171
193
|
exports.RangeFilterState = RangeFilterState;
|
|
172
194
|
const rangeFilter = params => new RangeFilterState(params);
|
|
173
195
|
exports.rangeFilter = rangeFilter;
|
|
196
|
+
const isEmptyDatePreset = preset => {
|
|
197
|
+
return !preset || _dateRangeUtils.presetToDaysAmount[preset] === undefined;
|
|
198
|
+
};
|
|
174
199
|
const toString = item => {
|
|
175
|
-
|
|
200
|
+
if (!item.preset || isEmptyDatePreset(item.preset)) {
|
|
201
|
+
return [item.from, item.to].map(d => d == null ? void 0 : d.toISOString()).join('/');
|
|
202
|
+
}
|
|
203
|
+
return item.preset;
|
|
176
204
|
};
|
|
177
205
|
exports.toString = toString;
|
|
178
206
|
const dateRangeFilter = (params = {}) => {
|
|
@@ -192,6 +220,15 @@ const dateRangeFilter = (params = {}) => {
|
|
|
192
220
|
}
|
|
193
221
|
return d;
|
|
194
222
|
},
|
|
223
|
+
parsePreset: _dateRangeUtils.getDatesFromPreset,
|
|
224
|
+
isEmptyPreset: isEmptyDatePreset,
|
|
225
|
+
equals: (item1, item2) => {
|
|
226
|
+
if (isEmptyDatePreset(item1.preset) && isEmptyDatePreset(item2.preset)) {
|
|
227
|
+
var _item1$from, _item2$from, _item1$to, _item2$to;
|
|
228
|
+
return ((_item1$from = item1.from) == null ? void 0 : _item1$from.getTime()) === ((_item2$from = item2.from) == null ? void 0 : _item2$from.getTime()) && ((_item1$to = item1.to) == null ? void 0 : _item1$to.getTime()) === ((_item2$to = item2.to) == null ? void 0 : _item2$to.getTime());
|
|
229
|
+
}
|
|
230
|
+
return item1.preset === item2.preset;
|
|
231
|
+
},
|
|
195
232
|
...params
|
|
196
233
|
});
|
|
197
234
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","require","_mobx","isRecord","thing","RangeFilterState","constructor","params","_defineProperty2","default","emptyValue","EventEmitter","name","persistent","itemKey","itemName","entityName","parse","simplify","value","matches","item","_value","initialValue","makeObservable","observable","ref","isEmpty","computed","size","setValue","action","changeValue","from","to","toArray","toQueryString","encode","decode","raw","split","map","emitEvents","options","event","events","emit","remove","items","some","e","applyFromQueryString","str","refresh","scheduleRefresh","reset","hasDiff","rangeItem","clone","exports","rangeFilter","toString","filter","Boolean","d","toISOString","join","dateRangeFilter","Date","isNaN","valueOf"],"sources":["../../../../src/state/RangeFilterState/RangeFilterState.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 RangeItem<T> {\n from: T | null;\n to: T | null;\n preset?: string;\n}\n\nfunction isRecord(thing: unknown): thing is Record<string, unknown> {\n return thing != null;\n}\n\nexport interface RangeFilterStateParams<T>\n extends FilterStateBaseParams<RangeItem<T>> {\n /**\n * Convert a unknown object to a T.\n * @param value\n */\n readonly parse: (value: unknown) => 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 * Indicates whether an item matches the current value of the filter\n */\n readonly matches?: (item: RangeItem<T>, value: RangeItem<T>) => boolean;\n}\n\nexport class RangeFilterState<T> implements Filter<RangeItem<T>> {\n name: string;\n persistent;\n // defaultValue: string;\n readonly itemKey: (item: RangeItem<T>) => string;\n readonly itemName: (item: RangeItem<T>) => string;\n readonly entityName: (pluralization: number) => string;\n readonly parse: RangeFilterStateParams<T>['parse'];\n readonly simplify;\n readonly matches: (item: RangeItem<T>, value: RangeItem<T>) => boolean;\n\n _value: RangeItem<T> = this.emptyValue;\n\n readonly events = new EventEmitter() as FilterEvents;\n\n constructor(params: RangeFilterStateParams<T>) {\n this.name = params.name ?? '';\n this.persistent = params.persistent;\n // this.defaultValue = params.defaultValue;\n this.itemKey = params.itemKey;\n this.itemName = params.itemName;\n this.entityName = params.entityName ?? (() => '');\n this.parse = params.parse;\n this.simplify = params.simplify ?? ((value) => value);\n this.matches =\n params.matches ??\n ((item, value) => this.itemName(item) === this.itemName(value));\n this._value = params.initialValue ?? this.emptyValue;\n\n makeObservable(this, {\n _value: observable.ref,\n persistent: observable.ref,\n isEmpty: computed,\n size: computed,\n value: computed,\n setValue: action,\n changeValue: action,\n });\n }\n\n get emptyValue() {\n return { from: null, to: null };\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._value.from && !this._value.to;\n }\n\n get size() {\n return this.isEmpty ? 0 : 1;\n }\n\n get toQueryString() {\n return this.itemKey(this._value);\n }\n\n encode(value: RangeItem<T>) {\n return {\n ...(value.from && { from: this.simplify(value.from) }),\n ...(value.to && { to: this.simplify(value.to) }),\n };\n }\n\n decode(raw: unknown): RangeItem<T> {\n if (typeof raw === 'string') {\n const [from, to] = raw.split('/').map(this.parse);\n\n if (from) {\n return {\n from,\n to,\n };\n }\n }\n\n if (isRecord(raw)) {\n const [from, to] = [raw.from, raw.to].map(this.parse);\n\n if (from && to) {\n return {\n from,\n to,\n };\n }\n }\n\n return this.emptyValue;\n }\n\n setValue(\n value: RangeItem<T>,\n { emitEvents, ...options }: ChangeValueOptions = {},\n ) {\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: RangeItem<T>,\n { emitEvents = [], ...options }: ChangeValueOptions = {},\n ) {\n this.setValue(value, { ...options, emitEvents: ['change', ...emitEvents] });\n }\n\n remove(items: RangeItem<T>[], options: ChangeValueOptions = {}) {\n if (items.some((e) => e.from || e.to)) {\n this.setValue(this.emptyValue, options);\n }\n }\n\n applyFromQueryString(str: string) {\n this.setValue(this.decode(str));\n }\n\n refresh(value: RangeItem<T>, options?: ChangeValueOptions) {\n this.changeValue(value, { ...options, emitEvents: ['refresh'] });\n }\n\n scheduleRefresh(value: RangeItem<T>) {\n this.changeValue(value, { emitEvents: ['scheduleRefresh'] });\n }\n\n reset(options: ChangeValueOptions = {}) {\n this.setValue(this.emptyValue, options);\n }\n\n hasDiff(rangeItem: RangeItem<T>) {\n const { value } = this;\n return value.from !== rangeItem.from || value.to !== rangeItem.to;\n }\n\n clone(params: Partial<RangeFilterStateParams<T>>): RangeFilterState<T> {\n const {\n entityName,\n value: initialValue,\n matches,\n persistent,\n itemKey,\n itemName,\n parse,\n name,\n simplify,\n } = this;\n return new RangeFilterState<T>({\n entityName,\n initialValue,\n matches,\n persistent,\n itemKey,\n itemName,\n parse,\n name,\n simplify,\n ...params,\n });\n }\n}\n\nexport const rangeFilter = <T>(params: RangeFilterStateParams<T>) =>\n new RangeFilterState(params);\n\nexport const toString = (item: RangeItem<Date>) => {\n return [item.from, item.to]\n .filter(Boolean as unknown as (d: Date | null) => d is Date)\n .map((d) => d.toISOString())\n .join('/');\n};\n\nexport const dateRangeFilter = (\n params: Partial<RangeFilterStateParams<Date>> = {},\n) => {\n return new RangeFilterState({\n itemKey: toString,\n itemName: toString,\n parse: (value) => {\n if (typeof value === 'object' && value instanceof Date) {\n return value;\n }\n\n if (typeof value !== 'string' && typeof value !== 'number') {\n return null;\n }\n\n const d = new Date(value);\n\n if (isNaN(d.valueOf())) {\n return null;\n }\n\n return d;\n },\n ...params,\n });\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_events","require","_mobx","_dateRangeUtils","isRecord","thing","RangeFilterState","constructor","params","_defineProperty2","default","emptyValue","EventEmitter","name","persistent","itemKey","itemName","entityName","parse","parsePreset","isEmptyPreset","simplify","value","matches","item","_value","initialValue","equals","makeObservable","observable","ref","isEmpty","computed","size","setValue","action","changeValue","from","to","toArray","preset","toQueryString","encode","decode","raw","includes","split","map","undefined","emitEvents","options","event","events","emit","remove","items","some","e","applyFromQueryString","str","refresh","scheduleRefresh","reset","hasDiff","rangeItem","clone","exports","rangeFilter","isEmptyDatePreset","presetToDaysAmount","toString","d","toISOString","join","dateRangeFilter","Date","isNaN","valueOf","getDatesFromPreset","item1","item2","_item1$from","_item2$from","_item1$to","_item2$to","getTime"],"sources":["../../../../src/state/RangeFilterState/RangeFilterState.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';\nimport { getDatesFromPreset, presetToDaysAmount } from './dateRangeUtils';\n\nexport interface RangeItem<T> {\n from: T | null;\n to: T | null;\n preset?: string;\n}\n\nfunction isRecord(thing: unknown): thing is Record<string, unknown> {\n return thing != null;\n}\n\nexport interface RangeFilterStateParams<T>\n extends FilterStateBaseParams<RangeItem<T>> {\n /**\n * Convert an unknown object to a T.\n * @param value\n */\n readonly parse: (value: unknown) => 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 * Indicates whether an item matches the current value of the filter\n */\n readonly matches?: (item: RangeItem<T>, value: RangeItem<T>) => boolean;\n /**\n * Indicates whether a preset does not exist or is empty\n */\n readonly isEmptyPreset?: (preset?: string) => boolean;\n /**\n * Converts a preset string to a RangeItem\n * @param preset\n */\n readonly parsePreset?: (preset?: string) => RangeItem<T>;\n}\n\nexport class RangeFilterState<T> implements Filter<RangeItem<T>> {\n name: string;\n persistent;\n // defaultValue: string;\n readonly itemKey: (item: RangeItem<T>) => string;\n readonly itemName: (item: RangeItem<T>) => string;\n readonly entityName: (pluralization: number) => string;\n readonly equals?: (item1: RangeItem<T>, item2: RangeItem<T>) => boolean;\n\n readonly isEmptyPreset: (preset?: string) => boolean;\n readonly parsePreset: (preset?: string) => RangeItem<T>;\n readonly parse: RangeFilterStateParams<T>['parse'];\n readonly simplify;\n readonly matches: (item: RangeItem<T>, value: RangeItem<T>) => boolean;\n\n _value: RangeItem<T> = this.emptyValue;\n\n readonly events = new EventEmitter() as FilterEvents;\n\n constructor(params: RangeFilterStateParams<T>) {\n this.name = params.name ?? '';\n this.persistent = params.persistent;\n // this.defaultValue = params.defaultValue;\n this.itemKey = params.itemKey;\n this.itemName = params.itemName;\n this.entityName = params.entityName ?? (() => '');\n this.parse = params.parse;\n this.parsePreset = params.parsePreset ?? (() => this.emptyValue);\n this.isEmptyPreset = params.isEmptyPreset ?? (() => true);\n this.simplify = params.simplify ?? ((value) => value);\n this.matches =\n params.matches ??\n ((item, value) => this.itemName(item) === this.itemName(value));\n this._value = params.initialValue ?? this.emptyValue;\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 setValue: action,\n changeValue: action,\n });\n }\n\n get emptyValue() {\n return { from: null, to: null };\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 (\n !this._value.from &&\n !this._value.to &&\n this.isEmptyPreset(this._value.preset)\n );\n }\n\n get size() {\n return this.isEmpty ? 0 : 1;\n }\n\n get toQueryString() {\n return this.itemKey(this._value);\n }\n\n encode(value: RangeItem<T>) {\n if (!this.isEmptyPreset(value.preset)) {\n return {\n preset: value.preset,\n };\n }\n\n return {\n ...(value.from && { from: this.simplify(value.from) }),\n ...(value.to && { to: this.simplify(value.to) }),\n };\n }\n\n decode(raw: unknown): RangeItem<T> {\n if (typeof raw === 'string') {\n if (!raw.includes('/') && !this.isEmptyPreset(raw)) {\n return this.parsePreset(raw);\n }\n\n const [from, to] = raw.split('/').map(this.parse);\n\n return {\n from,\n to,\n };\n }\n\n if (isRecord(raw)) {\n const [from, to] = [raw.from, raw.to].map(this.parse);\n const preset = typeof raw.preset === 'string' ? raw.preset : undefined;\n\n if (!this.isEmptyPreset(preset)) {\n return this.parsePreset(preset);\n }\n\n return {\n from,\n to,\n preset,\n };\n }\n\n return this.emptyValue;\n }\n\n setValue(\n value: RangeItem<T>,\n { emitEvents, ...options }: ChangeValueOptions = {},\n ) {\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: RangeItem<T>,\n { emitEvents = [], ...options }: ChangeValueOptions = {},\n ) {\n this.setValue(value, { ...options, emitEvents: ['change', ...emitEvents] });\n }\n\n remove(items: RangeItem<T>[], options: ChangeValueOptions = {}) {\n if (items.some((e) => e.from || e.to)) {\n this.setValue(this.emptyValue, options);\n }\n }\n\n applyFromQueryString(str: string) {\n this.setValue(this.decode(str));\n }\n\n refresh(value: RangeItem<T>, options?: ChangeValueOptions) {\n this.changeValue(value, { ...options, emitEvents: ['refresh'] });\n }\n\n scheduleRefresh(value: RangeItem<T>) {\n this.changeValue(value, { emitEvents: ['scheduleRefresh'] });\n }\n\n reset(options: ChangeValueOptions = {}) {\n this.setValue(this.emptyValue, options);\n }\n\n hasDiff(rangeItem: RangeItem<T>) {\n const { value } = this;\n return value.from !== rangeItem.from || value.to !== rangeItem.to;\n }\n\n clone(params: Partial<RangeFilterStateParams<T>>): RangeFilterState<T> {\n const {\n entityName,\n value: initialValue,\n matches,\n persistent,\n itemKey,\n itemName,\n parse,\n name,\n simplify,\n isEmptyPreset,\n parsePreset,\n equals,\n } = this;\n return new RangeFilterState<T>({\n entityName,\n initialValue,\n matches,\n persistent,\n itemKey,\n itemName,\n parse,\n name,\n simplify,\n isEmptyPreset,\n parsePreset,\n equals,\n ...params,\n });\n }\n}\n\nexport const rangeFilter = <T>(params: RangeFilterStateParams<T>) =>\n new RangeFilterState(params);\n\nconst isEmptyDatePreset = (preset?: string): preset is string => {\n return !preset || presetToDaysAmount[preset] === undefined;\n};\n\nexport const toString = (item: RangeItem<Date>) => {\n if (!item.preset || isEmptyDatePreset(item.preset)) {\n return [item.from, item.to].map((d) => d?.toISOString()).join('/');\n }\n return item.preset;\n};\n\nexport const dateRangeFilter = (\n params: Partial<RangeFilterStateParams<Date>> = {},\n) => {\n return new RangeFilterState({\n itemKey: toString,\n itemName: toString,\n parse: (value) => {\n if (typeof value === 'object' && value instanceof Date) {\n return value;\n }\n\n if (typeof value !== 'string' && typeof value !== 'number') {\n return null;\n }\n\n const d = new Date(value);\n\n if (isNaN(d.valueOf())) {\n return null;\n }\n\n return d;\n },\n parsePreset: getDatesFromPreset,\n isEmptyPreset: isEmptyDatePreset,\n equals: (item1, item2) => {\n if (isEmptyDatePreset(item1.preset) && isEmptyDatePreset(item2.preset)) {\n return (\n item1.from?.getTime() === item2.from?.getTime() &&\n item1.to?.getTime() === item2.to?.getTime()\n );\n }\n return item1.preset === item2.preset;\n },\n ...params,\n });\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.shouldRenderPresetTag = exports.renderPresetToolbarTag = exports.presetToDaysAmount = exports.getDatesFromPreset = exports.MAP_DATE_PRESET_TO_KEY = exports.DefaultDateRangePreset = exports.DateRangePreset = void 0;
|
|
5
|
+
const DateRangePreset = exports.DateRangePreset = {
|
|
6
|
+
NONE: 'NONE',
|
|
7
|
+
SEVEN_DAYS: 'SEVEN_DAYS',
|
|
8
|
+
FOURTEEN_DAYS: 'FOURTEEN_DAYS',
|
|
9
|
+
MONTH: 'MONTH',
|
|
10
|
+
TODAY: 'TODAY',
|
|
11
|
+
TOMORROW: 'TOMORROW',
|
|
12
|
+
NEXT_THREE_DAYS: 'NEXT_THREE_DAYS',
|
|
13
|
+
NEXT_SEVEN_DAYS: 'NEXT_SEVEN_DAYS',
|
|
14
|
+
NEXT_THIRTY_DAYS: 'NEXT_THIRTY_DAYS',
|
|
15
|
+
CUSTOM: 'CUSTOM'
|
|
16
|
+
};
|
|
17
|
+
const DefaultDateRangePreset = exports.DefaultDateRangePreset = {
|
|
18
|
+
NONE: 'NONE',
|
|
19
|
+
SEVEN_DAYS: 'SEVEN_DAYS',
|
|
20
|
+
FOURTEEN_DAYS: 'FOURTEEN_DAYS',
|
|
21
|
+
MONTH: 'MONTH',
|
|
22
|
+
CUSTOM: 'CUSTOM'
|
|
23
|
+
};
|
|
24
|
+
const hasTime = t => {
|
|
25
|
+
return t instanceof Date && (t.getHours() !== 0 || t.getMinutes() !== 0);
|
|
26
|
+
};
|
|
27
|
+
const getDateRangeLabel = (item, {
|
|
28
|
+
dateFormatters
|
|
29
|
+
}) => {
|
|
30
|
+
return [item.from, item.to].filter(Boolean).map(date => hasTime(date) ? dateFormatters.mediumTime.format(date) : dateFormatters.medium.format(date)).join(' - ');
|
|
31
|
+
};
|
|
32
|
+
const renderPresetToolbarTag = container => filter => {
|
|
33
|
+
const {
|
|
34
|
+
translate: t,
|
|
35
|
+
dateFormatters
|
|
36
|
+
} = container;
|
|
37
|
+
const {
|
|
38
|
+
preset
|
|
39
|
+
} = filter;
|
|
40
|
+
if (!preset || !presetToDaysAmount[preset]) {
|
|
41
|
+
return {
|
|
42
|
+
children: getDateRangeLabel(filter, {
|
|
43
|
+
dateFormatters
|
|
44
|
+
})
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
children: t(MAP_DATE_PRESET_TO_KEY[preset])
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
exports.renderPresetToolbarTag = renderPresetToolbarTag;
|
|
52
|
+
const shouldRenderPresetTag = preset => preset && Object.values(DateRangePreset).includes(preset) && preset !== DateRangePreset.NONE && preset !== DateRangePreset.CUSTOM;
|
|
53
|
+
exports.shouldRenderPresetTag = shouldRenderPresetTag;
|
|
54
|
+
const presetToDaysAmount = exports.presetToDaysAmount = {
|
|
55
|
+
[DateRangePreset.SEVEN_DAYS]: {
|
|
56
|
+
days: -7
|
|
57
|
+
},
|
|
58
|
+
[DateRangePreset.FOURTEEN_DAYS]: {
|
|
59
|
+
days: -14
|
|
60
|
+
},
|
|
61
|
+
[DateRangePreset.MONTH]: {
|
|
62
|
+
months: -1
|
|
63
|
+
},
|
|
64
|
+
[DateRangePreset.TODAY]: {
|
|
65
|
+
days: 0
|
|
66
|
+
},
|
|
67
|
+
[DateRangePreset.TOMORROW]: {
|
|
68
|
+
days: 1
|
|
69
|
+
},
|
|
70
|
+
[DateRangePreset.NEXT_THREE_DAYS]: {
|
|
71
|
+
days: 3
|
|
72
|
+
},
|
|
73
|
+
[DateRangePreset.NEXT_SEVEN_DAYS]: {
|
|
74
|
+
days: 7
|
|
75
|
+
},
|
|
76
|
+
[DateRangePreset.NEXT_THIRTY_DAYS]: {
|
|
77
|
+
days: 30
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const getDatesFromPreset = preset => {
|
|
81
|
+
const today = new Date();
|
|
82
|
+
const presetDiff = preset ? presetToDaysAmount[preset] : undefined;
|
|
83
|
+
if (!presetDiff) {
|
|
84
|
+
return {
|
|
85
|
+
from: null,
|
|
86
|
+
to: null
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const fromDate = new Date(today.getTime());
|
|
90
|
+
const {
|
|
91
|
+
days,
|
|
92
|
+
months,
|
|
93
|
+
years
|
|
94
|
+
} = presetDiff;
|
|
95
|
+
if (days) {
|
|
96
|
+
fromDate.setDate(today.getDate() + days);
|
|
97
|
+
}
|
|
98
|
+
if (months) {
|
|
99
|
+
fromDate.setMonth(today.getMonth() + months);
|
|
100
|
+
}
|
|
101
|
+
if (years) {
|
|
102
|
+
fromDate.setFullYear(today.getFullYear() + years);
|
|
103
|
+
}
|
|
104
|
+
if (fromDate.getTime() > today.getTime()) {
|
|
105
|
+
return {
|
|
106
|
+
from: today,
|
|
107
|
+
to: fromDate,
|
|
108
|
+
preset
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
from: fromDate,
|
|
113
|
+
to: today,
|
|
114
|
+
preset
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
exports.getDatesFromPreset = getDatesFromPreset;
|
|
118
|
+
const MAP_DATE_PRESET_TO_KEY = exports.MAP_DATE_PRESET_TO_KEY = {
|
|
119
|
+
[DateRangePreset.NONE]: 'cairo.filtersPanel.date.none',
|
|
120
|
+
[DateRangePreset.SEVEN_DAYS]: 'cairo.filtersPanel.date.7days',
|
|
121
|
+
[DateRangePreset.FOURTEEN_DAYS]: 'cairo.filtersPanel.date.14days',
|
|
122
|
+
[DateRangePreset.MONTH]: 'cairo.filtersPanel.date.lastMonth',
|
|
123
|
+
[DateRangePreset.CUSTOM]: 'cairo.filtersPanel.date.custom',
|
|
124
|
+
[DateRangePreset.TODAY]: 'cairo.filtersPanel.date.today',
|
|
125
|
+
[DateRangePreset.TOMORROW]: 'cairo.filtersPanel.date.tomorrow',
|
|
126
|
+
[DateRangePreset.NEXT_THREE_DAYS]: 'cairo.filtersPanel.date.next3Days',
|
|
127
|
+
[DateRangePreset.NEXT_SEVEN_DAYS]: 'cairo.filtersPanel.date.next7Days',
|
|
128
|
+
[DateRangePreset.NEXT_THIRTY_DAYS]: 'cairo.filtersPanel.date.next30Days'
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=dateRangeUtils.js.map
|