Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
portal-apps-manage
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
angular
portal-apps-manage
Commits
a02d4d4f
Commit
a02d4d4f
authored
Sep 09, 2025
by
Ooh-Ao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
วิดเจ็ท service
parent
e1eb60f1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
103 additions
and
72 deletions
+103
-72
dashboard-management.component.ts
...ge/dashboard-management/dashboard-management.component.ts
+4
-16
dashboard-viewer.component.ts
...tal-manage/dashboard-viewer/dashboard-viewer.component.ts
+3
-33
widget-component-registry.service.ts
...rtal-manage/services/widget-component-registry.service.ts
+84
-0
widget-form.component.ts
.../portal-manage/widget-management/widget-form.component.ts
+12
-23
No files found.
src/app/portal-manage/dashboard-management/dashboard-management.component.ts
View file @
a02d4d4f
...
...
@@ -15,6 +15,7 @@ import { DashboardDataService } from '../services/dashboard-data.service';
import
{
MMenuitemsWidgetService
}
from
'../services/m-menuitems-widget.service'
;
import
{
DashboardStateService
,
SelectedDataset
}
from
'../services/dashboard-state.service'
;
import
{
WidgetStateService
}
from
'../services/widget-state.service'
;
// Import WidgetStateService
import
{
WidgetComponentRegistryService
}
from
'../services/widget-component-registry.service'
;
import
{
WidgetConfigComponent
}
from
'./widget-config/widget-config.component'
;
...
...
@@ -84,27 +85,14 @@ export class DashboardManagementComponent implements OnInit {
public
userDashboards
:
DashboardModel
[]
=
[];
public
selectedDashboardId
:
DashboardModel
|
null
=
null
;
private
widgetComponentMap
:
{
[
key
:
string
]:
Type
<
any
>
}
=
{
CompanyInfoWidgetComponent
,
HeadcountWidgetComponent
,
AttendanceOverviewWidgetComponent
,
PayrollSummaryWidgetComponent
,
EmployeeDirectoryWidgetComponent
,
WelcomeWidgetComponent
,
QuickLinksWidgetComponent
,
SyncfusionDatagridWidgetComponent
,
SyncfusionPivotWidgetComponent
,
SyncfusionChartWidgetComponent
,
SimpleKpiWidgetComponent
,
};
constructor
(
private
dashboardDataService
:
DashboardDataService
,
private
mMenuitemsWidgetService
:
MMenuitemsWidgetService
,
private
dashboardStateService
:
DashboardStateService
,
private
widgetStateService
:
WidgetStateService
,
// Inject WidgetStateService
private
dialog
:
MatDialog
,
private
notificationService
:
NotificationService
private
notificationService
:
NotificationService
,
private
widgetComponentRegistryService
:
WidgetComponentRegistryService
)
{
}
ngOnInit
():
void
{
...
...
@@ -409,7 +397,7 @@ export class DashboardManagementComponent implements OnInit {
sizeY
:
widget
.
rows
,
row
:
widget
.
y
,
col
:
widget
.
x
,
componentType
:
this
.
widgetComponent
Map
[
widget
.
component
]
,
componentType
:
this
.
widgetComponent
RegistryService
.
getComponent
(
widget
.
component
)
,
componentInputs
:
{
config
:
configObject
,
perspective
:
widget
.
perspective
...
...
src/app/portal-manage/dashboard-viewer/dashboard-viewer.component.ts
View file @
a02d4d4f
...
...
@@ -8,6 +8,7 @@ import { NgComponentOutlet } from '@angular/common';
import
{
DashboardDataService
}
from
'../services/dashboard-data.service'
;
import
{
DashboardModel
,
WidgetModel
}
from
'../models/widgets.model'
;
import
{
DashboardStateService
}
from
'../services/dashboard-state.service'
;
import
{
WidgetComponentRegistryService
}
from
'../services/widget-component-registry.service'
;
// Import all widget components
import
{
CompanyInfoWidgetComponent
}
from
'../widgets/company-info-widget.component'
;
...
...
@@ -63,42 +64,11 @@ export class DashboardViewerComponent implements OnInit {
public
dashboardData
:
DashboardModel
|
null
=
null
;
public
errorMessage
:
string
|
null
=
null
;
private
widgetComponentMap
:
{
[
key
:
string
]:
Type
<
any
>
}
=
{
'CompanyInfoWidgetComponent'
:
CompanyInfoWidgetComponent
,
'HeadcountWidgetComponent'
:
HeadcountWidgetComponent
,
'AttendanceOverviewWidgetComponent'
:
AttendanceOverviewWidgetComponent
,
'PayrollSummaryWidgetComponent'
:
PayrollSummaryWidgetComponent
,
'EmployeeDirectoryWidgetComponent'
:
EmployeeDirectoryWidgetComponent
,
'KpiWidgetComponent'
:
KpiWidgetComponent
,
'WelcomeWidgetComponent'
:
WelcomeWidgetComponent
,
'ChartWidgetComponent'
:
ChartWidgetComponent
,
'QuickLinksWidgetComponent'
:
QuickLinksWidgetComponent
,
'SyncfusionDatagridWidgetComponent'
:
SyncfusionDatagridWidgetComponent
,
'SyncfusionPivotWidgetComponent'
:
SyncfusionPivotWidgetComponent
,
'SyncfusionChartWidgetComponent'
:
SyncfusionChartWidgetComponent
,
'NewDataTableWidget'
:
DataTableWidgetComponent
,
'AreaChartWidgetComponent'
:
AreaChartWidgetComponent
,
'BarChartWidgetComponent'
:
BarChartWidgetComponent
,
'PieChartWidgetComponent'
:
PieChartWidgetComponent
,
'ScatterBubbleChartWidgetComponent'
:
ScatterBubbleChartWidgetComponent
,
'MultiRowCardWidgetComponent'
:
MultiRowCardWidgetComponent
,
'ComboChartWidgetComponent'
:
ComboChartWidgetComponent
,
'DoughnutChartWidgetComponent'
:
DoughnutChartWidgetComponent
,
'FunnelChartWidgetComponent'
:
FunnelChartWidgetComponent
,
'GaugeChartWidgetComponent'
:
GaugeChartWidgetComponent
,
'SimpleKpiWidgetComponent'
:
SimpleKpiWidgetComponent
,
'FilledMapWidgetComponent'
:
FilledMapWidgetComponent
,
'MatrixWidgetComponent'
:
MatrixWidgetComponent
,
'SlicerWidgetComponent'
:
SlicerWidgetComponent
,
'SimpleTableWidgetComponent'
:
SimpleTableWidgetComponent
,
'WaterfallChartWidgetComponent'
:
WaterfallChartWidgetComponent
,
'TreemapWidgetComponent'
:
TreemapWidgetComponent
,
};
constructor
(
private
route
:
ActivatedRoute
,
private
dashboardDataService
:
DashboardDataService
,
private
dashboardStateService
:
DashboardStateService
,
private
widgetComponentRegistryService
:
WidgetComponentRegistryService
)
{
}
ngOnInit
():
void
{
...
...
@@ -157,7 +127,7 @@ export class DashboardViewerComponent implements OnInit {
sizeY
:
widget
.
rows
,
row
:
widget
.
y
,
col
:
widget
.
x
,
componentType
:
this
.
widgetComponent
Map
[
widget
.
component
]
,
componentType
:
this
.
widgetComponent
RegistryService
.
getComponent
(
widget
.
component
)
,
componentInputs
:
{
config
:
widget
.
config
||
{},
perspective
:
widget
.
perspective
},
};
});
...
...
src/app/portal-manage/services/widget-component-registry.service.ts
0 → 100644
View file @
a02d4d4f
import
{
Injectable
,
Type
}
from
'@angular/core'
;
// Import all widget components
import
{
CompanyInfoWidgetComponent
}
from
'../widgets/company-info-widget.component'
;
import
{
HeadcountWidgetComponent
}
from
'../widgets/headcount-widget.component'
;
import
{
AttendanceOverviewWidgetComponent
}
from
'../widgets/attendance-overview-widget.component'
;
import
{
PayrollSummaryWidgetComponent
}
from
'../widgets/payroll-summary-widget.component'
;
import
{
EmployeeDirectoryWidgetComponent
}
from
'../widgets/employee-directory-widget.component'
;
import
{
KpiWidgetComponent
}
from
'../widgets/kpi-widget/kpi-widget.component'
;
import
{
WelcomeWidgetComponent
}
from
'../widgets/welcome-widget/welcome-widget.component'
;
import
{
ChartWidgetComponent
}
from
'../widgets/chart-widget/chart-widget.component'
;
import
{
QuickLinksWidgetComponent
}
from
'../widgets/quick-links-widget/quick-links-widget.component'
;
import
{
SyncfusionDatagridWidgetComponent
}
from
'../widgets/syncfusion-datagrid-widget/syncfusion-datagrid-widget.component'
;
import
{
SyncfusionPivotWidgetComponent
}
from
'../widgets/syncfusion-pivot-widget/syncfusion-pivot-widget.component'
;
import
{
SyncfusionChartWidgetComponent
}
from
'../widgets/syncfusion-chart-widget/syncfusion-chart-widget.component'
;
import
{
DataTableWidgetComponent
}
from
'../widgets/dynamic-widgets/data-table-widget.component'
;
import
{
AreaChartWidgetComponent
}
from
'../widgets/area-chart-widget/area-chart-widget.component'
;
import
{
BarChartWidgetComponent
}
from
'../widgets/bar-chart-widget/bar-chart-widget.component'
;
import
{
PieChartWidgetComponent
}
from
'../widgets/pie-chart-widget/pie-chart-widget.component'
;
import
{
ScatterBubbleChartWidgetComponent
}
from
'../widgets/scatter-bubble-chart-widget/scatter-bubble-chart-widget.component'
;
import
{
MultiRowCardWidgetComponent
}
from
'../widgets/multi-row-card-widget/multi-row-card-widget.component'
;
import
{
ComboChartWidgetComponent
}
from
'../widgets/combo-chart-widget/combo-chart-widget.component'
;
import
{
DoughnutChartWidgetComponent
}
from
'../widgets/doughnut-chart-widget/doughnut-chart-widget.component'
;
import
{
FunnelChartWidgetComponent
}
from
'../widgets/funnel-chart-widget/funnel-chart-widget.component'
;
import
{
GaugeChartWidgetComponent
}
from
'../widgets/gauge-chart-widget/gauge-chart-widget.component'
;
import
{
SimpleKpiWidgetComponent
}
from
'../widgets/simple-kpi-widget/simple-kpi-widget.component'
;
import
{
FilledMapWidgetComponent
}
from
'../widgets/filled-map-widget/filled-map-widget.component'
;
import
{
MatrixWidgetComponent
}
from
'../widgets/matrix-widget/matrix-widget.component'
;
import
{
SlicerWidgetComponent
}
from
'../widgets/slicer-widget/slicer-widget.component'
;
import
{
SimpleTableWidgetComponent
}
from
'../widgets/simple-table-widget/simple-table-widget.component'
;
import
{
WaterfallChartWidgetComponent
}
from
'../widgets/waterfall-chart-widget/waterfall-chart-widget.component'
;
import
{
TreemapWidgetComponent
}
from
'../widgets/treemap-widget/treemap-widget.component'
;
@
Injectable
({
providedIn
:
'root'
,
})
export
class
WidgetComponentRegistryService
{
private
widgetComponentMap
:
{
[
key
:
string
]:
Type
<
any
>
}
=
{
CompanyInfoWidgetComponent
:
CompanyInfoWidgetComponent
,
HeadcountWidgetComponent
:
HeadcountWidgetComponent
,
AttendanceOverviewWidgetComponent
:
AttendanceOverviewWidgetComponent
,
PayrollSummaryWidgetComponent
:
PayrollSummaryWidgetComponent
,
EmployeeDirectoryWidgetComponent
:
EmployeeDirectoryWidgetComponent
,
KpiWidgetComponent
:
KpiWidgetComponent
,
WelcomeWidgetComponent
:
WelcomeWidgetComponent
,
ChartWidgetComponent
:
ChartWidgetComponent
,
QuickLinksWidgetComponent
:
QuickLinksWidgetComponent
,
SyncfusionDatagridWidgetComponent
:
SyncfusionDatagridWidgetComponent
,
SyncfusionPivotWidgetComponent
:
SyncfusionPivotWidgetComponent
,
SyncfusionChartWidgetComponent
:
SyncfusionChartWidgetComponent
,
NewDataTableWidget
:
DataTableWidgetComponent
,
// Note: Key is NewDataTableWidget
AreaChartWidgetComponent
:
AreaChartWidgetComponent
,
BarChartWidgetComponent
:
BarChartWidgetComponent
,
PieChartWidgetComponent
:
PieChartWidgetComponent
,
ScatterBubbleChartWidgetComponent
:
ScatterBubbleChartWidgetComponent
,
MultiRowCardWidgetComponent
:
MultiRowCardWidgetComponent
,
ComboChartWidgetComponent
:
ComboChartWidgetComponent
,
DoughnutChartWidgetComponent
:
DoughnutChartWidgetComponent
,
FunnelChartWidgetComponent
:
FunnelChartWidgetComponent
,
GaugeChartWidgetComponent
:
GaugeChartWidgetComponent
,
SimpleKpiWidgetComponent
:
SimpleKpiWidgetComponent
,
FilledMapWidgetComponent
:
FilledMapWidgetComponent
,
MatrixWidgetComponent
:
MatrixWidgetComponent
,
SlicerWidgetComponent
:
SlicerWidgetComponent
,
SimpleTableWidgetComponent
:
SimpleTableWidgetComponent
,
WaterfallChartWidgetComponent
:
WaterfallChartWidgetComponent
,
TreemapWidgetComponent
:
TreemapWidgetComponent
,
};
getComponent
(
componentName
:
string
):
Type
<
any
>
{
const
component
=
this
.
widgetComponentMap
[
componentName
];
if
(
!
component
)
{
console
.
warn
(
`Warning: Widget component "
${
componentName
}
" not found in registry.`
);
// Consider returning a default/error component here
}
return
component
;
}
getComponentNames
():
string
[]
{
return
Object
.
keys
(
this
.
widgetComponentMap
);
}
}
src/app/portal-manage/widget-management/widget-form.component.ts
View file @
a02d4d4f
...
...
@@ -12,6 +12,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import
{
TextBoxModule
}
from
'@syncfusion/ej2-angular-inputs'
;
import
{
NumericTextBoxModule
}
from
'@syncfusion/ej2-angular-inputs'
;
import
{
DropDownListModule
}
from
'@syncfusion/ej2-angular-dropdowns'
;
import
{
WidgetComponentRegistryService
}
from
'../services/widget-component-registry.service'
;
// import * as DashboardActions from '../state/dashboard.actions';
import
{
WidgetModel
}
from
'../models/widgets.model'
;
...
...
@@ -64,38 +65,25 @@ export class WidgetFormComponent implements OnInit {
public
componentData
:
{
[
key
:
string
]:
string
}[]
=
[];
public
componentFields
:
object
=
{
text
:
'name'
,
value
:
'id'
};
// Map string names to actual component classes
private
widgetComponentMap
:
{
[
key
:
string
]:
Type
<
any
>
}
=
{
CompanyInfoWidgetComponent
:
CompanyInfoWidgetComponent
,
HeadcountWidgetComponent
:
HeadcountWidgetComponent
,
AttendanceOverviewWidgetComponent
:
AttendanceOverviewWidgetComponent
,
PayrollSummaryWidgetComponent
:
PayrollSummaryWidgetComponent
,
EmployeeDirectoryWidgetComponent
:
EmployeeDirectoryWidgetComponent
,
KpiWidgetComponent
:
KpiWidgetComponent
,
WelcomeWidgetComponent
:
WelcomeWidgetComponent
,
ChartWidgetComponent
:
ChartWidgetComponent
,
QuickLinksWidgetComponent
:
QuickLinksWidgetComponent
,
SyncfusionDatagridWidgetComponent
:
SyncfusionDatagridWidgetComponent
,
SyncfusionPivotWidgetComponent
:
SyncfusionPivotWidgetComponent
,
SyncfusionChartWidgetComponent
:
SyncfusionChartWidgetComponent
,
};
constructor
(
private
fb
:
FormBuilder
,
public
dialogRef
:
MatDialogRef
<
WidgetFormComponent
>
,
@
Inject
(
MAT_DIALOG_DATA
)
public
data
:
{
widget
:
WidgetModel
;
isNew
:
boolean
}
@
Inject
(
MAT_DIALOG_DATA
)
public
data
:
{
widget
:
WidgetModel
;
isNew
:
boolean
},
private
widgetComponentRegistryService
:
WidgetComponentRegistryService
)
{}
ngOnInit
():
void
{
this
.
isNew
=
this
.
data
.
isNew
;
this
.
componentData
=
Object
.
keys
(
this
.
widgetComponentMap
).
map
((
key
)
=>
({
id
:
key
,
name
:
key
,
}));
this
.
componentData
=
this
.
widgetComponentRegistryService
.
getComponentNames
()
.
map
((
key
)
=>
({
id
:
key
,
name
:
key
,
}));
this
.
widgetForm
=
this
.
fb
.
group
({
widgetId
:
[
this
.
data
.
widget
?.
widgetId
||
new
Date
().
getTime
()
],
widgetId
:
[
null
],
thName
:
[
''
,
Validators
.
required
],
engName
:
[
''
,
Validators
.
required
],
component
:
[
''
,
Validators
.
required
],
...
...
@@ -118,7 +106,8 @@ export class WidgetFormComponent implements OnInit {
}
updatePreview
(
componentName
:
string
):
void
{
this
.
previewComponentType
=
this
.
widgetComponentMap
[
componentName
]
||
null
;
this
.
previewComponentType
=
this
.
widgetComponentRegistryService
.
getComponent
(
componentName
);
}
onSubmit
():
void
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment