This commit is contained in:
string 2025-10-23 22:26:41 +05:30
parent e533362122
commit 0e3aa9b903
2 changed files with 98 additions and 15 deletions

View File

@ -343,8 +343,20 @@
<h5>Base Drilldown Filters</h5>
<div class="clr-subtext">Configure filters for the base drilldown level</div>
<!-- Common Filter Toggle for Base Drilldown -->
<div class="clr-form-control" style="margin-top: 10px;">
<div class="clr-control-container">
<div class="clr-checkbox-wrapper">
<input type="checkbox" id="commonFilterToggleDrilldown" [(ngModel)]="gadgetsEditdata.commonFilterEnabledDrilldown"
(change)="onCommonFilterToggleDrilldown()" [ngModelOptions]="{standalone: true}" class="clr-checkbox" />
<label for="commonFilterToggleDrilldown" class="clr-control-label">Use Common Filter</label>
</div>
</div>
</div>
<!-- Add Drilldown Filter Button -->
<button class="btn btn-sm btn-primary" (click)="addDrilldownFilter()" style="margin-top: 10px; margin-bottom: 10px;">
<button class="btn btn-sm btn-primary" (click)="addDrilldownFilter()" style="margin-top: 10px; margin-bottom: 10px;"
[disabled]="gadgetsEditdata.commonFilterEnabledDrilldown">
<clr-icon shape="plus"></clr-icon> Add Filter
</button>
@ -353,14 +365,16 @@
style="margin-bottom: 10px; padding: 8px; border: 1px solid #eee; border-radius: 4px; background-color: #f9f9f9;">
<div style="display: flex; justify-content: space-between; align-items: center;">
<span>Filter {{i + 1}}</span>
<button class="btn btn-icon btn-danger btn-sm" (click)="removeDrilldownFilter(i)">
<button class="btn btn-icon btn-danger btn-sm" (click)="removeDrilldownFilter(i)"
[disabled]="gadgetsEditdata.commonFilterEnabledDrilldown">
<clr-icon shape="trash"></clr-icon>
</button>
</div>
<div class="clr-row" style="margin-top: 8px;">
<div class="clr-col-sm-5">
<select [(ngModel)]="filter.field" [ngModelOptions]="{standalone: true}" class="clr-select">
<select [(ngModel)]="filter.field" [ngModelOptions]="{standalone: true}" class="clr-select"
[disabled]="gadgetsEditdata.commonFilterEnabledDrilldown">
<option value="">Select Field</option>
<option *ngFor="let column of getAvailableFields(gadgetsEditdata.drilldownFilters, i, drilldownColumnData)" [value]="column">{{column}}</option>
</select>
@ -368,11 +382,13 @@
<div class="clr-col-sm-5">
<input type="text" [(ngModel)]="filter.value" [ngModelOptions]="{standalone: true}"
class="clr-input" placeholder="Filter Value" />
class="clr-input" placeholder="Filter Value"
[disabled]="gadgetsEditdata.commonFilterEnabledDrilldown"/>
</div>
<div class="clr-col-sm-2">
<button class="btn btn-icon btn-danger btn-sm" (click)="removeDrilldownFilter(i)">
<button class="btn btn-icon btn-danger btn-sm" (click)="removeDrilldownFilter(i)"
[disabled]="gadgetsEditdata.commonFilterEnabledDrilldown">
<clr-icon shape="trash"></clr-icon>
</button>
</div>
@ -472,8 +488,20 @@
<h5>Layer {{i + 1}} Filters</h5>
<div class="clr-subtext">Configure filters for this drilldown layer</div>
<!-- Common Filter Toggle for Layer -->
<div class="clr-form-control" style="margin-top: 10px;">
<div class="clr-control-container">
<div class="clr-checkbox-wrapper">
<input type="checkbox" [id]="'commonFilterToggleLayer' + i" [(ngModel)]="layer.commonFilterEnabled"
(change)="onCommonFilterToggleLayer(i)" [ngModelOptions]="{standalone: true}" class="clr-checkbox" />
<label [for]="'commonFilterToggleLayer' + i" class="clr-control-label">Use Common Filter</label>
</div>
</div>
</div>
<!-- Add Layer Filter Button -->
<button class="btn btn-sm btn-primary" (click)="addLayerFilter(i)" style="margin-top: 10px; margin-bottom: 10px;">
<button class="btn btn-sm btn-primary" (click)="addLayerFilter(i)" style="margin-top: 10px; margin-bottom: 10px;"
[disabled]="layer.commonFilterEnabled">
<clr-icon shape="plus"></clr-icon> Add Filter
</button>
@ -482,14 +510,16 @@
style="margin-bottom: 10px; padding: 8px; border: 1px solid #eee; border-radius: 4px; background-color: #f9f9f9;">
<div style="display: flex; justify-content: space-between; align-items: center;">
<span>Filter {{j + 1}}</span>
<button class="btn btn-icon btn-danger btn-sm" (click)="removeLayerFilter(i, j)">
<button class="btn btn-icon btn-danger btn-sm" (click)="removeLayerFilter(i, j)"
[disabled]="layer.commonFilterEnabled">
<clr-icon shape="trash"></clr-icon>
</button>
</div>
<div class="clr-row" style="margin-top: 8px;">
<div class="clr-col-sm-5">
<select [(ngModel)]="filter.field" [ngModelOptions]="{standalone: true}" class="clr-select">
<select [(ngModel)]="filter.field" [ngModelOptions]="{standalone: true}" class="clr-select"
[disabled]="layer.commonFilterEnabled">
<option value="">Select Field</option>
<option *ngFor="let column of getAvailableFields(layer.filters, j, layerColumnData[i] || [])" [value]="column">{{column}}</option>
</select>
@ -497,11 +527,13 @@
<div class="clr-col-sm-5">
<input type="text" [(ngModel)]="filter.value" [ngModelOptions]="{standalone: true}"
class="clr-input" placeholder="Filter Value" />
class="clr-input" placeholder="Filter Value"
[disabled]="layer.commonFilterEnabled"/>
</div>
<div class="clr-col-sm-2">
<button class="btn btn-icon btn-danger btn-sm" (click)="removeLayerFilter(i, j)">
<button class="btn btn-icon btn-danger btn-sm" (click)="removeLayerFilter(i, j)"
[disabled]="layer.commonFilterEnabled">
<clr-icon shape="trash"></clr-icon>
</button>
</div>

View File

@ -159,8 +159,9 @@ export class EditnewdashComponent implements OnInit {
drilldownFilters: [] as any[], // Add separate drilldown filters
// Multi-layer drilldown configurations
drilldownLayers: [] as any[],
// Common filter property
commonFilterEnabled: false
// Common filter properties
commonFilterEnabled: false,
commonFilterEnabledDrilldown: false
};
// Add sureconnect data property
@ -537,6 +538,10 @@ export class EditnewdashComponent implements OnInit {
if (item['commonFilterEnabled'] === undefined) {
this.gadgetsEditdata['commonFilterEnabled'] = false;
}
// Initialize drilldown common filter property if not present
if (item['commonFilterEnabledDrilldown'] === undefined) {
this.gadgetsEditdata['commonFilterEnabledDrilldown'] = false;
}
this.getStores();
// Set default connection if none is set and we have connections
@ -579,7 +584,7 @@ export class EditnewdashComponent implements OnInit {
this.gadgetsEditdata['drilldownLayers'] = [];
} else {
// Ensure each layer has proper structure (removed parameterKey, added parameter)
this.gadgetsEditdata['drilldownLayers'].forEach(layer => {
this.gadgetsEditdata['drilldownLayers'].forEach((layer, index) => {
// Initialize parameter if not present
if (layer['parameter'] === undefined) {
layer['parameter'] = '';
@ -588,6 +593,10 @@ export class EditnewdashComponent implements OnInit {
if (layer['filters'] === undefined) {
layer['filters'] = [];
}
// Initialize common filter property for layer if not present
if (layer['commonFilterEnabled'] === undefined) {
layer['commonFilterEnabled'] = false;
}
});
}
@ -824,6 +833,7 @@ export class EditnewdashComponent implements OnInit {
updatedItem.drilldownFilters = this.gadgetsEditdata.drilldownFilters; // Add drilldown filters
updatedItem.drilldownLayers = this.gadgetsEditdata.drilldownLayers;
updatedItem.commonFilterEnabled = this.gadgetsEditdata.commonFilterEnabled; // Add common filter property
updatedItem.commonFilterEnabledDrilldown = this.gadgetsEditdata.commonFilterEnabledDrilldown; // Add drilldown common filter property
console.log('Updated item:', updatedItem);
return updatedItem;
@ -1158,13 +1168,21 @@ export class EditnewdashComponent implements OnInit {
// Update the dashboardArray to reflect changes
this.dashboardArray = this.dashboardArray.map(item => {
if (item.commonFilterEnabled) {
// Preserve the component reference
const componentRef = item.component;
// Update the chart with common filter data
return {
const updatedItem = {
...item,
table: this.commonFilterData.apiUrl,
connection: this.commonFilterData.connection,
baseFilters: [...this.commonFilterData.filters]
};
// Restore the component reference
updatedItem.component = componentRef;
return updatedItem;
}
return item;
});
@ -1172,13 +1190,21 @@ export class EditnewdashComponent implements OnInit {
// Also update the dashboardCollection to persist changes
this.dashboardCollection.dashboard = this.dashboardCollection.dashboard.map(item => {
if (item.commonFilterEnabled) {
// Preserve the component reference
const componentRef = item.component;
// Update the chart with common filter data
return {
const updatedItem = {
...item,
table: this.commonFilterData.apiUrl,
connection: this.commonFilterData.connection,
baseFilters: [...this.commonFilterData.filters]
} as DashboardContentModel;
// Restore the component reference
updatedItem.component = componentRef;
return updatedItem;
}
return item;
});
@ -1196,4 +1222,29 @@ export class EditnewdashComponent implements OnInit {
}
// When disabling, the user can edit the filters normally
}
// Add method to handle common filter toggle for base drilldown
onCommonFilterToggleDrilldown() {
console.log('Common filter drilldown toggled:', this.gadgetsEditdata.commonFilterEnabledDrilldown);
if (this.gadgetsEditdata.commonFilterEnabledDrilldown) {
// When enabling common filter, save current values and apply common filter data
this.gadgetsEditdata.drilldownFilters = [...this.commonFilterData.filters];
}
// When disabling, the user can edit the filters normally
}
// Add method to handle common filter toggle for drilldown layers
onCommonFilterToggleLayer(layerIndex: number) {
const layer = this.gadgetsEditdata.drilldownLayers[layerIndex];
if (layer) {
console.log(`Common filter layer ${layerIndex} toggled:`, layer.commonFilterEnabled);
if (layer.commonFilterEnabled) {
// When enabling common filter, save current values and apply common filter data
layer.filters = [...this.commonFilterData.filters];
}
// When disabling, the user can edit the filters normally
}
}
}