cloud-ide-core 2.0.153 → 2.0.161

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.
@@ -1,4 +1,4 @@
1
- import { authGuard, SharedObjectIdService, CideSharedOrgStructureComponent, ENTITY_SERVICE_TOKEN } from 'cloud-ide-shared';
1
+ import { authGuard, SharedObjectIdService, EDUCATION_BOARD_SERVICE_TOKEN, CideSharedOrgStructureComponent, ENTITY_SERVICE_TOKEN } from 'cloud-ide-shared';
2
2
  import * as i0 from '@angular/core';
3
3
  import { Injectable, Component, inject, DestroyRef, viewChild, signal, computed, effect, input, output, ChangeDetectorRef, ViewChild } from '@angular/core';
4
4
  import * as i1$1 from '@angular/common';
@@ -8304,6 +8304,35 @@ class CideCoreEntityManagementService {
8304
8304
  ]);
8305
8305
  return this.http.delete(url);
8306
8306
  }
8307
+ /**
8308
+ * Get School Board Affiliations for an Entity
8309
+ * @param entityId - ID of the entity
8310
+ * @returns Observable of controllerResponse
8311
+ */
8312
+ getSchoolBoardAffiliations(entityId) {
8313
+ const payload = { entity_id: entityId };
8314
+ const query = generateStringFromObject(payload);
8315
+ const url = cidePath.join([
8316
+ hostManagerRoutesUrl.cideSuiteHost,
8317
+ coreRoutesUrl.module,
8318
+ coreRoutesUrl.schoolBoardAffiliation,
8319
+ query
8320
+ ]);
8321
+ return this.http.get(url);
8322
+ }
8323
+ /**
8324
+ * Save School Board Affiliation
8325
+ * @param payload - Affiliation data
8326
+ * @returns Observable of controllerResponse
8327
+ */
8328
+ saveSchoolBoardAffiliation(payload) {
8329
+ const url = cidePath.join([
8330
+ hostManagerRoutesUrl.cideSuiteHost,
8331
+ coreRoutesUrl.module,
8332
+ coreRoutesUrl.schoolBoardAffiliation
8333
+ ]);
8334
+ return this.http.post(url, payload);
8335
+ }
8307
8336
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityManagementService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
8308
8337
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityManagementService, providedIn: 'root' });
8309
8338
  }
@@ -8981,6 +9010,7 @@ class CideCoreGeneralMasterComponent {
8981
9010
  appState = inject(AppStateHelperService);
8982
9011
  rightsService = inject(RightsService);
8983
9012
  notificationService = inject(NotificationService);
9013
+ requestService = inject(CideLytRequestService); // Injected as any to avoid build errors if type is missing
8984
9014
  // Modern ViewChild signals for template renderers (Angular 20 approach)
8985
9015
  masterDetailsRendererTemplate = viewChild.required('masterDetailsRendererTemplate');
8986
9016
  masterStatusRendererTemplate = viewChild.required('masterStatusRendererTemplate');
@@ -9383,11 +9413,18 @@ class CideCoreGeneralMasterComponent {
9383
9413
  .subscribe({
9384
9414
  next: (response) => {
9385
9415
  if (response.success) {
9386
- this.resetForm();
9387
- this.loadMasters();
9388
- this.loadParentMasterOptions();
9389
- this.error.set(null);
9390
9416
  this.notificationService.success('General master created successfully');
9417
+ // Force refresh list route to ensure new data is loaded
9418
+ this.requestService.forceRefreshRoute('/control-panel/general-master-type'); // Or current route
9419
+ const activeTabId = this.requestService.activeTabId();
9420
+ if (activeTabId) {
9421
+ this.requestService.closeTab(activeTabId);
9422
+ }
9423
+ else {
9424
+ this.resetForm();
9425
+ this.loadMasters();
9426
+ this.loadParentMasterOptions();
9427
+ }
9391
9428
  console.log('✅ Master created successfully');
9392
9429
  }
9393
9430
  else {
@@ -9441,11 +9478,18 @@ class CideCoreGeneralMasterComponent {
9441
9478
  .subscribe({
9442
9479
  next: (response) => {
9443
9480
  if (response.success) {
9444
- this.resetForm();
9445
- this.loadMasters();
9446
- this.loadParentMasterOptions();
9447
- this.error.set(null);
9448
9481
  this.notificationService.success('General master updated successfully');
9482
+ // Force refresh list route
9483
+ this.requestService.forceRefreshRoute('/control-panel/general-master-type'); // Or current route
9484
+ const activeTabId = this.requestService.activeTabId();
9485
+ if (activeTabId) {
9486
+ this.requestService.closeTab(activeTabId);
9487
+ }
9488
+ else {
9489
+ this.resetForm();
9490
+ this.loadMasters();
9491
+ this.loadParentMasterOptions();
9492
+ }
9449
9493
  console.log('✅ Master updated successfully');
9450
9494
  }
9451
9495
  else {
@@ -10123,7 +10167,41 @@ class CideCoreEntityCreateComponent {
10123
10167
  sharedObjectIdService = inject(SharedObjectIdService);
10124
10168
  rightsService = inject(RightsService);
10125
10169
  requestService = inject(CideLytRequestService);
10170
+ educationBoardService = inject(EDUCATION_BOARD_SERVICE_TOKEN);
10126
10171
  destroy$ = new Subject();
10172
+ // Board Mapping
10173
+ boardAffiliations = signal([], ...(ngDevMode ? [{ debugName: "boardAffiliations" }] : []));
10174
+ boardAffiliationsLoading = signal(false, ...(ngDevMode ? [{ debugName: "boardAffiliationsLoading" }] : []));
10175
+ educationBoards = signal([], ...(ngDevMode ? [{ debugName: "educationBoards" }] : []));
10176
+ educationBoardsLoading = signal(false, ...(ngDevMode ? [{ debugName: "educationBoardsLoading" }] : []));
10177
+ boardMappingForm;
10178
+ // Grid config for board affiliations
10179
+ boardAffiliationsGridConfig = {
10180
+ id: 'board-affiliations',
10181
+ title: '',
10182
+ subtitle: '',
10183
+ data: [],
10184
+ trackBy: '_id',
10185
+ responsive: true,
10186
+ compact: true,
10187
+ columns: [
10188
+ { key: 'board_name', header: 'Board Name', type: 'text', width: 'lg', sortable: true },
10189
+ { key: 'scbaf_affiliation_number', header: 'Affiliation No.', type: 'text', width: 'md' },
10190
+ { key: 'status', header: 'Status', type: 'text', width: 'sm' },
10191
+ { key: 'actions', header: 'Actions', type: 'custom', width: 'sm', align: 'center', renderer: 'boardActionsCell' }
10192
+ ],
10193
+ pagination: { enabled: false, pageSize: 10, pageSizeOptions: [5, 10, 20], showQuickJump: false, showPageInfo: false, showRefresh: false },
10194
+ search: { enabled: false, placeholder: 'Search...', searchableColumns: ['board_name'], debounceMs: 300 },
10195
+ loading: { useDefer: false, skeletonRows: 3, showOverlay: true },
10196
+ scroll: { enabled: true, maxHeight: '400px', stickyHeader: true }
10197
+ };
10198
+ // renderers for board grid
10199
+ boardActionsCellRendererTemplate = viewChild('boardActionsCell', ...(ngDevMode ? [{ debugName: "boardActionsCellRendererTemplate" }] : []));
10200
+ getBoardMappingsTemplateRenderers() {
10201
+ return {
10202
+ boardActionsCell: this.boardActionsCellRendererTemplate()
10203
+ };
10204
+ }
10127
10205
  globalErrorHandler;
10128
10206
  globalRejectionHandler;
10129
10207
  // Search subjects for debouncing
@@ -10179,6 +10257,15 @@ class CideCoreEntityCreateComponent {
10179
10257
  this.userMappingForm = this.fb.group({
10180
10258
  syenm_id_user: ['', Validators.required]
10181
10259
  });
10260
+ // Initialize board mapping form
10261
+ this.boardMappingForm = this.fb.group({
10262
+ scbaf_board_id_edbrd: ['', Validators.required],
10263
+ scbaf_affiliation_number: ['', Validators.required],
10264
+ scbaf_affiliation_status_sygms: ['', Validators.required],
10265
+ scbaf_affiliation_level_multi_sygms: [[]],
10266
+ scbaf_isprimary: [false],
10267
+ scbaf_isactive: [true]
10268
+ });
10182
10269
  }
10183
10270
  ngOnInit() {
10184
10271
  // Initialize rights for entity management
@@ -10226,6 +10313,101 @@ class CideCoreEntityCreateComponent {
10226
10313
  this.destroy$.next();
10227
10314
  this.destroy$.complete();
10228
10315
  }
10316
+ // Board Mapping Methods
10317
+ loadEducationBoards() {
10318
+ this.educationBoardsLoading.set(true);
10319
+ // Use existing search logic or fetch all
10320
+ this.educationBoardService.getEducationBoardList({}).subscribe({
10321
+ next: (response) => {
10322
+ if (response?.success && response?.data) {
10323
+ this.educationBoards.set(response.data.map((board) => ({
10324
+ label: board.edbrd_name || board.edbrd_name_en || 'Unknown Board',
10325
+ value: board._id || '',
10326
+ data: board
10327
+ })));
10328
+ }
10329
+ else {
10330
+ this.educationBoards.set([]);
10331
+ }
10332
+ this.educationBoardsLoading.set(false);
10333
+ },
10334
+ error: (err) => {
10335
+ console.error('Error loading education boards:', err);
10336
+ this.educationBoards.set([]);
10337
+ this.educationBoardsLoading.set(false);
10338
+ }
10339
+ });
10340
+ }
10341
+ loadBoardAffiliations() {
10342
+ const entityId = this.entityId();
10343
+ if (!entityId)
10344
+ return;
10345
+ this.boardAffiliationsLoading.set(true);
10346
+ this.entityService.getSchoolBoardAffiliations(entityId).subscribe({
10347
+ next: (response) => {
10348
+ if (response?.success && response?.data) {
10349
+ const mappings = Array.isArray(response.data) ? response.data : [response.data];
10350
+ // Map response to grid friendly format if needed, or just set it
10351
+ // We might need to enrich this data with board names if not present, but let's assume populate does it or we look up
10352
+ // Actually the backend returns CoreSchoolBoardAffiliation objects. We might need to populate board name.
10353
+ // The schema has `ref` so I assume population might be needed on backend or we Map it here.
10354
+ // For now, let's just set data.
10355
+ this.boardAffiliations.set(mappings);
10356
+ this.boardAffiliationsGridConfig = {
10357
+ ...this.boardAffiliationsGridConfig,
10358
+ data: mappings
10359
+ };
10360
+ }
10361
+ else {
10362
+ this.boardAffiliations.set([]);
10363
+ this.boardAffiliationsGridConfig = {
10364
+ ...this.boardAffiliationsGridConfig,
10365
+ data: []
10366
+ };
10367
+ }
10368
+ this.boardAffiliationsLoading.set(false);
10369
+ },
10370
+ error: (err) => {
10371
+ console.error('Error loading board affiliations:', err);
10372
+ this.boardAffiliations.set([]);
10373
+ this.boardAffiliationsLoading.set(false);
10374
+ }
10375
+ });
10376
+ }
10377
+ addBoardAffiliation() {
10378
+ if (this.boardMappingForm.valid) {
10379
+ const payload = this.boardMappingForm.value;
10380
+ const entityId = this.entityId();
10381
+ if (!entityId) {
10382
+ this.notificationService.error('Entity ID is missing');
10383
+ return;
10384
+ }
10385
+ payload.scbaf_entity_id_syen = entityId;
10386
+ this.entityService.saveSchoolBoardAffiliation(payload).subscribe({
10387
+ next: (response) => {
10388
+ if (response?.success) {
10389
+ this.notificationService.success('Board affiliation saved successfully');
10390
+ this.loadBoardAffiliations(); // Refresh list
10391
+ this.boardMappingForm.reset({
10392
+ scbaf_isactive: true,
10393
+ scbaf_isprimary: false
10394
+ });
10395
+ }
10396
+ else {
10397
+ this.notificationService.error(response?.message || 'Failed to save affiliation');
10398
+ }
10399
+ },
10400
+ error: (err) => {
10401
+ console.error('Error saving affiliation:', err);
10402
+ this.notificationService.error('Error saving affiliation');
10403
+ }
10404
+ });
10405
+ }
10406
+ else {
10407
+ this.boardMappingForm.markAllAsTouched();
10408
+ this.notificationService.error('Please fill all required fields');
10409
+ }
10410
+ }
10229
10411
  // Check for entity ID and parent entity ID in query parameters
10230
10412
  checkForEntityId() {
10231
10413
  this.route.params.pipe(takeUntil(this.destroy$)).subscribe(params => {
@@ -10239,6 +10421,8 @@ class CideCoreEntityCreateComponent {
10239
10421
  this.entityId.set(entityId);
10240
10422
  this.isEditMode.set(true);
10241
10423
  this.loadEntityData(entityId);
10424
+ // Load board affiliations in edit mode
10425
+ this.loadBoardAffiliations();
10242
10426
  }
10243
10427
  else {
10244
10428
  this.isEditMode.set(false);
@@ -10246,6 +10430,8 @@ class CideCoreEntityCreateComponent {
10246
10430
  }
10247
10431
  // Reinitialize tabs when mode changes
10248
10432
  this.initializeTabs();
10433
+ // Load boards for dropdown
10434
+ this.loadEducationBoards();
10249
10435
  // Check for parent entity ID
10250
10436
  if (parentEntityId) {
10251
10437
  this.parentEntityId.set(parentEntityId);
@@ -10428,6 +10614,10 @@ class CideCoreEntityCreateComponent {
10428
10614
  if (!this.isEditMode()) {
10429
10615
  baseTabs.push({ id: 'user-mapping', label: 'User Entity Mapping', icon: 'people' });
10430
10616
  }
10617
+ else {
10618
+ // Add Board Mapping in Edit Mode
10619
+ baseTabs.push({ id: 'board-mapping', label: 'Board Mapping', icon: 'school' });
10620
+ }
10431
10621
  this.entityTabs.set(baseTabs);
10432
10622
  }
10433
10623
  // Grid action handlers - removed, using templates instead
@@ -11296,10 +11486,19 @@ class CideCoreEntityCreateComponent {
11296
11486
  * Navigate back to the previous page
11297
11487
  */
11298
11488
  onBack() {
11299
- this.router.navigate(['/control-panel/entity-list']);
11489
+ // Force refresh list route to ensure new data is loaded
11490
+ this.requestService.forceRefreshRoute('/control-panel/entity-list');
11491
+ const activeTabId = this.requestService.activeTabId();
11492
+ if (activeTabId) {
11493
+ // Close current tab - this will handle navigation back to the previous active tab
11494
+ this.requestService.closeTab(activeTabId);
11495
+ }
11496
+ else {
11497
+ this.router.navigate(['/control-panel/entity-list']);
11498
+ }
11300
11499
  }
11301
11500
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11302
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreEntityCreateComponent, isStandalone: true, selector: "cide-core-entity-create", viewQueries: [{ propertyName: "userCellRendererTemplate", first: true, predicate: ["userCell"], descendants: true, isSignal: true }, { propertyName: "actionsCellRendererTemplate", first: true, predicate: ["actionsCell"], descendants: true, isSignal: true }], ngImport: i0, template: "<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_entity_form' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <!-- Modern Entity Create Form -->\r\n <div class=\"tw-min-h-screen\">\r\n <div class=\"tw-mx-auto\">\r\n\r\n <form [formGroup]=\"entityForm\" [class.tw-opacity-60]=\"loading()\" [class.tw-pointer-events-none]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Breadcrumb is now rendered by shared wrapper; inline breadcrumb removed -->\r\n\r\n <!-- Basic Information Section -->\r\n <div class=\"tw-p-2 tw-pb-0\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Top Section: Image on Right, Form Fields on Left -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: Form Fields -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Institution Name, Entity Type & Active Status -->\r\n <div\r\n class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_250px_120px] tw-gap-4 tw-items-end\">\r\n <cide-ele-input id=\"syen_name\" type=\"text\" label=\"Institution Name\" formControlName=\"syen_name\"\r\n placeholder=\"Enter institution name\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Entity Type\" labelPlacement=\"floating\" [options]=\"entityTypes()\"\r\n formControlName=\"syen_entity_type_sygms\" placeholder=\"Select institution type\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1 tw-h-full\">\r\n <cide-ele-input type=\"checkbox\" formControlName=\"syen_isactive\" size=\"sm\" label=\"Is Active\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- UDISE, Affiliation & Institution Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <cide-ele-input label=\"UDISE Number\" formControlName=\"syen_udise_no\" placeholder=\"Enter UDISE number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Affiliation Number\" formControlName=\"syen_affiliation_no\"\r\n placeholder=\"Enter affiliation number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Institution Code\" formControlName=\"syen_entity_code\"\r\n placeholder=\"Enter unique code\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Entity Image Upload -->\r\n <div class=\"tw-flex tw-items-start tw-justify-center tw-pt-0\">\r\n <cide-ele-file-input id=\"entity_image_upload\" formControlName=\"syen_photo_id_cyfm\" accept=\"image/*\"\r\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n previewHeight=\"120px\" [required]=\"true\" placeholderText=\"Upload Logo\" placeholderIcon=\"cloud_upload\"\r\n [autoUpload]=\"true\" [uploadData]=\"getUploadData()\" (uploadSuccess)=\"onImageUploadSuccess($event)\"\r\n (uploadError)=\"onImageUploadError($event)\" (uploadProgressChange)=\"onImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-px-4 !tw-mt-0\">\r\n <cide-ele-tab [tabs]=\"entityTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out !tw-mt-2\" [class.tw-opacity-60]=\"loading()\"\r\n [class.tw-pointer-events-none]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('corporate') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Corporate Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Corporate Address\" formControlName=\"syen_corporate_address\"\r\n placeholder=\"Enter complete corporate address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_corporate_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_corporate_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_corporate_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"corporateCountries()\"\r\n formControlName=\"syen_corporate_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onCorporateCountrySearch($event)\" [loading]=\"corporateCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_corporate_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_corporate_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_corporate_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_corporate_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('contact') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Currency Selection -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-select label=\"Currency\" [options]=\"currencies()\" formControlName=\"syen_currency_sycr\"\r\n placeholder=\"Select currency\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Alternate Phone & Website - Two Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"syen_corporate_phone_alt\" type=\"tel\"\r\n placeholder=\"Enter alternate phone number\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Website URL\" formControlName=\"syen_website\" type=\"url\"\r\n placeholder=\"https://example.com\" autocomplete=\"url\" leadingIcon=\"language\"\r\n helperText=\"Enter a valid website URL starting with http:// or https://\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Alternate Email - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-input label=\"Alternate Email\" formControlName=\"syen_corporate_email_alt\" type=\"email\"\r\n placeholder=\"Enter alternate email address\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('registered') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Registered Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Registered Address\" formControlName=\"syen_registered_address\"\r\n placeholder=\"Enter complete registered address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_registered_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_registered_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_registered_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"registeredCountries()\"\r\n formControlName=\"syen_registered_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onRegisteredCountrySearch($event)\" [loading]=\"registeredCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_registered_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_registered_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_registered_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_registered_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('user-mapping') {\r\n <div class=\"tw-p-2\">\r\n <div class=\"tw-space-y-4\">\r\n <!-- Add User Mapping Form -->\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">person_add</cide-ele-icon>\r\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Add User to Entity</h3>\r\n </div>\r\n\r\n <form [formGroup]=\"userMappingForm\" (ngSubmit)=\"addUserMapping()\">\r\n <div class=\"tw-flex tw-items-end tw-gap-3\">\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select label=\"Select User\" [options]=\"availableUsers()\" formControlName=\"syenm_id_user\"\r\n placeholder=\"Choose user to add to entity\" [searchable]=\"true\"\r\n [loading]=\"availableUsersLoading()\" size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Add Button -->\r\n <div class=\"tw-flex tw-items-end\">\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\"\r\n [disabled]=\"userMappingForm.invalid || availableUsersLoading()\"\r\n class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n <span class=\"tw-text-xs\">Add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- User Mappings Grid -->\r\n <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n @if (userEntityMappingsLoading()) {\r\n <div class=\"tw-p-4 tw-text-center\">\r\n <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n <span class=\"tw-text-xs\">Loading...</span>\r\n </div>\r\n </div>\r\n } @else if (userEntityMappings().length === 0) {\r\n <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">people_outline</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No users mapped yet</p>\r\n <p class=\"tw-text-xs tw-text-gray-400\">Add users above to grant them access to this entity</p>\r\n </div>\r\n } @else {\r\n <cide-ele-data-grid [config]=\"userMappingsGridConfig\" [templateRenderers]=\"getUserMappingsTemplateRenderers()\">\r\n\r\n <!-- Custom user cell template -->\r\n <ng-template #userCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div\r\n class=\"tw-w-6 tw-h-6 tw-bg-gradient-to-br tw-from-blue-100 tw-to-indigo-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-shadow-sm\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xs\">person</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-font-medium tw-text-gray-900 tw-text-xs\">\r\n {{ row?._displayUserName }}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Custom actions cell template -->\r\n <ng-template #actionsCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n <button\r\n (click)=\"updateUserMapping(row._id!, { syenm_isactive: !row.syenm_isactive })\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300\"\r\n [class.tw-bg-green-100]=\"row.syenm_isactive\"\r\n [class.tw-text-green-700]=\"row.syenm_isactive\"\r\n [class.tw-bg-gray-100]=\"!row.syenm_isactive\"\r\n [class.tw-text-gray-600]=\"!row.syenm_isactive\"\r\n [title]=\"row.syenm_isactive ? 'Deactivate' : 'Activate'\">\r\n <cide-ele-icon class=\"tw-text-sm\">\r\n {{ row.syenm_isactive ? 'pause' : 'play_arrow' }}\r\n </cide-ele-icon>\r\n </button>\r\n\r\n <button (click)=\"removeUserMapping(row._id!)\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-bg-red-100 tw-text-red-600 hover:tw-bg-red-200 tw-transition-colors tw-border tw-border-transparent hover:tw-border-red-300\"\r\n title=\"Remove User\">\r\n <cide-ele-icon class=\"tw-text-sm\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </cide-ele-data-grid>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n }\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-3\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"entityForm\"></cide-form-field-error>\r\n\r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" size=\"md\" (click)=\"onBack()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>arrow_back</cide-ele-icon>\r\n Back\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"md\" (click)=\"onReset()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>refresh</cide-ele-icon>\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"md\"\r\n [disabled]=\"loading() || entityForm.invalid\" [loading]=\"loading()\">\r\n <cide-ele-icon>{{ isEditMode() ? 'save' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update Entity' : 'Create Entity' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { 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", "step", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideEleFileInputComponent, selector: "cide-ele-file-input", inputs: ["label", "accept", "multiple", "disabled", "required", "helperText", "errorText", "showPreview", "previewWidth", "previewHeight", "previewBoxMode", "showFileName", "placeholderText", "placeholderIcon", "autoUpload", "uploadData", "showFloatingUploader", "floatingUploaderGroupId"], outputs: ["fileChange", "uploadSuccess", "uploadError", "uploadProgressChange"] }, { kind: "component", type: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }] });
11501
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideCoreEntityCreateComponent, isStandalone: true, selector: "cide-core-entity-create", viewQueries: [{ propertyName: "userCellRendererTemplate", first: true, predicate: ["userCell"], descendants: true, isSignal: true }, { propertyName: "actionsCellRendererTemplate", first: true, predicate: ["actionsCell"], descendants: true, isSignal: true }, { propertyName: "boardActionsCellRendererTemplate", first: true, predicate: ["boardActionsCell"], descendants: true, isSignal: true }], ngImport: i0, template: "<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_entity_form' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <!-- Modern Entity Create Form -->\r\n <div class=\"tw-min-h-screen\">\r\n <div class=\"tw-mx-auto\">\r\n\r\n <form [formGroup]=\"entityForm\" [class.tw-opacity-60]=\"loading()\" [class.tw-pointer-events-none]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Breadcrumb is now rendered by shared wrapper; inline breadcrumb removed -->\r\n\r\n <!-- Basic Information Section -->\r\n <div class=\"tw-p-2 tw-pb-0\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Top Section: Image on Right, Form Fields on Left -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: Form Fields -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Institution Name, Entity Type & Active Status -->\r\n <div\r\n class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_250px_120px] tw-gap-4 tw-items-end\">\r\n <cide-ele-input id=\"syen_name\" type=\"text\" label=\"Institution Name\" formControlName=\"syen_name\"\r\n placeholder=\"Enter institution name\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Entity Type\" labelPlacement=\"floating\" [options]=\"entityTypes()\"\r\n formControlName=\"syen_entity_type_sygms\" placeholder=\"Select institution type\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1 tw-h-full\">\r\n <cide-ele-input type=\"checkbox\" formControlName=\"syen_isactive\" size=\"sm\" label=\"Is Active\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- UDISE, Affiliation & Institution Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <cide-ele-input label=\"UDISE Number\" formControlName=\"syen_udise_no\" placeholder=\"Enter UDISE number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Affiliation Number\" formControlName=\"syen_affiliation_no\"\r\n placeholder=\"Enter affiliation number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Institution Code\" formControlName=\"syen_entity_code\"\r\n placeholder=\"Enter unique code\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Entity Image Upload -->\r\n <div class=\"tw-flex tw-items-start tw-justify-center tw-pt-0\">\r\n <cide-ele-file-input id=\"entity_image_upload\" formControlName=\"syen_photo_id_cyfm\" accept=\"image/*\"\r\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n previewHeight=\"120px\" [required]=\"true\" placeholderText=\"Upload Logo\" placeholderIcon=\"cloud_upload\"\r\n [autoUpload]=\"true\" [uploadData]=\"getUploadData()\" (uploadSuccess)=\"onImageUploadSuccess($event)\"\r\n (uploadError)=\"onImageUploadError($event)\" (uploadProgressChange)=\"onImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-px-4 !tw-mt-0\">\r\n <cide-ele-tab [tabs]=\"entityTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out !tw-mt-2\" [class.tw-opacity-60]=\"loading()\"\r\n [class.tw-pointer-events-none]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('corporate') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Corporate Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Corporate Address\" formControlName=\"syen_corporate_address\"\r\n placeholder=\"Enter complete corporate address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_corporate_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_corporate_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_corporate_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"corporateCountries()\"\r\n formControlName=\"syen_corporate_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onCorporateCountrySearch($event)\" [loading]=\"corporateCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_corporate_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_corporate_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_corporate_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_corporate_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('contact') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Currency Selection -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-select label=\"Currency\" [options]=\"currencies()\" formControlName=\"syen_currency_sycr\"\r\n placeholder=\"Select currency\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Alternate Phone & Website - Two Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"syen_corporate_phone_alt\" type=\"tel\"\r\n placeholder=\"Enter alternate phone number\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Website URL\" formControlName=\"syen_website\" type=\"url\"\r\n placeholder=\"https://example.com\" autocomplete=\"url\" leadingIcon=\"language\"\r\n helperText=\"Enter a valid website URL starting with http:// or https://\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Alternate Email - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-input label=\"Alternate Email\" formControlName=\"syen_corporate_email_alt\" type=\"email\"\r\n placeholder=\"Enter alternate email address\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('registered') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Registered Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Registered Address\" formControlName=\"syen_registered_address\"\r\n placeholder=\"Enter complete registered address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_registered_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_registered_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_registered_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"registeredCountries()\"\r\n formControlName=\"syen_registered_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onRegisteredCountrySearch($event)\" [loading]=\"registeredCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_registered_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_registered_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_registered_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_registered_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('user-mapping') {\r\n <div class=\"tw-p-2\">\r\n <div class=\"tw-space-y-4\">\r\n <!-- Add User Mapping Form -->\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">person_add</cide-ele-icon>\r\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Add User to Entity</h3>\r\n </div>\r\n\r\n <form [formGroup]=\"userMappingForm\" (ngSubmit)=\"addUserMapping()\">\r\n <div class=\"tw-flex tw-items-end tw-gap-3\">\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select label=\"Select User\" [options]=\"availableUsers()\" formControlName=\"syenm_id_user\"\r\n placeholder=\"Choose user to add to entity\" [searchable]=\"true\"\r\n [loading]=\"availableUsersLoading()\" size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Add Button -->\r\n <div class=\"tw-flex tw-items-end\">\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\"\r\n [disabled]=\"userMappingForm.invalid || availableUsersLoading()\"\r\n class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n <span class=\"tw-text-xs\">Add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- User Mappings Grid -->\r\n <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n @if (userEntityMappingsLoading()) {\r\n <div class=\"tw-p-4 tw-text-center\">\r\n <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n <span class=\"tw-text-xs\">Loading...</span>\r\n </div>\r\n </div>\r\n } @else if (userEntityMappings().length === 0) {\r\n <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">people_outline</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No users mapped yet</p>\r\n <p class=\"tw-text-xs tw-text-gray-400\">Add users above to grant them access to this entity</p>\r\n </div>\r\n } @else {\r\n <cide-ele-data-grid [config]=\"userMappingsGridConfig\"\r\n [templateRenderers]=\"getUserMappingsTemplateRenderers()\">\r\n\r\n <!-- Custom user cell template -->\r\n <ng-template #userCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div\r\n class=\"tw-w-6 tw-h-6 tw-bg-gradient-to-br tw-from-blue-100 tw-to-indigo-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-shadow-sm\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xs\">person</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-font-medium tw-text-gray-900 tw-text-xs\">\r\n {{ row?._displayUserName }}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Custom actions cell template -->\r\n <ng-template #actionsCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n <button (click)=\"updateUserMapping(row._id!, { syenm_isactive: !row.syenm_isactive })\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300\"\r\n [class.tw-bg-green-100]=\"row.syenm_isactive\" [class.tw-text-green-700]=\"row.syenm_isactive\"\r\n [class.tw-bg-gray-100]=\"!row.syenm_isactive\" [class.tw-text-gray-600]=\"!row.syenm_isactive\"\r\n [title]=\"row.syenm_isactive ? 'Deactivate' : 'Activate'\">\r\n <cide-ele-icon class=\"tw-text-sm\">\r\n {{ row.syenm_isactive ? 'pause' : 'play_arrow' }}\r\n </cide-ele-icon>\r\n </button>\r\n\r\n <button (click)=\"removeUserMapping(row._id!)\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-bg-red-100 tw-text-red-600 hover:tw-bg-red-200 tw-transition-colors tw-border tw-border-transparent hover:tw-border-red-300\"\r\n title=\"Remove User\">\r\n <cide-ele-icon class=\"tw-text-sm\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </cide-ele-data-grid>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n @case ('board-mapping') {\r\n <div class=\"tw-p-2\">\r\n <div class=\"tw-space-y-4\">\r\n <!-- Add Board Mapping Form -->\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">school</cide-ele-icon>\r\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Map Education Board</h3>\r\n </div>\r\n\r\n <form [formGroup]=\"boardMappingForm\" (ngSubmit)=\"addBoardAffiliation()\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-[1fr_200px_150px_auto_auto] tw-gap-3 tw-items-end\">\r\n\r\n <!-- Board Selection -->\r\n <cide-ele-select label=\"Select Board\" [options]=\"educationBoards()\"\r\n formControlName=\"scbaf_board_id_edbrd\" placeholder=\"Choose education board\" [searchable]=\"true\"\r\n [loading]=\"educationBoardsLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <!-- Affiliation Number -->\r\n <cide-ele-input label=\"Affiliation No.\" formControlName=\"scbaf_affiliation_number\"\r\n placeholder=\"Enter number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <!-- Status (For now simple input, later dropdown) -->\r\n <cide-ele-input label=\"Status\" formControlName=\"scbaf_affiliation_status_sygms\" placeholder=\"Status\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <!-- Checkboxes -->\r\n <div class=\"tw-flex tw-items-center tw-gap-4 tw-pb-2\">\r\n <cide-ele-input type=\"checkbox\" formControlName=\"scbaf_isprimary\" size=\"sm\" label=\"Primary\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input type=\"checkbox\" formControlName=\"scbaf_isactive\" size=\"sm\" label=\"Active\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Add Button -->\r\n <div class=\"tw-flex tw-items-end\">\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\"\r\n [disabled]=\"boardMappingForm.invalid || educationBoardsLoading()\"\r\n class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n <span class=\"tw-text-xs\">Add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- Board Affiliations Grid -->\r\n <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n @if (boardAffiliationsLoading()) {\r\n <div class=\"tw-p-4 tw-text-center\">\r\n <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n <span class=\"tw-text-xs\">Loading...</span>\r\n </div>\r\n </div>\r\n } @else if (boardAffiliations().length === 0) {\r\n <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">school</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No boards mapped yet</p>\r\n <p class=\"tw-text-xs tw-text-gray-400\">Map education boards above to link them to this entity</p>\r\n </div>\r\n } @else {\r\n <cide-ele-data-grid [config]=\"boardAffiliationsGridConfig\"\r\n [templateRenderers]=\"getBoardMappingsTemplateRenderers()\">\r\n\r\n <!-- Custom actions cell template -->\r\n <ng-template #boardActionsCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n <!-- Edit/Delete implementation pending -->\r\n <button\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300 tw-text-gray-400 cursor-not-allowed\"\r\n title=\"Actions not implemented\">\r\n <cide-ele-icon class=\"tw-text-sm\">more_horiz</cide-ele-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </cide-ele-data-grid>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n }\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-3\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"entityForm\"></cide-form-field-error>\r\n\r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" size=\"md\" (click)=\"onBack()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>arrow_back</cide-ele-icon>\r\n Back\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"md\" (click)=\"onReset()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>refresh</cide-ele-icon>\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"md\"\r\n [disabled]=\"loading() || entityForm.invalid\" [loading]=\"loading()\">\r\n <cide-ele-icon>{{ isEditMode() ? 'save' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update Entity' : 'Create Entity' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { 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", "step", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { 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: CideEleFileInputComponent, selector: "cide-ele-file-input", inputs: ["label", "accept", "multiple", "disabled", "required", "helperText", "errorText", "showPreview", "previewWidth", "previewHeight", "previewBoxMode", "showFileName", "placeholderText", "placeholderIcon", "autoUpload", "uploadData", "showFloatingUploader", "floatingUploaderGroupId"], outputs: ["fileChange", "uploadSuccess", "uploadError", "uploadProgressChange"] }, { kind: "component", type: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", 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: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }] });
11303
11502
  }
11304
11503
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideCoreEntityCreateComponent, decorators: [{
11305
11504
  type: Component,
@@ -11315,8 +11514,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
11315
11514
  CideIconComponent,
11316
11515
  CideFormFieldErrorComponent,
11317
11516
  CideEleDataGridComponent,
11318
- ], template: "<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_entity_form' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <!-- Modern Entity Create Form -->\r\n <div class=\"tw-min-h-screen\">\r\n <div class=\"tw-mx-auto\">\r\n\r\n <form [formGroup]=\"entityForm\" [class.tw-opacity-60]=\"loading()\" [class.tw-pointer-events-none]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Breadcrumb is now rendered by shared wrapper; inline breadcrumb removed -->\r\n\r\n <!-- Basic Information Section -->\r\n <div class=\"tw-p-2 tw-pb-0\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Top Section: Image on Right, Form Fields on Left -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: Form Fields -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Institution Name, Entity Type & Active Status -->\r\n <div\r\n class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_250px_120px] tw-gap-4 tw-items-end\">\r\n <cide-ele-input id=\"syen_name\" type=\"text\" label=\"Institution Name\" formControlName=\"syen_name\"\r\n placeholder=\"Enter institution name\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Entity Type\" labelPlacement=\"floating\" [options]=\"entityTypes()\"\r\n formControlName=\"syen_entity_type_sygms\" placeholder=\"Select institution type\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1 tw-h-full\">\r\n <cide-ele-input type=\"checkbox\" formControlName=\"syen_isactive\" size=\"sm\" label=\"Is Active\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- UDISE, Affiliation & Institution Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <cide-ele-input label=\"UDISE Number\" formControlName=\"syen_udise_no\" placeholder=\"Enter UDISE number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Affiliation Number\" formControlName=\"syen_affiliation_no\"\r\n placeholder=\"Enter affiliation number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Institution Code\" formControlName=\"syen_entity_code\"\r\n placeholder=\"Enter unique code\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Entity Image Upload -->\r\n <div class=\"tw-flex tw-items-start tw-justify-center tw-pt-0\">\r\n <cide-ele-file-input id=\"entity_image_upload\" formControlName=\"syen_photo_id_cyfm\" accept=\"image/*\"\r\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n previewHeight=\"120px\" [required]=\"true\" placeholderText=\"Upload Logo\" placeholderIcon=\"cloud_upload\"\r\n [autoUpload]=\"true\" [uploadData]=\"getUploadData()\" (uploadSuccess)=\"onImageUploadSuccess($event)\"\r\n (uploadError)=\"onImageUploadError($event)\" (uploadProgressChange)=\"onImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-px-4 !tw-mt-0\">\r\n <cide-ele-tab [tabs]=\"entityTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out !tw-mt-2\" [class.tw-opacity-60]=\"loading()\"\r\n [class.tw-pointer-events-none]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('corporate') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Corporate Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Corporate Address\" formControlName=\"syen_corporate_address\"\r\n placeholder=\"Enter complete corporate address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_corporate_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_corporate_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_corporate_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"corporateCountries()\"\r\n formControlName=\"syen_corporate_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onCorporateCountrySearch($event)\" [loading]=\"corporateCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_corporate_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_corporate_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_corporate_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_corporate_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('contact') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Currency Selection -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-select label=\"Currency\" [options]=\"currencies()\" formControlName=\"syen_currency_sycr\"\r\n placeholder=\"Select currency\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Alternate Phone & Website - Two Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"syen_corporate_phone_alt\" type=\"tel\"\r\n placeholder=\"Enter alternate phone number\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Website URL\" formControlName=\"syen_website\" type=\"url\"\r\n placeholder=\"https://example.com\" autocomplete=\"url\" leadingIcon=\"language\"\r\n helperText=\"Enter a valid website URL starting with http:// or https://\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Alternate Email - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-input label=\"Alternate Email\" formControlName=\"syen_corporate_email_alt\" type=\"email\"\r\n placeholder=\"Enter alternate email address\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('registered') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Registered Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Registered Address\" formControlName=\"syen_registered_address\"\r\n placeholder=\"Enter complete registered address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_registered_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_registered_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_registered_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"registeredCountries()\"\r\n formControlName=\"syen_registered_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onRegisteredCountrySearch($event)\" [loading]=\"registeredCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_registered_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_registered_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_registered_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_registered_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('user-mapping') {\r\n <div class=\"tw-p-2\">\r\n <div class=\"tw-space-y-4\">\r\n <!-- Add User Mapping Form -->\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">person_add</cide-ele-icon>\r\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Add User to Entity</h3>\r\n </div>\r\n\r\n <form [formGroup]=\"userMappingForm\" (ngSubmit)=\"addUserMapping()\">\r\n <div class=\"tw-flex tw-items-end tw-gap-3\">\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select label=\"Select User\" [options]=\"availableUsers()\" formControlName=\"syenm_id_user\"\r\n placeholder=\"Choose user to add to entity\" [searchable]=\"true\"\r\n [loading]=\"availableUsersLoading()\" size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Add Button -->\r\n <div class=\"tw-flex tw-items-end\">\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\"\r\n [disabled]=\"userMappingForm.invalid || availableUsersLoading()\"\r\n class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n <span class=\"tw-text-xs\">Add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- User Mappings Grid -->\r\n <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n @if (userEntityMappingsLoading()) {\r\n <div class=\"tw-p-4 tw-text-center\">\r\n <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n <span class=\"tw-text-xs\">Loading...</span>\r\n </div>\r\n </div>\r\n } @else if (userEntityMappings().length === 0) {\r\n <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">people_outline</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No users mapped yet</p>\r\n <p class=\"tw-text-xs tw-text-gray-400\">Add users above to grant them access to this entity</p>\r\n </div>\r\n } @else {\r\n <cide-ele-data-grid [config]=\"userMappingsGridConfig\" [templateRenderers]=\"getUserMappingsTemplateRenderers()\">\r\n\r\n <!-- Custom user cell template -->\r\n <ng-template #userCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div\r\n class=\"tw-w-6 tw-h-6 tw-bg-gradient-to-br tw-from-blue-100 tw-to-indigo-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-shadow-sm\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xs\">person</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-font-medium tw-text-gray-900 tw-text-xs\">\r\n {{ row?._displayUserName }}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Custom actions cell template -->\r\n <ng-template #actionsCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n <button\r\n (click)=\"updateUserMapping(row._id!, { syenm_isactive: !row.syenm_isactive })\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300\"\r\n [class.tw-bg-green-100]=\"row.syenm_isactive\"\r\n [class.tw-text-green-700]=\"row.syenm_isactive\"\r\n [class.tw-bg-gray-100]=\"!row.syenm_isactive\"\r\n [class.tw-text-gray-600]=\"!row.syenm_isactive\"\r\n [title]=\"row.syenm_isactive ? 'Deactivate' : 'Activate'\">\r\n <cide-ele-icon class=\"tw-text-sm\">\r\n {{ row.syenm_isactive ? 'pause' : 'play_arrow' }}\r\n </cide-ele-icon>\r\n </button>\r\n\r\n <button (click)=\"removeUserMapping(row._id!)\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-bg-red-100 tw-text-red-600 hover:tw-bg-red-200 tw-transition-colors tw-border tw-border-transparent hover:tw-border-red-300\"\r\n title=\"Remove User\">\r\n <cide-ele-icon class=\"tw-text-sm\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </cide-ele-data-grid>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n }\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-3\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"entityForm\"></cide-form-field-error>\r\n\r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" size=\"md\" (click)=\"onBack()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>arrow_back</cide-ele-icon>\r\n Back\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"md\" (click)=\"onReset()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>refresh</cide-ele-icon>\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"md\"\r\n [disabled]=\"loading() || entityForm.invalid\" [loading]=\"loading()\">\r\n <cide-ele-icon>{{ isEditMode() ? 'save' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update Entity' : 'Create Entity' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>" }]
11319
- }], ctorParameters: () => [], propDecorators: { userCellRendererTemplate: [{ type: i0.ViewChild, args: ['userCell', { isSignal: true }] }], actionsCellRendererTemplate: [{ type: i0.ViewChild, args: ['actionsCell', { isSignal: true }] }] } });
11517
+ ], template: "<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'core_entity_form' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n <!-- Modern Entity Create Form -->\r\n <div class=\"tw-min-h-screen\">\r\n <div class=\"tw-mx-auto\">\r\n\r\n <form [formGroup]=\"entityForm\" [class.tw-opacity-60]=\"loading()\" [class.tw-pointer-events-none]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Breadcrumb is now rendered by shared wrapper; inline breadcrumb removed -->\r\n\r\n <!-- Basic Information Section -->\r\n <div class=\"tw-p-2 tw-pb-0\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Top Section: Image on Right, Form Fields on Left -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: Form Fields -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Institution Name, Entity Type & Active Status -->\r\n <div\r\n class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_250px_120px] tw-gap-4 tw-items-end\">\r\n <cide-ele-input id=\"syen_name\" type=\"text\" label=\"Institution Name\" formControlName=\"syen_name\"\r\n placeholder=\"Enter institution name\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Entity Type\" labelPlacement=\"floating\" [options]=\"entityTypes()\"\r\n formControlName=\"syen_entity_type_sygms\" placeholder=\"Select institution type\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1 tw-h-full\">\r\n <cide-ele-input type=\"checkbox\" formControlName=\"syen_isactive\" size=\"sm\" label=\"Is Active\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- UDISE, Affiliation & Institution Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\r\n <cide-ele-input label=\"UDISE Number\" formControlName=\"syen_udise_no\" placeholder=\"Enter UDISE number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Affiliation Number\" formControlName=\"syen_affiliation_no\"\r\n placeholder=\"Enter affiliation number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Institution Code\" formControlName=\"syen_entity_code\"\r\n placeholder=\"Enter unique code\" size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Entity Image Upload -->\r\n <div class=\"tw-flex tw-items-start tw-justify-center tw-pt-0\">\r\n <cide-ele-file-input id=\"entity_image_upload\" formControlName=\"syen_photo_id_cyfm\" accept=\"image/*\"\r\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\r\n previewHeight=\"120px\" [required]=\"true\" placeholderText=\"Upload Logo\" placeholderIcon=\"cloud_upload\"\r\n [autoUpload]=\"true\" [uploadData]=\"getUploadData()\" (uploadSuccess)=\"onImageUploadSuccess($event)\"\r\n (uploadError)=\"onImageUploadError($event)\" (uploadProgressChange)=\"onImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-px-4 !tw-mt-0\">\r\n <cide-ele-tab [tabs]=\"entityTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out !tw-mt-2\" [class.tw-opacity-60]=\"loading()\"\r\n [class.tw-pointer-events-none]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('corporate') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Corporate Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Corporate Address\" formControlName=\"syen_corporate_address\"\r\n placeholder=\"Enter complete corporate address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_corporate_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_corporate_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_corporate_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"corporateCountries()\"\r\n formControlName=\"syen_corporate_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onCorporateCountrySearch($event)\" [loading]=\"corporateCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_corporate_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_corporate_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_corporate_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_corporate_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('contact') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Currency Selection -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-select label=\"Currency\" [options]=\"currencies()\" formControlName=\"syen_currency_sycr\"\r\n placeholder=\"Select currency\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Alternate Phone & Website - Two Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"syen_corporate_phone_alt\" type=\"tel\"\r\n placeholder=\"Enter alternate phone number\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Website URL\" formControlName=\"syen_website\" type=\"url\"\r\n placeholder=\"https://example.com\" autocomplete=\"url\" leadingIcon=\"language\"\r\n helperText=\"Enter a valid website URL starting with http:// or https://\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Alternate Email - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-input label=\"Alternate Email\" formControlName=\"syen_corporate_email_alt\" type=\"email\"\r\n placeholder=\"Enter alternate email address\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('registered') {\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-space-y-6\">\r\n <!-- Registered Address - Full Width -->\r\n <div class=\"tw-w-full\">\r\n <cide-ele-textarea label=\"Registered Address\" formControlName=\"syen_registered_address\"\r\n placeholder=\"Enter complete registered address\" [rows]=\"4\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <!-- Postal Code, City, State & Country - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\r\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\"\r\n formControlName=\"syen_registered_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\r\n [loading]=\"postalCodesLoading()\" (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"City\" formControlName=\"syen_registered_city_sypin\" placeholder=\"Enter city name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"State\" formControlName=\"syen_registered_state_sypin\"\r\n placeholder=\"Enter state name\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select label=\"Country\" [options]=\"registeredCountries()\"\r\n formControlName=\"syen_registered_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\r\n (searchChange)=\"onRegisteredCountrySearch($event)\" [loading]=\"registeredCountriesLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\r\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\r\n formControlName=\"syen_registered_contact_person_user\" placeholder=\"Select contact person\"\r\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-input label=\"Phone\" formControlName=\"syen_registered_phone\" type=\"tel\"\r\n placeholder=\"Enter phone number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Email\" formControlName=\"syen_registered_email\" type=\"email\"\r\n placeholder=\"Enter email address\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Fax\" formControlName=\"syen_registered_fax\" placeholder=\"Enter fax number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('user-mapping') {\r\n <div class=\"tw-p-2\">\r\n <div class=\"tw-space-y-4\">\r\n <!-- Add User Mapping Form -->\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">person_add</cide-ele-icon>\r\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Add User to Entity</h3>\r\n </div>\r\n\r\n <form [formGroup]=\"userMappingForm\" (ngSubmit)=\"addUserMapping()\">\r\n <div class=\"tw-flex tw-items-end tw-gap-3\">\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select label=\"Select User\" [options]=\"availableUsers()\" formControlName=\"syenm_id_user\"\r\n placeholder=\"Choose user to add to entity\" [searchable]=\"true\"\r\n [loading]=\"availableUsersLoading()\" size=\"md\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Add Button -->\r\n <div class=\"tw-flex tw-items-end\">\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\"\r\n [disabled]=\"userMappingForm.invalid || availableUsersLoading()\"\r\n class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n <span class=\"tw-text-xs\">Add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- User Mappings Grid -->\r\n <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n @if (userEntityMappingsLoading()) {\r\n <div class=\"tw-p-4 tw-text-center\">\r\n <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n <span class=\"tw-text-xs\">Loading...</span>\r\n </div>\r\n </div>\r\n } @else if (userEntityMappings().length === 0) {\r\n <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">people_outline</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No users mapped yet</p>\r\n <p class=\"tw-text-xs tw-text-gray-400\">Add users above to grant them access to this entity</p>\r\n </div>\r\n } @else {\r\n <cide-ele-data-grid [config]=\"userMappingsGridConfig\"\r\n [templateRenderers]=\"getUserMappingsTemplateRenderers()\">\r\n\r\n <!-- Custom user cell template -->\r\n <ng-template #userCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div\r\n class=\"tw-w-6 tw-h-6 tw-bg-gradient-to-br tw-from-blue-100 tw-to-indigo-100 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-shadow-sm\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xs\">person</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-font-medium tw-text-gray-900 tw-text-xs\">\r\n {{ row?._displayUserName }}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Custom actions cell template -->\r\n <ng-template #actionsCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n <button (click)=\"updateUserMapping(row._id!, { syenm_isactive: !row.syenm_isactive })\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300\"\r\n [class.tw-bg-green-100]=\"row.syenm_isactive\" [class.tw-text-green-700]=\"row.syenm_isactive\"\r\n [class.tw-bg-gray-100]=\"!row.syenm_isactive\" [class.tw-text-gray-600]=\"!row.syenm_isactive\"\r\n [title]=\"row.syenm_isactive ? 'Deactivate' : 'Activate'\">\r\n <cide-ele-icon class=\"tw-text-sm\">\r\n {{ row.syenm_isactive ? 'pause' : 'play_arrow' }}\r\n </cide-ele-icon>\r\n </button>\r\n\r\n <button (click)=\"removeUserMapping(row._id!)\"\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-bg-red-100 tw-text-red-600 hover:tw-bg-red-200 tw-transition-colors tw-border tw-border-transparent hover:tw-border-red-300\"\r\n title=\"Remove User\">\r\n <cide-ele-icon class=\"tw-text-sm\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </cide-ele-data-grid>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n @case ('board-mapping') {\r\n <div class=\"tw-p-2\">\r\n <div class=\"tw-space-y-4\">\r\n <!-- Add Board Mapping Form -->\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-shadow-sm\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-sm\">school</cide-ele-icon>\r\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Map Education Board</h3>\r\n </div>\r\n\r\n <form [formGroup]=\"boardMappingForm\" (ngSubmit)=\"addBoardAffiliation()\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-[1fr_200px_150px_auto_auto] tw-gap-3 tw-items-end\">\r\n\r\n <!-- Board Selection -->\r\n <cide-ele-select label=\"Select Board\" [options]=\"educationBoards()\"\r\n formControlName=\"scbaf_board_id_edbrd\" placeholder=\"Choose education board\" [searchable]=\"true\"\r\n [loading]=\"educationBoardsLoading()\" size=\"sm\">\r\n </cide-ele-select>\r\n\r\n <!-- Affiliation Number -->\r\n <cide-ele-input label=\"Affiliation No.\" formControlName=\"scbaf_affiliation_number\"\r\n placeholder=\"Enter number\" size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <!-- Status (For now simple input, later dropdown) -->\r\n <cide-ele-input label=\"Status\" formControlName=\"scbaf_affiliation_status_sygms\" placeholder=\"Status\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <!-- Checkboxes -->\r\n <div class=\"tw-flex tw-items-center tw-gap-4 tw-pb-2\">\r\n <cide-ele-input type=\"checkbox\" formControlName=\"scbaf_isprimary\" size=\"sm\" label=\"Primary\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input type=\"checkbox\" formControlName=\"scbaf_isactive\" size=\"sm\" label=\"Active\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Add Button -->\r\n <div class=\"tw-flex tw-items-end\">\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\"\r\n [disabled]=\"boardMappingForm.invalid || educationBoardsLoading()\"\r\n class=\"tw-shadow-sm tw-h-8 tw-px-3\">\r\n <cide-ele-icon class=\"tw-mr-1 tw-text-xs\">add</cide-ele-icon>\r\n <span class=\"tw-text-xs\">Add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- Board Affiliations Grid -->\r\n <div class=\"tw-bg-white tw-rounded-md tw-border tw-overflow-hidden tw-shadow-sm\">\r\n @if (boardAffiliationsLoading()) {\r\n <div class=\"tw-p-4 tw-text-center\">\r\n <div class=\"tw-inline-flex tw-items-center tw-gap-2 tw-text-gray-500\">\r\n <div class=\"tw-animate-spin tw-rounded-full tw-h-3 tw-w-3 tw-border-b-2 tw-border-gray-500\"></div>\r\n <span class=\"tw-text-xs\">Loading...</span>\r\n </div>\r\n </div>\r\n } @else if (boardAffiliations().length === 0) {\r\n <div class=\"tw-p-4 tw-text-center tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-text-2xl tw-mb-1 tw-text-gray-300\">school</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-font-medium tw-mb-1\">No boards mapped yet</p>\r\n <p class=\"tw-text-xs tw-text-gray-400\">Map education boards above to link them to this entity</p>\r\n </div>\r\n } @else {\r\n <cide-ele-data-grid [config]=\"boardAffiliationsGridConfig\"\r\n [templateRenderers]=\"getBoardMappingsTemplateRenderers()\">\r\n\r\n <!-- Custom actions cell template -->\r\n <ng-template #boardActionsCell let-row=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-justify-center\">\r\n <!-- Edit/Delete implementation pending -->\r\n <button\r\n class=\"tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-md tw-transition-colors tw-border tw-border-transparent hover:tw-border-gray-300 tw-text-gray-400 cursor-not-allowed\"\r\n title=\"Actions not implemented\">\r\n <cide-ele-icon class=\"tw-text-sm\">more_horiz</cide-ele-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </cide-ele-data-grid>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n }\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-p-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-gap-3\">\r\n <!-- Error Message (Left Side) -->\r\n <cide-form-field-error [formGroup]=\"entityForm\"></cide-form-field-error>\r\n\r\n <!-- Action Buttons (Right Side) -->\r\n <div class=\"tw-flex tw-gap-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" size=\"md\" (click)=\"onBack()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>arrow_back</cide-ele-icon>\r\n Back\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"md\" (click)=\"onReset()\"\r\n [disabled]=\"loading()\">\r\n <cide-ele-icon>refresh</cide-ele-icon>\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"md\"\r\n [disabled]=\"loading() || entityForm.invalid\" [loading]=\"loading()\">\r\n <cide-ele-icon>{{ isEditMode() ? 'save' : 'add' }}</cide-ele-icon>\r\n {{ isEditMode() ? 'Update Entity' : 'Create Entity' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>" }]
11518
+ }], ctorParameters: () => [], propDecorators: { userCellRendererTemplate: [{ type: i0.ViewChild, args: ['userCell', { isSignal: true }] }], actionsCellRendererTemplate: [{ type: i0.ViewChild, args: ['actionsCell', { isSignal: true }] }], boardActionsCellRendererTemplate: [{ type: i0.ViewChild, args: ['boardActionsCell', { isSignal: true }] }] } });
11320
11519
 
11321
11520
  var entityCreate_component = /*#__PURE__*/Object.freeze({
11322
11521
  __proto__: null,