cloud-ide-core 0.0.1 → 1.0.2
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/README.md +49 -10
- package/fesm2022/cloud-ide-core-general-master-type.component-BNYoP_bS.mjs +609 -0
- package/fesm2022/cloud-ide-core-general-master-type.component-BNYoP_bS.mjs.map +1 -0
- package/fesm2022/cloud-ide-core-general-master-type.service-8JWTVijZ.mjs +206 -0
- package/fesm2022/cloud-ide-core-general-master-type.service-8JWTVijZ.mjs.map +1 -0
- package/fesm2022/cloud-ide-core-general-master.component-CFGGHinl.mjs +901 -0
- package/fesm2022/cloud-ide-core-general-master.component-CFGGHinl.mjs.map +1 -0
- package/fesm2022/cloud-ide-core-page-form.component-vfE-LkTS.mjs +215 -0
- package/fesm2022/cloud-ide-core-page-form.component-vfE-LkTS.mjs.map +1 -0
- package/fesm2022/cloud-ide-core.mjs +1280 -1105
- package/fesm2022/cloud-ide-core.mjs.map +1 -1
- package/index.d.ts +1736 -3
- package/package.json +3 -5
- package/esm2022/cloud-ide-core.mjs +0 -5
- package/esm2022/lib/cloud-ide-core.component.mjs +0 -19
- package/esm2022/lib/cloud-ide-core.service.mjs +0 -14
- package/esm2022/lib/core/department-management/components/department-list/department-list.component.mjs +0 -768
- package/esm2022/lib/core/department-management/index.mjs +0 -5
- package/esm2022/lib/core/department-management/services/department-management.service.mjs +0 -187
- package/esm2022/lib/core/designation-management/components/designation-list/designation-list.component.mjs +0 -1122
- package/esm2022/lib/core/designation-management/index.mjs +0 -5
- package/esm2022/lib/core/designation-management/services/designation-management.service.mjs +0 -194
- package/esm2022/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.mjs +0 -794
- package/esm2022/lib/core/grade-level-management/index.mjs +0 -5
- package/esm2022/lib/core/grade-level-management/services/grade-level-management.service.mjs +0 -172
- package/esm2022/lib/core/menu-management/components/menu-list/menu-list.component.mjs +0 -1135
- package/esm2022/lib/core/menu-management/index.mjs +0 -10
- package/esm2022/lib/core/menu-management/interfaces/menu-item.interface.mjs +0 -11
- package/esm2022/lib/core/menu-management/mock-data/menu-items.json +0 -311
- package/esm2022/lib/core/menu-management/services/menu-management.service.mjs +0 -230
- package/esm2022/lib/core/page-management/components/page-controls/page-controls.component.mjs +0 -483
- package/esm2022/lib/core/page-management/components/page-list/page-list.component.mjs +0 -393
- package/esm2022/lib/core/page-management/components/page-theme/page-theme.component.mjs +0 -767
- package/esm2022/lib/core/page-management/index.mjs +0 -10
- package/esm2022/lib/core/page-management/services/page-controls.service.mjs +0 -136
- package/esm2022/lib/core/page-management/services/page-management.service.mjs +0 -98
- package/esm2022/lib/core/page-management/services/page-theme.service.mjs +0 -107
- package/esm2022/public-api.mjs +0 -16
- package/lib/cloud-ide-core.component.d.ts +0 -5
- package/lib/cloud-ide-core.service.d.ts +0 -6
- package/lib/core/department-management/components/department-list/department-list.component.d.ts +0 -178
- package/lib/core/department-management/index.d.ts +0 -2
- package/lib/core/department-management/services/department-management.service.d.ts +0 -68
- package/lib/core/designation-management/components/designation-list/designation-list.component.d.ts +0 -242
- package/lib/core/designation-management/index.d.ts +0 -2
- package/lib/core/designation-management/services/designation-management.service.d.ts +0 -69
- package/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.d.ts +0 -199
- package/lib/core/grade-level-management/index.d.ts +0 -2
- package/lib/core/grade-level-management/services/grade-level-management.service.d.ts +0 -69
- package/lib/core/menu-management/components/menu-list/menu-list.component.d.ts +0 -278
- package/lib/core/menu-management/index.d.ts +0 -3
- package/lib/core/menu-management/interfaces/menu-item.interface.d.ts +0 -30
- package/lib/core/menu-management/services/menu-management.service.d.ts +0 -85
- package/lib/core/page-management/components/page-controls/page-controls.component.d.ts +0 -126
- package/lib/core/page-management/components/page-list/page-list.component.d.ts +0 -91
- package/lib/core/page-management/components/page-theme/page-theme.component.d.ts +0 -189
- package/lib/core/page-management/index.d.ts +0 -6
- package/lib/core/page-management/services/page-controls.service.d.ts +0 -54
- package/lib/core/page-management/services/page-management.service.d.ts +0 -42
- package/lib/core/page-management/services/page-theme.service.d.ts +0 -43
- package/public-api.d.ts +0 -7
|
@@ -0,0 +1,901 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, Injectable, DestroyRef, viewChild, signal, computed, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import * as i2 from '@angular/forms';
|
|
5
|
+
import { NonNullableFormBuilder, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
6
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
7
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
8
|
+
import { HttpClient } from '@angular/common/http';
|
|
9
|
+
import { BehaviorSubject, throwError } from 'rxjs';
|
|
10
|
+
import { tap, catchError } from 'rxjs/operators';
|
|
11
|
+
import { generateStringFromObject, cidePath, hostManagerRoutesUrl, coreRoutesUrl, generateObjectFromString } from 'cloud-ide-lms-model';
|
|
12
|
+
import { G as GeneralMasterTypeService } from './cloud-ide-core-general-master-type.service-8JWTVijZ.mjs';
|
|
13
|
+
import { CideEleButtonComponent, CideEleDataGridComponent, CideInputComponent, CideTextareaComponent, CideIconComponent, CideEleDropdownComponent, CideEleJsonEditorComponent, CideSelectComponent } from 'cloud-ide-element';
|
|
14
|
+
import { AppStateHelperService } from 'cloud-ide-layout';
|
|
15
|
+
|
|
16
|
+
class GeneralMasterService {
|
|
17
|
+
http = inject(HttpClient);
|
|
18
|
+
generalMasterListSubject = new BehaviorSubject([]);
|
|
19
|
+
generalMasterList$ = this.generalMasterListSubject.asObservable();
|
|
20
|
+
constructor() {
|
|
21
|
+
console.log('GeneralMasterService initialized - using real API');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get general master list from API
|
|
25
|
+
*/
|
|
26
|
+
getMasterList(payload) {
|
|
27
|
+
const query = generateStringFromObject(payload);
|
|
28
|
+
return this.http?.get(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]))
|
|
29
|
+
.pipe(tap((response) => {
|
|
30
|
+
if (response?.success) {
|
|
31
|
+
this.generalMasterListSubject.next(response?.data || []);
|
|
32
|
+
}
|
|
33
|
+
}), catchError(error => {
|
|
34
|
+
console.error('GeneralMasterService API error:', error);
|
|
35
|
+
return this.handleError(error);
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get general master list from cache (if available)
|
|
40
|
+
*/
|
|
41
|
+
getMasterListFromCache() {
|
|
42
|
+
return this.generalMasterListSubject.value;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Save general master (create or update)
|
|
46
|
+
* POST ${coreRoutesUrl?.generalMaster} - payload: ICoreSygms, response: generalMasterInsertUpdateControllerResponse
|
|
47
|
+
*/
|
|
48
|
+
saveMaster(master) {
|
|
49
|
+
const isUpdate = !!master._id;
|
|
50
|
+
console.log(`${isUpdate ? 'Updating' : 'Creating'} general master:`, master);
|
|
51
|
+
// Create proper payload
|
|
52
|
+
const payload = {
|
|
53
|
+
...(master._id && { _id: master._id }), // Only include _id if it exists
|
|
54
|
+
sygms_code: master.sygms_code,
|
|
55
|
+
sygms_id_sygmt: master.sygms_id_sygmt,
|
|
56
|
+
sygms_title: master.sygms_title,
|
|
57
|
+
sygms_desc: master.sygms_desc,
|
|
58
|
+
sygms_isactive: master.sygms_isactive,
|
|
59
|
+
sygms_id_sygms: master.sygms_id_sygms,
|
|
60
|
+
sygms_configuration: master.sygms_configuration,
|
|
61
|
+
sygms_entity_id_syen: master.sygms_entity_id_syen
|
|
62
|
+
};
|
|
63
|
+
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster]);
|
|
64
|
+
return this.http.post(url, payload)
|
|
65
|
+
.pipe(tap((response) => {
|
|
66
|
+
if (response.success) {
|
|
67
|
+
this.refreshMasterList();
|
|
68
|
+
}
|
|
69
|
+
}), catchError(this.handleError));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create new general master (backward compatibility)
|
|
73
|
+
*/
|
|
74
|
+
createMaster(master) {
|
|
75
|
+
return this.saveMaster(master);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Update existing general master (backward compatibility)
|
|
79
|
+
*/
|
|
80
|
+
updateMaster(id, master) {
|
|
81
|
+
return this.saveMaster({ ...master, _id: id });
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get general master by ID
|
|
85
|
+
* GET ${coreRoutesUrl?.generalMaster}/byId/:query - payload: { sygms_id: string }, response: generalMasterByIdControllerResponse
|
|
86
|
+
*/
|
|
87
|
+
getMasterById(id) {
|
|
88
|
+
console.log('Getting general master by ID:', id);
|
|
89
|
+
const payload = { sygms_id: id };
|
|
90
|
+
const query = generateStringFromObject(payload);
|
|
91
|
+
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'byId', query]);
|
|
92
|
+
return this.http.get(url)
|
|
93
|
+
.pipe(catchError(this.handleError));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Delete general master
|
|
97
|
+
* DELETE ${coreRoutesUrl?.generalMaster}/:query - payload: { sygms_id: string }, response: generalMasterDeleteControllerResponse
|
|
98
|
+
*/
|
|
99
|
+
deleteMaster(id) {
|
|
100
|
+
const payload = { sygms_id: id };
|
|
101
|
+
const query = generateStringFromObject(payload);
|
|
102
|
+
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);
|
|
103
|
+
return this.http.delete(url)
|
|
104
|
+
.pipe(tap((response) => {
|
|
105
|
+
if (response.success) {
|
|
106
|
+
this.refreshMasterList();
|
|
107
|
+
}
|
|
108
|
+
}), catchError(this.handleError));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Toggle general master active status
|
|
112
|
+
*/
|
|
113
|
+
toggleMasterStatus(id) {
|
|
114
|
+
console.log('Toggling general master status:', id);
|
|
115
|
+
const payload = { id };
|
|
116
|
+
const query = generateStringFromObject(payload);
|
|
117
|
+
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);
|
|
118
|
+
return this.http.put(url, {})
|
|
119
|
+
.pipe(tap((response) => {
|
|
120
|
+
if (response.success) {
|
|
121
|
+
this.refreshMasterList();
|
|
122
|
+
}
|
|
123
|
+
}), catchError(this.handleError));
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if master code exists
|
|
127
|
+
*/
|
|
128
|
+
checkMasterCodeExists(code, typeId, excludeId) {
|
|
129
|
+
const payload = { code, typeId };
|
|
130
|
+
if (excludeId) {
|
|
131
|
+
payload['excludeId'] = excludeId;
|
|
132
|
+
}
|
|
133
|
+
const query = generateStringFromObject(payload);
|
|
134
|
+
const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'checkCodeExists', query]);
|
|
135
|
+
return this.http.get(url)
|
|
136
|
+
.pipe(catchError(this.handleError));
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Refresh general master list from server
|
|
140
|
+
*/
|
|
141
|
+
refreshMasterList() {
|
|
142
|
+
const defaultPayload = {};
|
|
143
|
+
this.getMasterList(defaultPayload).subscribe({
|
|
144
|
+
next: () => {
|
|
145
|
+
console.log('General master list refreshed successfully');
|
|
146
|
+
},
|
|
147
|
+
error: (error) => {
|
|
148
|
+
console.error('Error refreshing general master list:', error);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Handle errors
|
|
154
|
+
*/
|
|
155
|
+
handleError(error) {
|
|
156
|
+
let errorMessage = 'An error occurred';
|
|
157
|
+
if (error instanceof Error) {
|
|
158
|
+
errorMessage = error.message;
|
|
159
|
+
}
|
|
160
|
+
else if (typeof error === 'string') {
|
|
161
|
+
errorMessage = error;
|
|
162
|
+
}
|
|
163
|
+
console.error('General Master Service Error:', errorMessage);
|
|
164
|
+
return throwError(() => new Error(errorMessage));
|
|
165
|
+
}
|
|
166
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: GeneralMasterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
167
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: GeneralMasterService, providedIn: 'root' });
|
|
168
|
+
}
|
|
169
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: GeneralMasterService, decorators: [{
|
|
170
|
+
type: Injectable,
|
|
171
|
+
args: [{
|
|
172
|
+
providedIn: 'root'
|
|
173
|
+
}]
|
|
174
|
+
}], ctorParameters: () => [] });
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* General Master Component
|
|
178
|
+
*
|
|
179
|
+
* Note: This component now uses the new IGeneralMasterListRequest interface
|
|
180
|
+
* which only supports:
|
|
181
|
+
* - sygms_id_sygmt: Filter by master type
|
|
182
|
+
* - sygms_entity_id_syen: Filter by entity (with hierarchical lookup)
|
|
183
|
+
*
|
|
184
|
+
* Features like search, pagination, and parent filtering are not supported
|
|
185
|
+
* in the current interface and would need backend implementation.
|
|
186
|
+
*/
|
|
187
|
+
class GeneralMasterComponent {
|
|
188
|
+
// Dependency injection
|
|
189
|
+
destroyRef = inject(DestroyRef);
|
|
190
|
+
masterService = inject(GeneralMasterService);
|
|
191
|
+
typeService = inject(GeneralMasterTypeService);
|
|
192
|
+
fb = inject(NonNullableFormBuilder);
|
|
193
|
+
router = inject(Router);
|
|
194
|
+
route = inject(ActivatedRoute);
|
|
195
|
+
appState = inject(AppStateHelperService);
|
|
196
|
+
// Modern ViewChild signals for template renderers (Angular 20 approach)
|
|
197
|
+
masterDetailsRendererTemplate = viewChild.required('masterDetailsRendererTemplate');
|
|
198
|
+
masterStatusRendererTemplate = viewChild.required('masterStatusRendererTemplate');
|
|
199
|
+
actionsDropdownRendererTemplate = viewChild.required('actionsDropdownRendererTemplate');
|
|
200
|
+
// Make Math available in template
|
|
201
|
+
Math = Math;
|
|
202
|
+
// Signals for reactive state management
|
|
203
|
+
masters = signal([], ...(ngDevMode ? [{ debugName: "masters" }] : []));
|
|
204
|
+
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
205
|
+
error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
206
|
+
selectedItems = signal([], ...(ngDevMode ? [{ debugName: "selectedItems" }] : []));
|
|
207
|
+
searchTerm = signal('', ...(ngDevMode ? [{ debugName: "searchTerm" }] : []));
|
|
208
|
+
selectedParentMaster = signal('', ...(ngDevMode ? [{ debugName: "selectedParentMaster" }] : []));
|
|
209
|
+
// Type information
|
|
210
|
+
typeId = signal('', ...(ngDevMode ? [{ debugName: "typeId" }] : []));
|
|
211
|
+
typeTitle = signal('', ...(ngDevMode ? [{ debugName: "typeTitle" }] : []));
|
|
212
|
+
currentType = signal(null, ...(ngDevMode ? [{ debugName: "currentType" }] : []));
|
|
213
|
+
// Form state
|
|
214
|
+
isEditMode = signal(false, ...(ngDevMode ? [{ debugName: "isEditMode" }] : []));
|
|
215
|
+
editingMasterId = signal(null, ...(ngDevMode ? [{ debugName: "editingMasterId" }] : []));
|
|
216
|
+
retrievedMaster = signal(null, ...(ngDevMode ? [{ debugName: "retrievedMaster" }] : []));
|
|
217
|
+
// Pagination signals
|
|
218
|
+
currentPage = signal(1, ...(ngDevMode ? [{ debugName: "currentPage" }] : []));
|
|
219
|
+
pageSize = signal(10, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
|
|
220
|
+
totalItems = signal(0, ...(ngDevMode ? [{ debugName: "totalItems" }] : []));
|
|
221
|
+
// Modern reactive forms with signals
|
|
222
|
+
masterForm = this.fb.group({
|
|
223
|
+
sygms_code: ['', [Validators.required, Validators.maxLength(40)]],
|
|
224
|
+
sygms_title: ['', [Validators.required, Validators.maxLength(150)]],
|
|
225
|
+
sygms_desc: ['', [Validators.maxLength(500)]],
|
|
226
|
+
sygms_configuration: ['{}', [Validators.required]],
|
|
227
|
+
sygms_id_sygms: [''],
|
|
228
|
+
sygms_isactive: [true]
|
|
229
|
+
});
|
|
230
|
+
// Computed values
|
|
231
|
+
isFormDirty = computed(() => this.masterForm.dirty, ...(ngDevMode ? [{ debugName: "isFormDirty" }] : []));
|
|
232
|
+
// Parent master options for dropdown
|
|
233
|
+
parentMasterOptions = signal([], ...(ngDevMode ? [{ debugName: "parentMasterOptions" }] : []));
|
|
234
|
+
// Grid configuration signal
|
|
235
|
+
gridConfig = signal({
|
|
236
|
+
id: 'master-list-grid',
|
|
237
|
+
title: '',
|
|
238
|
+
subtitle: '',
|
|
239
|
+
columns: [
|
|
240
|
+
{
|
|
241
|
+
key: 'details',
|
|
242
|
+
header: 'Master Details',
|
|
243
|
+
type: 'custom',
|
|
244
|
+
width: 'auto',
|
|
245
|
+
truncate: true,
|
|
246
|
+
align: 'left',
|
|
247
|
+
renderer: 'masterDetailsRenderer'
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
key: 'sygms_code',
|
|
251
|
+
header: 'Master Code',
|
|
252
|
+
type: 'text',
|
|
253
|
+
width: '150px',
|
|
254
|
+
truncate: true,
|
|
255
|
+
align: 'left'
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
key: 'sygms_isactive',
|
|
259
|
+
header: 'Status',
|
|
260
|
+
type: 'custom',
|
|
261
|
+
width: '100px',
|
|
262
|
+
truncate: false,
|
|
263
|
+
align: 'center',
|
|
264
|
+
renderer: 'masterStatusRenderer'
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
key: 'actions',
|
|
268
|
+
header: '',
|
|
269
|
+
type: 'custom',
|
|
270
|
+
width: '150px',
|
|
271
|
+
truncate: false,
|
|
272
|
+
align: 'center',
|
|
273
|
+
renderer: 'actionsDropdownRenderer'
|
|
274
|
+
}
|
|
275
|
+
],
|
|
276
|
+
data: [],
|
|
277
|
+
trackBy: '_id',
|
|
278
|
+
pagination: {
|
|
279
|
+
enabled: true,
|
|
280
|
+
pageSize: 10,
|
|
281
|
+
pageSizeOptions: [10, 25, 50, 100],
|
|
282
|
+
showQuickJump: true,
|
|
283
|
+
showPageInfo: true,
|
|
284
|
+
showRefresh: true
|
|
285
|
+
},
|
|
286
|
+
search: {
|
|
287
|
+
enabled: true,
|
|
288
|
+
placeholder: 'Search masters...',
|
|
289
|
+
searchableColumns: ['sygms_title', 'sygms_desc', 'sygms_code'],
|
|
290
|
+
debounceMs: 300
|
|
291
|
+
},
|
|
292
|
+
loading: {
|
|
293
|
+
useDefer: true,
|
|
294
|
+
skeletonRows: 5,
|
|
295
|
+
showOverlay: false
|
|
296
|
+
},
|
|
297
|
+
scroll: {
|
|
298
|
+
enabled: true,
|
|
299
|
+
maxHeight: '',
|
|
300
|
+
minHeight: '',
|
|
301
|
+
stickyHeader: true,
|
|
302
|
+
virtualScroll: false,
|
|
303
|
+
rowHeight: 50
|
|
304
|
+
},
|
|
305
|
+
tree: {
|
|
306
|
+
enabled: true,
|
|
307
|
+
primaryKey: '_id',
|
|
308
|
+
foreignKey: 'sygms_id_sygms',
|
|
309
|
+
childrenKey: 'children',
|
|
310
|
+
levelKey: 'level',
|
|
311
|
+
expandedKey: 'expanded',
|
|
312
|
+
hasChildrenKey: 'hasChildren'
|
|
313
|
+
},
|
|
314
|
+
responsive: true,
|
|
315
|
+
striped: false,
|
|
316
|
+
bordered: true,
|
|
317
|
+
compact: false,
|
|
318
|
+
tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'
|
|
319
|
+
}, ...(ngDevMode ? [{ debugName: "gridConfig" }] : []));
|
|
320
|
+
// Action handlers for grid
|
|
321
|
+
actionHandlers = {
|
|
322
|
+
onEdit: (item) => this.editMaster(item),
|
|
323
|
+
onDelete: (item) => this.deleteMaster(item),
|
|
324
|
+
onToggleStatus: (item) => this.toggleMasterStatus(item)
|
|
325
|
+
};
|
|
326
|
+
ngOnInit() {
|
|
327
|
+
this.initializeComponent();
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Initialize component
|
|
331
|
+
*/
|
|
332
|
+
initializeComponent() {
|
|
333
|
+
// Get type information from route
|
|
334
|
+
this.route.params.subscribe(params => {
|
|
335
|
+
const payload = generateObjectFromString(params['query'] || '');
|
|
336
|
+
this.typeId.set(payload.sygmt_id || '');
|
|
337
|
+
this.typeTitle.set(payload.sygmt_title || '');
|
|
338
|
+
if (this.typeId()) {
|
|
339
|
+
this.loadTypeDetails();
|
|
340
|
+
this.loadMasters();
|
|
341
|
+
this.loadParentMasterOptions();
|
|
342
|
+
this.setupFormSubscriptions();
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
this.error.set('No type ID provided');
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Load type details
|
|
351
|
+
*/
|
|
352
|
+
loadTypeDetails() {
|
|
353
|
+
this.typeService.getTypeById(this.typeId())
|
|
354
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
355
|
+
.subscribe({
|
|
356
|
+
next: (response) => {
|
|
357
|
+
if (response.success) {
|
|
358
|
+
this.currentType.set(response.data);
|
|
359
|
+
}
|
|
360
|
+
},
|
|
361
|
+
error: (error) => {
|
|
362
|
+
console.error('Error loading type details:', error);
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Load masters from API
|
|
368
|
+
*/
|
|
369
|
+
loadMasters() {
|
|
370
|
+
this.loading.set(true);
|
|
371
|
+
this.error.set(null);
|
|
372
|
+
const payload = {
|
|
373
|
+
...(this.typeId() && { sygms_id_sygmt: this.typeId() })
|
|
374
|
+
// Note: search, pagination, and parent_id are not supported in the new interface
|
|
375
|
+
// These would need to be implemented in the backend if needed
|
|
376
|
+
};
|
|
377
|
+
this.masterService.getMasterList(payload)
|
|
378
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
379
|
+
.subscribe({
|
|
380
|
+
next: (response) => {
|
|
381
|
+
if (response.success) {
|
|
382
|
+
this.masters.set(response.data || []);
|
|
383
|
+
this.totalItems.set(response.total || 0);
|
|
384
|
+
this.updateGridData();
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
this.error.set(response.message || 'Failed to load masters');
|
|
388
|
+
}
|
|
389
|
+
this.loading.set(false);
|
|
390
|
+
},
|
|
391
|
+
error: (error) => {
|
|
392
|
+
console.error('Error loading masters:', error);
|
|
393
|
+
this.error.set('Failed to load masters. Please try again.');
|
|
394
|
+
this.loading.set(false);
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Load masters by entity ID
|
|
400
|
+
*/
|
|
401
|
+
loadMastersByEntity(entityId) {
|
|
402
|
+
this.loading.set(true);
|
|
403
|
+
this.error.set(null);
|
|
404
|
+
const payload = {
|
|
405
|
+
sygms_entity_id_syen: entityId,
|
|
406
|
+
...(this.typeId() && { sygms_id_sygmt: this.typeId() })
|
|
407
|
+
};
|
|
408
|
+
this.masterService.getMasterList(payload)
|
|
409
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
410
|
+
.subscribe({
|
|
411
|
+
next: (response) => {
|
|
412
|
+
if (response.success) {
|
|
413
|
+
this.masters.set(response.data || []);
|
|
414
|
+
this.totalItems.set(response.total || 0);
|
|
415
|
+
this.updateGridData();
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
this.error.set(response.message || 'Failed to load masters');
|
|
419
|
+
}
|
|
420
|
+
this.loading.set(false);
|
|
421
|
+
},
|
|
422
|
+
error: (error) => {
|
|
423
|
+
console.error('Error loading masters by entity:', error);
|
|
424
|
+
this.error.set('Failed to load masters. Please try again.');
|
|
425
|
+
this.loading.set(false);
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Load parent master options for dropdown
|
|
431
|
+
*/
|
|
432
|
+
loadParentMasterOptions() {
|
|
433
|
+
const payload = {
|
|
434
|
+
...(this.typeId() && { sygms_id_sygmt: this.typeId() })
|
|
435
|
+
};
|
|
436
|
+
this.masterService.getMasterList(payload)
|
|
437
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
438
|
+
.subscribe({
|
|
439
|
+
next: (response) => {
|
|
440
|
+
if (response.success) {
|
|
441
|
+
const options = [
|
|
442
|
+
{ value: '', label: '-- Select Parent Master --' },
|
|
443
|
+
...(response.data || []).map(master => ({
|
|
444
|
+
value: master._id || "",
|
|
445
|
+
label: master.sygms_title || ""
|
|
446
|
+
}))
|
|
447
|
+
];
|
|
448
|
+
this.parentMasterOptions.set(options);
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
error: (error) => {
|
|
452
|
+
console.error('Error loading parent master options:', error);
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Setup form subscriptions
|
|
458
|
+
*/
|
|
459
|
+
setupFormSubscriptions() {
|
|
460
|
+
// Watch for form changes to enable/disable save button
|
|
461
|
+
this.masterForm.valueChanges
|
|
462
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
463
|
+
.subscribe(() => {
|
|
464
|
+
// Form validation is handled by computed signals
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Update grid data
|
|
469
|
+
*/
|
|
470
|
+
updateGridData() {
|
|
471
|
+
this.gridConfig.update(config => ({
|
|
472
|
+
...config,
|
|
473
|
+
data: this.masters()
|
|
474
|
+
}));
|
|
475
|
+
}
|
|
476
|
+
// Computed template renderers for grid
|
|
477
|
+
templateRenderers = computed(() => ({
|
|
478
|
+
masterDetailsRenderer: this.masterDetailsRendererTemplate(),
|
|
479
|
+
masterStatusRenderer: this.masterStatusRendererTemplate(),
|
|
480
|
+
actionsDropdownRenderer: this.actionsDropdownRendererTemplate()
|
|
481
|
+
}), ...(ngDevMode ? [{ debugName: "templateRenderers" }] : []));
|
|
482
|
+
/**
|
|
483
|
+
* Handle grid events
|
|
484
|
+
*/
|
|
485
|
+
onGridEvent(event) {
|
|
486
|
+
switch (event.type) {
|
|
487
|
+
case 'pageChange':
|
|
488
|
+
if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {
|
|
489
|
+
this.currentPage.set(event.data['pageIndex']);
|
|
490
|
+
this.pageSize.set(event.data['pageSize']);
|
|
491
|
+
this.loadMasters();
|
|
492
|
+
}
|
|
493
|
+
break;
|
|
494
|
+
case 'search':
|
|
495
|
+
if (event.data && typeof event.data === 'string') {
|
|
496
|
+
this.searchTerm.set(event.data);
|
|
497
|
+
this.currentPage.set(1);
|
|
498
|
+
this.loadMasters();
|
|
499
|
+
}
|
|
500
|
+
break;
|
|
501
|
+
case 'refresh':
|
|
502
|
+
this.loadMasters();
|
|
503
|
+
break;
|
|
504
|
+
case 'action':
|
|
505
|
+
// Handle action events if needed
|
|
506
|
+
console.log('Action event:', event);
|
|
507
|
+
break;
|
|
508
|
+
case 'rowClick':
|
|
509
|
+
// Handle row click events if needed
|
|
510
|
+
console.log('Row click event:', event);
|
|
511
|
+
break;
|
|
512
|
+
case 'sort':
|
|
513
|
+
// Handle sort events if needed
|
|
514
|
+
console.log('Sort event:', event);
|
|
515
|
+
break;
|
|
516
|
+
case 'export':
|
|
517
|
+
// Handle export events if needed
|
|
518
|
+
console.log('Export event:', event);
|
|
519
|
+
break;
|
|
520
|
+
case 'rowReorder':
|
|
521
|
+
// Handle row reorder events if needed
|
|
522
|
+
console.log('Row reorder event:', event);
|
|
523
|
+
break;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Create new master
|
|
528
|
+
*/
|
|
529
|
+
createMaster() {
|
|
530
|
+
if (!this.masterForm.valid) {
|
|
531
|
+
this.markFormAsTouched();
|
|
532
|
+
return;
|
|
533
|
+
}
|
|
534
|
+
const formValue = this.masterForm.getRawValue();
|
|
535
|
+
const newMaster = {
|
|
536
|
+
_id: '',
|
|
537
|
+
sygms_code: formValue.sygms_code,
|
|
538
|
+
sygms_id_sygmt: this.typeId(),
|
|
539
|
+
sygms_title: formValue.sygms_title,
|
|
540
|
+
sygms_desc: formValue.sygms_desc,
|
|
541
|
+
sygms_configuration: JSON.parse(formValue.sygms_configuration),
|
|
542
|
+
sygms_id_sygms: formValue.sygms_id_sygms || undefined,
|
|
543
|
+
sygms_entity_id_syen: this.appState.getActiveEntityId() || undefined,
|
|
544
|
+
sygms_isactive: formValue.sygms_isactive
|
|
545
|
+
};
|
|
546
|
+
this.loading.set(true);
|
|
547
|
+
this.masterService.createMaster(newMaster)
|
|
548
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
549
|
+
.subscribe({
|
|
550
|
+
next: (response) => {
|
|
551
|
+
if (response.success) {
|
|
552
|
+
this.resetForm();
|
|
553
|
+
this.loadMasters();
|
|
554
|
+
this.loadParentMasterOptions();
|
|
555
|
+
console.log('✅ Master created successfully');
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
console.error('❌ Failed to create master:', response.message);
|
|
559
|
+
}
|
|
560
|
+
this.loading.set(false);
|
|
561
|
+
},
|
|
562
|
+
error: (error) => {
|
|
563
|
+
console.error('Error creating master:', error);
|
|
564
|
+
console.error('❌ Failed to create master. Please try again.');
|
|
565
|
+
this.loading.set(false);
|
|
566
|
+
}
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Update existing master
|
|
571
|
+
*/
|
|
572
|
+
updateMaster() {
|
|
573
|
+
if (!this.masterForm.valid || !this.editingMasterId()) {
|
|
574
|
+
this.markFormAsTouched();
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
577
|
+
const formValue = this.masterForm.getRawValue();
|
|
578
|
+
const updatedMaster = {
|
|
579
|
+
_id: this.editingMasterId(),
|
|
580
|
+
sygms_code: formValue.sygms_code,
|
|
581
|
+
sygms_id_sygmt: this.typeId(),
|
|
582
|
+
sygms_title: formValue.sygms_title,
|
|
583
|
+
sygms_desc: formValue.sygms_desc,
|
|
584
|
+
sygms_configuration: JSON.parse(formValue.sygms_configuration),
|
|
585
|
+
sygms_id_sygms: formValue.sygms_id_sygms || undefined,
|
|
586
|
+
sygms_entity_id_syen: this.appState.getActiveEntityId() || undefined,
|
|
587
|
+
sygms_isactive: formValue.sygms_isactive
|
|
588
|
+
};
|
|
589
|
+
this.loading.set(true);
|
|
590
|
+
this.masterService.updateMaster(this.editingMasterId(), updatedMaster)
|
|
591
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
592
|
+
.subscribe({
|
|
593
|
+
next: (response) => {
|
|
594
|
+
if (response.success) {
|
|
595
|
+
this.resetForm();
|
|
596
|
+
this.loadMasters();
|
|
597
|
+
this.loadParentMasterOptions();
|
|
598
|
+
console.log('✅ Master updated successfully');
|
|
599
|
+
}
|
|
600
|
+
else {
|
|
601
|
+
console.error('❌ Failed to update master:', response.message);
|
|
602
|
+
}
|
|
603
|
+
this.loading.set(false);
|
|
604
|
+
},
|
|
605
|
+
error: (error) => {
|
|
606
|
+
console.error('Error updating master:', error);
|
|
607
|
+
console.error('❌ Failed to update master. Please try again.');
|
|
608
|
+
this.loading.set(false);
|
|
609
|
+
}
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
613
|
+
* Edit master
|
|
614
|
+
*/
|
|
615
|
+
editMaster(master) {
|
|
616
|
+
this.isEditMode.set(true);
|
|
617
|
+
this.editingMasterId.set(master._id || "");
|
|
618
|
+
this.retrievedMaster.set(master);
|
|
619
|
+
this.masterForm.patchValue({
|
|
620
|
+
sygms_code: master.sygms_code,
|
|
621
|
+
sygms_title: master.sygms_title,
|
|
622
|
+
sygms_desc: master.sygms_desc,
|
|
623
|
+
sygms_configuration: JSON.stringify(master.sygms_configuration, null, 2),
|
|
624
|
+
sygms_id_sygms: master.sygms_id_sygms || '',
|
|
625
|
+
sygms_isactive: master.sygms_isactive
|
|
626
|
+
});
|
|
627
|
+
this.masterForm.markAsPristine();
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Delete master
|
|
631
|
+
*/
|
|
632
|
+
deleteMaster(master) {
|
|
633
|
+
if (confirm(`Are you sure you want to delete the master "${master.sygms_title}"?`)) {
|
|
634
|
+
this.loading.set(true);
|
|
635
|
+
this.masterService.deleteMaster(master._id || "")
|
|
636
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
637
|
+
.subscribe({
|
|
638
|
+
next: (response) => {
|
|
639
|
+
if (response.success) {
|
|
640
|
+
this.loadMasters();
|
|
641
|
+
this.loadParentMasterOptions();
|
|
642
|
+
console.log('✅ Master deleted successfully');
|
|
643
|
+
}
|
|
644
|
+
else {
|
|
645
|
+
console.error('❌ Failed to delete master:', response.message);
|
|
646
|
+
}
|
|
647
|
+
this.loading.set(false);
|
|
648
|
+
},
|
|
649
|
+
error: (error) => {
|
|
650
|
+
console.error('Error deleting master:', error);
|
|
651
|
+
console.error('❌ Failed to delete master. Please try again.');
|
|
652
|
+
this.loading.set(false);
|
|
653
|
+
}
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
/**
|
|
658
|
+
* Toggle master status
|
|
659
|
+
*/
|
|
660
|
+
toggleMasterStatus(master) {
|
|
661
|
+
this.loading.set(true);
|
|
662
|
+
this.masterService.toggleMasterStatus(master._id || "")
|
|
663
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
664
|
+
.subscribe({
|
|
665
|
+
next: (response) => {
|
|
666
|
+
if (response.success) {
|
|
667
|
+
this.loadMasters();
|
|
668
|
+
console.log(`✅ Master ${master.sygms_isactive ? 'deactivated' : 'activated'} successfully`);
|
|
669
|
+
}
|
|
670
|
+
else {
|
|
671
|
+
console.error('❌ Failed to toggle master status:', response.message);
|
|
672
|
+
}
|
|
673
|
+
this.loading.set(false);
|
|
674
|
+
},
|
|
675
|
+
error: (error) => {
|
|
676
|
+
console.error('Error toggling master status:', error);
|
|
677
|
+
console.error('❌ Failed to toggle master status. Please try again.');
|
|
678
|
+
this.loading.set(false);
|
|
679
|
+
}
|
|
680
|
+
});
|
|
681
|
+
}
|
|
682
|
+
/**
|
|
683
|
+
* Reset to parent (delete entity-specific override)
|
|
684
|
+
*/
|
|
685
|
+
resetToParent(master) {
|
|
686
|
+
if (confirm(`Are you sure you want to reset "${master.sygms_title}" to parent values?`)) {
|
|
687
|
+
this.loading.set(true);
|
|
688
|
+
this.masterService.deleteMaster(master._id || "")
|
|
689
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
690
|
+
.subscribe({
|
|
691
|
+
next: (response) => {
|
|
692
|
+
if (response.success) {
|
|
693
|
+
this.loadMasters();
|
|
694
|
+
console.log('✅ Master reset to parent successfully');
|
|
695
|
+
}
|
|
696
|
+
else {
|
|
697
|
+
console.error('❌ Failed to reset master:', response.message);
|
|
698
|
+
}
|
|
699
|
+
this.loading.set(false);
|
|
700
|
+
},
|
|
701
|
+
error: (error) => {
|
|
702
|
+
console.error('Error resetting master:', error);
|
|
703
|
+
console.error('❌ Failed to reset master. Please try again.');
|
|
704
|
+
this.loading.set(false);
|
|
705
|
+
}
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
/**
|
|
710
|
+
* Save master (create or update)
|
|
711
|
+
*/
|
|
712
|
+
saveMaster() {
|
|
713
|
+
if (this.isEditMode()) {
|
|
714
|
+
this.updateMaster();
|
|
715
|
+
}
|
|
716
|
+
else {
|
|
717
|
+
this.createMaster();
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
/**
|
|
721
|
+
* Cancel form
|
|
722
|
+
*/
|
|
723
|
+
cancelForm() {
|
|
724
|
+
this.resetForm();
|
|
725
|
+
}
|
|
726
|
+
/**
|
|
727
|
+
* Go back to type list
|
|
728
|
+
*/
|
|
729
|
+
goBack() {
|
|
730
|
+
this.router.navigate(['/control-panel/general-master-type']);
|
|
731
|
+
}
|
|
732
|
+
/**
|
|
733
|
+
* Reset form
|
|
734
|
+
*/
|
|
735
|
+
resetForm() {
|
|
736
|
+
this.masterForm.reset({
|
|
737
|
+
sygms_code: '',
|
|
738
|
+
sygms_title: '',
|
|
739
|
+
sygms_desc: '',
|
|
740
|
+
sygms_configuration: '{}',
|
|
741
|
+
sygms_id_sygms: '',
|
|
742
|
+
sygms_isactive: true
|
|
743
|
+
});
|
|
744
|
+
this.isEditMode.set(false);
|
|
745
|
+
this.editingMasterId.set(null);
|
|
746
|
+
this.retrievedMaster.set(null);
|
|
747
|
+
this.masterForm.markAsPristine();
|
|
748
|
+
this.masterForm.markAsUntouched();
|
|
749
|
+
}
|
|
750
|
+
/**
|
|
751
|
+
* Mark form as touched to trigger validation display
|
|
752
|
+
*/
|
|
753
|
+
markFormAsTouched() {
|
|
754
|
+
Object.keys(this.masterForm.controls).forEach(key => {
|
|
755
|
+
const control = this.masterForm.get(key);
|
|
756
|
+
control?.markAsTouched();
|
|
757
|
+
});
|
|
758
|
+
}
|
|
759
|
+
/**
|
|
760
|
+
* Get dropdown items for actions
|
|
761
|
+
*/
|
|
762
|
+
getActionDropdownItems(master) {
|
|
763
|
+
const items = [
|
|
764
|
+
{
|
|
765
|
+
id: 'edit',
|
|
766
|
+
label: 'Edit',
|
|
767
|
+
icon: 'edit',
|
|
768
|
+
disabled: false
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
id: 'addChild',
|
|
772
|
+
label: 'Add Child',
|
|
773
|
+
icon: 'add',
|
|
774
|
+
disabled: false
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
id: 'toggle',
|
|
778
|
+
label: master.sygms_isactive ? 'Deactivate' : 'Activate',
|
|
779
|
+
icon: master.sygms_isactive ? 'block' : 'check_circle',
|
|
780
|
+
disabled: false
|
|
781
|
+
}
|
|
782
|
+
];
|
|
783
|
+
// Add reset to parent option if entity-specific
|
|
784
|
+
if (master.sygms_entity_id_syen) {
|
|
785
|
+
items.push({
|
|
786
|
+
id: 'reset',
|
|
787
|
+
label: 'Reset to Parent',
|
|
788
|
+
icon: 'restore',
|
|
789
|
+
disabled: false
|
|
790
|
+
});
|
|
791
|
+
}
|
|
792
|
+
items.push({
|
|
793
|
+
id: 'delete',
|
|
794
|
+
label: 'Delete',
|
|
795
|
+
icon: 'delete',
|
|
796
|
+
disabled: false
|
|
797
|
+
});
|
|
798
|
+
return items;
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* Handle dropdown item click
|
|
802
|
+
*/
|
|
803
|
+
onDropdownItemClick(item, row) {
|
|
804
|
+
console.log('🔵 onDropdownItemClick called with:', item, row);
|
|
805
|
+
switch (item.id) {
|
|
806
|
+
case 'edit':
|
|
807
|
+
console.log('🔵 Calling editMaster with:', row);
|
|
808
|
+
this.editMaster(row);
|
|
809
|
+
break;
|
|
810
|
+
case 'addChild':
|
|
811
|
+
console.log('🔵 Calling onAddChild with:', row);
|
|
812
|
+
this.onAddChild(row);
|
|
813
|
+
break;
|
|
814
|
+
case 'toggle':
|
|
815
|
+
console.log('🔵 Calling toggleMasterStatus with:', row);
|
|
816
|
+
this.toggleMasterStatus(row);
|
|
817
|
+
break;
|
|
818
|
+
case 'reset':
|
|
819
|
+
console.log('🔵 Calling resetToParent with:', row);
|
|
820
|
+
this.resetToParent(row);
|
|
821
|
+
break;
|
|
822
|
+
case 'delete':
|
|
823
|
+
console.log('🔵 Calling deleteMaster with:', row);
|
|
824
|
+
this.deleteMaster(row);
|
|
825
|
+
break;
|
|
826
|
+
default:
|
|
827
|
+
console.log('🔵 Unknown action:', item.id);
|
|
828
|
+
}
|
|
829
|
+
// Close all dropdowns after action
|
|
830
|
+
this.closeAllDropdowns();
|
|
831
|
+
}
|
|
832
|
+
/**
|
|
833
|
+
* Add child master
|
|
834
|
+
*/
|
|
835
|
+
onAddChild(parentMaster) {
|
|
836
|
+
console.log('🔵 onAddChild called with:', parentMaster);
|
|
837
|
+
console.log('🔵 Parent title:', parentMaster.sygms_title);
|
|
838
|
+
// Clear edit mode and retrieved item when adding a child
|
|
839
|
+
this.isEditMode.set(false);
|
|
840
|
+
this.editingMasterId.set(null);
|
|
841
|
+
this.retrievedMaster.set(null);
|
|
842
|
+
// Reset form and pre-fill with parent context
|
|
843
|
+
this.masterForm.patchValue({
|
|
844
|
+
sygms_code: '',
|
|
845
|
+
sygms_title: '',
|
|
846
|
+
sygms_desc: '',
|
|
847
|
+
sygms_configuration: '{}',
|
|
848
|
+
sygms_id_sygms: parentMaster._id, // Set parent master ID
|
|
849
|
+
sygms_isactive: true
|
|
850
|
+
});
|
|
851
|
+
// Store the parent master for reference (you can display this in the UI)
|
|
852
|
+
console.log('🔵 Ready to add child master for parent:', parentMaster.sygms_title);
|
|
853
|
+
}
|
|
854
|
+
/**
|
|
855
|
+
* Get parent master display name
|
|
856
|
+
*/
|
|
857
|
+
getParentMasterDisplay() {
|
|
858
|
+
const parentId = this.masterForm.get('sygms_id_sygms')?.value;
|
|
859
|
+
if (!parentId)
|
|
860
|
+
return 'Unknown Parent';
|
|
861
|
+
const parentMaster = this.masters().find(master => master._id === parentId);
|
|
862
|
+
return parentMaster?.sygms_title || 'Unknown Parent';
|
|
863
|
+
}
|
|
864
|
+
/**
|
|
865
|
+
* Clear parent master from form
|
|
866
|
+
*/
|
|
867
|
+
clearParentMaster() {
|
|
868
|
+
this.masterForm.patchValue({
|
|
869
|
+
sygms_id_sygms: ''
|
|
870
|
+
});
|
|
871
|
+
}
|
|
872
|
+
/**
|
|
873
|
+
* Close all dropdowns
|
|
874
|
+
*/
|
|
875
|
+
closeAllDropdowns() {
|
|
876
|
+
// Close all dropdowns by clicking outside
|
|
877
|
+
const event = new MouseEvent('click', { bubbles: true });
|
|
878
|
+
document.dispatchEvent(event);
|
|
879
|
+
}
|
|
880
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: GeneralMasterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
881
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: GeneralMasterComponent, isStandalone: true, selector: "cide-core-app-general-master", viewQueries: [{ propertyName: "masterDetailsRendererTemplate", first: true, predicate: ["masterDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "masterStatusRendererTemplate", first: true, predicate: ["masterStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- General Master Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Master' : 'Quick Add Master' }}</h6>\n </div>\n \n <!-- Parent Master Info Box -->\n @if (masterForm.get('sygms_id_sygms')?.value) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-blue-800\">Adding Child</span>\n <span class=\"tw-text-xs tw-text-blue-700\">\n Parent: <span class=\"tw-font-medium\">{{ getParentMasterDisplay() }}</span>\n </span>\n <button \n type=\"button\"\n (click)=\"clearParentMaster()\"\n class=\"tw-text-sm tw-text-blue-600 hover:tw-text-blue-800 hover:tw-bg-blue-100 tw-rounded tw-px-1\">\n \u00D7\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"masterForm\" class=\"tw-space-y-2\">\n \n <!-- First Row - Basic fields -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\n <!-- Master Code -->\n <div class=\"lg:tw-col-span-1\">\n <cide-ele-input \n formControlName=\"sygms_code\" \n label=\"Master Code*\" \n placeholder=\"Enter master code\"\n size=\"sm\"\n [required]=\"true\" \n [maxlength]=\"40\">\n </cide-ele-input>\n </div>\n \n <!-- Master Title -->\n <div class=\"lg:tw-col-span-3\">\n <cide-ele-input \n formControlName=\"sygms_title\" \n label=\"Master Title*\" \n placeholder=\"Enter master title\"\n size=\"sm\"\n [required]=\"true\" \n [maxlength]=\"150\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status -->\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\n <cide-ele-input \n formControlName=\"sygms_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Third Row - JSON Configuration and Description/Save side by side -->\n <div class=\"tw-flex tw-gap-4\">\n <!-- JSON Configuration (60% width) -->\n <div class=\"tw-w-3/5\">\n <cide-ele-json-editor \n formControlName=\"sygms_configuration\" \n label=\"Configuration*\" \n size=\"sm\"\n [required]=\"true\">\n </cide-ele-json-editor>\n </div>\n \n <!-- Description and Save Button (40% width) -->\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\n <!-- Description -->\n <div class=\"tw-flex-1\">\n <cide-ele-textarea \n formControlName=\"sygms_desc\" \n label=\"Description\" \n placeholder=\"Enter description\"\n size=\"sm\"\n [maxlength]=\"500\" \n [rows]=\"4\">\n </cide-ele-textarea>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\" \n (click)=\"resetForm()\"\n [disabled]=\"loading()\"\n class=\"tw-px-4 tw-py-2\">\n Reset\n </button>\n @if (isEditMode()) {\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\" \n (click)=\"cancelForm()\"\n [disabled]=\"loading()\"\n class=\"tw-px-4 tw-py-2\">\n Cancel\n </button>\n }\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n (click)=\"saveMaster()\"\n [disabled]=\"!masterForm.valid || loading()\"\n class=\"tw-px-4 tw-py-2\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\n \n <!-- Title and Back Button -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (typeTitle()) {\n <div>\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0\">Type: {{ typeTitle() }}</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Actions can be added here in the future -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Template Renderers -->\n<ng-template #masterDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-w-full\">\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygms_title || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.sygms_desc || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #masterStatusRendererTemplate let-row=\"row\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\n [class.tw-bg-green-100]=\"row.sygms_isactive\"\n [class.tw-text-green-800]=\"row.sygms_isactive\"\n [class.tw-bg-red-100]=\"!row.sygms_isactive\"\n [class.tw-text-red-800]=\"!row.sygms_isactive\">\n {{ row.sygms_isactive ? 'Active' : 'Inactive' }}\n </span>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton]", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "customRenderers", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideEleJsonEditorComponent, selector: "cide-ele-json-editor", inputs: ["label", "helperText", "required", "disabled", "showCharacterCount", "config"], outputs: ["valueChange", "objectChange", "errorsChange", "validChange"] }] });
|
|
882
|
+
}
|
|
883
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: GeneralMasterComponent, decorators: [{
|
|
884
|
+
type: Component,
|
|
885
|
+
args: [{ selector: 'cide-core-app-general-master', standalone: true, imports: [
|
|
886
|
+
CommonModule,
|
|
887
|
+
ReactiveFormsModule,
|
|
888
|
+
FormsModule,
|
|
889
|
+
CideEleButtonComponent,
|
|
890
|
+
CideEleDataGridComponent,
|
|
891
|
+
CideInputComponent,
|
|
892
|
+
CideSelectComponent,
|
|
893
|
+
CideTextareaComponent,
|
|
894
|
+
CideIconComponent,
|
|
895
|
+
CideEleDropdownComponent,
|
|
896
|
+
CideEleJsonEditorComponent
|
|
897
|
+
], template: "<!-- General Master Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Master' : 'Quick Add Master' }}</h6>\n </div>\n \n <!-- Parent Master Info Box -->\n @if (masterForm.get('sygms_id_sygms')?.value) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-blue-800\">Adding Child</span>\n <span class=\"tw-text-xs tw-text-blue-700\">\n Parent: <span class=\"tw-font-medium\">{{ getParentMasterDisplay() }}</span>\n </span>\n <button \n type=\"button\"\n (click)=\"clearParentMaster()\"\n class=\"tw-text-sm tw-text-blue-600 hover:tw-text-blue-800 hover:tw-bg-blue-100 tw-rounded tw-px-1\">\n \u00D7\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"masterForm\" class=\"tw-space-y-2\">\n \n <!-- First Row - Basic fields -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\n <!-- Master Code -->\n <div class=\"lg:tw-col-span-1\">\n <cide-ele-input \n formControlName=\"sygms_code\" \n label=\"Master Code*\" \n placeholder=\"Enter master code\"\n size=\"sm\"\n [required]=\"true\" \n [maxlength]=\"40\">\n </cide-ele-input>\n </div>\n \n <!-- Master Title -->\n <div class=\"lg:tw-col-span-3\">\n <cide-ele-input \n formControlName=\"sygms_title\" \n label=\"Master Title*\" \n placeholder=\"Enter master title\"\n size=\"sm\"\n [required]=\"true\" \n [maxlength]=\"150\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status -->\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\n <cide-ele-input \n formControlName=\"sygms_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Third Row - JSON Configuration and Description/Save side by side -->\n <div class=\"tw-flex tw-gap-4\">\n <!-- JSON Configuration (60% width) -->\n <div class=\"tw-w-3/5\">\n <cide-ele-json-editor \n formControlName=\"sygms_configuration\" \n label=\"Configuration*\" \n size=\"sm\"\n [required]=\"true\">\n </cide-ele-json-editor>\n </div>\n \n <!-- Description and Save Button (40% width) -->\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\n <!-- Description -->\n <div class=\"tw-flex-1\">\n <cide-ele-textarea \n formControlName=\"sygms_desc\" \n label=\"Description\" \n placeholder=\"Enter description\"\n size=\"sm\"\n [maxlength]=\"500\" \n [rows]=\"4\">\n </cide-ele-textarea>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\" \n (click)=\"resetForm()\"\n [disabled]=\"loading()\"\n class=\"tw-px-4 tw-py-2\">\n Reset\n </button>\n @if (isEditMode()) {\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\" \n (click)=\"cancelForm()\"\n [disabled]=\"loading()\"\n class=\"tw-px-4 tw-py-2\">\n Cancel\n </button>\n }\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n (click)=\"saveMaster()\"\n [disabled]=\"!masterForm.valid || loading()\"\n class=\"tw-px-4 tw-py-2\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\n \n <!-- Title and Back Button -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (typeTitle()) {\n <div>\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0\">Type: {{ typeTitle() }}</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Actions can be added here in the future -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Template Renderers -->\n<ng-template #masterDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-w-full\">\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygms_title || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.sygms_desc || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #masterStatusRendererTemplate let-row=\"row\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\n [class.tw-bg-green-100]=\"row.sygms_isactive\"\n [class.tw-text-green-800]=\"row.sygms_isactive\"\n [class.tw-bg-red-100]=\"!row.sygms_isactive\"\n [class.tw-text-red-800]=\"!row.sygms_isactive\">\n {{ row.sygms_isactive ? 'Active' : 'Inactive' }}\n </span>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> " }]
|
|
898
|
+
}] });
|
|
899
|
+
|
|
900
|
+
export { GeneralMasterComponent };
|
|
901
|
+
//# sourceMappingURL=cloud-ide-core-general-master.component-CFGGHinl.mjs.map
|