Commit d7952bf7 by Ooh-Ao

linker

parent 01ab61b4
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
id='dataset-select' id='dataset-select'
[dataSource]="datasets" [dataSource]="datasets"
[(ngModel)]="selectedDatasetId" [(ngModel)]="selectedDatasetId"
(change)="onDatasetChange()" (change)="onDatasetChange($event)"
[fields]="{ text: 'tdesc', value: 'itemId' }" [fields]="{ text: 'tdesc', value: 'itemId' }"
placeholder="Select a Dataset" placeholder="Select a Dataset"
floatLabelType="Never" floatLabelType="Never"
...@@ -72,23 +72,13 @@ ...@@ -72,23 +72,13 @@
<ng-container *ngIf="previewPanel" [ngComponentOutlet]="previewPanel.componentType" [ngComponentOutletInputs]="previewPanel.componentInputs"></ng-container> <ng-container *ngIf="previewPanel" [ngComponentOutlet]="previewPanel.componentType" [ngComponentOutletInputs]="previewPanel.componentInputs"></ng-container>
</div> </div>
<!-- Editable Configuration Form --> <!-- Configuration Display -->
<div class="p-4 border rounded-lg bg-gray-50"> <div class="p-4 border rounded-lg bg-gray-50">
<h3 class="text-md font-bold mb-2">Configuration</h3> <div class="flex justify-between items-center mb-2">
<form #configForm="ngForm" (ngSubmit)="saveConfiguration()"> <h3 class="text-md font-bold">Configuration</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <button ejs-button (click)="openEditConfigDialog()" cssClass="e-small e-primary">Edit Configuration</button>
<div *ngFor="let key of getObjectKeys(configAsObject)" class="flex flex-col">
<label [for]="key" class="text-sm font-medium text-gray-600 mb-1 capitalize">{{ key }}</label>
<input type="text" [id]="key" [name]="key" [(ngModel)]="configAsObject[key]" class="p-2 border border-gray-300 rounded-md focus:ring-blue-500 focus:border-blue-500">
</div>
</div>
<div *ngIf="getObjectKeys(configAsObject).length === 0" class="text-center text-gray-500">
This widget has no configurable properties.
</div>
<div class="mt-4 flex justify-end" *ngIf="getObjectKeys(configAsObject).length > 0">
<button ejs-button type="submit" cssClass="e-primary">Save Configuration</button>
</div> </div>
</form> <pre class="bg-gray-900 text-white p-2 rounded-md text-xs">{{ configAsObject | json }}</pre>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -136,11 +136,18 @@ export class DatasetWidgetLinkerComponent implements OnInit { ...@@ -136,11 +136,18 @@ export class DatasetWidgetLinkerComponent implements OnInit {
this.widgetService.getListWidgets().subscribe(widgets => { this.masterWidgets = widgets; }); this.widgetService.getListWidgets().subscribe(widgets => { this.masterWidgets = widgets; });
} }
getObjectKeys(obj: any): string[] { onDatasetChange(event: any): void {
return Object.keys(obj); // The change event's value is the new ID. This is more reliable than waiting for ngModel.
if (!event.value) {
this.selectedDatasetId = null;
this.linkedWidgets = [];
this.dashboardStateService.selectDataset(null);
this.clearPreview();
return;
} }
this.selectedDatasetId = event.value;
console.log('Dataset selection changed. New ID:', this.selectedDatasetId);
onDatasetChange(): void {
this.clearPreview(); this.clearPreview();
if (this.selectedDatasetId) { if (this.selectedDatasetId) {
this.loadLinkedWidgetsForDataset(this.selectedDatasetId); this.loadLinkedWidgetsForDataset(this.selectedDatasetId);
...@@ -169,6 +176,7 @@ export class DatasetWidgetLinkerComponent implements OnInit { ...@@ -169,6 +176,7 @@ export class DatasetWidgetLinkerComponent implements OnInit {
this.previewPanel = { this.previewPanel = {
id: widget.widget.widgetId, id: widget.widget.widgetId,
componentType: componentType, componentType: componentType,
// Pass the parsed object to the component
componentInputs: { config: this.configAsObject }, componentInputs: { config: this.configAsObject },
row: 0, col: 0, sizeX: 1, sizeY: 1 // Dummy values, not used for layout here row: 0, col: 0, sizeX: 1, sizeY: 1 // Dummy values, not used for layout here
}; };
...@@ -178,16 +186,36 @@ export class DatasetWidgetLinkerComponent implements OnInit { ...@@ -178,16 +186,36 @@ export class DatasetWidgetLinkerComponent implements OnInit {
} }
} }
saveConfiguration(): void { openEditConfigDialog(): void {
if (!this.widgetToPreview) return; if (!this.widgetToPreview) return;
this.widgetToPreview.config = JSON.stringify(this.configAsObject); this.dashboardStateService.selectedDataset$.pipe(take(1)).subscribe(selectedDataset => {
this.mMenuitemsWidgetService.saveLinkedWidget(this.widgetToPreview).subscribe(() => { const availableColumns = selectedDataset ? selectedDataset.columns : [];
const dialogRef = this.dialog.open(WidgetConfigComponent, {
width: '600px',
data: {
widget: this.widgetToPreview!.widget, // The base widget model
currentConfig: this.configAsObject, // The existing configuration
availableColumns: availableColumns
}
});
dialogRef.afterClosed().subscribe(resultConfig => {
if (resultConfig) {
// Update the config on the preview object
this.widgetToPreview!.config = JSON.stringify(resultConfig);
// Persist the changes to the backend
this.mMenuitemsWidgetService.saveLinkedWidget(this.widgetToPreview!).subscribe(() => {
this.notificationService.success('Success', 'Configuration saved successfully!'); this.notificationService.success('Success', 'Configuration saved successfully!');
// Refresh the preview to apply the new config // Refresh the entire preview to reflect the changes
this.viewWidget(this.widgetToPreview!); this.viewWidget(this.widgetToPreview!);
}); });
} }
});
});
}
removeWidget(widget: MenuItemsWidget, event: MouseEvent): void { removeWidget(widget: MenuItemsWidget, event: MouseEvent): void {
event.stopPropagation(); event.stopPropagation();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment