Commit a0ad0039 by Ooh-Ao

scss config

parent b6924d2f
...@@ -123,6 +123,14 @@ export class WidgetConfigRegistryService { ...@@ -123,6 +123,14 @@ export class WidgetConfigRegistryService {
urlField: '', urlField: '',
iconField: '' iconField: ''
}, },
'SyncfusionDatagridWidgetComponent': {
title: 'Data Grid',
columns: [],
dataSource: '',
allowPaging: true,
allowSorting: true,
allowFiltering: true
},
'SyncfusionPivotWidgetComponent': { 'SyncfusionPivotWidgetComponent': {
title: 'Pivot Table', title: 'Pivot Table',
expandAll: false, expandAll: false,
......
import { Component, Inject, OnInit } from '@angular/core'; import { Component, Inject, OnInit, OnDestroy, AfterViewInit, ViewChild, ViewContainerRef, ComponentRef } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { MatDialogModule } from '@angular/material/dialog'; import { MatDialogModule } from '@angular/material/dialog';
...@@ -10,6 +10,7 @@ import { MatIconModule } from '@angular/material/icon'; ...@@ -10,6 +10,7 @@ import { MatIconModule } from '@angular/material/icon';
import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatCheckboxModule } from '@angular/material/checkbox';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { WidgetConfigGeneratorService } from '../services/widget-config-generator.service'; import { WidgetConfigGeneratorService } from '../services/widget-config-generator.service';
import { WidgetConfigRegistryService } from './services/widget-config-registry.service';
import { WidgetModel } from '../models/widgets.model'; import { WidgetModel } from '../models/widgets.model';
export interface WidgetConfigDialogData { export interface WidgetConfigDialogData {
...@@ -35,16 +36,20 @@ export interface WidgetConfigDialogData { ...@@ -35,16 +36,20 @@ export interface WidgetConfigDialogData {
templateUrl: './widget-config.component.html', templateUrl: './widget-config.component.html',
styleUrls: ['./widget-config.component.scss'] styleUrls: ['./widget-config.component.scss']
}) })
export class WidgetConfigComponent implements OnInit { export class WidgetConfigComponent implements OnInit, AfterViewInit, OnDestroy {
@ViewChild('configContainer', { read: ViewContainerRef }) configContainer!: ViewContainerRef;
currentConfig: any; currentConfig: any;
availableColumns: string[]; availableColumns: string[];
widgetType: string; widgetType: string;
comboChartTypes: string[] = ['Line', 'Column', 'Area', 'Spline']; comboChartTypes: string[] = ['Line', 'Column', 'Area', 'Spline'];
private configComponentRef: ComponentRef<any> | null = null;
constructor( constructor(
public dialogRef: MatDialogRef<WidgetConfigComponent>, public dialogRef: MatDialogRef<WidgetConfigComponent>,
@Inject(MAT_DIALOG_DATA) public data: WidgetConfigDialogData, @Inject(MAT_DIALOG_DATA) public data: WidgetConfigDialogData,
private widgetConfigGenerator: WidgetConfigGeneratorService private widgetConfigGenerator: WidgetConfigGeneratorService,
public widgetConfigRegistry: WidgetConfigRegistryService
) { } ) { }
ngOnInit(): void { ngOnInit(): void {
...@@ -67,6 +72,13 @@ export class WidgetConfigComponent implements OnInit { ...@@ -67,6 +72,13 @@ export class WidgetConfigComponent implements OnInit {
} }
} }
// Use fallback config if no config is available
if (!this.currentConfig || Object.keys(this.currentConfig).length === 0) {
this.currentConfig = this.widgetConfigRegistry.getFallbackConfig(this.widgetType);
}
// Load dynamic config component will be called in ngAfterViewInit
const gridLikeWidgets = ['SyncfusionDatagridWidgetComponent', 'NewDataTableWidget', 'MatrixWidgetComponent']; const gridLikeWidgets = ['SyncfusionDatagridWidgetComponent', 'NewDataTableWidget', 'MatrixWidgetComponent'];
if (gridLikeWidgets.includes(this.widgetType) && !this.currentConfig.columns) { if (gridLikeWidgets.includes(this.widgetType) && !this.currentConfig.columns) {
this.currentConfig.columns = []; this.currentConfig.columns = [];
...@@ -273,12 +285,45 @@ export class WidgetConfigComponent implements OnInit { ...@@ -273,12 +285,45 @@ export class WidgetConfigComponent implements OnInit {
addPivotFilter() { this.currentConfig.filters.push({ name: '' }); } addPivotFilter() { this.currentConfig.filters.push({ name: '' }); }
removePivotFilter(index: number) { this.currentConfig.filters.splice(index, 1); } removePivotFilter(index: number) { this.currentConfig.filters.splice(index, 1); }
ngAfterViewInit(): void {
// Load dynamic config component after view is initialized
this.loadConfigComponent();
}
private loadConfigComponent(): void {
const configComponentType = this.widgetConfigRegistry.getConfigComponent(this.widgetType);
if (configComponentType) {
// Load the specific config component
this.configComponentRef = this.configContainer.createComponent(configComponentType);
this.configComponentRef.instance.currentConfig = this.currentConfig;
this.configComponentRef.instance.availableColumns = this.availableColumns;
// Subscribe to config changes
if (this.configComponentRef.instance.configChange) {
this.configComponentRef.instance.configChange.subscribe((config: any) => {
this.currentConfig = config;
});
}
}
// If no specific config component is found, the template will show the fallback config
}
onSave(): void { onSave(): void {
// Get the latest config from the dynamic component if it exists
if (this.configComponentRef && this.configComponentRef.instance.currentConfig) {
this.currentConfig = this.configComponentRef.instance.currentConfig;
}
this.dialogRef.close(this.currentConfig); this.dialogRef.close(this.currentConfig);
} }
onCancel(): void { onCancel(): void {
this.dialogRef.close(); this.dialogRef.close();
} }
ngOnDestroy(): void {
if (this.configComponentRef) {
this.configComponentRef.destroy();
}
}
} }
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