bways-grid 0.0.6 → 0.0.7
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/fesm2022/bways-grid.mjs +134 -9
- package/fesm2022/bways-grid.mjs.map +1 -1
- package/lib/components/filter-tool-panel/filter-tool-panel.component.d.ts +4 -1
- package/lib/components/side-bar/side-bar.component.d.ts +4 -1
- package/lib/components/ultra-grid/ultra-grid.component.d.ts +2 -0
- package/package.json +1 -1
package/fesm2022/bways-grid.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, HostListener, Output, Input, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, HostBinding, Injectable, PLATFORM_ID, Inject, NgModule } from '@angular/core';
|
|
2
|
+
import { EventEmitter, HostListener, Output, Input, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, HostBinding, inject, ChangeDetectorRef, Injectable, PLATFORM_ID, Inject, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
5
5
|
import * as i3$1 from '@angular/cdk/scrolling';
|
|
@@ -1656,6 +1656,8 @@ class FilterToolPanelComponent {
|
|
|
1656
1656
|
filterApplied = new EventEmitter();
|
|
1657
1657
|
conditionFilterChanged = new EventEmitter();
|
|
1658
1658
|
clearAllFilters = new EventEmitter();
|
|
1659
|
+
saveFiltersRequested = new EventEmitter();
|
|
1660
|
+
filtersImported = new EventEmitter();
|
|
1659
1661
|
sections = [];
|
|
1660
1662
|
_loadedFields = new Set();
|
|
1661
1663
|
constructor(cdr) {
|
|
@@ -1922,8 +1924,27 @@ class FilterToolPanelComponent {
|
|
|
1922
1924
|
trackByField(index, section) {
|
|
1923
1925
|
return section.column.field;
|
|
1924
1926
|
}
|
|
1927
|
+
onFileSelected(event) {
|
|
1928
|
+
const file = event.target.files?.[0];
|
|
1929
|
+
if (!file)
|
|
1930
|
+
return;
|
|
1931
|
+
const reader = new FileReader();
|
|
1932
|
+
reader.onload = (e) => {
|
|
1933
|
+
try {
|
|
1934
|
+
const json = JSON.parse(e.target?.result);
|
|
1935
|
+
this.filtersImported.emit(json);
|
|
1936
|
+
// Reset input so importing same file again triggers change
|
|
1937
|
+
event.target.value = '';
|
|
1938
|
+
}
|
|
1939
|
+
catch (err) {
|
|
1940
|
+
console.error('Failed to parse filter JSON:', err);
|
|
1941
|
+
alert('Invalid filter file format.');
|
|
1942
|
+
}
|
|
1943
|
+
};
|
|
1944
|
+
reader.readAsText(file);
|
|
1945
|
+
}
|
|
1925
1946
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FilterToolPanelComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1926
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: FilterToolPanelComponent, isStandalone: true, selector: "ug-filter-tool-panel", inputs: { columns: "columns", rowData: "rowData", activeFilters: "activeFilters", conditionFilters: "conditionFilters" }, outputs: { filterApplied: "filterApplied", conditionFilterChanged: "conditionFilterChanged", clearAllFilters: "clearAllFilters" }, usesOnChanges: true, ngImport: i0, template: `
|
|
1947
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: FilterToolPanelComponent, isStandalone: true, selector: "ug-filter-tool-panel", inputs: { columns: "columns", rowData: "rowData", activeFilters: "activeFilters", conditionFilters: "conditionFilters" }, outputs: { filterApplied: "filterApplied", conditionFilterChanged: "conditionFilterChanged", clearAllFilters: "clearAllFilters", saveFiltersRequested: "saveFiltersRequested", filtersImported: "filtersImported" }, usesOnChanges: true, ngImport: i0, template: `
|
|
1927
1948
|
<div class="ug-ftp-wrapper">
|
|
1928
1949
|
<!-- Global Toolbar -->
|
|
1929
1950
|
<div class="ug-ftp-toolbar">
|
|
@@ -1939,6 +1960,18 @@ class FilterToolPanelComponent {
|
|
|
1939
1960
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
|
|
1940
1961
|
Clear All
|
|
1941
1962
|
</button>
|
|
1963
|
+
|
|
1964
|
+
<div style="flex: 1"></div>
|
|
1965
|
+
|
|
1966
|
+
<button class="ug-ftp-btn" (click)="saveFiltersRequested.emit()" title="Save Filters to JSON">
|
|
1967
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"></path><polyline points="17 21 17 13 7 13 7 21"></polyline><polyline points="7 3 7 8 15 8"></polyline></svg>
|
|
1968
|
+
Save
|
|
1969
|
+
</button>
|
|
1970
|
+
<button class="ug-ftp-btn" (click)="fileInput.click()" title="Import Filters from JSON">
|
|
1971
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg>
|
|
1972
|
+
Import
|
|
1973
|
+
</button>
|
|
1974
|
+
<input #fileInput type="file" accept=".json" style="display: none" (change)="onFileSelected($event)">
|
|
1942
1975
|
</div>
|
|
1943
1976
|
|
|
1944
1977
|
<!-- Column Filter Sections -->
|
|
@@ -2055,6 +2088,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
2055
2088
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
|
|
2056
2089
|
Clear All
|
|
2057
2090
|
</button>
|
|
2091
|
+
|
|
2092
|
+
<div style="flex: 1"></div>
|
|
2093
|
+
|
|
2094
|
+
<button class="ug-ftp-btn" (click)="saveFiltersRequested.emit()" title="Save Filters to JSON">
|
|
2095
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"></path><polyline points="17 21 17 13 7 13 7 21"></polyline><polyline points="7 3 7 8 15 8"></polyline></svg>
|
|
2096
|
+
Save
|
|
2097
|
+
</button>
|
|
2098
|
+
<button class="ug-ftp-btn" (click)="fileInput.click()" title="Import Filters from JSON">
|
|
2099
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg>
|
|
2100
|
+
Import
|
|
2101
|
+
</button>
|
|
2102
|
+
<input #fileInput type="file" accept=".json" style="display: none" (change)="onFileSelected($event)">
|
|
2058
2103
|
</div>
|
|
2059
2104
|
|
|
2060
2105
|
<!-- Column Filter Sections -->
|
|
@@ -2166,6 +2211,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
2166
2211
|
type: Output
|
|
2167
2212
|
}], clearAllFilters: [{
|
|
2168
2213
|
type: Output
|
|
2214
|
+
}], saveFiltersRequested: [{
|
|
2215
|
+
type: Output
|
|
2216
|
+
}], filtersImported: [{
|
|
2217
|
+
type: Output
|
|
2169
2218
|
}] } });
|
|
2170
2219
|
|
|
2171
2220
|
class SideBarComponent {
|
|
@@ -2186,17 +2235,23 @@ class SideBarComponent {
|
|
|
2186
2235
|
filterApplied = new EventEmitter();
|
|
2187
2236
|
conditionFilterChanged = new EventEmitter();
|
|
2188
2237
|
clearAllFilters = new EventEmitter();
|
|
2238
|
+
saveFiltersRequested = new EventEmitter();
|
|
2239
|
+
filtersImported = new EventEmitter();
|
|
2189
2240
|
activeTab = 'columns'; // Open by default for demo parity
|
|
2241
|
+
cdr = inject(ChangeDetectorRef);
|
|
2190
2242
|
toggleTab(tab) {
|
|
2243
|
+
console.log('Sidebar toggleTab requested:', tab, 'Current:', this.activeTab);
|
|
2191
2244
|
if (this.activeTab === tab) {
|
|
2192
2245
|
this.activeTab = null;
|
|
2193
2246
|
}
|
|
2194
2247
|
else {
|
|
2195
2248
|
this.activeTab = tab;
|
|
2196
2249
|
}
|
|
2250
|
+
this.cdr.markForCheck();
|
|
2197
2251
|
}
|
|
2198
2252
|
closePanel() {
|
|
2199
2253
|
this.activeTab = null;
|
|
2254
|
+
this.cdr.markForCheck();
|
|
2200
2255
|
}
|
|
2201
2256
|
onColumnsChanged(updatedCols) {
|
|
2202
2257
|
this.columnsUpdated.emit(updatedCols);
|
|
@@ -2226,7 +2281,7 @@ class SideBarComponent {
|
|
|
2226
2281
|
this.pivotModelUpdated.emit(model);
|
|
2227
2282
|
}
|
|
2228
2283
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SideBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2229
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SideBarComponent, isStandalone: true, selector: "ug-side-bar", inputs: { columns: "columns", rowData: "rowData", activeFilters: "activeFilters", conditionFilters: "conditionFilters", groupModel: "groupModel", valuesModel: "valuesModel", pivotMode: "pivotMode", pivotColumns: "pivotColumns" }, outputs: { columnsUpdated: "columnsUpdated", groupModelUpdated: "groupModelUpdated", valuesModelUpdated: "valuesModelUpdated", pivotModeUpdated: "pivotModeUpdated", pivotModelUpdated: "pivotModelUpdated", exportExcelClicked: "exportExcelClicked", filterApplied: "filterApplied", conditionFilterChanged: "conditionFilterChanged", clearAllFilters: "clearAllFilters" }, ngImport: i0, template: `
|
|
2284
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SideBarComponent, isStandalone: true, selector: "ug-side-bar", inputs: { columns: "columns", rowData: "rowData", activeFilters: "activeFilters", conditionFilters: "conditionFilters", groupModel: "groupModel", valuesModel: "valuesModel", pivotMode: "pivotMode", pivotColumns: "pivotColumns" }, outputs: { columnsUpdated: "columnsUpdated", groupModelUpdated: "groupModelUpdated", valuesModelUpdated: "valuesModelUpdated", pivotModeUpdated: "pivotModeUpdated", pivotModelUpdated: "pivotModelUpdated", exportExcelClicked: "exportExcelClicked", filterApplied: "filterApplied", conditionFilterChanged: "conditionFilterChanged", clearAllFilters: "clearAllFilters", saveFiltersRequested: "saveFiltersRequested", filtersImported: "filtersImported" }, ngImport: i0, template: `
|
|
2230
2285
|
<div class="ug-side-bar-wrapper">
|
|
2231
2286
|
<!-- Content Area -->
|
|
2232
2287
|
<div class="ug-side-bar-content" *ngIf="activeTab">
|
|
@@ -2261,7 +2316,9 @@ class SideBarComponent {
|
|
|
2261
2316
|
[conditionFilters]="conditionFilters"
|
|
2262
2317
|
(filterApplied)="onFilterApplied($event)"
|
|
2263
2318
|
(conditionFilterChanged)="onConditionFilterChanged($event)"
|
|
2264
|
-
(clearAllFilters)="onClearAllFilters()"
|
|
2319
|
+
(clearAllFilters)="onClearAllFilters()"
|
|
2320
|
+
(saveFiltersRequested)="saveFiltersRequested.emit()"
|
|
2321
|
+
(filtersImported)="filtersImported.emit($event)">
|
|
2265
2322
|
</ug-filter-tool-panel>
|
|
2266
2323
|
</div>
|
|
2267
2324
|
</div>
|
|
@@ -2283,7 +2340,7 @@ class SideBarComponent {
|
|
|
2283
2340
|
</div>
|
|
2284
2341
|
</div>
|
|
2285
2342
|
</div>
|
|
2286
|
-
`, isInline: true, styles: [".ug-side-bar-wrapper{display:flex;flex-direction:row;height:100%;background-color:var(--ug-bg-color);border-left:1px solid var(--ug-border-color);font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);color:var(--ug-header-color)}.ug-side-bar-content{display:flex;flex-direction:column;width:250px;height:100%;border-right:1px solid var(--ug-border-color)}.ug-side-bar-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg)}.ug-side-bar-title{font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);font-weight:var(--ug-header-font-weight, 500);color:var(--ug-header-color)}.ug-side-bar-close{cursor:pointer;color:var(--ug-icon-color);display:flex;align-items:center;justify-content:center}.ug-side-bar-close:hover{color:var(--ug-primary-color)}.ug-side-bar-body{flex:1;overflow-y:auto;overflow-x:hidden;background-color:var(--ug-bg-color)}.ug-side-bar-toolbar{display:flex;flex-direction:column;width:40px;height:100%;background-color:var(--ug-header-bg);padding-top:8px;gap:8px;align-items:center}.ug-side-bar-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:8px 4px;cursor:pointer;color:var(--ug-icon-color);border-left:2px solid transparent;width:100%;box-sizing:border-box}.ug-side-bar-tab span{writing-mode:vertical-rl;transform:rotate(180deg);margin-top:12px;font-family:var(--ug-font-family, sans-serif);font-weight:var(--ug-header-font-weight, 500);font-size:var(--ug-font-size, 13px);letter-spacing:.5px}.ug-side-bar-tab:hover{color:var(--ug-primary-color);background-color:var(--ug-row-hover-bg)}.ug-side-bar-tab.active{color:var(--ug-primary-color);background-color:var(--ug-bg-color);border-left:2px solid var(--ug-primary-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnToolPanelComponent, selector: "ug-column-tool-panel", inputs: ["columns", "groupModel", "valuesModel", "pivotMode", "pivotColumns"], outputs: ["columnsUpdated", "groupModelChanged", "valuesModelChanged", "pivotModeChanged", "pivotModelChanged", "exportExcelClicked"] }, { kind: "component", type: FilterToolPanelComponent, selector: "ug-filter-tool-panel", inputs: ["columns", "rowData", "activeFilters", "conditionFilters"], outputs: ["filterApplied", "conditionFilterChanged", "clearAllFilters"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
2343
|
+
`, isInline: true, styles: [".ug-side-bar-wrapper{display:flex;flex-direction:row;height:100%;background-color:var(--ug-bg-color);border-left:1px solid var(--ug-border-color);font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);color:var(--ug-header-color)}.ug-side-bar-content{display:flex;flex-direction:column;width:250px;height:100%;border-right:1px solid var(--ug-border-color)}.ug-side-bar-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg)}.ug-side-bar-title{font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);font-weight:var(--ug-header-font-weight, 500);color:var(--ug-header-color)}.ug-side-bar-close{cursor:pointer;color:var(--ug-icon-color);display:flex;align-items:center;justify-content:center}.ug-side-bar-close:hover{color:var(--ug-primary-color)}.ug-side-bar-body{flex:1;overflow-y:auto;overflow-x:hidden;background-color:var(--ug-bg-color)}.ug-side-bar-toolbar{display:flex;flex-direction:column;width:40px;height:100%;background-color:var(--ug-header-bg);padding-top:8px;gap:8px;align-items:center}.ug-side-bar-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:8px 4px;cursor:pointer;color:var(--ug-icon-color);border-left:2px solid transparent;width:100%;box-sizing:border-box}.ug-side-bar-tab span{writing-mode:vertical-rl;transform:rotate(180deg);margin-top:12px;font-family:var(--ug-font-family, sans-serif);font-weight:var(--ug-header-font-weight, 500);font-size:var(--ug-font-size, 13px);letter-spacing:.5px}.ug-side-bar-tab:hover{color:var(--ug-primary-color);background-color:var(--ug-row-hover-bg)}.ug-side-bar-tab.active{color:var(--ug-primary-color);background-color:var(--ug-bg-color);border-left:2px solid var(--ug-primary-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnToolPanelComponent, selector: "ug-column-tool-panel", inputs: ["columns", "groupModel", "valuesModel", "pivotMode", "pivotColumns"], outputs: ["columnsUpdated", "groupModelChanged", "valuesModelChanged", "pivotModeChanged", "pivotModelChanged", "exportExcelClicked"] }, { kind: "component", type: FilterToolPanelComponent, selector: "ug-filter-tool-panel", inputs: ["columns", "rowData", "activeFilters", "conditionFilters"], outputs: ["filterApplied", "conditionFilterChanged", "clearAllFilters", "saveFiltersRequested", "filtersImported"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
2287
2344
|
}
|
|
2288
2345
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SideBarComponent, decorators: [{
|
|
2289
2346
|
type: Component,
|
|
@@ -2322,7 +2379,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
2322
2379
|
[conditionFilters]="conditionFilters"
|
|
2323
2380
|
(filterApplied)="onFilterApplied($event)"
|
|
2324
2381
|
(conditionFilterChanged)="onConditionFilterChanged($event)"
|
|
2325
|
-
(clearAllFilters)="onClearAllFilters()"
|
|
2382
|
+
(clearAllFilters)="onClearAllFilters()"
|
|
2383
|
+
(saveFiltersRequested)="saveFiltersRequested.emit()"
|
|
2384
|
+
(filtersImported)="filtersImported.emit($event)">
|
|
2326
2385
|
</ug-filter-tool-panel>
|
|
2327
2386
|
</div>
|
|
2328
2387
|
</div>
|
|
@@ -2379,6 +2438,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
2379
2438
|
type: Output
|
|
2380
2439
|
}], clearAllFilters: [{
|
|
2381
2440
|
type: Output
|
|
2441
|
+
}], saveFiltersRequested: [{
|
|
2442
|
+
type: Output
|
|
2443
|
+
}], filtersImported: [{
|
|
2444
|
+
type: Output
|
|
2382
2445
|
}] } });
|
|
2383
2446
|
|
|
2384
2447
|
class GridFlattenerService {
|
|
@@ -3469,6 +3532,64 @@ class UltraGridComponent {
|
|
|
3469
3532
|
}
|
|
3470
3533
|
this.applyLocalData();
|
|
3471
3534
|
}
|
|
3535
|
+
// --- Save / Import Filters ---
|
|
3536
|
+
handleSaveFilters() {
|
|
3537
|
+
const state = {
|
|
3538
|
+
activeFilters: {},
|
|
3539
|
+
conditionFilters: {}
|
|
3540
|
+
};
|
|
3541
|
+
// Convert Map<string, Set<any>> to Record<string, any[]>
|
|
3542
|
+
if (this.activeFilters.size > 0) {
|
|
3543
|
+
for (const [field, selectedSet] of this.activeFilters.entries()) {
|
|
3544
|
+
state.activeFilters[field] = Array.from(selectedSet);
|
|
3545
|
+
}
|
|
3546
|
+
}
|
|
3547
|
+
// Convert Map to Object
|
|
3548
|
+
if (this.conditionFilters.size > 0) {
|
|
3549
|
+
state.conditionFilters = Object.fromEntries(this.conditionFilters);
|
|
3550
|
+
}
|
|
3551
|
+
const json = JSON.stringify(state, null, 2);
|
|
3552
|
+
const blob = new Blob([json], { type: 'application/json' });
|
|
3553
|
+
const url = URL.createObjectURL(blob);
|
|
3554
|
+
const link = document.createElement('a');
|
|
3555
|
+
link.href = url;
|
|
3556
|
+
link.download = `grid-filters-${new Date().toISOString().slice(0, 10)}.json`;
|
|
3557
|
+
link.click();
|
|
3558
|
+
URL.revokeObjectURL(url);
|
|
3559
|
+
}
|
|
3560
|
+
handleImportFilters(data) {
|
|
3561
|
+
if (!data)
|
|
3562
|
+
return;
|
|
3563
|
+
console.log('Importing filters:', data);
|
|
3564
|
+
try {
|
|
3565
|
+
// Restore activeFilters (Record -> Map<string, Set>)
|
|
3566
|
+
// Important: We create a NEW Map instance to trigger Output/Input change detection
|
|
3567
|
+
const newActiveFilters = new Map();
|
|
3568
|
+
if (data.activeFilters) {
|
|
3569
|
+
Object.keys(data.activeFilters).forEach(field => {
|
|
3570
|
+
newActiveFilters.set(field, new Set(data.activeFilters[field]));
|
|
3571
|
+
});
|
|
3572
|
+
}
|
|
3573
|
+
this.activeFilters = newActiveFilters;
|
|
3574
|
+
// Restore conditionFilters (Object -> Map)
|
|
3575
|
+
// Important: We create a NEW Map instance to trigger Output/Input change detection
|
|
3576
|
+
if (data.conditionFilters) {
|
|
3577
|
+
this.conditionFilters = new Map(Object.entries(data.conditionFilters));
|
|
3578
|
+
}
|
|
3579
|
+
else {
|
|
3580
|
+
this.conditionFilters = new Map();
|
|
3581
|
+
}
|
|
3582
|
+
// Refresh grid
|
|
3583
|
+
this.currentPage = 1;
|
|
3584
|
+
this.applyLocalData();
|
|
3585
|
+
this.cdr.markForCheck();
|
|
3586
|
+
console.log('Filters imported and applied successfully.');
|
|
3587
|
+
}
|
|
3588
|
+
catch (err) {
|
|
3589
|
+
console.error('Error applying imported filters:', err);
|
|
3590
|
+
alert('Error applying filters. Please ensure the file format is correct.');
|
|
3591
|
+
}
|
|
3592
|
+
}
|
|
3472
3593
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UltraGridComponent, deps: [{ token: PLATFORM_ID }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GridFlattenerService }, { token: ExcelExportService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3473
3594
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: UltraGridComponent, isStandalone: true, selector: "bways-grid", inputs: { columns: "columns", rowData: "rowData", serverDataSource: "serverDataSource", config: "config", pagination: "pagination", pageSize: "pageSize", groupModel: "groupModel", valuesModel: "valuesModel", pivotColumns: "pivotColumns" }, outputs: { rowClicked: "rowClicked", sortChanged: "sortChanged" }, usesOnChanges: true, ngImport: i0, template: `
|
|
3474
3595
|
<div class="ug-wrapper" [ngClass]="config.theme || 'ag-theme-alpine'">
|
|
@@ -3552,7 +3673,9 @@ class UltraGridComponent {
|
|
|
3552
3673
|
(exportExcelClicked)="exportExcel({ includeHeaders: true })"
|
|
3553
3674
|
(filterApplied)="onFilterApplied($event)"
|
|
3554
3675
|
(conditionFilterChanged)="onConditionFilterChanged($event)"
|
|
3555
|
-
(clearAllFilters)="onClearAllFilters()"
|
|
3676
|
+
(clearAllFilters)="onClearAllFilters()"
|
|
3677
|
+
(saveFiltersRequested)="handleSaveFilters()"
|
|
3678
|
+
(filtersImported)="handleImportFilters($event)">
|
|
3556
3679
|
</ug-side-bar>
|
|
3557
3680
|
|
|
3558
3681
|
|
|
@@ -3588,7 +3711,7 @@ class UltraGridComponent {
|
|
|
3588
3711
|
</div>
|
|
3589
3712
|
|
|
3590
3713
|
</div>
|
|
3591
|
-
`, isInline: true, styles: ["bways-grid{display:block;height:100%;width:100%}.ug-wrapper{display:flex;flex-direction:row;height:100%;width:100%;border:1px solid var(--ug-border-color);background-color:var(--ug-bg-color);box-sizing:border-box;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-header-color);overflow:hidden}.ug-main{display:flex;flex-direction:column;flex:1;min-width:0;overflow:hidden}.ug-body{flex:1;overflow:hidden;position:relative}.ug-viewport{height:100%;width:100%;overflow:auto}.ug-ssr-container{height:100%;width:100%;overflow:hidden}.ug-status-bar{display:flex;align-items:center;padding:0 16px;min-height:48px;border-top:1px solid var(--ug-border-color);font-weight:500;font-size:13px;color:var(--ug-header-color);background-color:var(--ug-footer-bg)}.ug-cc-overlay-container{position:fixed;z-index:1002}.ug-wrapper{--ug-border-color: #dde2eb;--ug-bg-color: #ffffff;--ug-header-bg: #f8f8f8;--ug-header-color: #181d1f;--ug-header-hover-bg: #ececec;--ug-row-bg: #ffffff;--ug-row-hover-bg: #f1f5f9;--ug-row-selected-bg: #dcebf7;--ug-primary-color: #1890ff;--ug-footer-bg: #ffffff;--ug-footer-color: #181d1f;--ug-icon-color: #68686e;--ug-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;--ug-font-size: 13px;--ug-header-font-weight: 500}.ug-wrapper.ag-theme-alpine-dark{--ug-border-color: #334155;--ug-bg-color: #1e293b;--ug-header-bg: #0f172a;--ug-header-color: #e2e8f0;--ug-header-hover-bg: #1e293b;--ug-row-bg: #1e293b;--ug-row-hover-bg: #334155;--ug-row-selected-bg: #0f172a;--ug-primary-color: #60a5fa;--ug-footer-bg: #0f172a;--ug-footer-color: #94a3b8;--ug-icon-color: #94a3b8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: HeaderComponent, selector: "ug-header", inputs: ["columns", "sortModel", "isAllSelected"], outputs: ["sortChanged", "columnsReordered", "columnResized", "headerCheckboxClicked", "menuClicked", "filterClicked"] }, { kind: "component", type: RowComponent, selector: "ug-row", inputs: ["columns", "row", "rowHeight", "isExpanded", "selectionVersion"], outputs: ["groupToggled"] }, { kind: "component", type: PaginationComponent, selector: "ug-pagination", inputs: ["totalCount", "pageSize", "currentPage"], outputs: ["pageChanged", "pageSizeChanged"] }, { kind: "component", type: HeaderMenuComponent, selector: "ug-header-menu", inputs: ["column", "isOpen", "position", "groupModel"], outputs: ["closeMenu", "sort", "pin", "autosize", "group", "chooseColumns"] }, { kind: "component", type: ChooseColumnsComponent, selector: "ug-choose-columns", inputs: ["columns"], outputs: ["columnsChanged", "closePanel"] }, { kind: "component", type: HeaderFilterComponent, selector: "ug-header-filter", inputs: ["column", "isOpen", "position", "uniqueValues", "activeFilterSet"], outputs: ["closeFilter", "filterApplied"] }, { kind: "component", type: SideBarComponent, selector: "ug-side-bar", inputs: ["columns", "rowData", "activeFilters", "conditionFilters", "groupModel", "valuesModel", "pivotMode", "pivotColumns"], outputs: ["columnsUpdated", "groupModelUpdated", "valuesModelUpdated", "pivotModeUpdated", "pivotModelUpdated", "exportExcelClicked", "filterApplied", "conditionFilterChanged", "clearAllFilters"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
3714
|
+
`, isInline: true, styles: ["bways-grid{display:block;height:100%;width:100%}.ug-wrapper{display:flex;flex-direction:row;height:100%;width:100%;border:1px solid var(--ug-border-color);background-color:var(--ug-bg-color);box-sizing:border-box;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-header-color);overflow:hidden}.ug-main{display:flex;flex-direction:column;flex:1;min-width:0;overflow:hidden}.ug-body{flex:1;overflow:hidden;position:relative}.ug-viewport{height:100%;width:100%;overflow:auto}.ug-ssr-container{height:100%;width:100%;overflow:hidden}.ug-status-bar{display:flex;align-items:center;padding:0 16px;min-height:48px;border-top:1px solid var(--ug-border-color);font-weight:500;font-size:13px;color:var(--ug-header-color);background-color:var(--ug-footer-bg)}.ug-cc-overlay-container{position:fixed;z-index:1002}.ug-wrapper{--ug-border-color: #dde2eb;--ug-bg-color: #ffffff;--ug-header-bg: #f8f8f8;--ug-header-color: #181d1f;--ug-header-hover-bg: #ececec;--ug-row-bg: #ffffff;--ug-row-hover-bg: #f1f5f9;--ug-row-selected-bg: #dcebf7;--ug-primary-color: #1890ff;--ug-footer-bg: #ffffff;--ug-footer-color: #181d1f;--ug-icon-color: #68686e;--ug-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;--ug-font-size: 13px;--ug-header-font-weight: 500}.ug-wrapper.ag-theme-alpine-dark{--ug-border-color: #334155;--ug-bg-color: #1e293b;--ug-header-bg: #0f172a;--ug-header-color: #e2e8f0;--ug-header-hover-bg: #1e293b;--ug-row-bg: #1e293b;--ug-row-hover-bg: #334155;--ug-row-selected-bg: #0f172a;--ug-primary-color: #60a5fa;--ug-footer-bg: #0f172a;--ug-footer-color: #94a3b8;--ug-icon-color: #94a3b8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: HeaderComponent, selector: "ug-header", inputs: ["columns", "sortModel", "isAllSelected"], outputs: ["sortChanged", "columnsReordered", "columnResized", "headerCheckboxClicked", "menuClicked", "filterClicked"] }, { kind: "component", type: RowComponent, selector: "ug-row", inputs: ["columns", "row", "rowHeight", "isExpanded", "selectionVersion"], outputs: ["groupToggled"] }, { kind: "component", type: PaginationComponent, selector: "ug-pagination", inputs: ["totalCount", "pageSize", "currentPage"], outputs: ["pageChanged", "pageSizeChanged"] }, { kind: "component", type: HeaderMenuComponent, selector: "ug-header-menu", inputs: ["column", "isOpen", "position", "groupModel"], outputs: ["closeMenu", "sort", "pin", "autosize", "group", "chooseColumns"] }, { kind: "component", type: ChooseColumnsComponent, selector: "ug-choose-columns", inputs: ["columns"], outputs: ["columnsChanged", "closePanel"] }, { kind: "component", type: HeaderFilterComponent, selector: "ug-header-filter", inputs: ["column", "isOpen", "position", "uniqueValues", "activeFilterSet"], outputs: ["closeFilter", "filterApplied"] }, { kind: "component", type: SideBarComponent, selector: "ug-side-bar", inputs: ["columns", "rowData", "activeFilters", "conditionFilters", "groupModel", "valuesModel", "pivotMode", "pivotColumns"], outputs: ["columnsUpdated", "groupModelUpdated", "valuesModelUpdated", "pivotModeUpdated", "pivotModelUpdated", "exportExcelClicked", "filterApplied", "conditionFilterChanged", "clearAllFilters", "saveFiltersRequested", "filtersImported"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
3592
3715
|
}
|
|
3593
3716
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UltraGridComponent, decorators: [{
|
|
3594
3717
|
type: Component,
|
|
@@ -3684,7 +3807,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
3684
3807
|
(exportExcelClicked)="exportExcel({ includeHeaders: true })"
|
|
3685
3808
|
(filterApplied)="onFilterApplied($event)"
|
|
3686
3809
|
(conditionFilterChanged)="onConditionFilterChanged($event)"
|
|
3687
|
-
(clearAllFilters)="onClearAllFilters()"
|
|
3810
|
+
(clearAllFilters)="onClearAllFilters()"
|
|
3811
|
+
(saveFiltersRequested)="handleSaveFilters()"
|
|
3812
|
+
(filtersImported)="handleImportFilters($event)">
|
|
3688
3813
|
</ug-side-bar>
|
|
3689
3814
|
|
|
3690
3815
|
|