diff --git a/package-lock.json b/package-lock.json index caf25f80..69c6259d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13684,6 +13684,44 @@ "tslib": "x" } }, + "packages/FetchableDataGrid/node_modules/@3mo/data-grid": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/@3mo/data-grid/-/data-grid-0.9.15.tgz", + "integrity": "sha512-BS/bYKAJX1FGZvuxTFRFGwl/eFJKA0cTz5yEGXf9JAT1cZX/hI+1peuzGKBepI4LC2GZPnvPD7jFzgm0fS69Kw==", + "dependencies": { + "@3mo/checkbox": "x", + "@3mo/context-menu": "x", + "@3mo/date-time-fields": "x", + "@3mo/downloader": "x", + "@3mo/empty-state": "x", + "@3mo/flex": "x", + "@3mo/focus-ring": "x", + "@3mo/grid": "x", + "@3mo/icon": "x", + "@3mo/icon-button": "x", + "@3mo/instanceof-attribute-controller": "x", + "@3mo/keyboard-controller": "x", + "@3mo/line": "x", + "@3mo/localization": "x", + "@3mo/media-query-observer": "x", + "@3mo/mutation-observer": "x", + "@3mo/number-fields": "x", + "@3mo/resize-observer": "x", + "@3mo/section": "x", + "@3mo/select-field": "x", + "@3mo/slot-controller": "x", + "@3mo/splitter": "x", + "@3mo/tab": "x", + "@3mo/text-fields": "x", + "@3mo/theme": "x", + "@3mo/tooltip": "x", + "@a11d/key-path": "1.x", + "@a11d/lit": "x", + "@a11d/lit-application": "x", + "requestidlecallback-polyfill": "x", + "tslib": "x" + } + }, "packages/FetchableDialog": { "name": "@3mo/fetchable-dialog", "version": "0.1.3", diff --git a/packages/DataGrid/DataGrid.ts b/packages/DataGrid/DataGrid.ts index 3122f717..4f47ba2b 100644 --- a/packages/DataGrid/DataGrid.ts +++ b/packages/DataGrid/DataGrid.ts @@ -586,7 +586,7 @@ export class DataGrid = PaginatedResult | NonPaginatedResult Localizer.dictionaries.add('de', { 'Make a filter selection': 'Filterauswahl vornehmen', 'Refetch': 'Neu laden', + 'Reset all filters': 'Alle Filter zurücksetzen', }) +const deepCloneKeepingClasses = (origin: T) => { + const clonedObject = structuredClone(origin) + for (const keyName in origin) { + const value = origin[keyName] + if (value instanceof DateTimeRange) { + clonedObject[keyName] = new DateTimeRange(value.start, value.end) as T[Extract] + } + } + return clonedObject +} + /** * @element mo-fetchable-data-grid * @@ -67,6 +79,8 @@ export class FetchableDataGrid Partial // protected filterParameters?: () => TDataFetcherParameters + initialParameters!: TDataFetcherParameters + protected readonly parametersBinder = new Binder(this, 'parameters') protected fetchDirty?(parameters: TDataFetcherParameters): Array | undefined @@ -77,7 +91,9 @@ export class FetchableDataGrid ` } + + protected override get sidePanelTemplate() { + return html` + + ${this.settingsDefaultTemplate} + + ${this.filtersDefaultTemplate} + + ${[html.nothing, undefined].includes(this.filtersDefaultTemplate) || !this.hasFilters ? html.nothing : html` + this.restoreDefaultParameters()} + > + ${t('Reset all filters')} + + `} + + + ` + } + + private get hasParametersChanged() { + return Object.entries(this.parameters ?? {}) + .filter(([_, value]) => value !== undefined + && value !== '' + && (!(value instanceof Array) || value.length > 0)) + .some(([key, value]) => JSON.stringify(this.initialParameters[key]) !== JSON.stringify(value)) + } + + private restoreDefaultParameters = () => { + this.parameters = deepCloneKeepingClasses(this.initialParameters) + } } declare global {