@winexist/ngp 0.9.2 → 0.9.3

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.
@@ -709,11 +709,16 @@ class DynamicNgSelectComponent {
709
709
  getOptions() {
710
710
  this.apiUrl(this.tableParams())
711
711
  .pipe(tap((items) => {
712
- const values = this.formatOptions ? this.formatOptions(items.results) : items.results;
713
- this.options = [...this.options, ...values];
714
- if (items.hasNextPage) {
715
- this.tableParams.update((param) => ({ ...param, page: param.page + 1 }));
716
- this.getOptions();
712
+ if (items.results) {
713
+ const values = this.formatOptions ? this.formatOptions(items.results) : items.results;
714
+ this.options = [...this.options, ...values];
715
+ if (items.hasNextPage) {
716
+ this.tableParams.update((param) => ({ ...param, page: param.page + 1 }));
717
+ this.getOptions();
718
+ }
719
+ }
720
+ else {
721
+ this.options = items;
717
722
  }
718
723
  }))
719
724
  .subscribe();
@@ -742,8 +747,8 @@ class DynamicNgSelectComponent {
742
747
  this.onTouched();
743
748
  }
744
749
  validate(control) {
745
- if (this.isRequired &&
746
- (this.value === null || this.value === undefined || this.value === '')) {
750
+ // eslint-disable-line
751
+ if (this.isRequired && (this.value === null || this.value === undefined || this.value === '')) {
747
752
  return { required: true };
748
753
  }
749
754
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"winexist-ngp.mjs","sources":["../../../packages/src/lib/components/empty/empty.component.ts","../../../packages/src/lib/components/empty/empty.component.html","../../../packages/src/lib/components/file-upload/file-upload.component.ts","../../../packages/src/lib/components/file-upload/file-upload.component.html","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.ts","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.html","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.ts","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.html","../../../packages/src/lib/services/address/address.service.ts","../../../packages/src/lib/components/fg-address/fg-address.component.ts","../../../packages/src/lib/components/fg-address/fg-address.component.html","../../../packages/src/lib/components/dataview/table/data-table.component.ts","../../../packages/src/lib/components/dataview/table/data-table.component.html","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.ts","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.html","../../../packages/src/lib/components/drawer/dynamic-drawer.component.ts","../../../packages/src/lib/components/drawer/dynamic-drawer.component.html","../../../packages/src/lib/components/date-clock/date-clock.component.ts","../../../packages/src/lib/components/date-clock/date-clock.component.html","../../../packages/src/lib/models/paginated.model.ts","../../../packages/src/lib/classes/crud-abstract.class.ts","../../../packages/src/lib/services/helper/helper.service.ts","../../../packages/src/index.ts","../../../packages/src/winexist-ngp.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'ngp-empty',\r\n\timports: [],\r\n\ttemplateUrl: './empty.component.html',\r\n\tstyleUrl: './empty.component.css'\r\n})\r\nexport class EmptyComponent {\r\n\ttitle = input<string>('Section is empty.');\r\n\tmessage = input<string>('No data available.');\r\n\timgSrc = input<string>();\r\n\r\n}\r\n","<div class=\"w-full flex justify-center items-center p-5 h-full\">\r\n <div class=\"flex items-center gap-3\">\r\n @if (imgSrc()) {\r\n <img alt=\"Empty\" [src]=\"imgSrc()\" class=\"w-[80px]\" />\r\n } @else {\r\n <div class=\"!rounded-md p-5 !bg-slate-100 mb-6\">\r\n <span class=\"material-icons !text-gray-400 !text-7xl\"> search_off </span>\r\n </div>\r\n }\r\n\r\n <div class=\"flex flex-col\">\r\n <span class=\"!text-gray-900 !text-2xl !font-bold\">{{ title() }}</span>\r\n @if (message()) {\r\n <span class=\"!text-gray-400 !text-base\">{{ message() }}</span>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, ElementRef, input, output, signal, ViewChild } from '@angular/core';\r\nimport { FileSelectEvent, FileUploadModule } from 'primeng/fileupload';\r\n\r\n// Add interface for typed files\r\ninterface TypedFile extends File {\r\n\tfileType?: 'image' | 'pdf' | 'other';\r\n}\r\n\r\n@Component({\r\n\tselector: 'ngp-file-upload',\r\n\timports: [FileUploadModule, CommonModule],\r\n\ttemplateUrl: './file-upload.component.html',\r\n\tstyleUrl: './file-upload.component.css',\r\n})\r\nexport class FileUploadComponent {\r\n\t@ViewChild('fileUploader') fileUploader!: ElementRef;\r\n\r\n\t// Signal-based inputs with defaults\r\n\tfiles = input<File[]>([]);\r\n\tmultiple = input(true);\r\n\taccept = input('.pdf,.png,.jpg,.jpeg,.doc,.docx,.csv,.xls,.xlsx');\r\n\tmaxFileSize = input(2097152); // 2MB in bytes\r\n\tplaceholder = input('Drag and drop new files here to upload.');\r\n\tshowUploadButton = input<boolean>(false);\r\n\tcancelLabel = input('Clear');\r\n\r\n\t// Signal-based outputs\r\n\tfilesSelected = output<File[]>();\r\n\tfilesCleared = output<void>();\r\n\r\n\t// Internal state\r\n\tuploadedFiles = signal<TypedFile[]>([]);\r\n\r\n\tconstructor() {\r\n\t\teffect(() => {\r\n\t\t\tconst _files = this.files();\r\n\t\t\tif (_files.length) {\r\n\t\t\t\tthis.uploadedFiles.set(_files.map((file) => this.addFileType(file)));\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tonFileSelect(event: FileSelectEvent) {\r\n\t\tconst validFiles = event.currentFiles.filter(\r\n\t\t\t(file) => file.size <= this.maxFileSize() && this.isValidFileType(file)\r\n\t\t);\r\n\r\n\t\tif (validFiles.length) {\r\n\t\t\t// Add type to files before adding to uploadedFiles\r\n\t\t\tconst typedFiles = validFiles.map((file) => this.addFileType(file));\r\n\r\n\t\t\tif (this.multiple()) {\r\n\t\t\t\tthis.uploadedFiles.update((files) => Array.from(new Set([...files, ...typedFiles])));\r\n\t\t\t} else {\r\n\t\t\t\tthis.uploadedFiles.set(typedFiles);\r\n\t\t\t}\r\n\t\t\tthis.filesSelected.emit(typedFiles);\r\n\t\t}\r\n\t}\r\n\r\n\tonClear() {\r\n\t\tthis.uploadedFiles.set([]);\r\n\t\tthis.filesCleared.emit();\r\n\t}\r\n\r\n\tremoveFile(index: number) {\r\n\t\tthis.uploadedFiles.update((files) => files.filter((_, i) => i !== index));\r\n\t\tthis.filesSelected.emit(this.uploadedFiles());\r\n\t}\r\n\r\n\tisValidFileType(file: File): boolean {\r\n\t\tconst acceptedTypes = this.accept().split(',');\r\n\t\treturn acceptedTypes.some((type) =>\r\n\t\t\tfile.name.toLowerCase().endsWith(type.trim().toLowerCase())\r\n\t\t);\r\n\t}\r\n\r\n\tformatFileSize(bytes: number): string {\r\n\t\tif (bytes === 0) return '0 Bytes';\r\n\t\tconst k = 1024;\r\n\t\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\t\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\r\n\t}\r\n\r\n\tclear() {\r\n\t\tthis.uploadedFiles.set([]);\r\n\t\tif (this.fileUploader?.nativeElement?.clear) {\r\n\t\t\tthis.fileUploader.nativeElement.clear();\r\n\t\t}\r\n\t}\r\n\r\n\t// Function to determine file type based on extension\r\n\tgetFileTypeByExtension(file: File): 'image' | 'pdf' | 'other' {\r\n\t\tconst fileName = file.name.toLowerCase();\r\n\t\tconst imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.svg', '.webp'];\r\n\t\tconst pdfExtension = '.pdf';\r\n\r\n\t\tif (imageExtensions.some((ext) => fileName.endsWith(ext))) {\r\n\t\t\treturn 'image';\r\n\t\t} else if (fileName.endsWith(pdfExtension)) {\r\n\t\t\treturn 'pdf';\r\n\t\t} else {\r\n\t\t\treturn 'other';\r\n\t\t}\r\n\t}\r\n\r\n\t// Function to add type property to file\r\n\taddFileType(file: File): TypedFile {\r\n\t\tconst typedFile = file as TypedFile;\r\n\t\ttypedFile.fileType = this.getFileTypeByExtension(file);\r\n\t\treturn typedFile;\r\n\t}\r\n}\r\n","<p-fileupload #fileUploader [multiple]=\"multiple()\" [showUploadButton]=\"showUploadButton()\"\r\n [cancelLabel]=\"cancelLabel()\" [accept]=\"accept()\" auto=\"false\" [maxFileSize]=\"maxFileSize()\" mode=\"advanced\"\r\n [customUpload]=\"true\" styleClass=\"!bg-gray-50\" (onSelect)=\"onFileSelect($event)\" (onClear)=\"onClear()\">\r\n <ng-template #content>\r\n @if (uploadedFiles().length) {\r\n <ul class=\"space-y-2\">\r\n @for (file of uploadedFiles(); track $index) {\r\n <li class=\"flex justify-between gap-4 p-2 bg-gray-100 rounded\">\r\n <div class=\"flex gap-2\">\r\n <ng-container [ngTemplateOutlet]=\"iconTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: file.fileType }\"></ng-container>\r\n <span class=\"text-sm\"> {{ file.name }} - {{ formatFileSize(file.size) }} </span>\r\n </div>\r\n <button type=\"button\" (click)=\"removeFile($index)\" class=\"text-red-500 hover:text-red-700 text-sm\">\r\n <span class=\"material-icons !text-base\"> cancel </span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n } @else {\r\n <div class=\"flex flex-col items-center gap-3\">\r\n <img src=\"assets/images/file-upload.svg\" alt=\"File Upload\" class=\"w-28 mx-auto\" />\r\n <span class=\"font-semibold text-center text-gray-400 text-sm\">\r\n Drag & drop or<br />\r\n click the \"Choose\" button to add new files\r\n </span>\r\n </div>\r\n }\r\n </ng-template>\r\n <ng-template #file></ng-template>\r\n</p-fileupload>\r\n\r\n<ng-template #iconTemplate let-type>\r\n @if (type === 'image') {\r\n <span class=\"material-icons\"> image </span>\r\n } @else if (type === 'pdf') {\r\n <span class=\"material-icons\"> picture_as_pdf </span>\r\n } @else {\r\n <span class=\"material-icons\"> insert_drive_file </span>\r\n }\r\n</ng-template>","// form-field-wrapper.component.ts\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, ContentChild, Input, AfterContentInit, OnDestroy } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { MessageModule } from 'primeng/message';\r\n\r\n@Component({\r\n\tselector: 'ngp-form-field-wrapper',\r\n\tstandalone: true,\r\n\timports: [CommonModule, MessageModule],\r\n\ttemplateUrl: './form-field-wrapper.component.html',\r\n\tstyleUrls: ['./form-field-wrapper.component.scss']\r\n})\r\nexport class FormFieldWrapperComponent implements AfterContentInit, OnDestroy {\r\n\t@Input() validationMessages: { [key: string]: string } = {\r\n\t\trequired: 'This field is required',\r\n\t\temail: 'Please enter a valid email',\r\n\t\tminlength: 'Input does not meet minimum length',\r\n\t\tmaxlength: 'Input exceeds maximum length',\r\n\t\tpattern: 'Input format is invalid',\r\n\t\tendTimeBeforeStartTime: 'End time must not be before start time',\r\n\t\tbreakStartBeforeEarliestStart: 'Break start time cannot be before the earliest start time'\r\n\t};\r\n\r\n\t@ContentChild(NgControl) control?: NgControl;\r\n\r\n\tprivate subscription?: Subscription;\r\n\r\n\tngAfterContentInit(): void {\r\n\t\tif (this.control) {\r\n\t\t\tthis.subscription = this.control.statusChanges?.subscribe(() => { });\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscription?.unsubscribe();\r\n\t}\r\n\r\n\tshouldShowError(): boolean {\r\n\t\treturn (\r\n\t\t\t!!this.control &&\r\n\t\t\tthis.control.invalid === true &&\r\n\t\t\t(this.control.dirty === true || this.control.touched === true)\r\n\t\t);\r\n\t}\r\n\r\n\tgetErrorMessage(): string {\r\n\t\tif (!this.control?.errors) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst firstErrorKey = Object.keys(this.control.errors)[0];\r\n\t\tconst error = this.control.errors[firstErrorKey];\r\n\r\n\t\tif (this.control.errors['message']) {\r\n\t\t\treturn this.control.errors['message'];\r\n\t\t}\r\n\t\tif (error?.message) {\r\n\t\t\treturn error.message;\r\n\t\t}\r\n\r\n\t\treturn this.validationMessages[firstErrorKey] || `Invalid input: ${firstErrorKey}`;\r\n\t}\r\n}\r\n","<div class=\"form-field-container\">\r\n <ng-content></ng-content>\r\n @if (shouldShowError()) {\r\n <p-message severity=\"error\" variant=\"simple\" size=\"small\" [text]=\"getErrorMessage()\">\r\n </p-message>\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { FormFieldWrapperComponent } from '../../../form-field-wrapper/form-field-wrapper.component';\r\nimport { FloatLabelModule } from 'primeng/floatlabel'\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner'\r\n\r\ntype SelectValue<T> = T | T[];\r\ntype SelectValueOrNull<T> = SelectValue<T> | null;\r\n\r\n@Component({\r\n\tselector: 'ngp-basic-select',\r\n\timports: [NgSelectModule, FormsModule, CommonModule, FormFieldWrapperComponent, FloatLabelModule, ProgressSpinnerModule],\r\n\ttemplateUrl: './basic-ng-select.component.html',\r\n\tstyleUrl: './basic-ng-select.component.scss',\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => BasicNgSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class BasicNgSelectComponent<T = any> implements ControlValueAccessor {\r\n\toptions = input<T[]>([]);\r\n\tbindLabel = input<string>('');\r\n\tbindValue = input<string>('');\r\n\tplaceholder = input<string>('Select an option');\r\n\tclearable = input<boolean>(true);\r\n\tsearchable = input<boolean>(true);\r\n\tloading = input<boolean>(false);\r\n\tlabel = input<string | null>(null);\r\n\trequired = input<boolean>(true);\r\n\r\n\t// Internal state\r\n\tvalue: SelectValueOrNull<T> = null;\r\n\tdisabled = false;\r\n\r\n\t// ControlValueAccessor callbacks\r\n\tprivate onChange: (value: SelectValueOrNull<T>) => void = () => { };\r\n\tonTouched: () => void = () => { };\r\n\r\n\t// Handle value changes from ng-select\r\n\tonValueChange(value: SelectValueOrNull<T>): void {\r\n\t\tthis.value = value;\r\n\t\tthis.onChange(value);\r\n\t}\r\n\r\n\twriteValue(val: SelectValueOrNull<T>): void {\r\n\t\tthis.value = val;\r\n\t}\r\n\r\n\tregisterOnChange(fn: (val: SelectValueOrNull<T>) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState?(isDisabled: boolean): void {\r\n\t\tthis.disabled = isDisabled;\r\n\t}\r\n\r\n\t// Compare function for ng-select\r\n\tcompareWith = (item: any, selected: any) => {\r\n\t\tconst bindValueKey = this.bindValue();\r\n\r\n\t\t// If no bindValue is set, compare entire objects\r\n\t\tif (!bindValueKey) {\r\n\t\t\treturn item === selected;\r\n\t\t}\r\n\r\n\t\t// Handle null/undefined cases\r\n\t\tif (!item || !selected) {\r\n\t\t\treturn item === selected;\r\n\t\t}\r\n\r\n\t\t// If selected is a primitive (just the id), compare with item's property\r\n\t\tif (typeof selected !== 'object') {\r\n\t\t\treturn item[bindValueKey] === selected;\r\n\t\t}\r\n\r\n\t\t// If both are objects, compare the bindValue property\r\n\t\treturn item[bindValueKey] === selected[bindValueKey];\r\n\t};\r\n}\r\n","<ngp-form-field-wrapper>\r\n <p-floatlabel variant=\"in\">\r\n <ng-select [(ngModel)]=\"value\" [bindLabel]=\"bindLabel()\" [bindValue]=\"bindValue()\" [items]=\"options()\"\r\n [compareWith]=\"compareWith\" [clearable]=\"clearable()\" (change)=\"onValueChange($event)\">\r\n <ng-template ng-loadingspinner-tmp>\r\n <ng-container [ngTemplateOutlet]=\"spinner\" />\r\n </ng-template>\r\n </ng-select>\r\n\r\n @if (label()) {\r\n <label class=\"block mb-2\" [ngClass]=\"{'required-label': required() }\">{{ label() }}</label>\r\n }\r\n </p-floatlabel>\r\n</ngp-form-field-wrapper>\r\n\r\n<ng-template #spinner>\r\n <p-progress-spinner ariaLabel=\"loading\" styleClass=\"text-gray-400\" />\r\n</ng-template>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IdName } from '../../models/common.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class AddressService {\r\n\turl = `/api/v1/records/address`;\r\n\thttp = inject(HttpClient);\r\n\r\n\tgetProvinces(): Observable<IdName[]> {\r\n\t\treturn this.http.get<IdName[]>(`${this.url}/provinces`);\r\n\t}\r\n\r\n\tgetMunicipalities(provinceId: number): Observable<any> {\r\n\t\treturn this.http.get<any>(`${this.url}/municipalities/${provinceId}`);\r\n\t}\r\n\r\n\tgetBarangays(muncipalityId: any, params?: any): Observable<any> {\r\n\t\treturn this.http.get<any>(`${this.url}/barangay/${muncipalityId}`, { params });\r\n\t}\r\n}\r\n","import { Component, effect, forwardRef, inject, input, signal } from '@angular/core';\r\nimport {\r\n\tAbstractControl,\r\n\tControlValueAccessor,\r\n\tFormBuilder,\r\n\tFormGroup,\r\n\tNG_VALIDATORS,\r\n\tNG_VALUE_ACCESSOR,\r\n\tReactiveFormsModule,\r\n\tValidationErrors,\r\n\tValidator\r\n} from '@angular/forms';\r\nimport { RxwebValidators } from '@rxweb/reactive-form-validators';\r\nimport { IdName } from '../../models/common.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormFieldWrapperComponent } from '../form-field-wrapper/form-field-wrapper.component';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { FloatLabelModule } from 'primeng/floatlabel';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { Address, Barangay, City } from '../../models/address.model';\r\nimport { AddressService } from '../../services/address/address.service';\r\n\r\n@Component({\r\n\tselector: 'ngp-fg-address',\r\n\timports: [\r\n\t\tInputTextModule,\r\n\t\tInputNumberModule,\r\n\t\tFloatLabelModule,\r\n\t\tCommonModule,\r\n\t\tReactiveFormsModule,\r\n\t\tFormFieldWrapperComponent,\r\n\t\tNgSelectModule\r\n\t],\r\n\ttemplateUrl: './fg-address.component.html',\r\n\tstyleUrl: './fg-address.component.scss',\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\r\n\t\t\tmulti: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: NG_VALIDATORS,\r\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class FgAddressComponent implements ControlValueAccessor, Validator {\r\n\tshowHeader = input<boolean>(true);\r\n\tisCreateMode = input<boolean>(true);\r\n\tisViewMode = input<boolean>(false);\r\n\r\n\taddressForm!: FormGroup;\r\n\tprovHttp$!: Subscription;\r\n\tcityHttp$!: Subscription;\r\n\tbarangayHttp$!: Subscription;\r\n\tprovinceOptions: IdName[] = [];\r\n\tcityOptions: City[] = [];\r\n\tbarangayOptions: Barangay[] = [];\r\n\r\n\tisDisabled = signal<boolean>(false);\r\n\tprivate pendingAddress: Address | null = null;\r\n\tprivate isInitializing = false;\r\n\tprivate detectedEditMode = false;\r\n\r\n\tprivate onChange: (value: Address | null) => void = () => {};\r\n\tprivate onTouched: () => void = () => {};\r\n\r\n\tprivate readonly addressService = inject(AddressService);\r\n\tprivate readonly fb = inject(FormBuilder);\r\n\r\n\tconstructor() {\r\n\t\tthis.addressForm = this.fb.group({\r\n\t\t\tline1: [null, RxwebValidators.required()],\r\n\t\t\tline2: [null],\r\n\t\t\tbarangay: [null, RxwebValidators.required()],\r\n\t\t\tcity: [null, RxwebValidators.required()],\r\n\t\t\tprovince: [null, RxwebValidators.required()],\r\n\t\t\tcountry: ['Philippines', RxwebValidators.required()],\r\n\t\t\tzipCode: [null, RxwebValidators.required()],\r\n\t\t\tlandmark: [null, RxwebValidators.required()]\r\n\t\t});\r\n\r\n\t\t// Use effect to watch for form value changes\r\n\t\teffect(() => {\r\n\t\t\tif (this.isDisabled()) {\r\n\t\t\t\tthis.addressForm.disable({ emitEvent: false });\r\n\t\t\t} else {\r\n\t\t\t\tthis.addressForm.enable({ emitEvent: false });\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Subscribe to form changes\r\n\t\tthis.addressForm.valueChanges.subscribe((value) => {\r\n\t\t\tthis.onChange(value);\r\n\t\t\tthis.onTouched();\r\n\t\t});\r\n\r\n\t\tthis.loadProvince();\r\n\r\n\t\t// Handle province changes - works for both create and edit mode\r\n\t\tthis.addressForm.get('province')?.valueChanges.subscribe((prov) => {\r\n\t\t\tif (prov && !this.isInitializing) {\r\n\t\t\t\tthis.clearFieldByName('city');\r\n\t\t\t\tthis.clearFieldByName('barangay');\r\n\t\t\t\tthis.cityOptions = [];\r\n\t\t\t\tthis.barangayOptions = [];\r\n\t\t\t\tthis.loadCityByProvinceId(prov.id);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Handle city changes - works for both create and edit mode\r\n\t\tthis.addressForm.get('city')?.valueChanges.subscribe((city) => {\r\n\t\t\tif (city && !this.isInitializing) {\r\n\t\t\t\tthis.clearFieldByName('barangay');\r\n\t\t\t\tthis.barangayOptions = [];\r\n\t\t\t\tthis.loadBarangayByCityId(city.id);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tclearFieldByName(fieldName: string): void {\r\n\t\tthis.addressForm.get(fieldName)?.setValue(null, { emitEvent: false });\r\n\t}\r\n\r\n\tloadProvince(): void {\r\n\t\tthis.provHttp$ = this.addressService.getProvinces().subscribe((res) => {\r\n\t\t\tthis.provinceOptions = res;\r\n\r\n\t\t\t// If we have a pending address to load, process it now\r\n\t\t\tif (this.pendingAddress) {\r\n\t\t\t\tthis.initializeEditMode(this.pendingAddress);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tloadCityByProvinceId(id: number): void {\r\n\t\tthis.cityHttp$ = this.addressService.getMunicipalities(id).subscribe((res) => {\r\n\t\t\tthis.cityOptions = res;\r\n\r\n\t\t\t// Continue initialization if needed\r\n\t\t\tif (this.isInitializing && this.pendingAddress) {\r\n\t\t\t\tthis.setCityFromPending();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tloadBarangayByCityId(id: number): void {\r\n\t\tthis.barangayHttp$ = this.addressService.getBarangays(id).subscribe((res) => {\r\n\t\t\tthis.barangayOptions = res;\r\n\r\n\t\t\t// Continue initialization if needed\r\n\t\t\tif (this.isInitializing && this.pendingAddress) {\r\n\t\t\t\tthis.setBarangayFromPending();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Detects if the address contains data that requires edit mode initialization\r\n\t */\r\n\tprivate isEditModeAddress(address: Address): boolean {\r\n\t\t// Check if any cascading field (province, city, barangay) is a string (name)\r\n\t\t// This indicates data from backend that needs to be matched with dropdown options\r\n\t\treturn (\r\n\t\t\t(typeof address.province === 'string' && address.province !== '') ||\r\n\t\t\t(typeof address.city === 'string' && address.city !== '') ||\r\n\t\t\t(typeof address.barangay === 'string' && address.barangay !== '')\r\n\t\t);\r\n\t}\r\n\r\n\tprivate initializeEditMode(address: Address): void {\r\n\t\tthis.isInitializing = true;\r\n\r\n\t\t// Set non-cascading fields first\r\n\t\tthis.addressForm.patchValue(\r\n\t\t\t{\r\n\t\t\t\tline1: address.line1,\r\n\t\t\t\tline2: address.line2,\r\n\t\t\t\tcountry: address.country || 'Philippines',\r\n\t\t\t\tzipCode: address.zipCode,\r\n\t\t\t\tlandmark: address.landmark\r\n\t\t\t},\r\n\t\t\t{ emitEvent: false }\r\n\t\t);\r\n\r\n\t\t// Find and set province\r\n\t\tif (address.province && typeof address.province === 'string') {\r\n\t\t\tconst provinceItem = this.provinceOptions.find(\r\n\t\t\t\t(p) => p.name.toLowerCase() === address.province?.toLowerCase()\r\n\t\t\t);\r\n\r\n\t\t\tif (provinceItem) {\r\n\t\t\t\tthis.addressForm.get('province')?.setValue(provinceItem, { emitEvent: false });\r\n\t\t\t\tthis.loadCityByProvinceId(provinceItem.id);\r\n\t\t\t} else {\r\n\t\t\t\tthis.completeInitialization();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.completeInitialization();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setCityFromPending(): void {\r\n\t\tif (!this.pendingAddress?.city || typeof this.pendingAddress.city !== 'string') {\r\n\t\t\tthis.completeInitialization();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cityItem = this.cityOptions.find(\r\n\t\t\t(c) => c.name.toLowerCase() === this.pendingAddress!.city?.toLowerCase()\r\n\t\t);\r\n\r\n\t\tif (cityItem) {\r\n\t\t\tthis.addressForm.get('city')?.setValue(cityItem, { emitEvent: false });\r\n\t\t\tthis.loadBarangayByCityId(cityItem.id);\r\n\t\t} else {\r\n\t\t\tthis.completeInitialization();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setBarangayFromPending(): void {\r\n\t\tif (!this.pendingAddress?.barangay || typeof this.pendingAddress.barangay !== 'string') {\r\n\t\t\tthis.completeInitialization();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst barangayItem = this.barangayOptions.find(\r\n\t\t\t(b) => b.name.toLowerCase() === this.pendingAddress!.barangay?.toLowerCase()\r\n\t\t);\r\n\r\n\t\tif (barangayItem) {\r\n\t\t\tthis.addressForm.get('barangay')?.setValue(barangayItem, { emitEvent: false });\r\n\t\t}\r\n\r\n\t\tthis.completeInitialization();\r\n\t}\r\n\r\n\tprivate completeInitialization(): void {\r\n\t\tthis.isInitializing = false;\r\n\t\tthis.pendingAddress = null;\r\n\t}\r\n\r\n\t// ControlValueAccessor methods\r\n\twriteValue(value: Address | null): void {\r\n\t\tif (value) {\r\n\t\t\t// Auto-detect if this is edit mode based on the address data structure\r\n\t\t\tthis.detectedEditMode = this.isEditModeAddress(value);\r\n\r\n\t\t\tif (this.detectedEditMode) {\r\n\t\t\t\t// Address contains string values (names) - needs initialization\r\n\t\t\t\tthis.pendingAddress = value;\r\n\r\n\t\t\t\t// If provinces are already loaded, start initialization\r\n\t\t\t\tif (this.provinceOptions.length > 0) {\r\n\t\t\t\t\tthis.initializeEditMode(value);\r\n\t\t\t\t}\r\n\t\t\t\t// Otherwise, it will be triggered when provinces load\r\n\t\t\t} else {\r\n\t\t\t\t// Create mode or already has proper objects\r\n\t\t\t\tthis.addressForm.patchValue(value, { emitEvent: false });\r\n\r\n\t\t\t\t// Load cascading data if IDs are present\r\n\t\t\t\tconst province = value.province;\r\n\t\t\t\tif (province && typeof province === 'object' && 'id' in province) {\r\n\t\t\t\t\tthis.loadCityByProvinceId((province as any).id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst city = value.city;\r\n\t\t\t\tif (city && typeof city === 'object' && 'id' in city) {\r\n\t\t\t\t\tthis.loadBarangayByCityId((city as any).id);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.addressForm.reset({ country: 'Philippines' }, { emitEvent: false });\r\n\t\t}\r\n\t}\r\n\r\n\tregisterOnChange(fn: (value: Address | null) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState(isDisabled: boolean): void {\r\n\t\tthis.isDisabled?.set(isDisabled);\r\n\t\tif (isDisabled) {\r\n\t\t\tthis.addressForm.disable();\r\n\t\t} else {\r\n\t\t\tthis.addressForm.enable();\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(control: AbstractControl): ValidationErrors | null {\r\n\t\treturn this.addressForm?.valid ? null : { invalidAddress: true };\r\n\t}\r\n}\r\n","@if (showHeader()) {\r\n\t<h2 class=\"text-xl font-semibold mb-4\" [ngClass]=\"{ 'px-4': isDisabled() }\">Address</h2>\r\n}\r\n\r\n@if (isViewMode()) {\r\n\t@let address = addressForm.value;\r\n\r\n\t<div class=\"grid gap-3 p-4\">\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"country\">Country:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.country || 'Philippines' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"province\">Province:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.province?.name || address.province || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"city\">City/Municipality:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.city?.name || address.city || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"barangay\">Barangay:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.barangay?.name || address.barangay || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line1\">Line 1:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line1 || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line2\">Line 2:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line2 || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"zipCode\">Zip Code:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.zipCode || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"landmark\">Nearest Landmark:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.landmark || '' }}</p>\r\n\t\t</div>\r\n\t</div>\r\n} @else {\r\n\t<form [formGroup]=\"addressForm\">\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"country\" formControlName=\"country\" class=\"w-full\" />\r\n\t\t\t\t\t\t<label for=\"country\" class=\"block mb-2 required-label\">Country</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"province\"\r\n\t\t\t\t\t\t\t[items]=\"provinceOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"provHttp$ && !provHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\t\t\t\t\t\t<label for=\"province\" class=\"block mb-2 required-label\">Province</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"city\"\r\n\t\t\t\t\t\t\t[items]=\"cityOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"cityHttp$ && !cityHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\t\t\t\t\t\t<label for=\"city\" class=\"block mb-2 required-label\">City/Municipality</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"barangay\"\r\n\t\t\t\t\t\t\t[items]=\"barangayOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"barangayHttp$ && !barangayHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\r\n\t\t\t\t\t\t<label for=\"barangay\" class=\"block mb-2 required-label\">Barangay</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div>\r\n\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t<label for=\"line1\" class=\"block mb-2 required-label\">Line 1</label>\r\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line1\" formControlName=\"line1\" class=\"w-full\" />\r\n\t\t\t\t</p-floatlabel>\r\n\t\t\t</ngp-form-field-wrapper>\r\n\t\t</div>\r\n\r\n\t\t<div>\r\n\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t<label for=\"line2\" class=\"block mb-2\">Line 2</label>\r\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line2\" formControlName=\"line2\" class=\"w-full\" />\r\n\t\t\t\t</p-floatlabel>\r\n\t\t\t</ngp-form-field-wrapper>\r\n\t\t</div>\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<p-inputnumber\r\n\t\t\t\t\t\t\t[inputId]=\"'zipCode'\"\r\n\t\t\t\t\t\t\tformControlName=\"zipCode\"\r\n\t\t\t\t\t\t\tstyleClass=\"w-full\"\r\n\t\t\t\t\t\t\t[useGrouping]=\"false\" />\r\n\t\t\t\t\t\t<label for=\"zipCode\" class=\"block mb-2 required-label\">Zip Code</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<label for=\"landmark\" class=\"block mb-2 required-label\">Nearest Landmark</label>\r\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"landmark\" formControlName=\"landmark\" class=\"w-full\" />\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</form>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n\tComponent,\r\n\tcomputed,\r\n\tContentChild,\r\n\teffect,\r\n\tinject,\r\n\tinput,\r\n\toutput,\r\n\tsignal,\r\n\tTemplateRef,\r\n\tViewChild\r\n} from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { Table, TableModule, TablePageEvent } from 'primeng/table';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { TableColumn } from '../../../models/table-column.model';\r\n\r\n@Component({\r\n\tselector: 'ngp-data-table',\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tTableModule,\r\n\t\tButtonModule,\r\n\t\tInputTextModule,\r\n\t\tConfirmDialogModule,\r\n\t\tDialogModule,\r\n\t\tTooltipModule,\r\n\t\tToastModule,\r\n\t\tToolbarModule,\r\n\t\tSkeletonModule,\r\n\t\tPopoverModule\r\n\t],\r\n\ttemplateUrl: './data-table.component.html',\r\n\tstyleUrl: './data-table.component.scss',\r\n\tproviders: [ConfirmationService, MessageService]\r\n})\r\nexport class DataTableComponent<T extends Record<string, any>> {\r\n\tdataSource = input<T[]>([]);\r\n\tcolumns = input<TableColumn[]>([]);\r\n\tloading = input<boolean>(false);\r\n\tpageSize = input<number>(10);\r\n\ttotalElements = input<number>(0);\r\n\tcurrentPage = input<number>(0);\r\n\tshowDefaultActions = input<boolean>(true);\r\n\temptyMessage = input<string>('No data available.');\r\n\thasDeleteAction = input<boolean>(true);\r\n\thasEditAction = input<boolean>(true);\r\n\tcanEdit = input<(row: unknown) => boolean>(() => true);\r\n\thasViewAction = input<boolean>(true);\r\n\tentityName = input<string>('');\r\n\tisPaginated = input<boolean>(true);\r\n\tshowCustomAction = input<boolean>(false);\r\n\tshowRowNumbers = input<boolean>(false);\r\n\trowNumberHeader = input<string>('');\r\n\r\n\t// Internal signals\r\n\tdata = signal<T[]>([]);\r\n\tfilteredData = signal<T[]>([]);\r\n\tdialogVisible = signal<boolean>(false);\r\n\tdialogTitle = signal<string>('Add Item');\r\n\teditingItem = signal<T | null>(null);\r\n\r\n\t// Custom event emitters\r\n\tadd = output<T>();\r\n\tedit = output<T>();\r\n\tdeleteAction = output<T>();\r\n\tview = output<T>();\r\n\tpageChange = output<TablePageEvent>();\r\n\tsortChange = output<{ sort: string; order: string }>();\r\n\r\n\tactions = computed(() => [this.hasViewAction(), this.hasEditAction(), this.hasDeleteAction()]);\r\n\tactionsLength = computed(() => this.actions().filter((action) => !!action).length);\r\n\tactionItems = computed(() => {\r\n\t\treturn [\r\n\t\t\t{\r\n\t\t\t\tlabel: 'View ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasViewAction(),\r\n\t\t\t\ticon: 'pi-search'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tlabel: 'Update ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasEditAction(),\r\n\t\t\t\ticon: 'pi-pen-to-square',\r\n\t\t\t\tshouldShow: (item: unknown) => this.canEdit()(item)\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tlabel: 'Delete ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasDeleteAction(),\r\n\t\t\t\ticon: 'pi-trash'\r\n\t\t\t}\r\n\t\t];\r\n\t});\r\n\r\n\t// Content children for custom templates\r\n\t@ContentChild('formTemplate') formTemplate?: TemplateRef<unknown>;\r\n\t@ViewChild('dt') table?: Table;\r\n\r\n\t// Services\r\n\tprivate readonly http = inject(HttpClient);\r\n\tprivate readonly confirmationService = inject(ConfirmationService);\r\n\tprivate readonly messageService = inject(MessageService);\r\n\r\n\t// Column filters for individual column filtering\r\n\tprivate readonly filterValues: Record<string, string> = {};\r\n\r\n\t// For custom cell templates\r\n\tcustomTemplates = new Map<string, TemplateRef<unknown>>();\r\n\r\n\tconstructor() {\r\n\t\t// Effect to update filtered data when raw data changes\r\n\t\teffect(() => {\r\n\t\t\tconst sourceData = this.dataSource();\r\n\t\t\tthis.data.set([...sourceData]);\r\n\t\t});\r\n\t}\r\n\r\n\t// Register a custom template for a specific column\r\n\tregisterTemplate(field: string, template: TemplateRef<unknown>): void {\r\n\t\tthis.customTemplates.set(field, template);\r\n\t}\r\n\r\n\thandlePageChange(event: TablePageEvent) {\r\n\t\tthis.pageChange.emit(event);\r\n\t}\r\n\r\n\thandleSort(event: { field: string; order: number }) {\r\n\t\tconst column = this.columns().find((col) => col.field === event.field);\r\n\t\tconst actualSortField = column?.sortField ?? event.field;\r\n\t\tconst order = event.order === 1 ? 'ASC' : 'DESC';\r\n\r\n\t\tthis.sortChange.emit({\r\n\t\t\tsort: actualSortField,\r\n\t\t\torder\r\n\t\t});\r\n\t}\r\n\r\n\tresetTableSort(): void {\r\n\t\tif (this.table) {\r\n\t\t\tthis.table.sortOrder = 0;\r\n\t\t\tthis.table.sortField = null;\r\n\t\t\tthis.table.tableService.onSort(null);\r\n\t\t}\r\n\t}\r\n\r\n\t// Helper to safely get nested property values using dot notation\r\n\tgetItemValue(item: T, field: string, column?: TableColumn): unknown {\r\n\t\tif (column && typeof column.render === 'function') {\r\n\t\t\treturn column.render(item);\r\n\t\t}\r\n\t\treturn field\r\n\t\t\t.split('.')\r\n\t\t\t.reduce((obj: unknown, key) => obj?.[key as keyof typeof obj] ?? null, item as unknown);\r\n\t}\r\n\r\n\tperFormActionFromPopover(item: T, actionType: string): void {\r\n\t\tif (actionType.includes('View')) {\r\n\t\t\tthis.view.emit(item);\r\n\t\t} else if (actionType.includes('Update')) {\r\n\t\t\tthis.edit.emit(item);\r\n\t\t} else if (actionType.includes('Delete')) {\r\n\t\t\tthis.deleteAction.emit(item);\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"card\">\r\n\t<p-table\r\n\t\t#dt\r\n\t\t[value]=\"data()\"\r\n\t\t[paginator]=\"isPaginated()\"\r\n\t\t[rows]=\"pageSize()\"\r\n\t\t[rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n\t\t[rowHover]=\"true\"\r\n\t\t[loading]=\"loading()\"\r\n\t\t[showLoader]=\"false\"\r\n\t\t[scrollable]=\"true\"\r\n\t\tstyleClass=\"p-datatable-sm\"\r\n\t\t[totalRecords]=\"totalElements()\"\r\n\t\t[lazy]=\"isPaginated()\"\r\n\t\t[first]=\"currentPage() * pageSize()\"\r\n\t\tpaginatorDropdownAppendTo=\"body\"\r\n\t\t(onPage)=\"handlePageChange($event)\"\r\n\t\t(onSort)=\"handleSort($event)\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<tr>\r\n\t\t\t\t@if (showRowNumbers()) {\r\n\t\t\t\t\t<th class=\"text-left !font-bold !text-gray-500 !w-1\" scope=\"col\">{{\r\n\t\t\t\t\t\trowNumberHeader()\r\n\t\t\t\t\t}}</th>\r\n\t\t\t\t}\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<th\r\n\t\t\t\t\t\t[pSortableColumn]=\"column.sortable ? column.field : undefined\"\r\n\t\t\t\t\t\tclass=\"text-left !font-bold !text-gray-500\"\r\n\t\t\t\t\t\t[ngClass]=\"{ '!text-center': column.align === 'center' }\"\r\n\t\t\t\t\t\tscope=\"col\"\r\n\t\t\t\t\t\t[style]=\"{ width: column.width || 'auto' }\">\r\n\t\t\t\t\t\t{{ column.header }}\r\n\t\t\t\t\t\t@if (column.sortable) {\r\n\t\t\t\t\t\t\t<p-sortIcon [field]=\"column.field\"></p-sortIcon>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<th class=\"!w-32 !text-center !font-bold !text-gray-500\" scope=\"col\">Actions</th>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template pTemplate=\"body\" let-item let-rowIndex=\"rowIndex\">\r\n\t\t\t<tr>\r\n\t\t\t\t@if (showRowNumbers()) {\r\n\t\t\t\t\t<td class=\"!w-1 text-center\">\r\n\t\t\t\t\t\t{{ rowIndex + 1 }}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td [ngClass]=\"{ '!text-center': column.align === 'center' }\">\r\n\t\t\t\t\t\t@if (customTemplates && customTemplates.get(column.field)) {\r\n\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get(column.field)!\"\r\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: column.field }\">\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t{{ getItemValue(item, column.field, column) }}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td class=\"\">\r\n\t\t\t\t\t\t<div class=\"flex justify-center gap-2\">\r\n\t\t\t\t\t\t\t@if (showDefaultActions() && actionsLength() < 2 && !showCustomAction()) {\r\n\t\t\t\t\t\t\t\t<!-- Inline buttons for less than 2 standard actions and no custom action -->\r\n\t\t\t\t\t\t\t\t@if (hasViewAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'View'\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"view.emit(item)\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t@if (hasEditAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"edit.emit(item)\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Update'\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t@if (hasDeleteAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-danger\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"deleteAction.emit(item)\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Delete'\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} @else if (!showDefaultActions() && showCustomAction()) {\r\n\t\t\t\t\t\t\t\t<!-- Only custom action, no popover needed -->\r\n\t\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\r\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<!-- Popover menu for 2+ standard actions or when combining with custom action -->\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\ticon=\"pi pi-ellipsis-h\"\r\n\t\t\t\t\t\t\t\t\tclass=\"p-button-outlined p-button-secondary\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"po.toggle($event)\"></button>\r\n\t\t\t\t\t\t\t\t<p-popover #po styleClass=\"!min-w-40\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"!font-semibold !text-gray-500 block mb-2\">Actions</span>\r\n\t\t\t\t\t\t\t\t\t<ul class=\"list-none p-0 m-0 flex flex-col\">\r\n\t\t\t\t\t\t\t\t\t\t@if (showDefaultActions()) {\r\n\t\t\t\t\t\t\t\t\t\t\t@for (actionItem of actionItems(); track $index) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t@if (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tactionItem.visible &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(!actionItem.shouldShow || actionItem.shouldShow(item))\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"flex items-center gap-2 px-2 py-3 hover:bg-emphasis cursor-pointer rounded-border\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"perFormActionFromPopover(item, actionItem.label)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"pi\" [ngClass]=\"actionItem.icon\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"font-medium\">{{ actionItem.label }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- Custom action template in popover -->\r\n\t\t\t\t\t\t\t\t\t\t@if (showCustomAction() && customTemplates.get('customAction')) {\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\r\n\t\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t</p-popover>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template #loadingbody>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template pTemplate=\"emptymessage\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td [attr.colspan]=\"columns().length + 1\" class=\"text-center p-4\">{{ emptyMessage() }}</td>\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\t</p-table>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, forwardRef, OnInit, signal } from '@angular/core';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { PaginatedRequest, PaginatedResponse } from '../../../../models/paginated.model';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\nimport { FloatLabelModule } from 'primeng/floatlabel';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NG_VALIDATORS,\r\n Validator,\r\n AbstractControl,\r\n ValidationErrors,\r\n Validators\r\n} from '@angular/forms';\r\n\r\n\r\ntype SelectValue<T> = T | T[];\r\ntype SelectValueOrNull<T> = SelectValue<T> | null;\r\n\r\n@Component({\r\n selector: 'ngp-dynamic-select',\r\n templateUrl: './dynamic-select.component.html',\r\n imports: [NgSelectModule, FormsModule, CommonModule, FloatLabelModule],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DynamicNgSelectComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => DynamicNgSelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class DynamicNgSelectComponent<T> implements ControlValueAccessor, Validators, OnInit {\r\n\r\n @Input() apiUrl!: (params?: PaginatedRequest) => Observable<PaginatedResponse<T>>;\r\n @Input() formatOptions?: (items: T[]) => T[];\r\n\r\n @Input() bindLabel = 'description';\r\n @Input() bindValue = 'id';\r\n @Input() placeholder = 'Select';\r\n @Input() isRequired = false;\r\n @Input() options: T[] = [];\r\n\r\n value!: number | string | null;\r\n disabled = false;\r\n\r\n tableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\r\n\r\n private onChange = (_: any) => { }; // eslint-disable-line\r\n private onTouched = () => { }; // eslint-disable-line\r\n\r\n ngOnInit(): void {\r\n this.loadOptions();\r\n }\r\n\r\n private loadOptions(): void {\r\n if (!this.apiUrl) {\r\n return;\r\n }\r\n\r\n this.getOptions();\r\n }\r\n\r\n getOptions(): void {\r\n this.apiUrl(this.tableParams())\r\n .pipe(tap((items) => {\r\n const values = this.formatOptions ? this.formatOptions(items.results) : items.results\r\n this.options = [...this.options, ...values];\r\n\r\n if (items.hasNextPage) {\r\n this.tableParams.update((param) => ({ ...param, page: param.page + 1 }));\r\n this.getOptions();\r\n }\r\n }))\r\n .subscribe();\r\n }\r\n\r\n writeValue(value: string | number): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: (val: SelectValueOrNull<T>) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n onValueChange(value: any): void {\r\n if (!value) {\r\n this.value = null;\r\n this.onChange(null);\r\n } else {\r\n this.value = value[this.bindValue];\r\n this.onChange(value[this.bindValue]);\r\n }\r\n this.onTouched();\r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors | null { // eslint-disable-line\r\n if (\r\n this.isRequired &&\r\n (this.value === null || this.value === undefined || this.value === '')\r\n ) {\r\n return { required: true };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","<p-floatlabel variant=\"in\">\r\n <ng-select [items]=\"options\" [bindLabel]=\"bindLabel\" [bindValue]=\"bindValue\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"value\" [clearable]=\"true\" (change)=\"onValueChange($event)\">\r\n </ng-select>\r\n\r\n <label [class.required-label]=\"isRequired\">{{ placeholder }}</label>\r\n</p-floatlabel>","import { Component, input, Input, output } from '@angular/core';\r\nimport { DrawerModule } from 'primeng/drawer';\r\n\r\n@Component({\r\n\tselector: 'ngp-dynamic-drawer',\r\n\timports: [DrawerModule],\r\n\ttemplateUrl: './dynamic-drawer.component.html',\r\n\tstyleUrl: './dynamic-drawer.component.scss'\r\n})\r\nexport class DynamicDrawerComponent {\r\n\tposition = input<'left' | 'right'>('right');\r\n\theader = input<string>('Information');\r\n\tstyleClass = input<string>('!w-[90vw] md:!w-[35vw] !p-4');\r\n\r\n\thide = output<boolean>();\r\n\r\n\t@Input() isOpen = false;\r\n}\r\n","<p-drawer\r\n\t[header]=\"header()\"\r\n\t[(visible)]=\"isOpen\"\r\n\tposition=\"right\"\r\n\t[styleClass]=\"styleClass()\"\r\n\t(onHide)=\"hide.emit(false)\"\r\n\t[dismissible]=\"'false'\"\r\n\t[blockScroll]=\"true\">\r\n\t<div class=\"content-wrapper !h-full\">\r\n\t\t<ng-content></ng-content>\r\n\t</div>\r\n</p-drawer>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, input } from '@angular/core';\r\nimport { DividerModule } from 'primeng/divider';\r\nimport { map, share, timer } from 'rxjs';\r\n\r\n@Component({\r\n\tselector: 'ngp-date-clock',\r\n\timports: [CommonModule, DividerModule],\r\n\ttemplateUrl: './date-clock.component.html',\r\n\tstyleUrl: './date-clock.component.scss'\r\n})\r\nexport class DateClockComponent {\r\n\tstyleClass = input<string>('');\r\n\r\n\trxDate = new Date();\r\n\r\n\tconstructor() {\r\n\t\tthis.initClock();\r\n\t}\r\n\r\n\tinitClock(): void {\r\n\t\ttimer(0, 1000)\r\n\t\t\t.pipe(\r\n\t\t\t\tmap(() => new Date()),\r\n\t\t\t\tshare()\r\n\t\t\t)\r\n\t\t\t.subscribe((time) => {\r\n\t\t\t\tthis.rxDate = time;\r\n\t\t\t});\r\n\t}\r\n}\r\n","<div class=\"flex items-center gap-2\">\r\n\t<div\r\n\t\tclass=\"self-start rounded-lg border border-sky-200 px-4 py-1 flex flex-col justify-center items-center bg-sky-50\"\r\n\t\t[ngClass]=\"styleClass()\">\r\n\t\t<span class=\"text-sm text-gray-500\">{{ rxDate | date: 'MMM' }}</span>\r\n\t\t<span class=\"font-bold text-xl\">{{ rxDate | date: 'dd' }}</span>\r\n\t</div>\r\n\t<div class=\"flex flex-col\">\r\n\t\t<div class=\"text-md font-bold\">Today</div>\r\n\t\t<span class=\"text-sm text-gray-400 font-medium\">\r\n\t\t\t{{ rxDate | date: 'hh' }}:{{ rxDate | date: 'mm' }} {{ rxDate | date: 'a' }}\r\n\t\t</span>\r\n\t</div>\r\n</div>\r\n","export class PaginatedRequest {\r\n\tpage!: number;\r\n\tsize!: number;\r\n\tsort?: string | null;\r\n\t[key: string]: any;\r\n}\r\n\r\nexport interface PaginatedResponse<T> {\r\n\thasNextPage: boolean;\r\n\ttotalElements: number;\r\n\tresults: T[];\r\n\tcurrentPage: number;\r\n\tpageSize: number;\r\n}\r\n","import { computed, effect, inject, Injectable, Injector, signal, untracked } from '@angular/core';\r\nimport { catchError, finalize, Observable, of, shareReplay } from 'rxjs';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { PaginatedRequest, PaginatedResponse } from '../models/paginated.model';\r\nimport { ActionType, ApiOperations } from '../types/api-operations.type';\r\n\r\n@UntilDestroy()\r\n@Injectable()\r\nexport abstract class CrudAbstractComponent<\r\n\tT,\r\n\tCreateDto = Partial<T>,\r\n\tUpdateDto = Partial<T>,\r\n\tIdType = string | number\r\n> {\r\n\t// State signals\r\n\tprivate readonly sourceSignal = signal<Observable<T | T[]> | null>(null);\r\n\tprivate readonly loadingSignal = signal<boolean>(false);\r\n\tprivate readonly errorSignal = signal<Error | null>(null);\r\n\tprivate readonly actionSignal = signal<ActionType | null>(null);\r\n\tprivate readonly firstLoadSignal = signal<boolean>(true);\r\n\tprivate readonly showFormSignal = signal<boolean>(false);\r\n\tprivate readonly formActionSignal = signal<'Create' | 'Update' | 'View' | null>(null);\r\n\tprotected readonly dataSignal = signal<T | T[] | null>(null);\r\n\r\n\tpublic filters = signal<Record<string, unknown> | null>(null);\r\n\tpublic tableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\r\n\tpublic requestParams = computed(() => ({\r\n\t\t...this.filters(),\r\n\t\t...this.tableParams()\r\n\t}));\r\n\r\n\t// Injections\r\n\tprivate readonly injector = inject(Injector);\r\n\r\n\t// Public interface\r\n\tpublic readonly data = this.dataSignal.asReadonly();\r\n\tpublic readonly isLoading = this.loadingSignal.asReadonly();\r\n\tpublic readonly error = this.errorSignal.asReadonly();\r\n\tpublic readonly currentAction = this.actionSignal.asReadonly();\r\n\tpublic readonly isFirstLoad = this.firstLoadSignal.asReadonly();\r\n\tpublic readonly formAction = this.formActionSignal.asReadonly();\r\n\r\n\tpublic readonly isFormVisible = computed(() => this.showFormSignal());\r\n\tpublic readonly safeDataSource = computed(() => {\r\n\t\tconst rawData = this.dataSignal();\r\n\t\tconst isLoading = this.loadingSignal();\r\n\r\n\t\tinterface Page<T> {\r\n\t\t\tresults: T[];\r\n\t\t\thasNextPage: boolean;\r\n\t\t\ttotalElements: number;\r\n\t\t\tpageSize: number;\r\n\t\t\tcurrentPage: number;\r\n\t\t}\r\n\r\n\t\t// Default empty response\r\n\t\tconst defaultResponse = {\r\n\t\t\thasNextPage: false,\r\n\t\t\ttotalElements: 0,\r\n\t\t\tresults: [] as T[],\r\n\t\t\tcurrentPage: 0,\r\n\t\t\tpageSize: 10\r\n\t\t};\r\n\r\n\t\tif (!rawData || isLoading) return defaultResponse;\r\n\r\n\t\tconst isPaginatedResponse = (obj: unknown): obj is Page<T> => {\r\n\t\t\treturn (\r\n\t\t\t\tobj !== null &&\r\n\t\t\t\ttypeof obj === 'object' &&\r\n\t\t\t\t'results' in obj &&\r\n\t\t\t\tArray.isArray(obj.results) &&\r\n\t\t\t\t'totalElements' in obj &&\r\n\t\t\t\ttypeof obj.totalElements === 'number'\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\t// Handler for Paginated Response\r\n\t\tif (typeof rawData === 'object' && isPaginatedResponse(rawData)) {\r\n\t\t\treturn {\r\n\t\t\t\tresults: [...rawData.results],\r\n\t\t\t\ttotalElements: rawData.totalElements,\r\n\t\t\t\tcurrentPage: rawData.currentPage,\r\n\t\t\t\tpageSize: rawData.pageSize,\r\n\t\t\t\thasNextPage: rawData.hasNextPage\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Handle array case\r\n\t\tif (Array.isArray(rawData)) {\r\n\t\t\treturn {\r\n\t\t\t\t...defaultResponse,\r\n\t\t\t\ttotalElements: rawData.length,\r\n\t\t\t\tresults: [...rawData],\r\n\t\t\t\tpageSize: rawData.length // For arrays, we typically return all elements\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Handle single object case\r\n\t\treturn {\r\n\t\t\t...defaultResponse,\r\n\t\t\ttotalElements: 1,\r\n\t\t\tresults: [rawData],\r\n\t\t\tpageSize: 1\r\n\t\t};\r\n\t});\r\n\r\n\t/**\r\n\t * Provides direct access to raw list data without pagination wrapper\r\n\t * Returns an empty array if data is not available or not an array\r\n\t */\r\n\tpublic readonly rawList = computed<T[]>(() => {\r\n\t\tconst rawData = this.data();\r\n\r\n\t\tif (!rawData || this.isLoading()) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\t// If it's already an array, return it\r\n\t\tif (Array.isArray(rawData)) {\r\n\t\t\treturn [...rawData];\r\n\t\t}\r\n\r\n\t\t// If it's a paginated response with a results property that's an array\r\n\t\tif (typeof rawData === 'object' && 'results' in rawData && Array.isArray(rawData.results)) {\r\n\t\t\treturn [...rawData.results];\r\n\t\t}\r\n\r\n\t\t// If it's a single object, return it as an array with one item\r\n\t\tif (typeof rawData === 'object' && !('results' in rawData)) {\r\n\t\t\treturn [rawData as T];\r\n\t\t}\r\n\r\n\t\t// Default fallback\r\n\t\treturn [];\r\n\t});\r\n\r\n\t// Usage in your component:\r\n\t// const items = this.rawList();\r\n\r\n\t// Current operations state\r\n\tprivate currentOperations?: ApiOperations<T, CreateDto, UpdateDto, IdType>;\r\n\tprivate currentParams?: Record<string, unknown>;\r\n\r\n\t// Effect to handle Observable subscriptions\r\n\tprivate readonly dataEffect = effect(\r\n\t\t() => {\r\n\t\t\tconst obs = this.sourceSignal();\r\n\t\t\tif (!obs) {\r\n\t\t\t\tuntracked(() => this.dataSignal.set(null));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tuntracked(() => {\r\n\t\t\t\tthis.loadingSignal.set(true);\r\n\t\t\t\tthis.errorSignal.set(null);\r\n\r\n\t\t\t\tconst sub = obs\r\n\t\t\t\t\t.pipe(\r\n\t\t\t\t\t\tshareReplay(1),\r\n\t\t\t\t\t\tcatchError((err) => {\r\n\t\t\t\t\t\t\tthis.errorSignal.set(err);\r\n\t\t\t\t\t\t\treturn of(null);\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tfinalize(() => this.loadingSignal.set(false))\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.subscribe((value) => {\r\n\t\t\t\t\t\tthis.dataSignal.set(value);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\treturn () => sub.unsubscribe();\r\n\t\t\t});\r\n\t\t},\r\n\t\t{ injector: this.injector }\r\n\t);\r\n\r\n\t/**\r\n\t * Initialize with dynamic service operations\r\n\t */\r\n\tprotected initService(operations: ApiOperations<T, CreateDto, UpdateDto, IdType>): void {\r\n\t\tthis.currentOperations = operations;\r\n\t}\r\n\r\n\t/**\r\n\t * GET data\r\n\t */\r\n\tprotected loadData(params?: Record<string, unknown>): void {\r\n\t\tif (!this.currentOperations?.get) return;\r\n\r\n\t\tthis.executeOperation('get', () => this.currentOperations!.get!(params), params);\r\n\r\n\t\tthis.firstLoadSignal.set(false);\r\n\t}\r\n\r\n\t/**\r\n\t * GET data by ID\r\n\t */\r\n\tprotected getById(\r\n\t\tid: IdType,\r\n\t\tparams?: Record<string, unknown>\r\n\t): Observable<T | T[] | PaginatedResponse<T> | null> {\r\n\t\tif (!this.currentOperations?.getById) return of(null);\r\n\r\n\t\treturn this.executeOperation('get', () => this.currentOperations!.getById!(id, params));\r\n\t}\r\n\r\n\t/**\r\n\t * CREATE data\r\n\t */\r\n\tprotected createData(data: CreateDto): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.create) return of(null);\r\n\r\n\t\treturn this.executeOperation('create', () => this.currentOperations!.create!(data));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE data\r\n\t */\r\n\tprotected updateData(data: UpdateDto): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.update) return of(null);\r\n\r\n\t\treturn this.executeOperation('update', () => this.currentOperations!.update!(data));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE data by ID\r\n\t */\r\n\tprotected updateById(id: IdType, data: Partial<UpdateDto>): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.updateById) return of(null);\r\n\r\n\t\treturn this.executeOperation('updateById', () => this.currentOperations!.updateById!(id, data));\r\n\t}\r\n\r\n\t/**\r\n\t * DELETE data\r\n\t */\r\n\tprotected deleteData(id: IdType): Observable<void | null> {\r\n\t\tif (!this.currentOperations?.delete) return of(null);\r\n\r\n\t\treturn this.executeOperation('delete', () => this.currentOperations!.delete!(id));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE status\r\n\t */\r\n\tprotected updateStatus(id: IdType, status: boolean): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.updateStatus) return of(null);\r\n\r\n\t\treturn this.executeOperation(\r\n\t\t\t'update', // You can reuse 'update' action or add a new one like 'updateStatus'\r\n\t\t\t() => this.currentOperations!.updateStatus!(id, status)\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * SHOW/HIDE form\r\n\t * @param show Whether to show or hide the form\r\n\t */\r\n\tprotected showForm(show: boolean): void {\r\n\t\tthis.showFormSignal.set(show);\r\n\t}\r\n\r\n\t/**\r\n\t * Update form action (create/edit)\r\n\t * @param action The action to set for the form\r\n\t */\r\n\tprotected updateFormAction(action: string): void {\r\n\t\tthis.formActionSignal.set(action as 'Create' | 'Update' | null);\r\n\t}\r\n\r\n\t/**\r\n\t * Shared operation execution logic\r\n\t */\r\n\tprivate executeOperation<R>(\r\n\t\taction: ActionType,\r\n\t\toperation: () => Observable<R>,\r\n\t\tparams?: Record<string, unknown>\r\n\t): Observable<R | null> {\r\n\t\tthis.errorSignal.set(null);\r\n\t\tthis.loadingSignal.set(true);\r\n\t\tthis.actionSignal.set(action);\r\n\r\n\t\tif (action === 'get') {\r\n\t\t\tthis.currentParams = params;\r\n\t\t}\r\n\r\n\t\tconst operation$ = operation().pipe(\r\n\t\t\tuntilDestroyed(this),\r\n\t\t\tcatchError((err) => {\r\n\t\t\t\tthis.errorSignal.set(err);\r\n\t\t\t\treturn of(null);\r\n\t\t\t}),\r\n\t\t\tfinalize(() => {\r\n\t\t\t\tthis.loadingSignal.set(false);\r\n\t\t\t\tthis.actionSignal.set(null);\r\n\t\t\t}),\r\n\t\t\tshareReplay(1)\r\n\t\t);\r\n\r\n\t\tif (action === 'get') {\r\n\t\t\tthis.sourceSignal.set(operation$ as Observable<T | T[]>);\r\n\t\t} else {\r\n\t\t\toperation$.subscribe(() => {\r\n\t\t\t\tif (this.currentOperations?.get) {\r\n\t\t\t\t\tthis.refresh();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn operation$;\r\n\t}\r\n\r\n\t/**\r\n\t * Refresh current data\r\n\t */\r\n\tprotected refresh(): void {\r\n\t\tif (this.currentOperations?.get && this.currentParams) {\r\n\t\t\tthis.loadData(this.currentParams);\r\n\t\t}\r\n\t}\r\n\r\n\tget entityName(): string {\r\n\t\treturn 'Item';\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PaginatedResponse } from '../../models/paginated.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class HelperService {\r\n\ttransformEmployeeResponse = (res: PaginatedResponse<any>) => ({\r\n\t\t...res,\r\n\t\tresults: res.results.map((e) => ({\r\n\t\t\t...e,\r\n\t\t\tfullName: [e.name.givenName, e.name.middleName, e.name.familyName]\r\n\t\t\t\t.filter((part) => part)\r\n\t\t\t\t.join(' ')\r\n\t\t\t\t.trim()\r\n\t\t\t\t.concat(e?.company?.name ? ` (${e.company.name})` : '')\r\n\t\t}))\r\n\t});\r\n\r\n\ttransformPayloadWithAddress = <T extends Record<string, any>>(payload: T): T => {\r\n\t\tconst transformedPayload = { ...payload } as Record<string, any>;\r\n\r\n\t\tif (transformedPayload['address']) {\r\n\t\t\tconst address = { ...transformedPayload['address'] };\r\n\r\n\t\t\t// Helper function to extract name from address field\r\n\t\t\tconst extractName = (field: unknown): string | undefined => {\r\n\t\t\t\tif (!field) return undefined;\r\n\t\t\t\tif (typeof field === 'string') return field;\r\n\t\t\t\tif (typeof field === 'object' && field !== null && 'name' in field) {\r\n\t\t\t\t\treturn (field as Record<string, any>)['name'];\r\n\t\t\t\t}\r\n\t\t\t\treturn undefined;\r\n\t\t\t};\r\n\r\n\t\t\taddress.province = extractName(address.province);\r\n\t\t\taddress.city = extractName(address.city);\r\n\t\t\taddress.barangay = extractName(address.barangay);\r\n\r\n\t\t\ttransformedPayload['address'] = address;\r\n\t\t}\r\n\r\n\t\treturn transformedPayload as T;\r\n\t};\r\n\r\n\tgenerateRandomHexColor(): string {\r\n\t\tconst randomInt = Math.floor(Math.random() * 0xffffff);\r\n\t\treturn `#${randomInt.toString(16).padStart(6, '0')}`;\r\n\t}\r\n}\r\n","// Components\r\nexport * from './lib/components/empty/empty.component';\r\nexport * from './lib/components/file-upload/file-upload.component';\r\nexport * from './lib/components/form-field-wrapper/form-field-wrapper.component';\r\nexport * from './lib/components/select/ng-select/basic/basic-ng-select.component';\r\nexport * from './lib/components/fg-address/fg-address.component';\r\nexport * from './lib/components/dataview/table/data-table.component';\r\nexport * from './lib/components/select/ng-select/dynamic/dynamic-select.component';\r\nexport * from './lib/components/drawer/dynamic-drawer.component';\r\nexport * from './lib/components/date-clock/date-clock.component';\r\n\r\n// Models\r\nexport * from './lib/models/common.model';\r\nexport * from './lib/models/address.model';\r\nexport * from './lib/models/table-column.model';\r\nexport * from './lib/models/paginated.model';\r\n\r\n// Types\r\nexport * from './lib/types/api-operations.type';\r\n\r\n// Class\r\nexport * from './lib/classes/crud-abstract.class';\r\n\r\n// Services\r\nexport * from './lib/services/helper/helper.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i4","i5","i6"],"mappings":"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"}
1
+ {"version":3,"file":"winexist-ngp.mjs","sources":["../../../packages/src/lib/components/empty/empty.component.ts","../../../packages/src/lib/components/empty/empty.component.html","../../../packages/src/lib/components/file-upload/file-upload.component.ts","../../../packages/src/lib/components/file-upload/file-upload.component.html","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.ts","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.html","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.ts","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.html","../../../packages/src/lib/services/address/address.service.ts","../../../packages/src/lib/components/fg-address/fg-address.component.ts","../../../packages/src/lib/components/fg-address/fg-address.component.html","../../../packages/src/lib/components/dataview/table/data-table.component.ts","../../../packages/src/lib/components/dataview/table/data-table.component.html","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.ts","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.html","../../../packages/src/lib/components/drawer/dynamic-drawer.component.ts","../../../packages/src/lib/components/drawer/dynamic-drawer.component.html","../../../packages/src/lib/components/date-clock/date-clock.component.ts","../../../packages/src/lib/components/date-clock/date-clock.component.html","../../../packages/src/lib/models/paginated.model.ts","../../../packages/src/lib/classes/crud-abstract.class.ts","../../../packages/src/lib/services/helper/helper.service.ts","../../../packages/src/index.ts","../../../packages/src/winexist-ngp.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n\tselector: 'ngp-empty',\r\n\timports: [],\r\n\ttemplateUrl: './empty.component.html',\r\n\tstyleUrl: './empty.component.css'\r\n})\r\nexport class EmptyComponent {\r\n\ttitle = input<string>('Section is empty.');\r\n\tmessage = input<string>('No data available.');\r\n\timgSrc = input<string>();\r\n\r\n}\r\n","<div class=\"w-full flex justify-center items-center p-5 h-full\">\r\n <div class=\"flex items-center gap-3\">\r\n @if (imgSrc()) {\r\n <img alt=\"Empty\" [src]=\"imgSrc()\" class=\"w-[80px]\" />\r\n } @else {\r\n <div class=\"!rounded-md p-5 !bg-slate-100 mb-6\">\r\n <span class=\"material-icons !text-gray-400 !text-7xl\"> search_off </span>\r\n </div>\r\n }\r\n\r\n <div class=\"flex flex-col\">\r\n <span class=\"!text-gray-900 !text-2xl !font-bold\">{{ title() }}</span>\r\n @if (message()) {\r\n <span class=\"!text-gray-400 !text-base\">{{ message() }}</span>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, ElementRef, input, output, signal, ViewChild } from '@angular/core';\r\nimport { FileSelectEvent, FileUploadModule } from 'primeng/fileupload';\r\n\r\n// Add interface for typed files\r\ninterface TypedFile extends File {\r\n\tfileType?: 'image' | 'pdf' | 'other';\r\n}\r\n\r\n@Component({\r\n\tselector: 'ngp-file-upload',\r\n\timports: [FileUploadModule, CommonModule],\r\n\ttemplateUrl: './file-upload.component.html',\r\n\tstyleUrl: './file-upload.component.css',\r\n})\r\nexport class FileUploadComponent {\r\n\t@ViewChild('fileUploader') fileUploader!: ElementRef;\r\n\r\n\t// Signal-based inputs with defaults\r\n\tfiles = input<File[]>([]);\r\n\tmultiple = input(true);\r\n\taccept = input('.pdf,.png,.jpg,.jpeg,.doc,.docx,.csv,.xls,.xlsx');\r\n\tmaxFileSize = input(2097152); // 2MB in bytes\r\n\tplaceholder = input('Drag and drop new files here to upload.');\r\n\tshowUploadButton = input<boolean>(false);\r\n\tcancelLabel = input('Clear');\r\n\r\n\t// Signal-based outputs\r\n\tfilesSelected = output<File[]>();\r\n\tfilesCleared = output<void>();\r\n\r\n\t// Internal state\r\n\tuploadedFiles = signal<TypedFile[]>([]);\r\n\r\n\tconstructor() {\r\n\t\teffect(() => {\r\n\t\t\tconst _files = this.files();\r\n\t\t\tif (_files.length) {\r\n\t\t\t\tthis.uploadedFiles.set(_files.map((file) => this.addFileType(file)));\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tonFileSelect(event: FileSelectEvent) {\r\n\t\tconst validFiles = event.currentFiles.filter(\r\n\t\t\t(file) => file.size <= this.maxFileSize() && this.isValidFileType(file)\r\n\t\t);\r\n\r\n\t\tif (validFiles.length) {\r\n\t\t\t// Add type to files before adding to uploadedFiles\r\n\t\t\tconst typedFiles = validFiles.map((file) => this.addFileType(file));\r\n\r\n\t\t\tif (this.multiple()) {\r\n\t\t\t\tthis.uploadedFiles.update((files) => Array.from(new Set([...files, ...typedFiles])));\r\n\t\t\t} else {\r\n\t\t\t\tthis.uploadedFiles.set(typedFiles);\r\n\t\t\t}\r\n\t\t\tthis.filesSelected.emit(typedFiles);\r\n\t\t}\r\n\t}\r\n\r\n\tonClear() {\r\n\t\tthis.uploadedFiles.set([]);\r\n\t\tthis.filesCleared.emit();\r\n\t}\r\n\r\n\tremoveFile(index: number) {\r\n\t\tthis.uploadedFiles.update((files) => files.filter((_, i) => i !== index));\r\n\t\tthis.filesSelected.emit(this.uploadedFiles());\r\n\t}\r\n\r\n\tisValidFileType(file: File): boolean {\r\n\t\tconst acceptedTypes = this.accept().split(',');\r\n\t\treturn acceptedTypes.some((type) =>\r\n\t\t\tfile.name.toLowerCase().endsWith(type.trim().toLowerCase())\r\n\t\t);\r\n\t}\r\n\r\n\tformatFileSize(bytes: number): string {\r\n\t\tif (bytes === 0) return '0 Bytes';\r\n\t\tconst k = 1024;\r\n\t\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\t\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\r\n\t}\r\n\r\n\tclear() {\r\n\t\tthis.uploadedFiles.set([]);\r\n\t\tif (this.fileUploader?.nativeElement?.clear) {\r\n\t\t\tthis.fileUploader.nativeElement.clear();\r\n\t\t}\r\n\t}\r\n\r\n\t// Function to determine file type based on extension\r\n\tgetFileTypeByExtension(file: File): 'image' | 'pdf' | 'other' {\r\n\t\tconst fileName = file.name.toLowerCase();\r\n\t\tconst imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.svg', '.webp'];\r\n\t\tconst pdfExtension = '.pdf';\r\n\r\n\t\tif (imageExtensions.some((ext) => fileName.endsWith(ext))) {\r\n\t\t\treturn 'image';\r\n\t\t} else if (fileName.endsWith(pdfExtension)) {\r\n\t\t\treturn 'pdf';\r\n\t\t} else {\r\n\t\t\treturn 'other';\r\n\t\t}\r\n\t}\r\n\r\n\t// Function to add type property to file\r\n\taddFileType(file: File): TypedFile {\r\n\t\tconst typedFile = file as TypedFile;\r\n\t\ttypedFile.fileType = this.getFileTypeByExtension(file);\r\n\t\treturn typedFile;\r\n\t}\r\n}\r\n","<p-fileupload #fileUploader [multiple]=\"multiple()\" [showUploadButton]=\"showUploadButton()\"\r\n [cancelLabel]=\"cancelLabel()\" [accept]=\"accept()\" auto=\"false\" [maxFileSize]=\"maxFileSize()\" mode=\"advanced\"\r\n [customUpload]=\"true\" styleClass=\"!bg-gray-50\" (onSelect)=\"onFileSelect($event)\" (onClear)=\"onClear()\">\r\n <ng-template #content>\r\n @if (uploadedFiles().length) {\r\n <ul class=\"space-y-2\">\r\n @for (file of uploadedFiles(); track $index) {\r\n <li class=\"flex justify-between gap-4 p-2 bg-gray-100 rounded\">\r\n <div class=\"flex gap-2\">\r\n <ng-container [ngTemplateOutlet]=\"iconTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: file.fileType }\"></ng-container>\r\n <span class=\"text-sm\"> {{ file.name }} - {{ formatFileSize(file.size) }} </span>\r\n </div>\r\n <button type=\"button\" (click)=\"removeFile($index)\" class=\"text-red-500 hover:text-red-700 text-sm\">\r\n <span class=\"material-icons !text-base\"> cancel </span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n } @else {\r\n <div class=\"flex flex-col items-center gap-3\">\r\n <img src=\"assets/images/file-upload.svg\" alt=\"File Upload\" class=\"w-28 mx-auto\" />\r\n <span class=\"font-semibold text-center text-gray-400 text-sm\">\r\n Drag & drop or<br />\r\n click the \"Choose\" button to add new files\r\n </span>\r\n </div>\r\n }\r\n </ng-template>\r\n <ng-template #file></ng-template>\r\n</p-fileupload>\r\n\r\n<ng-template #iconTemplate let-type>\r\n @if (type === 'image') {\r\n <span class=\"material-icons\"> image </span>\r\n } @else if (type === 'pdf') {\r\n <span class=\"material-icons\"> picture_as_pdf </span>\r\n } @else {\r\n <span class=\"material-icons\"> insert_drive_file </span>\r\n }\r\n</ng-template>","// form-field-wrapper.component.ts\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, ContentChild, Input, AfterContentInit, OnDestroy } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { MessageModule } from 'primeng/message';\r\n\r\n@Component({\r\n\tselector: 'ngp-form-field-wrapper',\r\n\tstandalone: true,\r\n\timports: [CommonModule, MessageModule],\r\n\ttemplateUrl: './form-field-wrapper.component.html',\r\n\tstyleUrls: ['./form-field-wrapper.component.scss']\r\n})\r\nexport class FormFieldWrapperComponent implements AfterContentInit, OnDestroy {\r\n\t@Input() validationMessages: { [key: string]: string } = {\r\n\t\trequired: 'This field is required',\r\n\t\temail: 'Please enter a valid email',\r\n\t\tminlength: 'Input does not meet minimum length',\r\n\t\tmaxlength: 'Input exceeds maximum length',\r\n\t\tpattern: 'Input format is invalid',\r\n\t\tendTimeBeforeStartTime: 'End time must not be before start time',\r\n\t\tbreakStartBeforeEarliestStart: 'Break start time cannot be before the earliest start time'\r\n\t};\r\n\r\n\t@ContentChild(NgControl) control?: NgControl;\r\n\r\n\tprivate subscription?: Subscription;\r\n\r\n\tngAfterContentInit(): void {\r\n\t\tif (this.control) {\r\n\t\t\tthis.subscription = this.control.statusChanges?.subscribe(() => { });\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscription?.unsubscribe();\r\n\t}\r\n\r\n\tshouldShowError(): boolean {\r\n\t\treturn (\r\n\t\t\t!!this.control &&\r\n\t\t\tthis.control.invalid === true &&\r\n\t\t\t(this.control.dirty === true || this.control.touched === true)\r\n\t\t);\r\n\t}\r\n\r\n\tgetErrorMessage(): string {\r\n\t\tif (!this.control?.errors) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\r\n\t\tconst firstErrorKey = Object.keys(this.control.errors)[0];\r\n\t\tconst error = this.control.errors[firstErrorKey];\r\n\r\n\t\tif (this.control.errors['message']) {\r\n\t\t\treturn this.control.errors['message'];\r\n\t\t}\r\n\t\tif (error?.message) {\r\n\t\t\treturn error.message;\r\n\t\t}\r\n\r\n\t\treturn this.validationMessages[firstErrorKey] || `Invalid input: ${firstErrorKey}`;\r\n\t}\r\n}\r\n","<div class=\"form-field-container\">\r\n <ng-content></ng-content>\r\n @if (shouldShowError()) {\r\n <p-message severity=\"error\" variant=\"simple\" size=\"small\" [text]=\"getErrorMessage()\">\r\n </p-message>\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { FormFieldWrapperComponent } from '../../../form-field-wrapper/form-field-wrapper.component';\r\nimport { FloatLabelModule } from 'primeng/floatlabel'\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner'\r\n\r\ntype SelectValue<T> = T | T[];\r\ntype SelectValueOrNull<T> = SelectValue<T> | null;\r\n\r\n@Component({\r\n\tselector: 'ngp-basic-select',\r\n\timports: [NgSelectModule, FormsModule, CommonModule, FormFieldWrapperComponent, FloatLabelModule, ProgressSpinnerModule],\r\n\ttemplateUrl: './basic-ng-select.component.html',\r\n\tstyleUrl: './basic-ng-select.component.scss',\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => BasicNgSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class BasicNgSelectComponent<T = any> implements ControlValueAccessor {\r\n\toptions = input<T[]>([]);\r\n\tbindLabel = input<string>('');\r\n\tbindValue = input<string>('');\r\n\tplaceholder = input<string>('Select an option');\r\n\tclearable = input<boolean>(true);\r\n\tsearchable = input<boolean>(true);\r\n\tloading = input<boolean>(false);\r\n\tlabel = input<string | null>(null);\r\n\trequired = input<boolean>(true);\r\n\r\n\t// Internal state\r\n\tvalue: SelectValueOrNull<T> = null;\r\n\tdisabled = false;\r\n\r\n\t// ControlValueAccessor callbacks\r\n\tprivate onChange: (value: SelectValueOrNull<T>) => void = () => { };\r\n\tonTouched: () => void = () => { };\r\n\r\n\t// Handle value changes from ng-select\r\n\tonValueChange(value: SelectValueOrNull<T>): void {\r\n\t\tthis.value = value;\r\n\t\tthis.onChange(value);\r\n\t}\r\n\r\n\twriteValue(val: SelectValueOrNull<T>): void {\r\n\t\tthis.value = val;\r\n\t}\r\n\r\n\tregisterOnChange(fn: (val: SelectValueOrNull<T>) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState?(isDisabled: boolean): void {\r\n\t\tthis.disabled = isDisabled;\r\n\t}\r\n\r\n\t// Compare function for ng-select\r\n\tcompareWith = (item: any, selected: any) => {\r\n\t\tconst bindValueKey = this.bindValue();\r\n\r\n\t\t// If no bindValue is set, compare entire objects\r\n\t\tif (!bindValueKey) {\r\n\t\t\treturn item === selected;\r\n\t\t}\r\n\r\n\t\t// Handle null/undefined cases\r\n\t\tif (!item || !selected) {\r\n\t\t\treturn item === selected;\r\n\t\t}\r\n\r\n\t\t// If selected is a primitive (just the id), compare with item's property\r\n\t\tif (typeof selected !== 'object') {\r\n\t\t\treturn item[bindValueKey] === selected;\r\n\t\t}\r\n\r\n\t\t// If both are objects, compare the bindValue property\r\n\t\treturn item[bindValueKey] === selected[bindValueKey];\r\n\t};\r\n}\r\n","<ngp-form-field-wrapper>\r\n <p-floatlabel variant=\"in\">\r\n <ng-select [(ngModel)]=\"value\" [bindLabel]=\"bindLabel()\" [bindValue]=\"bindValue()\" [items]=\"options()\"\r\n [compareWith]=\"compareWith\" [clearable]=\"clearable()\" (change)=\"onValueChange($event)\">\r\n <ng-template ng-loadingspinner-tmp>\r\n <ng-container [ngTemplateOutlet]=\"spinner\" />\r\n </ng-template>\r\n </ng-select>\r\n\r\n @if (label()) {\r\n <label class=\"block mb-2\" [ngClass]=\"{'required-label': required() }\">{{ label() }}</label>\r\n }\r\n </p-floatlabel>\r\n</ngp-form-field-wrapper>\r\n\r\n<ng-template #spinner>\r\n <p-progress-spinner ariaLabel=\"loading\" styleClass=\"text-gray-400\" />\r\n</ng-template>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IdName } from '../../models/common.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class AddressService {\r\n\turl = `/api/v1/records/address`;\r\n\thttp = inject(HttpClient);\r\n\r\n\tgetProvinces(): Observable<IdName[]> {\r\n\t\treturn this.http.get<IdName[]>(`${this.url}/provinces`);\r\n\t}\r\n\r\n\tgetMunicipalities(provinceId: number): Observable<any> {\r\n\t\treturn this.http.get<any>(`${this.url}/municipalities/${provinceId}`);\r\n\t}\r\n\r\n\tgetBarangays(muncipalityId: any, params?: any): Observable<any> {\r\n\t\treturn this.http.get<any>(`${this.url}/barangay/${muncipalityId}`, { params });\r\n\t}\r\n}\r\n","import { Component, effect, forwardRef, inject, input, signal } from '@angular/core';\r\nimport {\r\n\tAbstractControl,\r\n\tControlValueAccessor,\r\n\tFormBuilder,\r\n\tFormGroup,\r\n\tNG_VALIDATORS,\r\n\tNG_VALUE_ACCESSOR,\r\n\tReactiveFormsModule,\r\n\tValidationErrors,\r\n\tValidator\r\n} from '@angular/forms';\r\nimport { RxwebValidators } from '@rxweb/reactive-form-validators';\r\nimport { IdName } from '../../models/common.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormFieldWrapperComponent } from '../form-field-wrapper/form-field-wrapper.component';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { FloatLabelModule } from 'primeng/floatlabel';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { Address, Barangay, City } from '../../models/address.model';\r\nimport { AddressService } from '../../services/address/address.service';\r\n\r\n@Component({\r\n\tselector: 'ngp-fg-address',\r\n\timports: [\r\n\t\tInputTextModule,\r\n\t\tInputNumberModule,\r\n\t\tFloatLabelModule,\r\n\t\tCommonModule,\r\n\t\tReactiveFormsModule,\r\n\t\tFormFieldWrapperComponent,\r\n\t\tNgSelectModule\r\n\t],\r\n\ttemplateUrl: './fg-address.component.html',\r\n\tstyleUrl: './fg-address.component.scss',\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\r\n\t\t\tmulti: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: NG_VALIDATORS,\r\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class FgAddressComponent implements ControlValueAccessor, Validator {\r\n\tshowHeader = input<boolean>(true);\r\n\tisCreateMode = input<boolean>(true);\r\n\tisViewMode = input<boolean>(false);\r\n\r\n\taddressForm!: FormGroup;\r\n\tprovHttp$!: Subscription;\r\n\tcityHttp$!: Subscription;\r\n\tbarangayHttp$!: Subscription;\r\n\tprovinceOptions: IdName[] = [];\r\n\tcityOptions: City[] = [];\r\n\tbarangayOptions: Barangay[] = [];\r\n\r\n\tisDisabled = signal<boolean>(false);\r\n\tprivate pendingAddress: Address | null = null;\r\n\tprivate isInitializing = false;\r\n\tprivate detectedEditMode = false;\r\n\r\n\tprivate onChange: (value: Address | null) => void = () => {};\r\n\tprivate onTouched: () => void = () => {};\r\n\r\n\tprivate readonly addressService = inject(AddressService);\r\n\tprivate readonly fb = inject(FormBuilder);\r\n\r\n\tconstructor() {\r\n\t\tthis.addressForm = this.fb.group({\r\n\t\t\tline1: [null, RxwebValidators.required()],\r\n\t\t\tline2: [null],\r\n\t\t\tbarangay: [null, RxwebValidators.required()],\r\n\t\t\tcity: [null, RxwebValidators.required()],\r\n\t\t\tprovince: [null, RxwebValidators.required()],\r\n\t\t\tcountry: ['Philippines', RxwebValidators.required()],\r\n\t\t\tzipCode: [null, RxwebValidators.required()],\r\n\t\t\tlandmark: [null, RxwebValidators.required()]\r\n\t\t});\r\n\r\n\t\t// Use effect to watch for form value changes\r\n\t\teffect(() => {\r\n\t\t\tif (this.isDisabled()) {\r\n\t\t\t\tthis.addressForm.disable({ emitEvent: false });\r\n\t\t\t} else {\r\n\t\t\t\tthis.addressForm.enable({ emitEvent: false });\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Subscribe to form changes\r\n\t\tthis.addressForm.valueChanges.subscribe((value) => {\r\n\t\t\tthis.onChange(value);\r\n\t\t\tthis.onTouched();\r\n\t\t});\r\n\r\n\t\tthis.loadProvince();\r\n\r\n\t\t// Handle province changes - works for both create and edit mode\r\n\t\tthis.addressForm.get('province')?.valueChanges.subscribe((prov) => {\r\n\t\t\tif (prov && !this.isInitializing) {\r\n\t\t\t\tthis.clearFieldByName('city');\r\n\t\t\t\tthis.clearFieldByName('barangay');\r\n\t\t\t\tthis.cityOptions = [];\r\n\t\t\t\tthis.barangayOptions = [];\r\n\t\t\t\tthis.loadCityByProvinceId(prov.id);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Handle city changes - works for both create and edit mode\r\n\t\tthis.addressForm.get('city')?.valueChanges.subscribe((city) => {\r\n\t\t\tif (city && !this.isInitializing) {\r\n\t\t\t\tthis.clearFieldByName('barangay');\r\n\t\t\t\tthis.barangayOptions = [];\r\n\t\t\t\tthis.loadBarangayByCityId(city.id);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tclearFieldByName(fieldName: string): void {\r\n\t\tthis.addressForm.get(fieldName)?.setValue(null, { emitEvent: false });\r\n\t}\r\n\r\n\tloadProvince(): void {\r\n\t\tthis.provHttp$ = this.addressService.getProvinces().subscribe((res) => {\r\n\t\t\tthis.provinceOptions = res;\r\n\r\n\t\t\t// If we have a pending address to load, process it now\r\n\t\t\tif (this.pendingAddress) {\r\n\t\t\t\tthis.initializeEditMode(this.pendingAddress);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tloadCityByProvinceId(id: number): void {\r\n\t\tthis.cityHttp$ = this.addressService.getMunicipalities(id).subscribe((res) => {\r\n\t\t\tthis.cityOptions = res;\r\n\r\n\t\t\t// Continue initialization if needed\r\n\t\t\tif (this.isInitializing && this.pendingAddress) {\r\n\t\t\t\tthis.setCityFromPending();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tloadBarangayByCityId(id: number): void {\r\n\t\tthis.barangayHttp$ = this.addressService.getBarangays(id).subscribe((res) => {\r\n\t\t\tthis.barangayOptions = res;\r\n\r\n\t\t\t// Continue initialization if needed\r\n\t\t\tif (this.isInitializing && this.pendingAddress) {\r\n\t\t\t\tthis.setBarangayFromPending();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Detects if the address contains data that requires edit mode initialization\r\n\t */\r\n\tprivate isEditModeAddress(address: Address): boolean {\r\n\t\t// Check if any cascading field (province, city, barangay) is a string (name)\r\n\t\t// This indicates data from backend that needs to be matched with dropdown options\r\n\t\treturn (\r\n\t\t\t(typeof address.province === 'string' && address.province !== '') ||\r\n\t\t\t(typeof address.city === 'string' && address.city !== '') ||\r\n\t\t\t(typeof address.barangay === 'string' && address.barangay !== '')\r\n\t\t);\r\n\t}\r\n\r\n\tprivate initializeEditMode(address: Address): void {\r\n\t\tthis.isInitializing = true;\r\n\r\n\t\t// Set non-cascading fields first\r\n\t\tthis.addressForm.patchValue(\r\n\t\t\t{\r\n\t\t\t\tline1: address.line1,\r\n\t\t\t\tline2: address.line2,\r\n\t\t\t\tcountry: address.country || 'Philippines',\r\n\t\t\t\tzipCode: address.zipCode,\r\n\t\t\t\tlandmark: address.landmark\r\n\t\t\t},\r\n\t\t\t{ emitEvent: false }\r\n\t\t);\r\n\r\n\t\t// Find and set province\r\n\t\tif (address.province && typeof address.province === 'string') {\r\n\t\t\tconst provinceItem = this.provinceOptions.find(\r\n\t\t\t\t(p) => p.name.toLowerCase() === address.province?.toLowerCase()\r\n\t\t\t);\r\n\r\n\t\t\tif (provinceItem) {\r\n\t\t\t\tthis.addressForm.get('province')?.setValue(provinceItem, { emitEvent: false });\r\n\t\t\t\tthis.loadCityByProvinceId(provinceItem.id);\r\n\t\t\t} else {\r\n\t\t\t\tthis.completeInitialization();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.completeInitialization();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setCityFromPending(): void {\r\n\t\tif (!this.pendingAddress?.city || typeof this.pendingAddress.city !== 'string') {\r\n\t\t\tthis.completeInitialization();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst cityItem = this.cityOptions.find(\r\n\t\t\t(c) => c.name.toLowerCase() === this.pendingAddress!.city?.toLowerCase()\r\n\t\t);\r\n\r\n\t\tif (cityItem) {\r\n\t\t\tthis.addressForm.get('city')?.setValue(cityItem, { emitEvent: false });\r\n\t\t\tthis.loadBarangayByCityId(cityItem.id);\r\n\t\t} else {\r\n\t\t\tthis.completeInitialization();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setBarangayFromPending(): void {\r\n\t\tif (!this.pendingAddress?.barangay || typeof this.pendingAddress.barangay !== 'string') {\r\n\t\t\tthis.completeInitialization();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst barangayItem = this.barangayOptions.find(\r\n\t\t\t(b) => b.name.toLowerCase() === this.pendingAddress!.barangay?.toLowerCase()\r\n\t\t);\r\n\r\n\t\tif (barangayItem) {\r\n\t\t\tthis.addressForm.get('barangay')?.setValue(barangayItem, { emitEvent: false });\r\n\t\t}\r\n\r\n\t\tthis.completeInitialization();\r\n\t}\r\n\r\n\tprivate completeInitialization(): void {\r\n\t\tthis.isInitializing = false;\r\n\t\tthis.pendingAddress = null;\r\n\t}\r\n\r\n\t// ControlValueAccessor methods\r\n\twriteValue(value: Address | null): void {\r\n\t\tif (value) {\r\n\t\t\t// Auto-detect if this is edit mode based on the address data structure\r\n\t\t\tthis.detectedEditMode = this.isEditModeAddress(value);\r\n\r\n\t\t\tif (this.detectedEditMode) {\r\n\t\t\t\t// Address contains string values (names) - needs initialization\r\n\t\t\t\tthis.pendingAddress = value;\r\n\r\n\t\t\t\t// If provinces are already loaded, start initialization\r\n\t\t\t\tif (this.provinceOptions.length > 0) {\r\n\t\t\t\t\tthis.initializeEditMode(value);\r\n\t\t\t\t}\r\n\t\t\t\t// Otherwise, it will be triggered when provinces load\r\n\t\t\t} else {\r\n\t\t\t\t// Create mode or already has proper objects\r\n\t\t\t\tthis.addressForm.patchValue(value, { emitEvent: false });\r\n\r\n\t\t\t\t// Load cascading data if IDs are present\r\n\t\t\t\tconst province = value.province;\r\n\t\t\t\tif (province && typeof province === 'object' && 'id' in province) {\r\n\t\t\t\t\tthis.loadCityByProvinceId((province as any).id);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst city = value.city;\r\n\t\t\t\tif (city && typeof city === 'object' && 'id' in city) {\r\n\t\t\t\t\tthis.loadBarangayByCityId((city as any).id);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.addressForm.reset({ country: 'Philippines' }, { emitEvent: false });\r\n\t\t}\r\n\t}\r\n\r\n\tregisterOnChange(fn: (value: Address | null) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState(isDisabled: boolean): void {\r\n\t\tthis.isDisabled?.set(isDisabled);\r\n\t\tif (isDisabled) {\r\n\t\t\tthis.addressForm.disable();\r\n\t\t} else {\r\n\t\t\tthis.addressForm.enable();\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(control: AbstractControl): ValidationErrors | null {\r\n\t\treturn this.addressForm?.valid ? null : { invalidAddress: true };\r\n\t}\r\n}\r\n","@if (showHeader()) {\r\n\t<h2 class=\"text-xl font-semibold mb-4\" [ngClass]=\"{ 'px-4': isDisabled() }\">Address</h2>\r\n}\r\n\r\n@if (isViewMode()) {\r\n\t@let address = addressForm.value;\r\n\r\n\t<div class=\"grid gap-3 p-4\">\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"country\">Country:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.country || 'Philippines' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"province\">Province:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.province?.name || address.province || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"city\">City/Municipality:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.city?.name || address.city || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"barangay\">Barangay:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\r\n\t\t\t\taddress.barangay?.name || address.barangay || ''\r\n\t\t\t}}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line1\">Line 1:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line1 || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line2\">Line 2:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line2 || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"zipCode\">Zip Code:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.zipCode || '' }}</p>\r\n\t\t</div>\r\n\t\t<div class=\"flex items-center justify-between py-3\">\r\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"landmark\">Nearest Landmark:</label>\r\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.landmark || '' }}</p>\r\n\t\t</div>\r\n\t</div>\r\n} @else {\r\n\t<form [formGroup]=\"addressForm\">\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"country\" formControlName=\"country\" class=\"w-full\" />\r\n\t\t\t\t\t\t<label for=\"country\" class=\"block mb-2 required-label\">Country</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"province\"\r\n\t\t\t\t\t\t\t[items]=\"provinceOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"provHttp$ && !provHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\t\t\t\t\t\t<label for=\"province\" class=\"block mb-2 required-label\">Province</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"city\"\r\n\t\t\t\t\t\t\t[items]=\"cityOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"cityHttp$ && !cityHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\t\t\t\t\t\t<label for=\"city\" class=\"block mb-2 required-label\">City/Municipality</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\tformControlName=\"barangay\"\r\n\t\t\t\t\t\t\t[items]=\"barangayOptions\"\r\n\t\t\t\t\t\t\t[loading]=\"barangayHttp$ && !barangayHttp$.closed\"\r\n\t\t\t\t\t\t\tbindLabel=\"name\" />\r\n\r\n\t\t\t\t\t\t<label for=\"barangay\" class=\"block mb-2 required-label\">Barangay</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<div>\r\n\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t<label for=\"line1\" class=\"block mb-2 required-label\">Line 1</label>\r\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line1\" formControlName=\"line1\" class=\"w-full\" />\r\n\t\t\t\t</p-floatlabel>\r\n\t\t\t</ngp-form-field-wrapper>\r\n\t\t</div>\r\n\r\n\t\t<div>\r\n\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t<label for=\"line2\" class=\"block mb-2\">Line 2</label>\r\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line2\" formControlName=\"line2\" class=\"w-full\" />\r\n\t\t\t\t</p-floatlabel>\r\n\t\t\t</ngp-form-field-wrapper>\r\n\t\t</div>\r\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<p-inputnumber\r\n\t\t\t\t\t\t\t[inputId]=\"'zipCode'\"\r\n\t\t\t\t\t\t\tformControlName=\"zipCode\"\r\n\t\t\t\t\t\t\tstyleClass=\"w-full\"\r\n\t\t\t\t\t\t\t[useGrouping]=\"false\" />\r\n\t\t\t\t\t\t<label for=\"zipCode\" class=\"block mb-2 required-label\">Zip Code</label>\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<ngp-form-field-wrapper>\r\n\t\t\t\t\t<p-floatlabel variant=\"in\">\r\n\t\t\t\t\t\t<label for=\"landmark\" class=\"block mb-2 required-label\">Nearest Landmark</label>\r\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"landmark\" formControlName=\"landmark\" class=\"w-full\" />\r\n\t\t\t\t\t</p-floatlabel>\r\n\t\t\t\t</ngp-form-field-wrapper>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</form>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n\tComponent,\r\n\tcomputed,\r\n\tContentChild,\r\n\teffect,\r\n\tinject,\r\n\tinput,\r\n\toutput,\r\n\tsignal,\r\n\tTemplateRef,\r\n\tViewChild\r\n} from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { Table, TableModule, TablePageEvent } from 'primeng/table';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { TableColumn } from '../../../models/table-column.model';\r\n\r\n@Component({\r\n\tselector: 'ngp-data-table',\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tFormsModule,\r\n\t\tReactiveFormsModule,\r\n\t\tTableModule,\r\n\t\tButtonModule,\r\n\t\tInputTextModule,\r\n\t\tConfirmDialogModule,\r\n\t\tDialogModule,\r\n\t\tTooltipModule,\r\n\t\tToastModule,\r\n\t\tToolbarModule,\r\n\t\tSkeletonModule,\r\n\t\tPopoverModule\r\n\t],\r\n\ttemplateUrl: './data-table.component.html',\r\n\tstyleUrl: './data-table.component.scss',\r\n\tproviders: [ConfirmationService, MessageService]\r\n})\r\nexport class DataTableComponent<T extends Record<string, any>> {\r\n\tdataSource = input<T[]>([]);\r\n\tcolumns = input<TableColumn[]>([]);\r\n\tloading = input<boolean>(false);\r\n\tpageSize = input<number>(10);\r\n\ttotalElements = input<number>(0);\r\n\tcurrentPage = input<number>(0);\r\n\tshowDefaultActions = input<boolean>(true);\r\n\temptyMessage = input<string>('No data available.');\r\n\thasDeleteAction = input<boolean>(true);\r\n\thasEditAction = input<boolean>(true);\r\n\tcanEdit = input<(row: unknown) => boolean>(() => true);\r\n\thasViewAction = input<boolean>(true);\r\n\tentityName = input<string>('');\r\n\tisPaginated = input<boolean>(true);\r\n\tshowCustomAction = input<boolean>(false);\r\n\tshowRowNumbers = input<boolean>(false);\r\n\trowNumberHeader = input<string>('');\r\n\r\n\t// Internal signals\r\n\tdata = signal<T[]>([]);\r\n\tfilteredData = signal<T[]>([]);\r\n\tdialogVisible = signal<boolean>(false);\r\n\tdialogTitle = signal<string>('Add Item');\r\n\teditingItem = signal<T | null>(null);\r\n\r\n\t// Custom event emitters\r\n\tadd = output<T>();\r\n\tedit = output<T>();\r\n\tdeleteAction = output<T>();\r\n\tview = output<T>();\r\n\tpageChange = output<TablePageEvent>();\r\n\tsortChange = output<{ sort: string; order: string }>();\r\n\r\n\tactions = computed(() => [this.hasViewAction(), this.hasEditAction(), this.hasDeleteAction()]);\r\n\tactionsLength = computed(() => this.actions().filter((action) => !!action).length);\r\n\tactionItems = computed(() => {\r\n\t\treturn [\r\n\t\t\t{\r\n\t\t\t\tlabel: 'View ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasViewAction(),\r\n\t\t\t\ticon: 'pi-search'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tlabel: 'Update ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasEditAction(),\r\n\t\t\t\ticon: 'pi-pen-to-square',\r\n\t\t\t\tshouldShow: (item: unknown) => this.canEdit()(item)\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tlabel: 'Delete ' + this.entityName(),\r\n\t\t\t\tvisible: this.hasDeleteAction(),\r\n\t\t\t\ticon: 'pi-trash'\r\n\t\t\t}\r\n\t\t];\r\n\t});\r\n\r\n\t// Content children for custom templates\r\n\t@ContentChild('formTemplate') formTemplate?: TemplateRef<unknown>;\r\n\t@ViewChild('dt') table?: Table;\r\n\r\n\t// Services\r\n\tprivate readonly http = inject(HttpClient);\r\n\tprivate readonly confirmationService = inject(ConfirmationService);\r\n\tprivate readonly messageService = inject(MessageService);\r\n\r\n\t// Column filters for individual column filtering\r\n\tprivate readonly filterValues: Record<string, string> = {};\r\n\r\n\t// For custom cell templates\r\n\tcustomTemplates = new Map<string, TemplateRef<unknown>>();\r\n\r\n\tconstructor() {\r\n\t\t// Effect to update filtered data when raw data changes\r\n\t\teffect(() => {\r\n\t\t\tconst sourceData = this.dataSource();\r\n\t\t\tthis.data.set([...sourceData]);\r\n\t\t});\r\n\t}\r\n\r\n\t// Register a custom template for a specific column\r\n\tregisterTemplate(field: string, template: TemplateRef<unknown>): void {\r\n\t\tthis.customTemplates.set(field, template);\r\n\t}\r\n\r\n\thandlePageChange(event: TablePageEvent) {\r\n\t\tthis.pageChange.emit(event);\r\n\t}\r\n\r\n\thandleSort(event: { field: string; order: number }) {\r\n\t\tconst column = this.columns().find((col) => col.field === event.field);\r\n\t\tconst actualSortField = column?.sortField ?? event.field;\r\n\t\tconst order = event.order === 1 ? 'ASC' : 'DESC';\r\n\r\n\t\tthis.sortChange.emit({\r\n\t\t\tsort: actualSortField,\r\n\t\t\torder\r\n\t\t});\r\n\t}\r\n\r\n\tresetTableSort(): void {\r\n\t\tif (this.table) {\r\n\t\t\tthis.table.sortOrder = 0;\r\n\t\t\tthis.table.sortField = null;\r\n\t\t\tthis.table.tableService.onSort(null);\r\n\t\t}\r\n\t}\r\n\r\n\t// Helper to safely get nested property values using dot notation\r\n\tgetItemValue(item: T, field: string, column?: TableColumn): unknown {\r\n\t\tif (column && typeof column.render === 'function') {\r\n\t\t\treturn column.render(item);\r\n\t\t}\r\n\t\treturn field\r\n\t\t\t.split('.')\r\n\t\t\t.reduce((obj: unknown, key) => obj?.[key as keyof typeof obj] ?? null, item as unknown);\r\n\t}\r\n\r\n\tperFormActionFromPopover(item: T, actionType: string): void {\r\n\t\tif (actionType.includes('View')) {\r\n\t\t\tthis.view.emit(item);\r\n\t\t} else if (actionType.includes('Update')) {\r\n\t\t\tthis.edit.emit(item);\r\n\t\t} else if (actionType.includes('Delete')) {\r\n\t\t\tthis.deleteAction.emit(item);\r\n\t\t}\r\n\t}\r\n}\r\n","<div class=\"card\">\r\n\t<p-table\r\n\t\t#dt\r\n\t\t[value]=\"data()\"\r\n\t\t[paginator]=\"isPaginated()\"\r\n\t\t[rows]=\"pageSize()\"\r\n\t\t[rowsPerPageOptions]=\"[5, 10, 25, 50]\"\r\n\t\t[rowHover]=\"true\"\r\n\t\t[loading]=\"loading()\"\r\n\t\t[showLoader]=\"false\"\r\n\t\t[scrollable]=\"true\"\r\n\t\tstyleClass=\"p-datatable-sm\"\r\n\t\t[totalRecords]=\"totalElements()\"\r\n\t\t[lazy]=\"isPaginated()\"\r\n\t\t[first]=\"currentPage() * pageSize()\"\r\n\t\tpaginatorDropdownAppendTo=\"body\"\r\n\t\t(onPage)=\"handlePageChange($event)\"\r\n\t\t(onSort)=\"handleSort($event)\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<tr>\r\n\t\t\t\t@if (showRowNumbers()) {\r\n\t\t\t\t\t<th class=\"text-left !font-bold !text-gray-500 !w-1\" scope=\"col\">{{\r\n\t\t\t\t\t\trowNumberHeader()\r\n\t\t\t\t\t}}</th>\r\n\t\t\t\t}\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<th\r\n\t\t\t\t\t\t[pSortableColumn]=\"column.sortable ? column.field : undefined\"\r\n\t\t\t\t\t\tclass=\"text-left !font-bold !text-gray-500\"\r\n\t\t\t\t\t\t[ngClass]=\"{ '!text-center': column.align === 'center' }\"\r\n\t\t\t\t\t\tscope=\"col\"\r\n\t\t\t\t\t\t[style]=\"{ width: column.width || 'auto' }\">\r\n\t\t\t\t\t\t{{ column.header }}\r\n\t\t\t\t\t\t@if (column.sortable) {\r\n\t\t\t\t\t\t\t<p-sortIcon [field]=\"column.field\"></p-sortIcon>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</th>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<th class=\"!w-32 !text-center !font-bold !text-gray-500\" scope=\"col\">Actions</th>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template pTemplate=\"body\" let-item let-rowIndex=\"rowIndex\">\r\n\t\t\t<tr>\r\n\t\t\t\t@if (showRowNumbers()) {\r\n\t\t\t\t\t<td class=\"!w-1 text-center\">\r\n\t\t\t\t\t\t{{ rowIndex + 1 }}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td [ngClass]=\"{ '!text-center': column.align === 'center' }\">\r\n\t\t\t\t\t\t@if (customTemplates && customTemplates.get(column.field)) {\r\n\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get(column.field)!\"\r\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: column.field }\">\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t{{ getItemValue(item, column.field, column) }}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td class=\"\">\r\n\t\t\t\t\t\t<div class=\"flex justify-center gap-2\">\r\n\t\t\t\t\t\t\t@if (showDefaultActions() && actionsLength() < 2 && !showCustomAction()) {\r\n\t\t\t\t\t\t\t\t<!-- Inline buttons for less than 2 standard actions and no custom action -->\r\n\t\t\t\t\t\t\t\t@if (hasViewAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'View'\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"view.emit(item)\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t@if (hasEditAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"edit.emit(item)\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Update'\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t@if (hasDeleteAction()) {\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-danger\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"deleteAction.emit(item)\"\r\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Delete'\"></button>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} @else if (!showDefaultActions() && showCustomAction()) {\r\n\t\t\t\t\t\t\t\t<!-- Only custom action, no popover needed -->\r\n\t\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\r\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<!-- Popover menu for 2+ standard actions or when combining with custom action -->\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tsize=\"small\"\r\n\t\t\t\t\t\t\t\t\t[text]=\"true\"\r\n\t\t\t\t\t\t\t\t\tpButton\r\n\t\t\t\t\t\t\t\t\ticon=\"pi pi-ellipsis-h\"\r\n\t\t\t\t\t\t\t\t\tclass=\"p-button-outlined p-button-secondary\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"po.toggle($event)\"></button>\r\n\t\t\t\t\t\t\t\t<p-popover #po styleClass=\"!min-w-40\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"!font-semibold !text-gray-500 block mb-2\">Actions</span>\r\n\t\t\t\t\t\t\t\t\t<ul class=\"list-none p-0 m-0 flex flex-col\">\r\n\t\t\t\t\t\t\t\t\t\t@if (showDefaultActions()) {\r\n\t\t\t\t\t\t\t\t\t\t\t@for (actionItem of actionItems(); track $index) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t@if (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tactionItem.visible &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(!actionItem.shouldShow || actionItem.shouldShow(item))\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"flex items-center gap-2 px-2 py-3 hover:bg-emphasis cursor-pointer rounded-border\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"perFormActionFromPopover(item, actionItem.label)\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"pi\" [ngClass]=\"actionItem.icon\"></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"font-medium\">{{ actionItem.label }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- Custom action template in popover -->\r\n\t\t\t\t\t\t\t\t\t\t@if (showCustomAction() && customTemplates.get('customAction')) {\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\r\n\t\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t</p-popover>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template #loadingbody>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t@for (column of columns(); track column.field) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-skeleton />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\r\n\t\t<ng-template pTemplate=\"emptymessage\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td [attr.colspan]=\"columns().length + 1\" class=\"text-center p-4\">{{ emptyMessage() }}</td>\r\n\t\t\t</tr>\r\n\t\t</ng-template>\r\n\t</p-table>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, forwardRef, OnInit, signal } from '@angular/core';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { PaginatedRequest, PaginatedResponse } from '../../../../models/paginated.model';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\nimport { FloatLabelModule } from 'primeng/floatlabel';\r\nimport {\r\n\tControlValueAccessor,\r\n\tFormsModule,\r\n\tNG_VALUE_ACCESSOR,\r\n\tNG_VALIDATORS,\r\n\tAbstractControl,\r\n\tValidationErrors,\r\n\tValidators\r\n} from '@angular/forms';\r\n\r\ntype SelectValue<T> = T | T[];\r\ntype SelectValueOrNull<T> = SelectValue<T> | null;\r\n\r\n@Component({\r\n\tselector: 'ngp-dynamic-select',\r\n\ttemplateUrl: './dynamic-select.component.html',\r\n\timports: [NgSelectModule, FormsModule, CommonModule, FloatLabelModule],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: NG_VALUE_ACCESSOR,\r\n\t\t\tuseExisting: forwardRef(() => DynamicNgSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t},\r\n\t\t{\r\n\t\t\tprovide: NG_VALIDATORS,\r\n\t\t\tuseExisting: forwardRef(() => DynamicNgSelectComponent),\r\n\t\t\tmulti: true\r\n\t\t}\r\n\t]\r\n})\r\nexport class DynamicNgSelectComponent<T> implements ControlValueAccessor, Validators, OnInit {\r\n\t@Input() apiUrl!: (params?: PaginatedRequest) => Observable<PaginatedResponse<T>>;\r\n\t@Input() formatOptions?: (items: T[]) => T[];\r\n\r\n\t@Input() bindLabel = 'description';\r\n\t@Input() bindValue = 'id';\r\n\t@Input() placeholder = 'Select';\r\n\t@Input() isRequired = false;\r\n\t@Input() options: T[] = [];\r\n\r\n\tvalue!: number | string | null;\r\n\tdisabled = false;\r\n\r\n\ttableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\r\n\r\n\tprivate onChange = (_: any) => {}; // eslint-disable-line\r\n\tprivate onTouched = () => {}; // eslint-disable-line\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.loadOptions();\r\n\t}\r\n\r\n\tprivate loadOptions(): void {\r\n\t\tif (!this.apiUrl) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.getOptions();\r\n\t}\r\n\r\n\tgetOptions(): void {\r\n\t\tthis.apiUrl(this.tableParams())\r\n\t\t\t.pipe(\r\n\t\t\t\ttap((items) => {\r\n\t\t\t\t\tif (items.results) {\r\n\t\t\t\t\t\tconst values = this.formatOptions ? this.formatOptions(items.results) : items.results;\r\n\t\t\t\t\t\tthis.options = [...this.options, ...values];\r\n\r\n\t\t\t\t\t\tif (items.hasNextPage) {\r\n\t\t\t\t\t\t\tthis.tableParams.update((param) => ({ ...param, page: param.page + 1 }));\r\n\t\t\t\t\t\t\tthis.getOptions();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.options = items as unknown as T[];\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\t}\r\n\r\n\twriteValue(value: string | number): void {\r\n\t\tthis.value = value;\r\n\t}\r\n\r\n\tregisterOnChange(fn: (val: SelectValueOrNull<T>) => void): void {\r\n\t\tthis.onChange = fn;\r\n\t}\r\n\r\n\tregisterOnTouched(fn: () => void): void {\r\n\t\tthis.onTouched = fn;\r\n\t}\r\n\r\n\tsetDisabledState(isDisabled: boolean): void {\r\n\t\tthis.disabled = isDisabled;\r\n\t}\r\n\r\n\tonValueChange(value: any): void {\r\n\t\tif (!value) {\r\n\t\t\tthis.value = null;\r\n\t\t\tthis.onChange(null);\r\n\t\t} else {\r\n\t\t\tthis.value = value[this.bindValue];\r\n\t\t\tthis.onChange(value[this.bindValue]);\r\n\t\t}\r\n\t\tthis.onTouched();\r\n\t}\r\n\r\n\tvalidate(control: AbstractControl): ValidationErrors | null {\r\n\t\t// eslint-disable-line\r\n\t\tif (this.isRequired && (this.value === null || this.value === undefined || this.value === '')) {\r\n\t\t\treturn { required: true };\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n}\r\n","<p-floatlabel variant=\"in\">\r\n <ng-select [items]=\"options\" [bindLabel]=\"bindLabel\" [bindValue]=\"bindValue\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"value\" [clearable]=\"true\" (change)=\"onValueChange($event)\">\r\n </ng-select>\r\n\r\n <label [class.required-label]=\"isRequired\">{{ placeholder }}</label>\r\n</p-floatlabel>","import { Component, input, Input, output } from '@angular/core';\r\nimport { DrawerModule } from 'primeng/drawer';\r\n\r\n@Component({\r\n\tselector: 'ngp-dynamic-drawer',\r\n\timports: [DrawerModule],\r\n\ttemplateUrl: './dynamic-drawer.component.html',\r\n\tstyleUrl: './dynamic-drawer.component.scss'\r\n})\r\nexport class DynamicDrawerComponent {\r\n\tposition = input<'left' | 'right'>('right');\r\n\theader = input<string>('Information');\r\n\tstyleClass = input<string>('!w-[90vw] md:!w-[35vw] !p-4');\r\n\r\n\thide = output<boolean>();\r\n\r\n\t@Input() isOpen = false;\r\n}\r\n","<p-drawer\r\n\t[header]=\"header()\"\r\n\t[(visible)]=\"isOpen\"\r\n\tposition=\"right\"\r\n\t[styleClass]=\"styleClass()\"\r\n\t(onHide)=\"hide.emit(false)\"\r\n\t[dismissible]=\"'false'\"\r\n\t[blockScroll]=\"true\">\r\n\t<div class=\"content-wrapper !h-full\">\r\n\t\t<ng-content></ng-content>\r\n\t</div>\r\n</p-drawer>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, input } from '@angular/core';\r\nimport { DividerModule } from 'primeng/divider';\r\nimport { map, share, timer } from 'rxjs';\r\n\r\n@Component({\r\n\tselector: 'ngp-date-clock',\r\n\timports: [CommonModule, DividerModule],\r\n\ttemplateUrl: './date-clock.component.html',\r\n\tstyleUrl: './date-clock.component.scss'\r\n})\r\nexport class DateClockComponent {\r\n\tstyleClass = input<string>('');\r\n\r\n\trxDate = new Date();\r\n\r\n\tconstructor() {\r\n\t\tthis.initClock();\r\n\t}\r\n\r\n\tinitClock(): void {\r\n\t\ttimer(0, 1000)\r\n\t\t\t.pipe(\r\n\t\t\t\tmap(() => new Date()),\r\n\t\t\t\tshare()\r\n\t\t\t)\r\n\t\t\t.subscribe((time) => {\r\n\t\t\t\tthis.rxDate = time;\r\n\t\t\t});\r\n\t}\r\n}\r\n","<div class=\"flex items-center gap-2\">\r\n\t<div\r\n\t\tclass=\"self-start rounded-lg border border-sky-200 px-4 py-1 flex flex-col justify-center items-center bg-sky-50\"\r\n\t\t[ngClass]=\"styleClass()\">\r\n\t\t<span class=\"text-sm text-gray-500\">{{ rxDate | date: 'MMM' }}</span>\r\n\t\t<span class=\"font-bold text-xl\">{{ rxDate | date: 'dd' }}</span>\r\n\t</div>\r\n\t<div class=\"flex flex-col\">\r\n\t\t<div class=\"text-md font-bold\">Today</div>\r\n\t\t<span class=\"text-sm text-gray-400 font-medium\">\r\n\t\t\t{{ rxDate | date: 'hh' }}:{{ rxDate | date: 'mm' }} {{ rxDate | date: 'a' }}\r\n\t\t</span>\r\n\t</div>\r\n</div>\r\n","export class PaginatedRequest {\r\n\tpage!: number;\r\n\tsize!: number;\r\n\tsort?: string | null;\r\n\t[key: string]: any;\r\n}\r\n\r\nexport interface PaginatedResponse<T> {\r\n\thasNextPage: boolean;\r\n\ttotalElements: number;\r\n\tresults: T[];\r\n\tcurrentPage: number;\r\n\tpageSize: number;\r\n}\r\n","import { computed, effect, inject, Injectable, Injector, signal, untracked } from '@angular/core';\r\nimport { catchError, finalize, Observable, of, shareReplay } from 'rxjs';\r\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\r\nimport { PaginatedRequest, PaginatedResponse } from '../models/paginated.model';\r\nimport { ActionType, ApiOperations } from '../types/api-operations.type';\r\n\r\n@UntilDestroy()\r\n@Injectable()\r\nexport abstract class CrudAbstractComponent<\r\n\tT,\r\n\tCreateDto = Partial<T>,\r\n\tUpdateDto = Partial<T>,\r\n\tIdType = string | number\r\n> {\r\n\t// State signals\r\n\tprivate readonly sourceSignal = signal<Observable<T | T[]> | null>(null);\r\n\tprivate readonly loadingSignal = signal<boolean>(false);\r\n\tprivate readonly errorSignal = signal<Error | null>(null);\r\n\tprivate readonly actionSignal = signal<ActionType | null>(null);\r\n\tprivate readonly firstLoadSignal = signal<boolean>(true);\r\n\tprivate readonly showFormSignal = signal<boolean>(false);\r\n\tprivate readonly formActionSignal = signal<'Create' | 'Update' | 'View' | null>(null);\r\n\tprotected readonly dataSignal = signal<T | T[] | null>(null);\r\n\r\n\tpublic filters = signal<Record<string, unknown> | null>(null);\r\n\tpublic tableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\r\n\tpublic requestParams = computed(() => ({\r\n\t\t...this.filters(),\r\n\t\t...this.tableParams()\r\n\t}));\r\n\r\n\t// Injections\r\n\tprivate readonly injector = inject(Injector);\r\n\r\n\t// Public interface\r\n\tpublic readonly data = this.dataSignal.asReadonly();\r\n\tpublic readonly isLoading = this.loadingSignal.asReadonly();\r\n\tpublic readonly error = this.errorSignal.asReadonly();\r\n\tpublic readonly currentAction = this.actionSignal.asReadonly();\r\n\tpublic readonly isFirstLoad = this.firstLoadSignal.asReadonly();\r\n\tpublic readonly formAction = this.formActionSignal.asReadonly();\r\n\r\n\tpublic readonly isFormVisible = computed(() => this.showFormSignal());\r\n\tpublic readonly safeDataSource = computed(() => {\r\n\t\tconst rawData = this.dataSignal();\r\n\t\tconst isLoading = this.loadingSignal();\r\n\r\n\t\tinterface Page<T> {\r\n\t\t\tresults: T[];\r\n\t\t\thasNextPage: boolean;\r\n\t\t\ttotalElements: number;\r\n\t\t\tpageSize: number;\r\n\t\t\tcurrentPage: number;\r\n\t\t}\r\n\r\n\t\t// Default empty response\r\n\t\tconst defaultResponse = {\r\n\t\t\thasNextPage: false,\r\n\t\t\ttotalElements: 0,\r\n\t\t\tresults: [] as T[],\r\n\t\t\tcurrentPage: 0,\r\n\t\t\tpageSize: 10\r\n\t\t};\r\n\r\n\t\tif (!rawData || isLoading) return defaultResponse;\r\n\r\n\t\tconst isPaginatedResponse = (obj: unknown): obj is Page<T> => {\r\n\t\t\treturn (\r\n\t\t\t\tobj !== null &&\r\n\t\t\t\ttypeof obj === 'object' &&\r\n\t\t\t\t'results' in obj &&\r\n\t\t\t\tArray.isArray(obj.results) &&\r\n\t\t\t\t'totalElements' in obj &&\r\n\t\t\t\ttypeof obj.totalElements === 'number'\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\t// Handler for Paginated Response\r\n\t\tif (typeof rawData === 'object' && isPaginatedResponse(rawData)) {\r\n\t\t\treturn {\r\n\t\t\t\tresults: [...rawData.results],\r\n\t\t\t\ttotalElements: rawData.totalElements,\r\n\t\t\t\tcurrentPage: rawData.currentPage,\r\n\t\t\t\tpageSize: rawData.pageSize,\r\n\t\t\t\thasNextPage: rawData.hasNextPage\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Handle array case\r\n\t\tif (Array.isArray(rawData)) {\r\n\t\t\treturn {\r\n\t\t\t\t...defaultResponse,\r\n\t\t\t\ttotalElements: rawData.length,\r\n\t\t\t\tresults: [...rawData],\r\n\t\t\t\tpageSize: rawData.length // For arrays, we typically return all elements\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Handle single object case\r\n\t\treturn {\r\n\t\t\t...defaultResponse,\r\n\t\t\ttotalElements: 1,\r\n\t\t\tresults: [rawData],\r\n\t\t\tpageSize: 1\r\n\t\t};\r\n\t});\r\n\r\n\t/**\r\n\t * Provides direct access to raw list data without pagination wrapper\r\n\t * Returns an empty array if data is not available or not an array\r\n\t */\r\n\tpublic readonly rawList = computed<T[]>(() => {\r\n\t\tconst rawData = this.data();\r\n\r\n\t\tif (!rawData || this.isLoading()) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\t// If it's already an array, return it\r\n\t\tif (Array.isArray(rawData)) {\r\n\t\t\treturn [...rawData];\r\n\t\t}\r\n\r\n\t\t// If it's a paginated response with a results property that's an array\r\n\t\tif (typeof rawData === 'object' && 'results' in rawData && Array.isArray(rawData.results)) {\r\n\t\t\treturn [...rawData.results];\r\n\t\t}\r\n\r\n\t\t// If it's a single object, return it as an array with one item\r\n\t\tif (typeof rawData === 'object' && !('results' in rawData)) {\r\n\t\t\treturn [rawData as T];\r\n\t\t}\r\n\r\n\t\t// Default fallback\r\n\t\treturn [];\r\n\t});\r\n\r\n\t// Usage in your component:\r\n\t// const items = this.rawList();\r\n\r\n\t// Current operations state\r\n\tprivate currentOperations?: ApiOperations<T, CreateDto, UpdateDto, IdType>;\r\n\tprivate currentParams?: Record<string, unknown>;\r\n\r\n\t// Effect to handle Observable subscriptions\r\n\tprivate readonly dataEffect = effect(\r\n\t\t() => {\r\n\t\t\tconst obs = this.sourceSignal();\r\n\t\t\tif (!obs) {\r\n\t\t\t\tuntracked(() => this.dataSignal.set(null));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tuntracked(() => {\r\n\t\t\t\tthis.loadingSignal.set(true);\r\n\t\t\t\tthis.errorSignal.set(null);\r\n\r\n\t\t\t\tconst sub = obs\r\n\t\t\t\t\t.pipe(\r\n\t\t\t\t\t\tshareReplay(1),\r\n\t\t\t\t\t\tcatchError((err) => {\r\n\t\t\t\t\t\t\tthis.errorSignal.set(err);\r\n\t\t\t\t\t\t\treturn of(null);\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tfinalize(() => this.loadingSignal.set(false))\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.subscribe((value) => {\r\n\t\t\t\t\t\tthis.dataSignal.set(value);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\treturn () => sub.unsubscribe();\r\n\t\t\t});\r\n\t\t},\r\n\t\t{ injector: this.injector }\r\n\t);\r\n\r\n\t/**\r\n\t * Initialize with dynamic service operations\r\n\t */\r\n\tprotected initService(operations: ApiOperations<T, CreateDto, UpdateDto, IdType>): void {\r\n\t\tthis.currentOperations = operations;\r\n\t}\r\n\r\n\t/**\r\n\t * GET data\r\n\t */\r\n\tprotected loadData(params?: Record<string, unknown>): void {\r\n\t\tif (!this.currentOperations?.get) return;\r\n\r\n\t\tthis.executeOperation('get', () => this.currentOperations!.get!(params), params);\r\n\r\n\t\tthis.firstLoadSignal.set(false);\r\n\t}\r\n\r\n\t/**\r\n\t * GET data by ID\r\n\t */\r\n\tprotected getById(\r\n\t\tid: IdType,\r\n\t\tparams?: Record<string, unknown>\r\n\t): Observable<T | T[] | PaginatedResponse<T> | null> {\r\n\t\tif (!this.currentOperations?.getById) return of(null);\r\n\r\n\t\treturn this.executeOperation('get', () => this.currentOperations!.getById!(id, params));\r\n\t}\r\n\r\n\t/**\r\n\t * CREATE data\r\n\t */\r\n\tprotected createData(data: CreateDto): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.create) return of(null);\r\n\r\n\t\treturn this.executeOperation('create', () => this.currentOperations!.create!(data));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE data\r\n\t */\r\n\tprotected updateData(data: UpdateDto): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.update) return of(null);\r\n\r\n\t\treturn this.executeOperation('update', () => this.currentOperations!.update!(data));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE data by ID\r\n\t */\r\n\tprotected updateById(id: IdType, data: Partial<UpdateDto>): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.updateById) return of(null);\r\n\r\n\t\treturn this.executeOperation('updateById', () => this.currentOperations!.updateById!(id, data));\r\n\t}\r\n\r\n\t/**\r\n\t * DELETE data\r\n\t */\r\n\tprotected deleteData(id: IdType): Observable<void | null> {\r\n\t\tif (!this.currentOperations?.delete) return of(null);\r\n\r\n\t\treturn this.executeOperation('delete', () => this.currentOperations!.delete!(id));\r\n\t}\r\n\r\n\t/**\r\n\t * UPDATE status\r\n\t */\r\n\tprotected updateStatus(id: IdType, status: boolean): Observable<T | null> {\r\n\t\tif (!this.currentOperations?.updateStatus) return of(null);\r\n\r\n\t\treturn this.executeOperation(\r\n\t\t\t'update', // You can reuse 'update' action or add a new one like 'updateStatus'\r\n\t\t\t() => this.currentOperations!.updateStatus!(id, status)\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * SHOW/HIDE form\r\n\t * @param show Whether to show or hide the form\r\n\t */\r\n\tprotected showForm(show: boolean): void {\r\n\t\tthis.showFormSignal.set(show);\r\n\t}\r\n\r\n\t/**\r\n\t * Update form action (create/edit)\r\n\t * @param action The action to set for the form\r\n\t */\r\n\tprotected updateFormAction(action: string): void {\r\n\t\tthis.formActionSignal.set(action as 'Create' | 'Update' | null);\r\n\t}\r\n\r\n\t/**\r\n\t * Shared operation execution logic\r\n\t */\r\n\tprivate executeOperation<R>(\r\n\t\taction: ActionType,\r\n\t\toperation: () => Observable<R>,\r\n\t\tparams?: Record<string, unknown>\r\n\t): Observable<R | null> {\r\n\t\tthis.errorSignal.set(null);\r\n\t\tthis.loadingSignal.set(true);\r\n\t\tthis.actionSignal.set(action);\r\n\r\n\t\tif (action === 'get') {\r\n\t\t\tthis.currentParams = params;\r\n\t\t}\r\n\r\n\t\tconst operation$ = operation().pipe(\r\n\t\t\tuntilDestroyed(this),\r\n\t\t\tcatchError((err) => {\r\n\t\t\t\tthis.errorSignal.set(err);\r\n\t\t\t\treturn of(null);\r\n\t\t\t}),\r\n\t\t\tfinalize(() => {\r\n\t\t\t\tthis.loadingSignal.set(false);\r\n\t\t\t\tthis.actionSignal.set(null);\r\n\t\t\t}),\r\n\t\t\tshareReplay(1)\r\n\t\t);\r\n\r\n\t\tif (action === 'get') {\r\n\t\t\tthis.sourceSignal.set(operation$ as Observable<T | T[]>);\r\n\t\t} else {\r\n\t\t\toperation$.subscribe(() => {\r\n\t\t\t\tif (this.currentOperations?.get) {\r\n\t\t\t\t\tthis.refresh();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn operation$;\r\n\t}\r\n\r\n\t/**\r\n\t * Refresh current data\r\n\t */\r\n\tprotected refresh(): void {\r\n\t\tif (this.currentOperations?.get && this.currentParams) {\r\n\t\t\tthis.loadData(this.currentParams);\r\n\t\t}\r\n\t}\r\n\r\n\tget entityName(): string {\r\n\t\treturn 'Item';\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PaginatedResponse } from '../../models/paginated.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class HelperService {\r\n\ttransformEmployeeResponse = (res: PaginatedResponse<any>) => ({\r\n\t\t...res,\r\n\t\tresults: res.results.map((e) => ({\r\n\t\t\t...e,\r\n\t\t\tfullName: [e.name.givenName, e.name.middleName, e.name.familyName]\r\n\t\t\t\t.filter((part) => part)\r\n\t\t\t\t.join(' ')\r\n\t\t\t\t.trim()\r\n\t\t\t\t.concat(e?.company?.name ? ` (${e.company.name})` : '')\r\n\t\t}))\r\n\t});\r\n\r\n\ttransformPayloadWithAddress = <T extends Record<string, any>>(payload: T): T => {\r\n\t\tconst transformedPayload = { ...payload } as Record<string, any>;\r\n\r\n\t\tif (transformedPayload['address']) {\r\n\t\t\tconst address = { ...transformedPayload['address'] };\r\n\r\n\t\t\t// Helper function to extract name from address field\r\n\t\t\tconst extractName = (field: unknown): string | undefined => {\r\n\t\t\t\tif (!field) return undefined;\r\n\t\t\t\tif (typeof field === 'string') return field;\r\n\t\t\t\tif (typeof field === 'object' && field !== null && 'name' in field) {\r\n\t\t\t\t\treturn (field as Record<string, any>)['name'];\r\n\t\t\t\t}\r\n\t\t\t\treturn undefined;\r\n\t\t\t};\r\n\r\n\t\t\taddress.province = extractName(address.province);\r\n\t\t\taddress.city = extractName(address.city);\r\n\t\t\taddress.barangay = extractName(address.barangay);\r\n\r\n\t\t\ttransformedPayload['address'] = address;\r\n\t\t}\r\n\r\n\t\treturn transformedPayload as T;\r\n\t};\r\n\r\n\tgenerateRandomHexColor(): string {\r\n\t\tconst randomInt = Math.floor(Math.random() * 0xffffff);\r\n\t\treturn `#${randomInt.toString(16).padStart(6, '0')}`;\r\n\t}\r\n}\r\n","// Components\r\nexport * from './lib/components/empty/empty.component';\r\nexport * from './lib/components/file-upload/file-upload.component';\r\nexport * from './lib/components/form-field-wrapper/form-field-wrapper.component';\r\nexport * from './lib/components/select/ng-select/basic/basic-ng-select.component';\r\nexport * from './lib/components/fg-address/fg-address.component';\r\nexport * from './lib/components/dataview/table/data-table.component';\r\nexport * from './lib/components/select/ng-select/dynamic/dynamic-select.component';\r\nexport * from './lib/components/drawer/dynamic-drawer.component';\r\nexport * from './lib/components/date-clock/date-clock.component';\r\n\r\n// Models\r\nexport * from './lib/models/common.model';\r\nexport * from './lib/models/address.model';\r\nexport * from './lib/models/table-column.model';\r\nexport * from './lib/models/paginated.model';\r\n\r\n// Types\r\nexport * from './lib/types/api-operations.type';\r\n\r\n// Class\r\nexport * from './lib/classes/crud-abstract.class';\r\n\r\n// Services\r\nexport * from './lib/services/helper/helper.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i4","i5","i6"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winexist/ngp",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.3.0",
6
6
  "@angular/core": "^20.3.0"