bc-primeng-ui 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bc-primeng-ui.mjs","sources":["../../../projects/bc-primeng-ui/src/lib/models/base-model.ts","../../../projects/bc-primeng-ui/src/lib/validators/form.validator.ts","../../../projects/bc-primeng-ui/src/lib/components/forms/form-field-error/form-field-error.component.ts","../../../projects/bc-primeng-ui/src/lib/components/custom-datepicker/custom-datepicker.component.ts","../../../projects/bc-primeng-ui/src/lib/models/session/session.model.ts","../../../projects/bc-primeng-ui/src/lib/services/auth/crypto.service.ts","../../../projects/bc-primeng-ui/src/lib/services/auth/storage.service.ts","../../../projects/bc-primeng-ui/src/lib/services/auth/session.service.ts","../../../projects/bc-primeng-ui/src/lib/services/auth/session-store.service.ts","../../../projects/bc-primeng-ui/src/lib/services/notification.service.ts","../../../projects/bc-primeng-ui/src/lib/components/base/base.component.ts","../../../projects/bc-primeng-ui/src/lib/services/confirmation.service.ts","../../../projects/bc-primeng-ui/src/lib/components/generic-search/search-state.service.ts","../../../projects/bc-primeng-ui/src/lib/components/forms/dynamic-form/dynamic-form-question.component.ts","../../../projects/bc-primeng-ui/src/lib/components/forms/dynamic-form/dynamic-form-question.component.html","../../../projects/bc-primeng-ui/src/lib/components/forms/dynamic-form/input-file-drag/input-file-drag.component.ts","../../../projects/bc-primeng-ui/src/lib/components/forms/dynamic-form/input-file-drag/input-file-drag.component.html","../../../projects/bc-primeng-ui/src/lib/models/common/enums/language-code.enum.ts","../../../projects/bc-primeng-ui/src/lib/utils/util.functions.ts","../../../projects/bc-primeng-ui/src/lib/components/forms/dynamic-form/dynamic-form.component.ts","../../../projects/bc-primeng-ui/src/lib/components/forms/dynamic-form/dynamic-form.component.html","../../../projects/bc-primeng-ui/src/lib/components/forms/dynamic-form/dynamic-dialog.component.ts","../../../projects/bc-primeng-ui/src/lib/models/common/search.model.ts","../../../projects/bc-primeng-ui/src/lib/services/search.service.ts","../../../projects/bc-primeng-ui/src/lib/components/base-data/base-data.component.ts","../../../projects/bc-primeng-ui/src/lib/utils/to-signal-form.util.ts","../../../projects/bc-primeng-ui/src/lib/components/base-form/base-form-dialog.component.ts","../../../projects/bc-primeng-ui/src/lib/components/custom-textbox/custom-textbox.component.ts","../../../projects/bc-primeng-ui/src/lib/components/custom-select/custom-select.component.ts","../../../projects/bc-primeng-ui/src/lib/components/custom-select/custom-select.component.html","../../../projects/bc-primeng-ui/src/lib/components/custom-datepicker/bc-datepicker.component.ts","../../../projects/bc-primeng-ui/src/lib/components/custom-datepicker/bc-datepicker.component.html","../../../projects/bc-primeng-ui/src/lib/components/custom-multi-select/custom-multi-select.component.ts","../../../projects/bc-primeng-ui/src/lib/components/generic-ptable/column-filter-advanced/column-filter-advanced.component.ts","../../../projects/bc-primeng-ui/src/lib/components/generic-ptable/column-filter-advanced/column-filter-advanced.component.html","../../../projects/bc-primeng-ui/src/lib/components/buttons/app-button/app-button.component.ts","../../../projects/bc-primeng-ui/src/lib/components/buttons/app-button/app-button.component.html","../../../projects/bc-primeng-ui/src/lib/components/no-records-found/no-records-found.component.ts","../../../projects/bc-primeng-ui/src/lib/components/no-records-found/no-records-found.component.html","../../../projects/bc-primeng-ui/src/lib/pipe/yesNo.pipe.ts","../../../projects/bc-primeng-ui/src/lib/pipe/zip-code-format.pipe.ts","../../../projects/bc-primeng-ui/src/lib/pipe/currency-format.pipe.ts","../../../projects/bc-primeng-ui/src/lib/pipe/date-format.pipe.ts","../../../projects/bc-primeng-ui/src/lib/pipe/date-time-format.pipe.ts","../../../projects/bc-primeng-ui/src/lib/pipe/document-format.pipe.ts","../../../projects/bc-primeng-ui/src/lib/pipe/person-document-format.pipe.ts","../../../projects/bc-primeng-ui/src/lib/pipe/status.pipe.ts","../../../projects/bc-primeng-ui/src/lib/models/common/enums/color.enum.ts","../../../projects/bc-primeng-ui/src/lib/pipe/enum-label.pipe.ts","../../../projects/bc-primeng-ui/src/lib/services/lookup.service.ts","../../../projects/bc-primeng-ui/src/lib/pipe/lookup.pipe.ts","../../../projects/bc-primeng-ui/src/lib/services/table-formatting.service.ts","../../../projects/bc-primeng-ui/src/lib/components/generic-ptable/generic-ptable.component.ts","../../../projects/bc-primeng-ui/src/lib/components/generic-ptable/generic-ptable.component.html","../../../projects/bc-primeng-ui/src/lib/components/custom-searchbox/bc-autocomplete.component.ts","../../../projects/bc-primeng-ui/src/lib/components/custom-searchbox/bc-autocomplete.component.html","../../../projects/bc-primeng-ui/src/lib/components/confirm-dialog/bc-confirm-dialog.component.ts","../../../projects/bc-primeng-ui/src/lib/services/loading.service.ts","../../../projects/bc-primeng-ui/src/lib/components/loading/loading.component.ts","../../../projects/bc-primeng-ui/src/lib/components/custom-checkbox/custom-checkbox.component.ts","../../../projects/bc-primeng-ui/src/lib/components/bc-currencybox/bc-currency-box.component.ts","../../../projects/bc-primeng-ui/src/lib/services/base-http.service.ts","../../../projects/bc-primeng-ui/src/lib/services/base.service.ts","../../../projects/bc-primeng-ui/src/lib/loaders/translation-loader.service.ts","../../../projects/bc-primeng-ui/src/lib/interceptors/loading.interceptor.ts","../../../projects/bc-primeng-ui/src/lib/components/dialog/dialog.component.ts","../../../projects/bc-primeng-ui/src/lib/interceptors/error.interceptor.ts","../../../projects/bc-primeng-ui/src/public-api.ts","../../../projects/bc-primeng-ui/src/bc-primeng-ui.ts"],"sourcesContent":["// base-model.ts\r\nexport abstract class BCBaseModel {\r\n id!: number;\r\n //updateBy!: string;\r\n //updateDate!: Date;\r\n //deleteDate?: Date;\r\n active?: boolean = true;\r\n\r\n /**\r\n * Converts a date string (ex: \"YYYY-MM-DD\") coming from a DateOnly from the API\r\n * to a Date object, safely, avoiding timezone problems.\r\n */\r\n protected fromApiDateOnly(dateOnlyString: string | Date | null | undefined): Date | null {\r\n if (!dateOnlyString) return null;\r\n if (dateOnlyString instanceof Date) return dateOnlyString;\r\n\r\n const datePart = dateOnlyString.split('T')[0];\r\n const localDateString = datePart.replace(/-/g, '/');\r\n\r\n const date = new Date(localDateString);\r\n // Verifica se a data resultante é válida\r\n return isNaN(date.getTime()) ? null : date;\r\n }\r\n\r\n /**\r\n * Very simple constructor: just assigns any key from `init` to this.\r\n * If the JSON comes with dateUpdate as a string and you want to convert it to Date,\r\n * you can handle it manually where needed. Here we just throw everything into the object.\r\n */\r\n constructor(init?: Partial<BCBaseModel>) {\r\n if (init) {\r\n Object.assign(this, init);\r\n /*if (init.updateDate && typeof init.updateDate === 'string') {\r\n this.updateDate = new Date(init.updateDate);\r\n }*/\r\n }\r\n }\r\n\r\n /**\r\n If you still want to have an encapsulated fromJson, you can use this method.\r\n * But, if you prefer, just always do `new FooModel(obj)`.\r\n */\r\n static fromJson<T extends BCBaseModel>(this: new (init?: Partial<T>) => T, json: Partial<T>): T {\r\n return new this(json);\r\n }\r\n\r\n /**\r\n * Transforms the instance into a \"plain\" object (for example, to send back\r\n * to the server). Here we just return a simple clone, without date conversion.\r\n */\r\n toJson(): any {\r\n const obj: any = {};\r\n Object.keys(this).forEach((key) => {\r\n const val = (this as any)[key];\r\n // If you want to transform `Date` into an ISO string, do:\r\n // if (val instanceof Date) obj[key] = val.toISOString();\r\n // else obj[key] = val;\r\n obj[key] = val;\r\n });\r\n return obj;\r\n } \r\n}\r\n","import { AbstractControl, FormArray, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport class FormValidations {\r\n static requiredMinCheckbox(min = 1): ValidatorFn {\r\n return (formArray: AbstractControl): ValidationErrors | null => {\r\n const totalChecked = (formArray as FormArray).controls\r\n .map((v) => v.value)\r\n .reduce((total, current) => (current ? total + current : total), 0);\r\n return totalChecked >= min ? null : { required: true };\r\n };\r\n }\r\n\r\n static cepValidator(control: AbstractControl): ValidationErrors | null {\r\n const zipCode = control.value;\r\n if (zipCode && !/^\\d{8}$/.test(zipCode)) {\r\n return { cepInvalido: true };\r\n }\r\n return null;\r\n }\r\n\r\n static dateValidator(control: AbstractControl): ValidationErrors | null {\r\n const date = control.value;\r\n if (!date || !/^\\d{8}$/.test(date)) {\r\n return { dateInvalido: true };\r\n }\r\n const formattedDate = `${date.substring(4, 8)}-${date.substring(2, 4)}-${date.substring(0, 2)}T00:00:00`;\r\n const parsedDate = new Date(formattedDate);\r\n if (isNaN(parsedDate.getTime())) {\r\n return { dateInvalido: true };\r\n }\r\n return null;\r\n }\r\n\r\n static equalsTo(otherField: string): ValidatorFn {\r\n return (formControl: AbstractControl): ValidationErrors | null => {\r\n if (!formControl.parent) return null;\r\n\r\n const field = formControl.parent.get(otherField);\r\n if (!field) {\r\n throw new Error('É necessário informar um campo válido.');\r\n }\r\n\r\n if (field === formControl) return null;\r\n\r\n return field.value !== formControl.value ? { equalsTo: otherField } : null;\r\n };\r\n }\r\n\r\n static emailValidator(control: AbstractControl): ValidationErrors | null {\r\n return /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z]{2,}$/.test(\r\n control.value,\r\n )\r\n ? null\r\n : { emailInvalido: true };\r\n }\r\n\r\n static rangeWithoutZero(min: number, max: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n if (value < min || value > max || value === 0) {\r\n return { rangeWithoutZero: { min, max } };\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n static withoutZero(control: AbstractControl): ValidationErrors | null {\r\n const value = control.value;\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n if (value == 0) {\r\n return { withoutZero: true };\r\n }\r\n return null;\r\n }\r\n\r\n static enumValidator(\r\n enumObj: Record<string, string | number>,\r\n opts?: {\r\n allowNull?: boolean;\r\n trimStrings?: boolean;\r\n caseSensitive?: boolean;\r\n },\r\n ): ValidatorFn {\r\n const allowNull = opts?.allowNull ?? false;\r\n const trimStrings = opts?.trimStrings ?? true;\r\n const caseSensitive = opts?.caseSensitive ?? true;\r\n\r\n const values = Object.values(enumObj);\r\n const isNumericEnum = values.some((v) => typeof v === 'number');\r\n const allowed = new Set<string | number>(\r\n values.filter((v) => typeof v === (isNumericEnum ? 'number' : 'string')) as (string | number)[],\r\n );\r\n const allowedLower =\r\n !isNumericEnum && !caseSensitive\r\n ? new Set(Array.from(allowed as Set<string>).map((v) => (v as string).toLowerCase()))\r\n : undefined;\r\n\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n let value = control.value;\r\n\r\n if (value === null || value === undefined) {\r\n return allowNull ? null : { enumInvalid: true };\r\n }\r\n\r\n if (!isNumericEnum && typeof value === 'string' && trimStrings) {\r\n value = value.trim();\r\n }\r\n\r\n if (isNumericEnum) {\r\n if (typeof value !== 'number' || !allowed.has(value)) {\r\n return { enumInvalid: true };\r\n }\r\n } else {\r\n if (typeof value !== 'string') {\r\n return { enumInvalid: true };\r\n }\r\n if (caseSensitive) {\r\n if (!allowed.has(value)) {\r\n return { enumInvalid: true };\r\n }\r\n } else {\r\n if (!allowedLower!.has(value.toLowerCase())) {\r\n return { enumInvalid: true };\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n\r\n static readonly errorMessages: Record<string, string> = {\r\n required: 'general.validation.required',\r\n min: 'general.validation.min_length',\r\n max: 'general.validation.max_length',\r\n minlength: 'general.validation.min_length_field',\r\n maxlength: 'general.validation.max_length_field',\r\n cepInvalido: 'general.validation.invalid_zip_code',\r\n dateInvalido: 'general.validation.invalid_date',\r\n emailInvalido: 'general.validation.email_already_registered',\r\n enumInvalid: 'general.validation.enum_invalid',\r\n equalsTo: 'general.validation.equals_to',\r\n pattern: 'general.validation.pattern',\r\n rangeWithoutZero: 'general.validation.range_without_zero',\r\n withoutZero: 'general.validation.without_zero',\r\n };\r\n\r\n static getErrorMsg(validatorName: string): string | undefined {\r\n return this.errorMessages[validatorName];\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\r\n\r\nimport { FormValidations } from '../../../validators/form.validator';\r\nimport { TranslocoPipe } from '@jsverse/transloco';\r\n\r\n@Component({\r\n selector: 'bc-form-field-error',\r\n standalone: true,\r\n imports: [CommonModule, TranslocoPipe],\r\n template: `\r\n @if (errorKey) {\r\n <small class=\"text-red-500\">\r\n <b>* {{ errorKey | transloco: validatorValue }}</b>\r\n </small>\r\n }\r\n `,\r\n})\r\nexport class FormFieldErrorComponent {\r\n /** The control that has errors (it could be FormControl, FormGroup, FormArray…) */\r\n @Input() control: AbstractControl | null = null;\r\n\r\n /** \"Readable\" field name to display in the message (e.g., \"CNPJ\", \"Email\", etc.) */\r\n @Input() fieldName!: string;\r\n\r\n /** \"Extra class\" to add to the <small> element */\r\n @Input() style: string = '';\r\n\r\n /** Parameter value (e.g., requiredLength, min, max) for the message */\r\n _validatorValue?: string | number | {};\r\n\r\n /**\r\n * Returns the exact translation key (e.g., \"core.validation.required\")\r\n * or `null` if there is no error to display.\r\n */\r\n get errorKey(): string | null {\r\n // If there is no control or it's not invalid, don't display anything\r\n if (!this.control || !this.control.errors) {\r\n return null;\r\n }\r\n\r\n // It only displays an error after the user has interacted with it (dirty or touched it).\r\n if (!(this.control.dirty || this.control.touched)) {\r\n return null;\r\n }\r\n\r\n // It only displays an error after the user has interacted with it (dirty or touched it).\r\n const errors: ValidationErrors = this.control.errors;\r\n for (const validatorName in errors) {\r\n if (errors.hasOwnProperty(validatorName)) {\r\n // Extract the \"validator value\" if it exists (min, max, minlength, maxlength, pattern…)\r\n this.extractValidatorValue(validatorName, errors[validatorName]);\r\n // Return only the key – the translation will be done by Transloco\r\n return FormValidations.getErrorMsg(validatorName) || null;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n get validatorValue(): any {\r\n if (\r\n this._validatorValue !== null &&\r\n typeof this._validatorValue === 'object' &&\r\n !Array.isArray(this._validatorValue)\r\n ) {\r\n return { field: this.fieldName, ...this._validatorValue };\r\n } else {\r\n return { field: this.fieldName, validatorValue: this._validatorValue };\r\n }\r\n }\r\n\r\n /** Preenche `_validatorValue` de acordo com o tipo de erro */\r\n private extractValidatorValue(validatorName: string, validatorObj: any): void {\r\n switch (validatorName) {\r\n case 'min':\r\n this._validatorValue = validatorObj.min;\r\n break;\r\n case 'max':\r\n this._validatorValue = validatorObj.max;\r\n break;\r\n case 'minlength':\r\n this._validatorValue = validatorObj.requiredLength;\r\n break;\r\n case 'maxlength':\r\n this._validatorValue = validatorObj.requiredLength;\r\n break;\r\n case 'pattern':\r\n // If you want to pass the own pattern or a generic message, define it here:\r\n this._validatorValue = validatorObj.requiredPattern || '';\r\n break;\r\n default:\r\n if (\r\n validatorObj !== null &&\r\n typeof validatorObj === 'object' &&\r\n !Array.isArray(validatorObj)\r\n ) {\r\n this._validatorValue = validatorObj;\r\n } else {\r\n this._validatorValue = validatorObj;\r\n }\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Injector,\r\n Input,\r\n OnInit,\r\n Optional,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlContainer,\r\n ControlValueAccessor,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n ReactiveFormsModule,\r\n ValidationErrors,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport { FormFieldErrorComponent } from '../forms/form-field-error/form-field-error.component'; // Ajuste o caminho conforme necessário\r\n// PrimeNG Imports\r\n\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\n\r\n@Component({\r\n selector: 'app-custom-datepicker',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n FormFieldErrorComponent,\r\n DatePickerModule,\r\n ],\r\n template: `\r\n <div class=\"field\">\r\n <label [attr.for]=\"formControlName\" class=\"fw-bolder fs-6 text-dark\">\r\n <span [ngClass]=\"required ? 'required' : ''\">{{ label }}</span>\r\n </label>\r\n <p-datePicker\r\n [attr.id]=\"formControlName\"\r\n [placeholder]=\"placeholder || label\"\r\n [disabled]=\"isDisabled\"\r\n [formControl]=\"control\"\r\n (onBlur)=\"onInputBlur()\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onInput)=\"onInput($event)\"\r\n [showIcon]=\"true\"\r\n [dateFormat]=\"dateFormat\"\r\n [class.ng-invalid]=\"control?.invalid && (control?.dirty || control?.touched)\"\r\n [class.ng-dirty]=\"control?.dirty\"\r\n [class.ng-touched]=\"control?.touched\"\r\n [showTime]=\"showTime\"\r\n [hourFormat]=\"hourFormat\"\r\n [dataType]=\"dataType\"\r\n ></p-datePicker>\r\n <div *ngIf=\"secondLabel\" class=\"form-text\">\r\n {{ secondLabel }}\r\n </div>\r\n <bc-form-field-error [control]=\"control\" [fieldName]=\"label\"></bc-form-field-error>\r\n </div>\r\n `,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CustomDatepickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CustomDatepickerComponent implements ControlValueAccessor, OnInit {\r\n @Input() formControlName!: string;\r\n control: any;\r\n @Input() placeholder?: string;\r\n @Input() label = 'label';\r\n @Input() secondLabel?: string;\r\n @Input() required = false;\r\n @Input() isDisabled = false;\r\n @Input() dateFormat = 'dd/mm/yy'; // Formato padrão para p-calendar\r\n @Input() showTime = false; // Para incluir seleção de hora\r\n @Input() hourFormat: '12' | '24' = '24'; // Formato da hora (12 ou 24)\r\n @Input() dataType: 'date' | 'string' | 'number' = 'date'; // Tipo de dado do modelo\r\n\r\n @Output() blur = new EventEmitter<any>();\r\n @Output() dateSelect = new EventEmitter<Date>(); // Evento ao selecionar uma data\r\n @Output() valueChange = new EventEmitter<any>(); // Emite o valor quando muda\r\n\r\n private onChange: (value: any) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor(\r\n @Optional() private controlContainer: ControlContainer,\r\n private injector: Injector,\r\n ) {}\r\n\r\n private ngControlInstance: NgControl | null = null;\r\n\r\n ngOnInit() {\r\n debugger;\r\n\r\n if (this.controlContainer && this.formControlName) {\r\n this.control = this.controlContainer.control?.get(this.formControlName);\r\n if (this.control) {\r\n // Correção para o erro 'required' e verificação robusta\r\n const validator = this.control.validator as ValidatorFn;\r\n if (validator) {\r\n const validationResult = validator(this.control); // Passar o controle para o validador\r\n if (validationResult && validationResult['required']) {\r\n this.required = true;\r\n } else {\r\n this.required = this.required || false; // Manter a propriedade 'required' do Input\r\n }\r\n }\r\n }\r\n } else {\r\n console.error(\r\n `CustomDatepickerComponent: formControlName is required when used within a form group.`,\r\n );\r\n }\r\n\r\n // 1) capturamos o NgControl (se estiver usando formControlName)\r\n // this.ngControlInstance = this.injector.get(NgControl, null);\r\n\r\n // if (this.ngControlInstance) {\r\n // // 2) Amarramos este componente como ValueAccessor\r\n // this.ngControlInstance.valueAccessor = this;\r\n\r\n // // 3) Agora podemos “pegar” o AbstractControl\r\n // const ctrl: AbstractControl = this.ngControlInstance.control!;\r\n\r\n // // 4) Se o @Input() required não foi passado, detectamos baseado no validator\r\n // if (!this.required && ctrl && ctrl.validator) {\r\n // const validateFn = ctrl.validator!;\r\n // // Chamamos a função de validação com um controle vazio (valor nulo)\r\n // const fakeControl = { value: null } as AbstractControl;\r\n // const validationResult: ValidationErrors | null = validateFn(fakeControl);\r\n\r\n // // Se retornar { required: true }, marcamos required = true\r\n // if (validationResult && validationResult['required']) {\r\n // this.required = true;\r\n // }\r\n // }\r\n // }\r\n\r\n if (this.isDisabled && this.control) {\r\n this.setDisabledState(true);\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.control) {\r\n // p-calendar espera um objeto Date por padrão ou um valor no formato dataType\r\n this.control.setValue(value, { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (this.control) {\r\n if (isDisabled) {\r\n this.control.disable();\r\n } else {\r\n this.control.enable();\r\n }\r\n }\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n onInputBlur() {\r\n // Novo método para onBlur do p-calendar\r\n this.onTouched();\r\n this.blur.emit(this.control?.value); // p-calendar já deve ter atualizado o control.value\r\n }\r\n\r\n onSelect(event: Date) {\r\n this.onTouched();\r\n this.onChange(event);\r\n this.dateSelect.emit(event);\r\n this.valueChange.emit(event);\r\n }\r\n\r\n onInput(event: Event) {\r\n // Quando o usuário digita no campo (útil para formatação manual)\r\n const value = (event.target as HTMLInputElement).value;\r\n // O p-calendar deve lidar com a maioria das formatações de entrada.\r\n // Você pode adicionar lógicas customizadas aqui se precisar de validação ou formatação extra\r\n // antes de passar para o onChange.\r\n this.onChange(value);\r\n this.valueChange.emit(value);\r\n }\r\n}\r\n","import { BCBaseModel } from '../base-model';\r\nimport { CountryCustom } from '../config/country-custom.model';\r\n\r\nexport class Session extends BCBaseModel {\r\n acceptedTerms!: boolean;\r\n\r\n\r\n entityId?: string;\r\n countryId?: string; //= 'BO'; \r\n\r\n userLoggedIn!: boolean;\r\n\r\n countryCustom?: CountryCustom;\r\n\r\n environment?: string;\r\n\r\n constructor(init?: Partial<Session>) {\r\n super(init);\r\n if (init) {\r\n Object.assign(this, init);\r\n }\r\n }\r\n}\r\n","// src/app/core/services/crypto.service.ts\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CryptoService {\r\n // Parâmetros de derivação PBKDF2\r\n private readonly iterations = 100_000;\r\n private readonly hash = 'SHA-256';\r\n private readonly salt = new TextEncoder().encode('MINHA_SALT_FIXA_OU_RANDOM');\r\n // Nota: prefira uma salt randômica armazenada junto ao ciphertext, mas este exemplo\r\n // usa salt fixa para simplificar.\r\n\r\n /** Gera uma CryptoKey AES-GCM a partir da senha (sessionSecret). */\r\n private async getKey(password: string): Promise<CryptoKey> {\r\n // 1) Codifica a senha\r\n const pwUtf8 = new TextEncoder().encode(password);\r\n // 2) Importa como chave “raw” para PBKDF2\r\n const baseKey = await crypto.subtle.importKey('raw', pwUtf8, 'PBKDF2', false, ['deriveKey']);\r\n // 3) Deriva chave AES-GCM\r\n return crypto.subtle.deriveKey(\r\n {\r\n name: 'PBKDF2',\r\n salt: this.salt,\r\n iterations: this.iterations,\r\n hash: this.hash,\r\n },\r\n baseKey,\r\n { name: 'AES-GCM', length: 256 },\r\n false,\r\n ['encrypt', 'decrypt'],\r\n );\r\n }\r\n\r\n /** Encripta um texto com AES-GCM. Retorna Base64(nonce + ciphertext). */\r\n async encrypt(plain: string, password: string): Promise<string> {\r\n const key = await this.getKey(password);\r\n // Gera um nonce (IV) de 12 bytes\r\n const iv = crypto.getRandomValues(new Uint8Array(12));\r\n // Encripta\r\n const encoded = new TextEncoder().encode(plain);\r\n const cipher = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, encoded);\r\n // Junta IV + ciphertext em um único ArrayBuffer\r\n const combined = new Uint8Array(iv.byteLength + cipher.byteLength);\r\n combined.set(iv, 0);\r\n combined.set(new Uint8Array(cipher), iv.byteLength);\r\n // Retorna Base64\r\n return btoa(String.fromCharCode(...combined));\r\n }\r\n\r\n /** Decripta Base64(nonce + ciphertext) e retorna o texto puro. */\r\n async decrypt(base64: string, password: string): Promise<string> {\r\n const key = await this.getKey(password);\r\n // Decodifica Base64\r\n const data = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\r\n // Separa IV e ciphertext\r\n const iv = data.slice(0, 12);\r\n const cipher = data.slice(12);\r\n // Decripta\r\n const decrypted = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, cipher);\r\n return new TextDecoder().decode(decrypted);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { CryptoService } from './crypto.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class StorageService {\r\n //should be in environment\r\n private sessionSecret = '12345678901234567890123456789012';\r\n\r\n constructor(private crypto: CryptoService) {}\r\n\r\n async setLocalStorage(key: string, value: any): Promise<void> {\r\n const json = JSON.stringify(value);\r\n const cipher = await this.crypto.encrypt(json, this.sessionSecret);\r\n localStorage.setItem(key, cipher);\r\n }\r\n\r\n async getLocalStorage<T = any>(key: string): Promise<T | undefined> {\r\n try {\r\n const cipher = localStorage.getItem(key);\r\n if (!cipher) return undefined;\r\n const json = await this.crypto.decrypt(cipher, this.sessionSecret);\r\n return JSON.parse(json) as T;\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n removeLocalStorage(key: string): void {\r\n localStorage.removeItem(key);\r\n }\r\n\r\n // Mesma lógica para sessionStorage\r\n async setSessionStorage(key: string, value: any): Promise<void> {\r\n const json = JSON.stringify(value);\r\n const cipher = await this.crypto.encrypt(json, this.sessionSecret);\r\n sessionStorage.setItem(key, cipher);\r\n }\r\n\r\n async getSessionStorage<T = any>(key: string): Promise<T | undefined> {\r\n try {\r\n const cipher = sessionStorage.getItem(key);\r\n if (!cipher) return undefined;\r\n const json = await this.crypto.decrypt(cipher, this.sessionSecret);\r\n return JSON.parse(json) as T;\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n removeSessionStorage(key: string): void {\r\n sessionStorage.removeItem(key);\r\n }\r\n}\r\n","// src/app/core/services/session.service.ts\r\n\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, from, Observable } from 'rxjs';\r\nimport { first } from 'rxjs/operators';\r\nimport { StorageService } from './storage.service';\r\nimport { Session } from '../../models/session/session.model';\r\n\r\n//import { StorageService } from './storage.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SessionService {\r\n private readonly sessionKey = 'SESSION_KEY_APP';\r\n\r\n private sessionSubject = new BehaviorSubject<Session | null>(null);\r\n public session$ = this.sessionSubject.asObservable();\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private storageService: StorageService,\r\n ) {\r\n this.initializeSession();\r\n }\r\n\r\n /** Initializes the BehaviorSubject with the locally saved session. */\r\n private async initializeSession() {\r\n const session = await this.getSession();\r\n if (session) {\r\n this.sessionSubject.next(session);\r\n }\r\n }\r\n\r\n // /** call to api for getting actual session */\r\n // updateSession(): Observable<Session> {\r\n // return this.http.get<Session>(`${environment.urlApi}v1/session/getSession`).pipe(first());\r\n // }\r\n\r\n // /** call to api for getting environment variables */\r\n // getEnvironment(): Observable<any> {\r\n // return this.http.get<Session>(`${environment.urlApi}v1/session/GetEnvironment`).pipe(first());\r\n // }\r\n\r\n /**\r\n * store encripted session without sessionStorage and update the BehaviorSubject.\r\n */\r\n async saveSession(session: Session | null | undefined): Promise<void> {\r\n if (session) {\r\n await this.storageService.setSessionStorage(this.sessionKey, session);\r\n this.sessionSubject.next(session); // 🔄 changes notification\r\n } else {\r\n await this.storageService.removeSessionStorage(this.sessionKey);\r\n this.sessionSubject.next(null); // 🔄 clean active session\r\n }\r\n }\r\n\r\n async getSession(): Promise<Session | undefined> {\r\n return await this.storageService.getSessionStorage<Session>(this.sessionKey);\r\n }\r\n\r\n /** reactive version with observable*/\r\n getSession$(): Observable<Session | undefined> {\r\n return from(this.getSession());\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SessionService } from './session.service';\r\nimport { Session } from '../../models/session/session.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SessionStoreService {\r\n private _session$ = new BehaviorSubject<Session | null>(null);\r\n session$ = this._session$.asObservable();\r\n\r\n constructor(private sessionService: SessionService) {\r\n this.loadFromStorage();\r\n // optional\r\n //this.syncWithApi();\r\n }\r\n\r\n private async loadFromStorage() {\r\n let session = await this.sessionService.getSession();\r\n\r\n if (!session) {\r\n session = new Session();\r\n }\r\n\r\n if (session) {\r\n this._session$.next(session);\r\n }\r\n }\r\n\r\n /** Search in backend and stores in brwoser Storage*/\r\n // syncWithApi() {\r\n // this.sessionService.updateSession().subscribe((sess) => {\r\n // this._session$.next(sess);\r\n // this.sessionService.saveSession(sess);\r\n // });\r\n // }\r\n\r\n clear() {\r\n this._session$.next(null);\r\n this.sessionService.saveSession(null);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NotificationService {\r\n constructor(private messageService: MessageService) { }\r\n\r\n success(detail: string, summary = 'Sucesso') {\r\n this.messageService.add({ severity: 'success', summary, detail, life: 5000 });\r\n }\r\n error(detail: string, summary = 'Erro') {\r\n this.messageService.add({ severity: 'error', summary, detail, life: 30000 });\r\n }\r\n info(detail: string, summary = 'Info') {\r\n this.messageService.add({ severity: 'info', summary, detail, life: 5000 });\r\n }\r\n warn(detail: string, summary = 'Aviso') {\r\n this.messageService.add({ severity: 'warn', summary, detail, life: 5000 });\r\n }\r\n}\r\n","import { Directive, inject } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Session } from '../../models/session/session.model';\r\nimport { SessionStoreService } from '../../services/auth/session-store.service';\r\nimport { NotificationService } from '../../services/notification.service';\r\n\r\n\r\n@Directive()\r\nexport abstract class BCBaseComponent {\r\n pageTitle = 'Page Title';\r\n\r\n session: Session | null = null;\r\n disableControl = false;\r\n writeAccess = true;\r\n deleteAccess = true;\r\n\r\n protected router = inject(Router);\r\n protected sessionStoreService = inject(SessionStoreService);\r\n protected notificationService = inject(NotificationService);\r\n\r\n\r\n ngOnInit(): void {\r\n this.sessionStoreService.session$.subscribe((s) => {\r\n if (s) {\r\n this.session = s;\r\n } else {\r\n this.session = new Session();\r\n }\r\n });\r\n }\r\n\r\n /** Toast notifications with PrimeNG MessageService */\r\n protected showSuccess(msg: string) {\r\n this.notificationService.success(msg);\r\n }\r\n protected showError(msg: string) {\r\n this.notificationService.error(msg);\r\n }\r\n protected showInfo(msg: string) {\r\n this.notificationService.info(msg);\r\n }\r\n protected showWarn(msg: string) {\r\n this.notificationService.warn(msg);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Confirmation, ConfirmationService as PrimeConfirmationService } from 'primeng/api';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AppConfirmationService {\r\n private primeConfirmation = inject(PrimeConfirmationService);\r\n private transloco = inject(TranslocoService);\r\n\r\n /**\r\n * MUDANÇA: Um novo método genérico para qualquer tipo de confirmação.\r\n * Usa padrões neutros que podem ser sobrescritos.\r\n */\r\n confirm(config: Partial<Confirmation>): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n this.primeConfirmation.confirm({\r\n // Padrões genéricos\r\n header: 'Confirmação',\r\n icon: 'pi pi-question-circle',\r\n acceptLabel: 'Sim',\r\n rejectLabel: 'Não',\r\n acceptButtonStyleClass: 'p-button-info',\r\n rejectButtonStyleClass: 'p-button-text',\r\n\r\n // Sobrescreve os padrões com a configuração passada\r\n ...config,\r\n\r\n // Lida com a resolução da Promise\r\n accept: () => {\r\n config?.accept?.();\r\n resolve(true);\r\n },\r\n reject: () => {\r\n config?.reject?.();\r\n resolve(false);\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * MUDANÇA: O método de exclusão agora simplesmente chama o método genérico\r\n * com suas próprias configurações padrão para exclusão.\r\n */\r\n async confirmDelete(config?: Partial<Confirmation> & { data?: any }): Promise<boolean> {\r\n const translatedMessage = await firstValueFrom(\r\n this.transloco.selectTranslate('general.phrase.sure_delete_item', { item: config?.data?.item || '' }),\r\n );\r\n\r\n const translatedHeader = await firstValueFrom(\r\n this.transloco.selectTranslate('general.phrase.delete_confirmation_header'),\r\n );\r\n\r\n const acceptLabel = await firstValueFrom(this.transloco.selectTranslate('general.singular.exclude'));\r\n\r\n const rejectLabel = await firstValueFrom(this.transloco.selectTranslate('general.singular.cancel'));\r\n\r\n return this.confirm({\r\n message: translatedMessage,\r\n header: translatedHeader,\r\n icon: 'pi pi-exclamation-triangle',\r\n acceptLabel: acceptLabel,\r\n rejectLabel: rejectLabel,\r\n acceptButtonStyleClass: 'p-button-danger',\r\n ...config,\r\n });\r\n }\r\n}\r\n","// src/app/services/search-state.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SearchStateService {\r\n private readonly STORAGE_KEY_PREFIX = 'app_search_';\r\n // A map to store BehaviorSubjects for different search keys\r\n private searchSubjects: Map<string, BehaviorSubject<any>> = new Map();\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Sets the search parameters for a specific key.\r\n * @param key The unique key for this search (e.g., 'products', 'users').\r\n * @param params The search parameters.\r\n */\r\n setSearchParams(key: string, params: any): void {\r\n let subject = this.searchSubjects.get(key);\r\n if (!subject) {\r\n subject = new BehaviorSubject<any>(this.loadFromStorage(key) || {});\r\n this.searchSubjects.set(key, subject);\r\n }\r\n subject.next(params);\r\n this.saveToStorage(key, params);\r\n }\r\n\r\n /**\r\n * Returns an Observable of the search parameters for a specific key.\r\n * @param key The unique key for this search.\r\n * @returns An Observable of the search parameters.\r\n */\r\n getSearchParams(key: string): Observable<any> {\r\n let subject = this.searchSubjects.get(key);\r\n if (!subject) {\r\n // If it doesn't exist, create one and try to load from storage\r\n const initialParams = this.loadFromStorage(key) || {};\r\n subject = new BehaviorSubject<any>(initialParams);\r\n this.searchSubjects.set(key, subject);\r\n }\r\n return subject.asObservable();\r\n }\r\n\r\n /**\r\n * Clears the search parameters for a specific key.\r\n * @param key The unique key for this search.\r\n */\r\n clearSearchParams(key: string): void {\r\n let subject = this.searchSubjects.get(key);\r\n if (subject) {\r\n subject.next({}); // Emits an empty object\r\n }\r\n localStorage.removeItem(this.STORAGE_KEY_PREFIX + key);\r\n }\r\n\r\n private saveToStorage(keySuffix: string, data: any): void {\r\n const fullKey = this.STORAGE_KEY_PREFIX + keySuffix;\r\n try {\r\n const dataToSave = JSON.parse(JSON.stringify(data), (k, v) => (v instanceof Date ? v.toISOString() : v));\r\n localStorage.setItem(fullKey, JSON.stringify(dataToSave));\r\n } catch (e) {\r\n console.error('Error saving to localStorage:', e);\r\n }\r\n }\r\n\r\n private loadFromStorage(keySuffix: string): any | null {\r\n const fullKey = this.STORAGE_KEY_PREFIX + keySuffix;\r\n const savedData = localStorage.getItem(fullKey);\r\n if (savedData) {\r\n try {\r\n const parsedData = JSON.parse(savedData, (key, value) => {\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/.test(value)) {\r\n const date = new Date(value);\r\n return isNaN(date.getTime()) ? value : date;\r\n }\r\n return value;\r\n });\r\n return parsedData;\r\n } catch (e) {\r\n console.error('Error loading from localStorage:', e);\r\n localStorage.removeItem(fullKey);\r\n return null;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\n\r\n// PrimeNG\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\n\r\n// import { Session } from '../../../models/common/session.model';\r\n// import { SessionService } from '../../../services/session.service';\r\nimport { FormFieldErrorComponent } from '../../forms/form-field-error/form-field-error.component';\r\nimport { Session } from '../../../models/session/session.model';\r\nimport { SessionService } from '../../../services/auth/session.service';\r\nimport { BCFormItemBase } from '../models/form-item-base.model';\r\n//import { FormItemBase } from './models/form-item-base';\r\n\r\n@Component({\r\n selector: 'app-dynamic-form-question',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n InputTextModule,\r\n DatePickerModule,\r\n SelectModule,\r\n MultiSelectModule,\r\n CheckboxModule,\r\n InputNumberModule,\r\n ],\r\n templateUrl: './dynamic-form-question.component.html',\r\n})\r\nexport class DynamicFormQuestionComponent implements OnInit {\r\n @Input() question!: BCFormItemBase;\r\n @Input() form!: FormGroup;\r\n @Output() checkEvent = new EventEmitter<boolean>();\r\n\r\n session: Session | undefined;\r\n optCurrency = { prefix: '', thousands: '.', decimal: ',' };\r\n currencyCode = 'BRL';\r\n\r\n // Mapeamento de símbolos/códigos para ISO 4217\r\n private static currencyMap: Record<string, string> = {\r\n 'S/.': 'PEN', // Peru\r\n R$: 'BRL', // Brasil\r\n $: 'ARS', // Argentina (padrão para $)\r\n '£': 'FKP', // Ilhas Malvinas\r\n Bs: 'BOB', // Bolívia\r\n '₲': 'PYG', // Paraguai\r\n CLP: 'CLP', // Chile (caso venha o código)\r\n ECS: 'USD', // Equador\r\n UYU: 'UYU', // Uruguai (caso venha o código)\r\n // Adicionais para robustez\r\n CL$: 'CLP', // Chile (variação)\r\n US$: 'USD', // EUA (variação)\r\n EC$: 'USD', // Equador (variação)\r\n USD: 'USD', // EUA\r\n };\r\n\r\n constructor(\r\n private sessionService: SessionService,\r\n private cdr: ChangeDetectorRef,\r\n ) { }\r\n\r\n async ngOnInit(): Promise<void> {\r\n this.session = await this.sessionService.getSession();\r\n let rawCurrency = this.session?.countryCustom?.currencyCode;\r\n // Se vier símbolo, converte para código ISO\r\n this.currencyCode = DynamicFormQuestionComponent.currencyMap[rawCurrency ?? ''] || rawCurrency || 'BRL';\r\n if (this.session?.countryCustom?.currencyCode) {\r\n this.optCurrency.prefix = `${this.session.countryCustom.currencyCode} `;\r\n } else {\r\n this.optCurrency.prefix = '';\r\n }\r\n this.cdr.detectChanges();\r\n }\r\n\r\n get control() {\r\n return this.form.controls[this.question.key];\r\n }\r\n\r\n get isValid(): boolean {\r\n return this.control.valid || this.control.pristine;\r\n }\r\n\r\n onCheckboxChange(event: any) {\r\n this.checkEvent.emit(event.checked);\r\n }\r\n}\r\n","","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { FileRemoveEvent, FileSelectEvent, FileUploadHandlerEvent, FileUploadModule } from 'primeng/fileupload';\r\n\r\n@Component({\r\n selector: 'app-input-file-drag',\r\n templateUrl: './input-file-drag.component.html',\r\n standalone: true,\r\n imports: [CommonModule, FileUploadModule, TranslocoModule, ButtonModule],\r\n})\r\nexport class InputFileDragComponent {\r\n @Input() disabled: boolean = false;\r\n @Input() acceptType = 'application/pdf, image/png, image/jpeg, .xlsx, .xls';\r\n @Input() maxFiles = 1;\r\n\r\n @Output() inputFile: EventEmitter<File[]> = new EventEmitter<File[]>();\r\n\r\n files: File[] = [];\r\n\r\n constructor() {}\r\n\r\n onFileSelect(event: FileSelectEvent): void {\r\n const newFiles = event.files;\r\n this.files.push(...newFiles);\r\n if (this.maxFiles > 0 && this.files.length > this.maxFiles) {\r\n this.files = this.files.slice(-this.maxFiles); // Mantém apenas os últimos arquivos até o limite\r\n }\r\n this.emitValue();\r\n }\r\n\r\n onFileRemove(event: FileRemoveEvent): void {\r\n this.files = this.files.filter((f) => f.name !== event.file.name || f.size !== event.file.size);\r\n this.emitValue();\r\n }\r\n\r\n onFilesClear(): void {\r\n this.files = [];\r\n this.emitValue();\r\n }\r\n\r\n private emitValue(): void {\r\n this.inputFile.emit(this.files);\r\n }\r\n\r\n // Método privado para centralizar a lógica de atualização e emissão\r\n private updateFiles(files: File[]): void {\r\n this.files = [...files]; // Cria uma nova referência para a array para garantir a detecção de mudanças\r\n this.inputFile.emit(this.files);\r\n }\r\n\r\n onUploadHandler(event: FileUploadHandlerEvent): void {\r\n // Nenhuma lógica é necessária aqui. A presença deste método atende ao contrato\r\n // do (uploadHandler) e previne o upload automático.\r\n // O upload real será feito pelo componente pai.\r\n }\r\n}\r\n","<p-fileUpload\r\n name=\"files[]\"\r\n [multiple]=\"maxFiles > 1\"\r\n [accept]=\"acceptType\"\r\n [disabled]=\"disabled\"\r\n [customUpload]=\"true\"\r\n [fileLimit]=\"maxFiles\"\r\n [showUploadButton]=\"false\"\r\n [showCancelButton]=\"false\"\r\n [chooseLabel]=\"'SHARED.COMPONENTS.INPUT.BUTTON.CHOOSE' | transloco\"\r\n (onSelect)=\"onFileSelect($event)\"\r\n (onRemove)=\"onFileRemove($event)\"\r\n (onClear)=\"onFilesClear()\"\r\n (uploadHandler)=\"onUploadHandler($event)\"\r\n>\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"flex flex-col items-center justify-center p-4 text-center\">\r\n <i class=\"pi pi-cloud-upload text-4xl text-gray-500 mb-3\"></i>\r\n <p class=\"text-gray-600 font-semibold\">\r\n {{ \"SHARED.COMMON.MESSAGE_UPLOAD_FILE\" | transloco }}\r\n </p>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"file\"\r\n let-file>\r\n <div class=\"flex items-center justify-between p-2 border-t\">\r\n <div class=\"flex items-center gap-2\">\r\n <img\r\n [src]=\"file.objectURL\"\r\n [alt]=\"file.name\"\r\n width=\"50\"\r\n class=\"rounded\"\r\n />\r\n <span class=\"font-semibold\">{{ file.name }}</span>\r\n <span>({{ file.size | number }})</span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</p-fileUpload>\r\n","export enum LanguageCode {\r\n PortugueseBrazil = 'pt-BR',\r\n SpanishArgentina = 'es-AR',\r\n SpanishBolivia = 'es-BO',\r\n SpanishChile = 'es-CL',\r\n SpanishEcuador = 'es-EC',\r\n SpanishParaguay = 'es-PY',\r\n SpanishPeru = 'es-PE',\r\n SpanishUruguay = 'es-UY',\r\n EnglishFalklandIslands = 'en-FK',\r\n EnglishUSA = 'en-US',\r\n Spanish = 'es',\r\n}\r\n","import { formatDate } from '@angular/common';\r\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Observable, of } from 'rxjs';\r\nimport { BCFormItemBase } from '../components/forms/models/form-item-base.model';\r\nimport { ISelectItem } from '../models/common/select-item.model';\r\nimport { LanguageCode } from '../models/common/enums/language-code.enum';\r\n\r\n// #region Date\r\nexport function calculateDate(\r\n initialDate?: Date | string | null,\r\n endDate?: Date | string | null,\r\n): number | undefined {\r\n if (!initialDate || !endDate) {\r\n return undefined;\r\n }\r\n\r\n // Garante que ambos sejam objetos Date\r\n const startDate = initialDate instanceof Date ? initialDate : new Date(initialDate);\r\n const endDateObj = endDate instanceof Date ? endDate : new Date(endDate);\r\n\r\n // Verifica se as datas são válidas\r\n if (isNaN(startDate.getTime()) || isNaN(endDateObj.getTime())) {\r\n return undefined;\r\n }\r\n\r\n const start = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\r\n const end = new Date(endDateObj.getFullYear(), endDateObj.getMonth(), endDateObj.getDate());\r\n\r\n const diffInMs = Math.abs(start.getTime() - end.getTime());\r\n return Math.floor(diffInMs / (1000 * 60 * 60 * 24)); // converte de ms para dias\r\n}\r\n// #endregion\r\n\r\nexport function splitUrl(url: string): string {\r\n // 1. Defina todas as palavras-chave que indicam uma \"rota filha\" em um array.\r\n const childRouteKeywords = [\r\n '/profile',\r\n '/terrain',\r\n '/edification',\r\n '/residence',\r\n '/vehicle',\r\n '/management',\r\n '/company',\r\n '/details',\r\n '/create',\r\n '/edit',\r\n ];\r\n\r\n // 2. Encontre o índice da primeira ocorrência de qualquer uma das palavras-chave na URL.\r\n const firstMatchIndex = Math.min(\r\n ...childRouteKeywords.map((keyword) => {\r\n const index = url.indexOf(keyword);\r\n // Se o keyword não for encontrado, retornamos um valor muito alto (Infinity)\r\n // para que ele não seja escolhido como o mínimo.\r\n return index === -1 ? Infinity : index;\r\n }),\r\n );\r\n\r\n // 3. Se um dos keywords foi encontrado (o índice não será Infinity)...\r\n if (isFinite(firstMatchIndex)) {\r\n // ...corta a string da URL do início até o índice onde a palavra-chave foi encontrada.\r\n return url.substring(0, firstMatchIndex);\r\n }\r\n\r\n // 4. Se nenhuma palavra-chave foi encontrada, retorna a URL original sem modificação.\r\n return url;\r\n}\r\n\r\n// #region Url\r\nexport function splitUrl2(url: string): string {\r\n if (url.includes('profile')) {\r\n var urlSplitted = url.split('/profile', 1);\r\n url = urlSplitted[0];\r\n }\r\n if (url.includes('terrain')) {\r\n var urlSplitted = url.split('/terrain', 1);\r\n url = urlSplitted[0];\r\n }\r\n if (url.includes('edification')) {\r\n var urlSplitted = url.split('/edification', 1);\r\n url = urlSplitted[0];\r\n }\r\n if (url.includes('residence')) {\r\n var urlSplitted = url.split('/residence', 1);\r\n url = urlSplitted[0];\r\n }\r\n if (url.includes('vehicle')) {\r\n var urlSplitted = url.split('/vehicle', 1);\r\n url = urlSplitted[0];\r\n }\r\n if (url.includes('management')) {\r\n var urlSplitted = url.split('/management', 1);\r\n url = urlSplitted[0];\r\n }\r\n if (url.includes('company')) {\r\n var urlSplitted = url.split('/company', 1);\r\n url = urlSplitted[0];\r\n }\r\n if (url.includes('details')) {\r\n var urlSplitted = url.split('/details', 1);\r\n url = urlSplitted[0];\r\n }\r\n if (url.includes('create')) {\r\n var urlSplitted = url.split('/create', 1);\r\n url = urlSplitted[0];\r\n }\r\n if (url.includes('edit')) {\r\n var urlSplitted = url.split('/edit', 1);\r\n url = urlSplitted[0];\r\n }\r\n return url;\r\n}\r\n\r\nexport function separateParameters(params: any): any {\r\n //?taxes=inss&taxes\r\n let urlParams: any;\r\n let queryParams: any = {};\r\n let urlParamsList: any = [];\r\n if (params) {\r\n for (let key in params) {\r\n if (Array.isArray(params[key])) {\r\n for (let item of params[key]) {\r\n urlParamsList.push(`${key}=${item}`);\r\n }\r\n } else if (typeof params[key] !== 'function') {\r\n queryParams[key] = params[key];\r\n }\r\n }\r\n if (urlParamsList.length) {\r\n urlParams = `?${urlParamsList.join('&')}`;\r\n }\r\n }\r\n if (!urlParams) {\r\n urlParams = '';\r\n }\r\n return [urlParams, queryParams];\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Validators\r\n\r\n/**\r\n * Remove tudo o que não for dígito e valida o tamanho e sequências repetidas.\r\n */\r\nfunction sanitize(id: string, expectedLength: number): string | null {\r\n const digits = id.replace(/\\D+/g, '');\r\n if (digits.length !== expectedLength) return null;\r\n // impede sequências como \"11111111111\"\r\n if (/^(\\d)\\1+$/.test(digits)) return null;\r\n return digits;\r\n}\r\n\r\n/**\r\n * Calcula um dígito verificador para CPF/CNPJ\r\n * @param numbers array de dígitos (como números) sem os dígitos verificadores\r\n * @param multipliers array de pesos para multiplicação\r\n */\r\nfunction calculateVerifier(numbers: number[], multipliers: number[]): number {\r\n const sum = numbers.reduce((acc, num, idx) => acc + num * multipliers[idx], 0);\r\n const mod = sum % 11;\r\n return mod < 2 ? 0 : 11 - mod;\r\n}\r\n\r\n/**\r\n * Valida CPF (11 dígitos)\r\n */\r\nexport function isValidCPF(cpf: string): boolean {\r\n const raw = sanitize(cpf, 11);\r\n if (!raw) return false;\r\n\r\n const digits = raw.split('').map((d) => +d);\r\n // primeiros 9 dígitos para o primeiro verificador\r\n const firstVerifiers = digits.slice(0, 9);\r\n const v1 = calculateVerifier(firstVerifiers, [10, 9, 8, 7, 6, 5, 4, 3, 2]);\r\n if (v1 !== digits[9]) return false;\r\n\r\n // primeiros 10 dígitos para o segundo verificador\r\n const secondVerifiers = digits.slice(0, 10);\r\n const v2 = calculateVerifier(secondVerifiers, [11, 10, 9, 8, 7, 6, 5, 4, 3, 2]);\r\n return v2 === digits[10];\r\n}\r\n\r\n/**\r\n * Valida CNPJ (14 dígitos)\r\n */\r\nexport function isValidCNPJ(cnpj: string): boolean {\r\n const raw = sanitize(cnpj, 14);\r\n if (!raw) return false;\r\n\r\n const digits = raw.split('').map((d) => +d);\r\n const base = digits.slice(0, 12);\r\n\r\n // pesos primeiro dígito: [5,4,3,2,9,8,7,6,5,4,3,2]\r\n const p1 = calculateVerifier(base, [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]);\r\n if (p1 !== digits[12]) return false;\r\n\r\n // pesos segundo dígito: [6,...,2] (shift +1)\r\n const p2 = calculateVerifier([...base, p1], [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]);\r\n return p2 === digits[13];\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Download\r\n\r\nexport function downloadPdfFileByBlob(data: Blob, fileName: string) {\r\n const url = window.URL.createObjectURL(data);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = fileName;\r\n link.click();\r\n window.URL.revokeObjectURL(url);\r\n}\r\n\r\nexport function downloadFileBase64(fileBase64: string, name: string) {\r\n const a = document.createElement('a');\r\n a.href = fileBase64;\r\n a.target = '_blank';\r\n a.download = name;\r\n a.click();\r\n // const a = document.createElement('a');\r\n // const isSafariBrowser = navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1;\r\n // if (isSafariBrowser) {\r\n // a.setAttribute('target', '_blank');\r\n // }\r\n // a.setAttribute('href', url);\r\n // a.setAttribute('download', name);\r\n // a.style.visibility = 'hidden';\r\n // document.body.appendChild(a);\r\n // a.click();\r\n // document.body.removeChild(a);\r\n}\r\n\r\nexport function downloadFileCsv(data: any, fileName: any) {\r\n let blob = new Blob([data], { type: 'text/csv;charset=utf-8;' });\r\n let dwldLink = document.createElement('a');\r\n let url = URL.createObjectURL(blob);\r\n let isSafariBrowser =\r\n navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1;\r\n if (isSafariBrowser) {\r\n //if Safari open in new window to save file with random filename.\r\n dwldLink.setAttribute('target', '_blank');\r\n }\r\n dwldLink.setAttribute('href', url);\r\n dwldLink.setAttribute('download', fileName);\r\n dwldLink.style.visibility = 'hidden';\r\n document.body.appendChild(dwldLink);\r\n dwldLink.click();\r\n document.body.removeChild(dwldLink);\r\n}\r\n\r\nexport function downloadFilePrint(data: any) {\r\n let dwldLink = document.createElement('a');\r\n let url = URL.createObjectURL(data);\r\n let isSafariBrowser =\r\n navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1;\r\n if (isSafariBrowser) {\r\n //if Safari open in new window to save file with random filename.\r\n dwldLink.setAttribute('target', '_blank');\r\n }\r\n dwldLink.setAttribute('href', url);\r\n // dwldLink.setAttribute(\"download\", fileName);\r\n dwldLink.style.visibility = 'hidden';\r\n document.body.appendChild(dwldLink);\r\n dwldLink.click();\r\n document.body.removeChild(dwldLink);\r\n}\r\n// #endregion\r\n\r\n// #region Numbers\r\nexport function padNumber(value: number) {\r\n if (isNumber(value)) {\r\n return `0${value}`.slice(-2);\r\n } else {\r\n return '';\r\n }\r\n}\r\n\r\nexport function isNumber(value: any): boolean {\r\n return !isNaN(toInteger(value));\r\n}\r\n\r\nexport function convertToNumber(b: any) {\r\n if (b && typeof b == 'string') {\r\n return parseInt(b);\r\n }\r\n return b;\r\n}\r\n\r\nexport function toInteger(value: any): number {\r\n return parseInt(`${value}`, 10);\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Data and Time\r\nexport function dateFormat(date: Date): string {\r\n const month = date.getMonth() + 1;\r\n const day = date.getDate();\r\n const year = date.getFullYear();\r\n if (date) {\r\n return `${day}/${month}/${year}`;\r\n }\r\n\r\n return '';\r\n}\r\n\r\nexport function dateFormat2(date: any): string {\r\n if (!date) {\r\n return ''; // Retorna uma string vazia se a data for inválida\r\n }\r\n\r\n const parsedDate = date instanceof Date ? date : new Date(date); // Converte string em Date\r\n if (isNaN(parsedDate.getTime())) {\r\n return ''; // Retorna vazio se a conversão falhar\r\n }\r\n\r\n // Formate a data (exemplo: \"DD/MM/YYYY\")\r\n const day = parsedDate.getDate().toString().padStart(2, '0');\r\n const month = (parsedDate.getMonth() + 1).toString().padStart(2, '0');\r\n const year = parsedDate.getFullYear();\r\n\r\n return `${day}/${month}/${year}`;\r\n}\r\n\r\nexport function dateCustomFormat(date: any): string {\r\n let stringDate = '';\r\n if (date) {\r\n stringDate += isNumber(date.month) ? padNumber(date.month) + '/' : '';\r\n stringDate += isNumber(date.day) ? padNumber(date.day) + '/' : '';\r\n\r\n stringDate += date.year;\r\n }\r\n return stringDate;\r\n}\r\n\r\nexport function getDateFormatterFromString(dateInStr: string): any {\r\n if (dateInStr && dateInStr.length > 0) {\r\n const dateParts = dateInStr.trim().split('/');\r\n return [\r\n {\r\n year: toInteger(dateParts[2]),\r\n month: toInteger(dateParts[0]),\r\n day: toInteger(dateParts[1]),\r\n },\r\n ];\r\n }\r\n\r\n const _date = new Date();\r\n return [\r\n {\r\n year: _date.getFullYear(),\r\n month: _date.getMonth() + 1,\r\n day: _date.getDay(),\r\n },\r\n ];\r\n}\r\n\r\nexport function getDateFromString(dateInStr: string = ''): Date | null {\r\n if (dateInStr && dateInStr.length > 0 && dateInStr.length < 9) {\r\n const day = toInteger(dateInStr.substring(0, 2));\r\n const month = toInteger(dateInStr.substring(2, 4));\r\n const year = toInteger(dateInStr.substring(4, 8));\r\n\r\n // const dateParts = dateInStr.trim().split('/');\r\n // const year = this.toInteger(dateParts[2]);\r\n // const month = this.toInteger(dateParts[0]);\r\n // const day = this.toInteger(dateParts[1]);\r\n // tslint:disable-next-line:prefer-const\r\n let result = new Date();\r\n result.setDate(day);\r\n result.setMonth(month - 1);\r\n result.setFullYear(year);\r\n return result;\r\n }\r\n if (dateInStr && dateInStr.length > 8) {\r\n const day = toInteger(dateInStr.substring(0, 2));\r\n const month = toInteger(dateInStr.substring(3, 5));\r\n const year = toInteger(dateInStr.substring(6, 10));\r\n\r\n const result = new Date();\r\n result.setDate(day);\r\n result.setMonth(month - 1);\r\n result.setFullYear(year);\r\n return new Date(\r\n dateInStr.substring(6, 10) +\r\n '-' +\r\n dateInStr.substring(3, 5) +\r\n '-' +\r\n dateInStr.substring(0, 2) +\r\n 'T00:00:00',\r\n );\r\n }\r\n return null;\r\n}\r\n\r\nexport function getFormatDate(_date?: Date): string | null {\r\n if (!_date) {\r\n return null;\r\n }\r\n\r\n var date = new Date(_date);\r\n const format = 'yyyy-MM-dd';\r\n const locale = 'en-US';\r\n return formatDate(date, format, locale);\r\n}\r\n\r\n/**\r\n * Converte uma Date UTC para string formatada no fuso especificado.\r\n * @param utcDateTime – Date em UTC\r\n * @param timeZone – identificador IANA do fuso (ex: 'America/Sao_Paulo')\r\n * @returns string no formato \"DD/MM/YYYY HH:mm:ss\"\r\n */\r\nexport function convertToTimeZone(utcDateTime: Date, timeZone: string): string {\r\n // Usa locale pt-BR para garantir ordem dia/mês/ano e 24h\r\n return utcDateTime.toLocaleString('pt-BR', {\r\n timeZone,\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit',\r\n hour12: false,\r\n });\r\n}\r\n\r\nexport function getEnumLanguageCodeByString(locale: string): LanguageCode | undefined {\r\n const supportedLanguages = Object.values(LanguageCode).find((lang) => lang === locale);\r\n return supportedLanguages as LanguageCode | undefined;\r\n}\r\n\r\nexport function setTimeZone(cultureCode: LanguageCode) {\r\n switch (cultureCode) {\r\n case LanguageCode.PortugueseBrazil:\r\n return 'America/Sao_Paulo';\r\n case LanguageCode.SpanishPeru:\r\n return 'America/Lima';\r\n case LanguageCode.SpanishUruguay:\r\n return 'America/Montevideo';\r\n case LanguageCode.SpanishEcuador:\r\n return 'America/Guayaquil';\r\n case LanguageCode.SpanishArgentina:\r\n return 'America/Argentina/Buenos_Aires';\r\n case LanguageCode.EnglishFalklandIslands:\r\n return 'Atlantic/Stanley';\r\n case LanguageCode.SpanishBolivia:\r\n return 'America/La_Paz';\r\n case LanguageCode.SpanishParaguay:\r\n return 'America/Asuncion';\r\n case LanguageCode.SpanishChile:\r\n return 'Chile/Continental';\r\n default:\r\n return 'America/Sao_Paulo';\r\n }\r\n}\r\n\r\nexport function calculateDifferenceInDays(dateDue: Date): number {\r\n const dataAtual = new Date();\r\n const dataFutura = new Date(dateDue);\r\n\r\n const dataAtualMs = dataAtual.getTime();\r\n const dataFinalMs = dataFutura.getTime();\r\n\r\n const diferencaMs = dataFinalMs - dataAtualMs;\r\n\r\n const diferencaDias = Math.floor(diferencaMs / (1000 * 60 * 60 * 24));\r\n\r\n return diferencaDias;\r\n}\r\n\r\n// #endregion\r\n\r\n// #region PDF\r\n\r\nexport function base64toBlob(base64Data: any, contentType: any) {\r\n contentType = contentType || '';\r\n const sliceSize = 1024;\r\n const byteCharacters = atob(base64Data);\r\n const bytesLength = byteCharacters.length;\r\n const slicesCount = Math.ceil(bytesLength / sliceSize);\r\n const byteArrays = new Array(slicesCount);\r\n\r\n for (let sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\r\n const begin = sliceIndex * sliceSize;\r\n const end = Math.min(begin + sliceSize, bytesLength);\r\n\r\n const bytes = new Array(end - begin);\r\n for (let offset = begin, i = 0; offset < end; ++i, ++offset) {\r\n bytes[i] = byteCharacters[offset].charCodeAt(0);\r\n }\r\n byteArrays[sliceIndex] = new Uint8Array(bytes);\r\n }\r\n return new Blob(byteArrays, { type: contentType });\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Imagem\r\n/**\r\n * Converte o conteúdo base64 de uma imagem em um data URL válido.\r\n * Se não receber dados, retorna string vazia.\r\n */\r\nexport function convertImageUrlToImageBase64(dataURL: string | null | undefined): string {\r\n return dataURL ? `data:image/jpeg;base64,${dataURL}` : '';\r\n}\r\n\r\n/**\r\n * Converte um Blob em Base64 data URL.\r\n * @param blob – arquivo Blob (imagem, PDF, etc).\r\n * @returns Promise que resolve para uma string data URL ex: \"data:image/png;base64,iVBORw0...\"\r\n */\r\nexport function convertBlobToBase64(blob: Blob): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n if (typeof reader.result === 'string') {\r\n resolve(reader.result);\r\n } else {\r\n reject(new Error('FileReader.result não é string'));\r\n }\r\n };\r\n reader.onerror = () => reject(reader.error);\r\n reader.readAsDataURL(blob);\r\n });\r\n}\r\n\r\n/**\r\n * Remove o prefixo \"data:*\\/*;base64,\" de uma string Base64.\r\n * @param dataURL – string data URL completa.\r\n * @returns somente o payload Base64.\r\n */\r\nexport function stripDataUrlPrefix(dataURL: string): string {\r\n const commaIndex = dataURL.indexOf(',');\r\n return commaIndex >= 0 ? dataURL.substring(commaIndex + 1) : dataURL;\r\n}\r\n\r\n/**\r\n * Formata um tamanho em bytes para uma string legível (Bytes, KB, MB, ...).\r\n * @param bytes – valor em bytes.\r\n * @param decimals – casas decimais (padrão 2).\r\n * @returns ex: \"1.23 MB\"\r\n */\r\nexport function formatBytes(bytes: number, decimals = 2): string {\r\n if (bytes === 0) {\r\n return '0 Bytes';\r\n }\r\n const k = 1024;\r\n const dm = Math.max(0, decimals);\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\r\n}\r\n\r\n/**\r\n * Calcula o tamanho (em bytes e string formatada) de uma string Base64.\r\n * @param base64 – payload Base64 (sem o prefixo data URL).\r\n * @returns objeto com tamanho em bytes e em string (KB/MB/...).\r\n */\r\nexport function calculateBase64Size(base64: string): { bytes: number; formatted: string } {\r\n // remove possíveis quebras de linha\r\n const cleaned = base64.trim();\r\n const paddingMatches = cleaned.match(/=+$/);\r\n const padding = paddingMatches ? paddingMatches[0].length : 0;\r\n const base64Length = cleaned.length;\r\n // cada 4 chars representam 3 bytes, menos padding\r\n const bytes = Math.floor((base64Length * 3) / 4) - padding;\r\n return {\r\n bytes,\r\n formatted: formatBytes(bytes),\r\n };\r\n}\r\n\r\n/**\r\n * Converte um data URL para um Blob.\r\n * @param dataURL – string data URL completa (\"data:[mime];base64,AAAA...\").\r\n * @returns Blob com o conteúdo decodificado.\r\n */\r\nexport function dataURLToBlob(dataURL: string): Blob {\r\n const [meta, payload] = dataURL.split(',');\r\n if (!payload) {\r\n throw new Error('Data URL inválido');\r\n }\r\n const isBase64 = meta.includes(';base64');\r\n const raw = isBase64 ? atob(payload) : decodeURIComponent(payload);\r\n // extrai o content-type ou usa application/octet-stream\r\n const match = meta.match(/data:(.*?)(;|$)/);\r\n const contentType = match ? match[1] : 'application/octet-stream';\r\n\r\n const buffer = new Uint8Array(raw.length);\r\n for (let i = 0; i < raw.length; i++) {\r\n buffer[i] = raw.charCodeAt(i);\r\n }\r\n return new Blob([buffer], { type: contentType });\r\n}\r\n\r\nexport function checkValidTouched(control: FormControl) {\r\n return control.errors && (control.dirty || control.touched);\r\n}\r\n\r\nexport function applyCssError(control: any) {\r\n return {\r\n 'is-invalid': checkValidTouched(control),\r\n };\r\n}\r\n\r\nexport function checkFormValidations(formGroup: FormGroup) {\r\n let invalidControle = [];\r\n const controls = formGroup.controls;\r\n for (const name in controls) {\r\n if (controls[name].invalid) {\r\n invalidControle.push(name);\r\n }\r\n }\r\n\r\n Object.keys(formGroup.controls).forEach((campo) => {\r\n const controle = formGroup.get(campo);\r\n\r\n controle?.markAsDirty();\r\n controle?.markAsTouched();\r\n\r\n if (controle instanceof FormGroup) {\r\n checkFormValidations(controle);\r\n }\r\n\r\n if (controle instanceof FormArray) {\r\n controle.controls.forEach((item) => {\r\n if (item instanceof FormGroup) {\r\n checkFormValidations(item);\r\n }\r\n });\r\n }\r\n });\r\n\r\n return invalidControle;\r\n}\r\n\r\nexport const flatListToTree = <T>(\r\n flatList: T[],\r\n idPath: keyof T,\r\n parentIdPath: keyof T,\r\n childListPath: keyof T,\r\n isParent: (t: T) => boolean,\r\n) => {\r\n const rootParents: T[] = [];\r\n const map: any = {};\r\n for (const item of flatList) {\r\n if (!(item as any)[childListPath]) (item as any)[childListPath] = [];\r\n map[item[idPath]] = item;\r\n }\r\n for (const item of flatList) {\r\n const parentId = item[parentIdPath];\r\n if (isParent(item)) {\r\n rootParents.push(item);\r\n } else {\r\n const parentItem = map[parentId];\r\n parentItem[childListPath].push(item);\r\n }\r\n }\r\n return rootParents;\r\n};\r\n\r\n// #endregion\r\n\r\n// #region Enums\r\n/**\r\n * Retorna só os valores “reais” de um enum (elimina as chaves reversas de numeric enums).\r\n */\r\nexport function getEnumValues<T extends Record<string, string | number>>(\r\n enumObj: T,\r\n): Array<string | number> {\r\n return Object.values(enumObj).filter(\r\n (v) => typeof v === 'string' || typeof v === 'number',\r\n ) as Array<string | number>;\r\n}\r\n\r\n/**\r\n * Constrói um dropdown a partir de qualquer enum.\r\n * Retorna Observable de ISelectItem, onde value será string|number.\r\n */\r\nexport function getDropDownByEnum<T extends Record<string, string | number>>(\r\n enumObj: T,\r\n): Observable<ISelectItem[]> {\r\n const items: ISelectItem[] = Object.entries(enumObj)\r\n .filter(([key, value]) => isNaN(Number(key))) // Mantém apenas as chaves que são strings (ignora reversos)\r\n .map(([key, id]) => ({\r\n id, // Ex: 1\r\n label: key, // Ex: \"SHARED.ENUMS.TASK_COLUMN.PENDING\"\r\n groupBy: null,\r\n }));\r\n\r\n return of(items);\r\n}\r\n\r\n/**\r\n * Dado um enum e um valor, retorna a chave (nome) correspondente.\r\n */\r\nexport function getEnumKeyByValue<T extends Record<string, string | number>>(\r\n enumObj: T,\r\n value: string | number,\r\n): string | undefined {\r\n return (Object.keys(enumObj) as Array<keyof T>).find((key) => enumObj[key] === value) as\r\n | string\r\n | undefined;\r\n}\r\n\r\n/**\r\n * Dado um enum e uma chave (nome), retorna o valor correspondente.\r\n */\r\nexport function getEnumValueByKey<T extends Record<string, string | number>>(\r\n enumObj: T,\r\n key: string,\r\n): string | number | undefined {\r\n return enumObj[key as keyof T];\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Others\r\nexport function toFormGroup(questions: BCFormItemBase[] | null) {\r\n const group: any = {};\r\n questions?.forEach((question) => {\r\n group[question.key] = question.required\r\n ? new FormControl(\r\n question.value !== undefined && question.value !== null ? question.value : null,\r\n Validators.required,\r\n )\r\n : new FormControl(\r\n question.value !== undefined && question.value !== null ? question.value : null,\r\n );\r\n });\r\n return new FormGroup(group);\r\n}\r\n\r\nexport function checkIsNullOrUndefined(value: any): boolean {\r\n return value === null || value === undefined;\r\n}\r\n\r\nexport function getFileIcon(contentType?: string): string {\r\n if (contentType === 'application/pdf') {\r\n return 'pi pi-file-pdf';\r\n }\r\n if (\r\n contentType === 'image/jpg' ||\r\n contentType === 'image/jpeg' ||\r\n contentType === 'image/gif' ||\r\n contentType === 'image/x-png'\r\n ) {\r\n return 'pi pi-images';\r\n }\r\n if (contentType === 'word') {\r\n return 'pi pi-file-word';\r\n }\r\n if (contentType === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {\r\n return 'pi pi-file-excel';\r\n }\r\n return 'pi pi-file-o';\r\n}\r\n\r\n// #endregion\r\n\r\n//#region String\r\n\r\nexport function formatFileName(entityName: string, reportName: string): string {\r\n const formattedEntityCode = extractCode(entityName);\r\n const formattedReportName = replaceSpacesAndHyphens(reportName);\r\n return `${formattedEntityCode}_${formattedReportName}`;\r\n}\r\n\r\nfunction replaceSpacesAndHyphens(input: string): string {\r\n return input.replace(/[\\s-]/g, '_');\r\n}\r\n\r\nfunction extractCode(input: string): string {\r\n const match = input.match(/^\\d+/);\r\n return match ? match[0] : '';\r\n}\r\n//#endregion\r\n\r\n//#endregion\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DynamicDialogConfig } from 'primeng/dynamicdialog';\r\n\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { NotificationService } from '../../../services/notification.service';\r\nimport { DynamicFormQuestionComponent } from './dynamic-form-question.component';\r\nimport { InputFileDragComponent } from './input-file-drag/input-file-drag.component';\r\nimport { BCFormItemBase } from '../models/form-item-base.model';\r\nimport { checkFormValidations, toFormGroup } from '../../../utils/util.functions';\r\n\r\n@Component({\r\n selector: 'app-dynamic-form',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ButtonModule,\r\n TranslocoModule,\r\n DynamicFormQuestionComponent,\r\n InputFileDragComponent,\r\n DialogModule,\r\n ],\r\n templateUrl: './dynamic-form.component.html',\r\n})\r\nexport class DynamicFormComponent implements OnInit {\r\n protected notificationService = inject(NotificationService);\r\n protected config = inject(DynamicDialogConfig, { optional: true });\r\n\r\n form!: FormGroup;\r\n\r\n @Input() questions: BCFormItemBase[] | null = [];\r\n @Input() objectName = '';\r\n @Input() hasFileUpload = false;\r\n @Input() acceptType = '';\r\n @Input() maxFiles = 1;\r\n @Input() fileName?: string;\r\n @Input() userUpdate?: string;\r\n @Input() convertedDate?: string;\r\n\r\n @Output() formSubmit = new EventEmitter<any>();\r\n @Output() close = new EventEmitter<any>();\r\n\r\n files: File[] = [];\r\n\r\n ngOnInit(): void {\r\n this.initializeForm();\r\n }\r\n\r\n protected initializeForm(): void {\r\n const data = this.config?.data || {};\r\n this.questions = data.questions || this.questions || [];\r\n this.objectName = this.objectName || data.objectName || '';\r\n this.hasFileUpload = this.hasFileUpload || data.hasFileUpload || false;\r\n this.acceptType = this.acceptType || data.acceptType || '';\r\n this.maxFiles = this.maxFiles !== 1 ? this.maxFiles : (data.maxFiles ?? 1);\r\n this.fileName = this.fileName || data.fileName;\r\n this.userUpdate = this.userUpdate || data.userUpdate;\r\n this.convertedDate = this.convertedDate || data.convertedDate;\r\n\r\n this.form = toFormGroup(this.questions);\r\n }\r\n\r\n onFilesChange(files: File[]): void {\r\n this.files = files;\r\n }\r\n\r\n submitForm(value: { [key: string]: any }): void {\r\n let invalidControls = [];\r\n if (this.form.valid) {\r\n this.formSubmit.emit({ form: value, files: this.files });\r\n } else {\r\n invalidControls = checkFormValidations(this.form);\r\n this.notificationService.error('Por favor, corrija os erros no formulário.');\r\n return;\r\n }\r\n }\r\n\r\n onClose() {\r\n this.close.emit();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" class=\"flex flex-col gap-4\">\r\n <!-- Upload de arquivos -->\r\n <div *ngIf=\"hasFileUpload && !fileName\" class=\"mb-3\">\r\n <app-input-file-drag [acceptType]=\"acceptType\" [maxFiles]=\"maxFiles\"\r\n (inputFile)=\"onFilesChange($event)\"></app-input-file-drag>\r\n </div>\r\n\r\n <!-- Se já houver arquivo carregado -->\r\n <h4 *ngIf=\"fileName && hasFileUpload\" class=\"fw-bold\">\r\n Nome do arquivo: {{ fileName }}\r\n </h4>\r\n\r\n <!-- Perguntas dinâmicas -->\r\n <ng-container *ngFor=\"let q of questions\">\r\n <app-dynamic-form-question *ngIf=\"q.buildInForm\" [question]=\"q\" [form]=\"form\"></app-dynamic-form-question>\r\n </ng-container>\r\n\r\n <!-- Informação de última atualização -->\r\n <div *ngIf=\"userUpdate && convertedDate\" class=\"mt-3\">\r\n <small class=\"text-muted\">\r\n {{ 'SHARED.COMPONENTS.FORMS.FORM_UPDATE.DATE_OF_LAST_CHANGE' | transloco }}\r\n {{ convertedDate }}, {{ userUpdate }}\r\n </small>\r\n </div>\r\n <div class=\"flex justify-end gap-4 mt-4\">\r\n <button pButton type=\"button\" label=\"{{ 'SHARED.COMMON.CANCEL' | transloco }}\" class=\"p-button-secondary\"\r\n (click)=\"onClose()\"></button>\r\n <button pButton label=\"{{ 'general.singular.save' | transloco }}\" (click)=\"submitForm(form.value)\">\r\n </button>\r\n </div>\r\n</form>","import { CommonModule } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { DynamicFormComponent } from './dynamic-form.component';\r\n\r\n@Component({\r\n selector: 'app-dynamic-form-dialog',\r\n standalone: true,\r\n imports: [CommonModule, DialogModule, DynamicFormComponent],\r\n template: `\r\n <app-dynamic-form\r\n [questions]=\"config.data.questions\"\r\n [objectName]=\"config.data.objectName\"\r\n [hasFileUpload]=\"config.data.hasFileUpload\"\r\n [acceptType]=\"config.data.acceptType\"\r\n [maxFiles]=\"config.data.maxFiles\"\r\n [fileName]=\"config.data.fileName\"\r\n [userUpdate]=\"config.data.userUpdate\"\r\n [convertedDate]=\"config.data.convertedDate\"\r\n (formSubmit)=\"dialogRef.close($event)\"\r\n (close)=\"dialogRef.close(null)\"\r\n ></app-dynamic-form>\r\n `,\r\n})\r\nexport class DynamicFormDialogComponent {\r\n constructor(\r\n public dialogRef: DynamicDialogRef,\r\n public config: DynamicDialogConfig,\r\n ) { }\r\n}\r\n","import { BCBaseModel } from '../base-model';\r\n\r\n\r\nexport class Search extends BCBaseModel {\r\n page?: number;\r\n size?: number;\r\n filter?: string;\r\n\r\n //Config\r\n public url?: string;\r\n public isCollapsed = true;\r\n\r\n //Report\r\n mediaType?: 'PDF' | 'EXCEL';\r\n public groupByRegion?: boolean;\r\n public usedFilterReport = ' ';\r\n\r\n //Tabs\r\n public activeTab = 0;\r\n public activeSecoundTab = 0;\r\n public activeThirdTab = 0;\r\n public activeTerrainTab = 0;\r\n\r\n //Data Table\r\n public filterValue = '';\r\n public pageIndex = 0;\r\n public pageSize = 10;\r\n public matSortActive = 'name';\r\n public matSortDirection: any = 'asc';\r\n\r\n //Config\r\n public userSearchId?: string;\r\n public userSearchName?: string;\r\n public accessGroupId?: string;\r\n public accessGroupName?: string;\r\n\r\n public userName?: string;\r\n public deactivatedItems?: boolean;\r\n public description?: string;\r\n public dateStart?: Date;\r\n public dateStart2?: Date;\r\n public dateEnd?: Date;\r\n public dateEnd2?: Date;\r\n\r\n // Company\r\n public companyId?: string;\r\n public companyName?: string;\r\n public ieId?: string;\r\n public imId?: string;\r\n public pjId?: string;\r\n public cadastralSituation?: number;\r\n public cadastralSituationName?: string;\r\n public cnae?: string;\r\n public cnaeId?: number;\r\n\r\n //Register\r\n public searchEntityId?: string;\r\n //public entityId?: string = '5ec1856a-554f-4bac-b57a-daf4d6661797';\r\n public entityId?: string;\r\n public divisionId?: string;\r\n public unionId?: string;\r\n public associationId?: string;\r\n public departamentId?: string;\r\n public legalEntityId?: string;\r\n public mainLegalEntityId?: string;\r\n public entityTypeId?: string;\r\n public entityTypeName?: string;\r\n public entityStatus?: number;\r\n public fileTypeId?: string;\r\n public identificationId?: string;\r\n public documentType?: number;\r\n public fileTypeName?: string;\r\n public notificationTypeId?: string;\r\n public notificationTypeName?: string;\r\n public propertyTypeId?: string;\r\n public propertyTypeName?: string;\r\n public possessionTitleId?: string;\r\n public possessionTitleName?: string;\r\n public nomenclatureName?: string;\r\n\r\n // CEI / CNO\r\n public cnoId?: string;\r\n public minArea?: number;\r\n public maxArea?: number;\r\n\r\n // Propriedades\r\n public projetoAprovado?: number;\r\n public constructionPermit?: number;\r\n public cno?: number;\r\n public avcb?: number;\r\n public habitese?: number;\r\n public businessLicense?: number;\r\n\r\n // Serasa\r\n public occurrenceType?: number;\r\n\r\n //Address\r\n public street?: string;\r\n public streetNumber?: string;\r\n public district?: string;\r\n public zipCode?: string;\r\n public city?: string;\r\n public cityId?: string;\r\n public state?: string;\r\n public stateId?: string;\r\n public country?: string;\r\n public countryId?: string;\r\n\r\n\r\n //User\r\n public isAdmin?: boolean;\r\n public isDivision?: boolean;\r\n public isUnion?: boolean;\r\n\r\n //Task\r\n public archivedItems?: boolean;\r\n public userIds?: string[] = [];\r\n\r\n //Conservation\r\n public conservationCategory?: string;\r\n public propertyCategory?: number;\r\n public frequency?: number;\r\n public value?: string;\r\n public viewMode?: number;\r\n public open?: boolean;\r\n public conservationItemIds?: string[] = [];\r\n public propertyId?: string;\r\n public typeOfProperty?: number;\r\n\r\n constructor(init?: Partial<Search>) {\r\n super(init);\r\n if (init) {\r\n Object.assign(this, init);\r\n }\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { StorageService } from './auth/storage.service';\r\nimport { Search } from '../models/common/search.model';\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SearchService {\r\n storageService = inject(StorageService);\r\n\r\n getSearch(url: string): Search {\r\n const res = this.storageService.getSessionStorage(url);\r\n // if (res) {\r\n // return res;\r\n // } else {\r\n // return new Search();\r\n // }\r\n return new Search();\r\n }\r\n\r\n setSearch(url: string, search: Search) {\r\n search.url = url;\r\n this.storageService.setSessionStorage(url, search);\r\n }\r\n\r\n clearSearch(url: string) {\r\n this.storageService.removeSessionStorage(url);\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n DestroyRef,\r\n Directive,\r\n inject,\r\n signal,\r\n Type,\r\n ViewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { firstValueFrom, Observable, of, throwError } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\n\r\n// Models\r\nimport { BCBaseModel } from '../../models/base-model';\r\n\r\n// Services\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { BCBaseComponent } from '../base/base.component';\r\nimport { AppConfirmationService } from '../../services/confirmation.service';\r\nimport { SearchStateService } from '../generic-search/search-state.service';\r\nimport { SearchFieldConfig } from '../generic-search/search-field-config.interface';\r\nimport { BCFormItemBase } from '../forms/models/form-item-base.model';\r\nimport { DynamicFormDialogComponent } from '../forms/dynamic-form/dynamic-dialog.component';\r\nimport { SearchService } from '../../services/search.service';\r\nimport { Search } from '../../models/common/search.model';\r\nimport { BCBaseService } from '../../services/base.service';\r\nimport { PaginationResponseDto } from '../../models/common/pagination-response-dto';\r\nimport { PaginationRequestDto } from '../../models/common/pagination-request-dto';\r\n\r\n@Directive()\r\nexport abstract class BCBaseDataComponent<T extends BCBaseModel, TService extends BCBaseService<T>>\r\n extends BCBaseComponent\r\n implements AfterViewInit\r\n{\r\n search: Search | null = null;\r\n\r\n protected dialogService = inject(DialogService);\r\n protected confirmationService = inject(AppConfirmationService);\r\n protected searchStateService = inject(SearchStateService);\r\n protected searchService = inject(SearchService);\r\n protected transloco = inject(TranslocoService);\r\n protected destroyRef = inject(DestroyRef);\r\n\r\n protected abstract storageKey?: string;\r\n protected searchConfig: SearchFieldConfig[] = [];\r\n currentSearchParams: any = {};\r\n\r\n items: T[] = [];\r\n\r\n constructor(private baseService: TService) {\r\n super();\r\n }\r\n\r\n /**\r\n * if the search should be executed automatically on initialization. Default is true\r\n */\r\n protected loadDataOnInitialization = true;\r\n ///\r\n protected abstract getFormDialogComponent(): Type<any>;\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit(); // calls initSession of BaseComponent\r\n this.searchStateService\r\n .getSearchParams(this.storageKey ?? '')\r\n .pipe(take(1))\r\n .subscribe(async (params) => {\r\n // 'async' here to use 'await' in load()\r\n this.currentSearchParams = params;\r\n // Only runs 'load' if the flag allows it.\r\n if (this.loadDataOnInitialization) {\r\n await this.load();\r\n }\r\n });\r\n\r\n this.search = this.searchService.getSearch(this.router.url);\r\n }\r\n\r\n /******************pagination ****************/\r\n\r\n public paginationResponse: WritableSignal<PaginationResponseDto<T> | null> =\r\n signal<PaginationResponseDto<T> | null>(null);\r\n private paginationRequest: WritableSignal<PaginationRequestDto> = signal<PaginationRequestDto>({\r\n pageNumber: 1,\r\n pageSize: 0,\r\n filters: [],\r\n orders: [],\r\n });\r\n\r\n public onLazyLoad(paginationRequest: PaginationRequestDto) {\r\n this.paginationRequest.update((pr) => {\r\n pr = paginationRequest;\r\n return pr;\r\n });\r\n\r\n this.handleSearch(this.paginationRequest());\r\n }\r\n\r\n /******************************************/\r\n\r\n // makes load() asynchronous to wait for beforeInitialLoad\r\n async load(): Promise<void> {\r\n // Allows subclasses to modify 'search' before the initial 'load', if necessary\r\n await Promise.resolve(this.beforeInitialLoad()); // waits for beforeInitialLoad to complete\r\n this.list(this.currentSearchParams);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // This setTimeout was removed, as the filling logic is now handled by ngOnChanges in GenericSearchComponent\r\n // and by asynchronous operations in beforeInitialLoad.\r\n // if (this.genericSearchComponent) {\r\n // // GenericSearchComponent.ngOnChanges will handle form updates.\r\n // }\r\n }\r\n\r\n /**\r\n * Hook for subclasses to perform asynchronous actions before the initial load.\r\n * Can be asynchronous (return Promise<void>) or synchronous (return void).\r\n */\r\n protected beforeInitialLoad(): Promise<void> | void {}\r\n\r\n list(params: any): void {\r\n this.loadData(params).subscribe({\r\n next: (res) => {\r\n this.items = res;\r\n },\r\n error: (error) => {\r\n this.showError(this.transloco.translate('error.error_load_data'));\r\n console.error(error);\r\n },\r\n });\r\n }\r\n\r\n /** Returns an Observable<T[]> with all items; implemented by the child class */\r\n protected abstract loadData(params: any): Observable<T[]>;\r\n\r\n handleSearch(params: any): void {\r\n const cleanedParams: any = {};\r\n\r\n // eval all params\r\n for (const key in params) {\r\n // checks if the property really belongs to the object\r\n if (Object.prototype.hasOwnProperty.call(params, key)) {\r\n const value = params[key];\r\n\r\n // Adds to the new object ONLY if the value is not null, undefined or an empty string\r\n if (value !== null && value !== undefined && value !== '') {\r\n cleanedParams[key] = value;\r\n }\r\n }\r\n }\r\n // ------------------------------------------\r\n\r\n // Now use the already cleaned parameters\r\n this.currentSearchParams = cleanedParams;\r\n\r\n if (this.storageKey) this.searchStateService.setSearchParams(this.storageKey, cleanedParams);\r\n this.list(cleanedParams);\r\n }\r\n\r\n openDialog(object?: T) {\r\n const ref = this.dialogService.open(DynamicFormDialogComponent, {\r\n data: {\r\n questions: this.getFormItems(object),\r\n hasFileUpload: false,\r\n },\r\n header: object?.id\r\n ? this.transloco.translate('general.singular.edit') + this.getObjectName(object)\r\n : this.transloco.translate('general.singular.new'),\r\n closable: true,\r\n modal: true,\r\n draggable: true,\r\n resizable: true,\r\n contentStyle: { overflow: 'auto' },\r\n style: {\r\n width: '500px',\r\n maxWidth: '99vw',\r\n maxHeight: '99vh',\r\n },\r\n });\r\n\r\n ref?.onClose.subscribe((result: { form: T; files: any[] }) => {\r\n if (result && result.form) {\r\n this.handleSave(result.form, object?.id);\r\n }\r\n });\r\n }\r\n\r\n private handleSave(formData: T, id?: number) {\r\n const operation$: Observable<any> = id ? this.onEdit(formData, id) : this.onAdd(formData);\r\n\r\n operation$.subscribe({\r\n next: () => {\r\n this.showSuccess(this.transloco.translate('SHARED.COMMON.BASE_LIST.OPERATION_SUCCESS'));\r\n this.load();\r\n },\r\n error: (error: any) => {\r\n this.showError(this.transloco.translate('SHARED.COMMON.BASE_LIST.OPERATION_ERROR'));\r\n console.error(error);\r\n },\r\n });\r\n }\r\n\r\n protected getRowClass = (row: T): string => {\r\n const isInactive = !row.active;\r\n return isInactive ? 'row-inactive' : '';\r\n };\r\n\r\n protected getFormItems(object?: T): BCFormItemBase[] {\r\n return [];\r\n }\r\n\r\n protected onAdd(object: T): Observable<any> {\r\n console.warn('onAdd not implemented in the child class.');\r\n this.showError(this.transloco.translate('base-components.base-list.add-not-supported'));\r\n return of(null);\r\n }\r\n\r\n protected onEdit(object: T, id: number): Observable<any> {\r\n console.warn('onEdit not implemented in the child class.');\r\n this.showError(this.transloco.translate('base-components.base-list.edit-not-supported'));\r\n return of(null);\r\n }\r\n\r\n protected getObjectName(object?: T): string | undefined {\r\n return this.transloco.translate('base-components.base-list.default-item-name');\r\n }\r\n\r\n async onRemove(object: T): Promise<void> {\r\n // const translatedMessage = await firstValueFrom(\r\n // this.transloco.selectTranslate('base-components.base-list.sure-delete-item', { item: object.toString() }),\r\n // );\r\n\r\n const translatedMessage = await firstValueFrom(\r\n this.transloco.selectTranslate('base-components.base-list.sure-delete-item', { item: '' }),\r\n );\r\n\r\n const confirmed = await this.confirmationService.confirmDelete({\r\n message: translatedMessage,\r\n });\r\n\r\n if (!confirmed) return;\r\n\r\n this.onDelete(object?.id).subscribe({\r\n next: () => {\r\n this.showSuccess(this.transloco.translate('base-components.base-list.operation-success'));\r\n this.load();\r\n },\r\n error: (error) => {\r\n this.showError(this.transloco.translate('base-components.base-list.error-remove-item'));\r\n console.error(error);\r\n },\r\n });\r\n }\r\n\r\n protected onDelete(id: number): Observable<void> {\r\n return this.baseService.delete(id);\r\n }\r\n\r\n public openFormDialog(objectModel?: T) {\r\n const ds = this.dialogService.open(this.getFormDialogComponent(), {\r\n data: {\r\n disableControl: this.disableControl,\r\n },\r\n inputValues: {\r\n initForm: objectModel,\r\n edit: objectModel?.id,\r\n },\r\n header: this.transloco.translate(\r\n objectModel?.id ? 'general.singular.edition' : 'general.singular.new',\r\n ),\r\n closable: true,\r\n modal: true,\r\n draggable: true,\r\n resizable: false,\r\n contentStyle: { overflow: 'auto' },\r\n style: { width: '40vw' },\r\n });\r\n\r\n ds?.onClose.subscribe((result: T) => {\r\n if (!result) return;\r\n const callback = () => {\r\n const messageKey =\r\n result.id > 0 ? 'general.phrase.updated_success' : 'general.phrase.created_success';\r\n this.showSuccess(this.transloco.translate(messageKey));\r\n this.handleSearch(this.currentSearchParams);\r\n };\r\n if (result.id > 0) {\r\n this.baseService.update(result, result.id).subscribe(callback);\r\n } else {\r\n this.baseService.create(result).subscribe(callback);\r\n }\r\n });\r\n }\r\n}\r\n","import { inject, Injector, Signal } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\r\nimport { distinctUntilChanged, startWith } from 'rxjs';\r\n\r\ntype ControlValue<C> =\r\n C extends FormControl<infer V>\r\n ? V\r\n : C extends FormGroup<infer G>\r\n ? { [K in keyof G]: ControlValue<G[K]> }\r\n : C extends FormArray<infer A>\r\n ? ReadonlyArray<ControlValue<A>>\r\n : never;\r\n\r\nexport type SignalsFromForm<T> = {\r\n [K in keyof T]: T[K] extends FormControl<infer V>\r\n ? Signal<V>\r\n : T[K] extends FormGroup<infer G>\r\n ? SignalsFromForm<G>\r\n : T[K] extends FormArray<infer A>\r\n ? Signal<ReadonlyArray<ControlValue<A>>>\r\n : never;\r\n};\r\n\r\nexport type ToSignalFormOptions = {\r\n injector?: Injector;\r\n deepDistinct?: boolean;\r\n};\r\n\r\nconst deepEqual = (a: any, b: any) => JSON.stringify(a) === JSON.stringify(b);\r\n\r\nexport function toSignalForm<T extends Record<string, any>>(\r\n group: FormGroup<T>,\r\n opts: ToSignalFormOptions = {},\r\n): SignalsFromForm<T> {\r\n const injector = opts.injector ?? tryInject();\r\n const out: any = {};\r\n\r\n for (const key of Object.keys(group.controls)) {\r\n const ctrl = group.controls[key];\r\n\r\n if (ctrl instanceof FormControl) {\r\n type V = ControlValue<T[typeof key]>;\r\n const cmp = opts.deepDistinct ? deepEqual : (x: any, y: any) => x === y;\r\n\r\n out[key] = toSignal<V>(\r\n (ctrl as FormControl<V>).valueChanges.pipe(\r\n startWith((ctrl as FormControl<V>).value),\r\n distinctUntilChanged(cmp),\r\n ),\r\n { initialValue: (ctrl as FormControl<any>).value, injector },\r\n );\r\n continue;\r\n }\r\n\r\n if (ctrl instanceof FormGroup) {\r\n out[key] = toSignalForm(ctrl as any, opts);\r\n continue;\r\n }\r\n\r\n if (ctrl instanceof FormArray) {\r\n const cmp = opts.deepDistinct ? deepEqual : (x: any, y: any) => x === y;\r\n out[key] = toSignal(ctrl.valueChanges.pipe(startWith(ctrl.value), distinctUntilChanged(cmp)), {\r\n initialValue: ctrl.value,\r\n injector,\r\n });\r\n }\r\n }\r\n\r\n return out as SignalsFromForm<T>;\r\n}\r\n\r\nfunction tryInject(): Injector | undefined {\r\n try {\r\n return inject(Injector);\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n","import { Directive, inject, Injector, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { SignalsFromForm, toSignalForm } from '../../utils/to-signal-form.util';\r\nimport { BCBaseComponent } from '../base/base.component';\r\nimport { checkFormValidations } from '../../utils/util.functions';\r\n\r\n@Directive()\r\nexport abstract class BCBaseFormDialogComponent<T> extends BCBaseComponent implements OnInit {\r\n form!: FormGroup;\r\n formSignal!: SignalsFromForm<any>;\r\n\r\n protected injector = inject(Injector);\r\n protected formBuilder = inject(FormBuilder);\r\n protected ref = inject(DynamicDialogRef);\r\n protected config = inject(DynamicDialogConfig);\r\n protected translate = inject(TranslocoService);\r\n\r\n invalidControls: string[] = [];\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.form = this.newForm();\r\n this.formSignal = toSignalForm<any>(this.form, { injector: this.injector, deepDistinct: true });\r\n this.onInitDialog(this.config.data as T);\r\n }\r\n\r\n /**\r\n * called after form creation\r\n * @param data contains data of DynamicDialogConfig.\r\n */\r\n protected abstract onInitDialog(data: T | null): void;\r\n\r\n /**\r\n * creates a FormGroup with its controls. Implemented by the child class.\r\n * @returns formGroup\r\n */\r\n protected abstract newForm(): FormGroup;\r\n\r\n /**\r\n * builds the object of type T from the FormGroup values. Implemented by the child class.\r\n * @returns object filled form.\r\n */\r\n protected abstract getFormValue(): T;\r\n\r\n /**\r\n * handles form submission.\r\n */\r\n onSubmit(): void {\r\n this.invalidControls = [];\r\n if (this.form.valid) {\r\n const formValue = this.getFormValue();\r\n this.ref.close(formValue);\r\n } else {\r\n this.invalidControls = checkFormValidations(this.form);\r\n this.showWarn(this.translate.translate('base-components.base-forms.validation-warning'));\r\n console.error('Form validation failed. Invalid controls:', this.invalidControls);\r\n }\r\n }\r\n\r\n /**\r\n * closes the dialog without saving\r\n */\r\n onCancel(): void {\r\n this.ref.close(null);\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n ContentChild,\r\n Injector,\r\n input,\r\n Input,\r\n OnInit,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { FormFieldErrorComponent } from '../forms/form-field-error/form-field-error.component';\r\nimport { InputGroup } from 'primeng/inputgroup';\r\nimport { InputGroupAddon } from 'primeng/inputgroupaddon';\r\n\r\n@Component({\r\n selector: 'bc-textbox',\r\n standalone: true,\r\n imports: [CommonModule, InputTextModule, FormFieldErrorComponent, InputGroup, InputGroupAddon],\r\n template: `\r\n <label [attr.for]=\"inputId\" class=\"block font-bold mb-2\">\r\n <span [ngClass]=\"required ? 'required' : ''\">\r\n {{ label }}\r\n </span>\r\n </label>\r\n\r\n <p-input-group>\r\n @if (addOnBeforeTemplate) {\r\n <p-inputgroup-addon>\r\n <ng-container [ngTemplateOutlet]=\"addOnBeforeTemplate\"></ng-container>\r\n </p-inputgroup-addon>\r\n }\r\n <input\r\n pInputText\r\n [id]=\"inputId\"\r\n [type]=\"type\"\r\n [placeholder]=\"placeholder || label\"\r\n [ngClass]=\"{\r\n 'ng-invalid ng-dirty': showError,\r\n 'ng-valid': !showError,\r\n }\"\r\n [disabled]=\"isDisabled\"\r\n [readonly]=\"readonly()\"\r\n [attr.maxlength]=\"maxlength\"\r\n (input)=\"onInput($event)\"\r\n (blur)=\"onTouched()\"\r\n [value]=\"value\"\r\n [fluid]=\"fluid()\"\r\n class=\"w-full\"\r\n />\r\n @if (addOnAfterTemplate) {\r\n <p-inputgroup-addon>\r\n <ng-container [ngTemplateOutlet]=\"addOnAfterTemplate\"></ng-container>\r\n </p-inputgroup-addon>\r\n }\r\n </p-input-group>\r\n <bc-form-field-error [control]=\"control\" [fieldName]=\"label\"></bc-form-field-error>\r\n `,\r\n styles: [\r\n `\r\n .required::after {\r\n content: '*';\r\n color: #c62828;\r\n margin-left: 0.25rem;\r\n }\r\n .field {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n .field input.ng-invalid.ng-dirty {\r\n border-color: #c62828;\r\n }\r\n `,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: BCTextboxComponent,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class BCTextboxComponent implements ControlValueAccessor, OnInit {\r\n @Input() label!: string;\r\n @Input() placeholder?: string;\r\n @Input() type = 'text';\r\n /** can set manually, but is undefined, willbe detected in runtime */\r\n @Input() required = false;\r\n @Input() maxlength?: number;\r\n\r\n value = '';\r\n isDisabled = false;\r\n inputId = `input-${Math.random().toString(36).substring(2)}`;\r\n validatorValue?: string;\r\n\r\n public readonly = input<boolean>(false);\r\n public fluid = input(false);\r\n @ContentChild('addOnBefore', { descendants: false })\r\n public addOnBeforeTemplate: TemplateRef<any> | null = null;\r\n @ContentChild('addOnAfter', { descendants: false })\r\n public addOnAfterTemplate: TemplateRef<any> | null = null;\r\n\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n private ngControlInstance: NgControl | null = null;\r\n\r\n constructor(private injector: Injector) {}\r\n\r\n ngOnInit(): void {\r\n // 1) get ngControl if is using formControlName\r\n this.ngControlInstance = this.injector.get(NgControl, null);\r\n\r\n if (this.ngControlInstance) {\r\n // 2) join this component with ValueAccessor\r\n this.ngControlInstance.valueAccessor = this;\r\n\r\n // 3) No can get the AbstractControl\r\n const ctrl: AbstractControl = this.ngControlInstance.control!;\r\n\r\n // 4) if the input not passed, detect based on validator\r\n if (!this.required && ctrl && ctrl.validator) {\r\n const validateFn = ctrl.validator!;\r\n // calling to the validation function with empty control (null value)\r\n const fakeControl = { value: null } as AbstractControl;\r\n const validationResult: ValidationErrors | null = validateFn(fakeControl);\r\n\r\n // if return { required: true }, set required = true\r\n if (validationResult && validationResult['required']) {\r\n this.required = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ================= ControlValueAccessor =================\r\n writeValue(obj: any): void {\r\n this.value = obj ?? '';\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n onInput(event: Event): void {\r\n const inputEl = event.target as HTMLInputElement;\r\n this.value = inputEl.value;\r\n this.onChange(this.value);\r\n }\r\n\r\n // ========== error getters ==========\r\n get control(): AbstractControl | null {\r\n return this.ngControlInstance ? this.ngControlInstance.control : null;\r\n }\r\n\r\n get showError(): boolean {\r\n const ctrl = this.control;\r\n return !!(ctrl && ctrl.invalid && (ctrl.dirty || ctrl.touched));\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n forwardRef,\r\n Injector,\r\n input,\r\n Input,\r\n InputSignal,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n ReactiveFormsModule,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { ISelectItem } from '../../models/common/select-item.model';\r\nimport { FormFieldErrorComponent } from '../forms/form-field-error/form-field-error.component';\r\nimport { InputGroup } from 'primeng/inputgroup';\r\nimport { InputGroupAddon } from 'primeng/inputgroupaddon';\r\nimport { Tooltip } from 'primeng/tooltip';\r\n\r\n@Component({\r\n selector: 'bc-select',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n SelectModule,\r\n FormFieldErrorComponent,\r\n ReactiveFormsModule,\r\n InputGroup,\r\n InputGroupAddon,\r\n Tooltip,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BCCustomSelectComponent),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './custom-select.component.html',\r\n styles: [\r\n `\r\n .required::after {\r\n content: '*';\r\n color: #c62828;\r\n margin-left: 0.25rem;\r\n }\r\n /* when is invalid, apply red border to Select */\r\n .ng-invalid.ng-dirty .p-select {\r\n border-color: #c62828 !important;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class BCCustomSelectComponent implements ControlValueAccessor, OnInit, OnChanges {\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n /** text label (or translation key) */\r\n @Input() label!: string;\r\n\r\n public subLabel = input<string | undefined>(undefined);\r\n\r\n /** list of options: { label: string, value: any } */\r\n @Input() options: ISelectItem[] = [];\r\n\r\n /** Placeholder (if not informed, uses label) */\r\n @Input() placeholder?: string;\r\n\r\n /** can force manually */\r\n @Input() required = false;\r\n\r\n public readonly showErrorInTooltip = input<boolean>(false);\r\n\r\n /** internal value (selected value) */\r\n value: any = null;\r\n\r\n /** disabled status */\r\n @Input() isDisabled = false;\r\n\r\n /** input for Input para carregar establishments ao selecionar company */\r\n @Input() fetchEstablishmentsFromCompany: string | null | undefined;\r\n\r\n // private companyService = inject(CompanyService);\r\n\r\n /** Gera um ID único para associar label + select */\r\n inputId = `select-${Math.random().toString(36).substring(2)}`;\r\n\r\n /** Callbacks fornecidos pelo Angular Forms */\r\n onChange: (v: any) => void = () => {};\r\n onTouched: () => void = () => {};\r\n\r\n /**\r\n * Target element to attach the overlay, valid values are \"body\" or a local ng-template variable of another element.\r\n * Note: use binding with brackets for template variables, e.g. [appendTo]=\"mydiv\" for a div element having #mydiv as variable name.\r\n */\r\n public appendTo: InputSignal<any> = input<any | null>(null);\r\n\r\n /**\r\n * Represents an input signal that holds a boolean value.\r\n * The signal is initialized with a default value of `false`.\r\n * This signal can be used to track or manage the flow of a boolean-driven process.\r\n *\r\n * @type {InputSignal<boolean>}\r\n */\r\n public fluid: InputSignal<boolean> = input<boolean>(false);\r\n\r\n /**\r\n * Represents a read-only boolean input signal.\r\n * The value cannot be modified directly and reflects the\r\n * current state of the boolean signal.\r\n *\r\n * @type {InputSignal<boolean>}\r\n */\r\n public readonly: InputSignal<boolean> = input<boolean>(false);\r\n\r\n /** references to NgControl, if there is a formControlName in the parent component */\r\n private ngControlInstance: NgControl | null = null;\r\n\r\n @ContentChild('addOnBefore', { descendants: false })\r\n public addOnBeforeTemplate: TemplateRef<any> | null = null;\r\n @ContentChild('addOnAfter', { descendants: false })\r\n public addOnAfterTemplate: TemplateRef<any> | null = null;\r\n\r\n constructor(private injector: Injector) {}\r\n\r\n ngOnInit(): void {\r\n // 1) Get the host's NgControl (formControlName)\r\n this.ngControlInstance = this.injector.get(NgControl, null);\r\n if (this.ngControlInstance) {\r\n // 2) Register this component as ValueAccessor\r\n this.ngControlInstance.valueAccessor = this;\r\n\r\n //3) Automatically detects Validators.required, securely.\r\n const ctrl = this.ngControlInstance.control; // We removed the '!' operator.\r\n\r\n // WE ADDED AN EXTRA CHECK: `&& ctrl &&`\r\n if (!this.required && ctrl && ctrl.validator) {\r\n const fakeControl = { value: null } as AbstractControl;\r\n const result: ValidationErrors | null = ctrl.validator(fakeControl);\r\n if (result && result['required']) {\r\n this.required = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['fetchEstablishmentsFromCompany']) {\r\n this.loadEstablishments();\r\n }\r\n }\r\n\r\n private loadEstablishments(): void {\r\n if (!this.fetchEstablishmentsFromCompany) {\r\n this.options = [];\r\n this.setDisabledState(true);\r\n return;\r\n }\r\n\r\n this.setDisabledState(true);\r\n\r\n // this.companyService.getDropDownByParentId(this.fetchEstablishmentsFromCompany).pipe(take(1)).subscribe(options => {\r\n // this.options = options;\r\n // this.setDisabledState(false);\r\n // });\r\n }\r\n\r\n // ============ ControlValueAccessor ============\r\n\r\n writeValue(obj: any): void {\r\n // Receives the value from the FormControl when Angular Forms calls setValue\r\n this.value = obj;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n onSelectChange(event: any): void {\r\n this.onChange(event.value);\r\n this.valueChange.emit(event);\r\n }\r\n\r\n get control(): AbstractControl | null {\r\n return this.ngControlInstance ? this.ngControlInstance.control : null;\r\n }\r\n\r\n get showError(): boolean {\r\n const c = this.control;\r\n return !!(c && c.invalid && (c.dirty || c.touched));\r\n }\r\n}\r\n","<div class=\"field\">\r\n <label [attr.for]=\"inputId\" class=\"block font-bold mb-2\">\r\n <span [ngClass]=\"required || (control?.errors?.['required'] ?? false) ? 'required' : ''\">\r\n {{ label }}\r\n </span>\r\n <br />\r\n <span class=\"text-muted-color font-normal\">\r\n {{ subLabel() }}\r\n </span>\r\n </label>\r\n\r\n <p-input-group>\r\n @if (addOnBeforeTemplate) {\r\n <p-inputgroup-addon>\r\n <ng-container [ngTemplateOutlet]=\"addOnBeforeTemplate\"></ng-container>\r\n </p-inputgroup-addon>\r\n }\r\n <div\r\n class=\"w-full\"\r\n [pTooltip]=\"formFieldErrorComponent\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [tooltipDisabled]=\"!showErrorInTooltip() || !control?.errors || !control?.touched\"\r\n [pt]=\"{\r\n arrow: { style: { display: 'none' } },\r\n text: {\r\n style: { background: 'var(--p-dialog-background)', boxShadow: 'var(--p-dialog-shadow)' },\r\n },\r\n }\"\r\n >\r\n <p-select\r\n [id]=\"inputId\"\r\n [options]=\"options\"\r\n [(ngModel)]=\"value\"\r\n [disabled]=\"isDisabled\"\r\n [placeholder]=\"placeholder || label\"\r\n optionLabel=\"label\"\r\n optionValue=\"id\"\r\n [filter]=\"true\"\r\n [showClear]=\"!readonly()\"\r\n [style]=\"{ width: '100%' }\"\r\n styleClass=\"w-full\"\r\n (onChange)=\"onSelectChange($event)\"\r\n (onBlur)=\"onTouched()\"\r\n [ngClass]=\"{ 'ng-invalid ng-dirty': showError, 'ng-valid': !showError }\"\r\n [appendTo]=\"appendTo()\"\r\n [fluid]=\"fluid()\"\r\n [readonly]=\"readonly()\"\r\n >\r\n </p-select>\r\n </div>\r\n @if (addOnAfterTemplate) {\r\n <p-inputgroup-addon>\r\n <ng-container [ngTemplateOutlet]=\"addOnAfterTemplate\"></ng-container>\r\n </p-inputgroup-addon>\r\n }\r\n </p-input-group>\r\n\r\n @if (!showErrorInTooltip()) {\r\n <ng-container [ngTemplateOutlet]=\"formFieldErrorComponent\"></ng-container>\r\n }\r\n\r\n <ng-template #formFieldErrorComponent>\r\n <bc-form-field-error [control]=\"control\" [fieldName]=\"label\"></bc-form-field-error>\r\n </ng-template>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n NG_VALUE_ACCESSOR,\r\n FormControl,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n AbstractControl,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { FormFieldErrorComponent } from '../forms/form-field-error/form-field-error.component';\r\n\r\n@Component({\r\n selector: 'bc-datePicker',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n DatePickerModule,\r\n FormsModule,\r\n FormFieldErrorComponent,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BCDatePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './bc-datepicker.component.html',\r\n styleUrl: './bc-datepicker.component.scss',\r\n})\r\nexport class BCDatePickerComponent implements ControlValueAccessor {\r\n @Input() label!: string;\r\n @Input() placeholder: string = '';\r\n @Input() formControl!: FormControl; // for detect issues with validation\r\n\r\n @Input() dateFormat = 'dd/mm/yy';\r\n @Input() showTime = false;\r\n @Input() hourFormat: '12' | '24' = '24';\r\n @Input() dataType: 'date' | 'string' | 'number' = 'date';\r\n\r\n @Output() blur = new EventEmitter<any>();\r\n @Output() dateSelect = new EventEmitter<Date>();\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n inputId = `input-${Math.random().toString(36).substring(2)}`;\r\n value: any;\r\n disabled = false;\r\n\r\n // callback functions\r\n onChange: any = () => {};\r\n onTouched: any = () => {};\r\n\r\n required = false;\r\n\r\n ngOnInit(): void {\r\n if (!this.required && this.formControl && this.formControl.validator) {\r\n const validateFn = this.formControl.validator!;\r\n // call the validation function with an empty control (null value)\r\n const fakeControl = { value: null } as AbstractControl;\r\n const validationResult: ValidationErrors | null = validateFn(fakeControl);\r\n\r\n // If it returns { required: true }, we mark required = true\r\n if (validationResult && validationResult['required']) {\r\n this.required = true;\r\n }\r\n }\r\n }\r\n\r\n // ControlValueAccessor methods\r\n writeValue(obj: any): void {\r\n if (obj) {\r\n // if is string from api use them casting. If us date, use too\r\n this.value = obj instanceof Date ? obj : new Date(obj);\r\n } else {\r\n this.value = null;\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n onDateChange(event: any) {\r\n this.value = event;\r\n this.onChange(event);\r\n this.onTouched();\r\n }\r\n\r\n onInputBlur() {\r\n this.onTouched();\r\n this.blur.emit(this.formControl?.value); // p-calendar should be update the control.value\r\n }\r\n\r\n onSelect(event: Date) {\r\n this.onTouched();\r\n this.onChange(event);\r\n this.dateSelect.emit(event);\r\n this.valueChange.emit(event);\r\n }\r\n\r\n onInput(event: Event) {\r\n // if the user types in the field (useful for manual formatting)\r\n const value = (event.target as HTMLInputElement).value;\r\n // The p-calendar should handle most of the input formatting.\r\n // You can add custom logic here if you need validation or extra formatting\r\n // before passing to the onChange function.\r\n this.onChange(value);\r\n this.valueChange.emit(value);\r\n }\r\n}\r\n","<label [attr.for]=\"inputId\" class=\"block font-bold mb-2\">\r\n <span [ngClass]=\"required ? 'required' : ''\">\r\n {{ label }}\r\n </span>\r\n</label>\r\n\r\n<p-datePicker\r\n [(ngModel)]=\"value\"\r\n (onSelect)=\"onDateChange($event)\"\r\n (onBlur)=\"onTouched()\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [showIcon]=\"true\"\r\n [id]=\"label\"\r\n [showIcon]=\"true\"\r\n [dateFormat]=\"dateFormat\"\r\n [showTime]=\"showTime\"\r\n [hourFormat]=\"hourFormat\"\r\n [dataType]=\"dataType\"\r\n appendTo=\"body\"\r\n (onBlur)=\"onInputBlur()\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onInput)=\"onInput($event)\"\r\n>\r\n</p-datePicker>\r\n<bc-form-field-error [control]=\"formControl\" [fieldName]=\"label\"></bc-form-field-error>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, forwardRef, Injector, Input, OnInit } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n ReactiveFormsModule,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\n\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { TranslocoPipe } from '@jsverse/transloco';\r\nimport { FormFieldErrorComponent } from '../forms/form-field-error/form-field-error.component';\r\n\r\ninterface SelectOption {\r\n label: string;\r\n value: any;\r\n}\r\n\r\n@Component({\r\n selector: 'bc-custom-multi-select',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MultiSelectModule,\r\n TranslocoPipe,\r\n FormFieldErrorComponent,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BCMultiSelectComponent),\r\n multi: true,\r\n },\r\n ],\r\n template: `\r\n <div class=\"field mb-3\">\r\n <label [attr.for]=\"inputId\" class=\"block font-bold mb-2\">\r\n <span [ngClass]=\"required ? 'required' : ''\">\r\n {{ label | transloco }}\r\n </span>\r\n </label>\r\n\r\n <p-multiSelect\r\n [id]=\"inputId\"\r\n [options]=\"options\"\r\n [(ngModel)]=\"value\"\r\n [disabled]=\"isDisabled\"\r\n [placeholder]=\"placeholder || (label | transloco)\"\r\n [filter]=\"true\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [style]=\"{ width: '100%' }\"\r\n (ngModelChange)=\"onMultiSelectChange($event)\"\r\n (onBlur)=\"onTouched()\"\r\n [ngClass]=\"{ 'ng-invalid ng-dirty': showError, 'ng-valid': !showError }\"\r\n ></p-multiSelect>\r\n\r\n <bc-form-field-error\r\n [control]=\"control\"\r\n [fieldName]=\"label | transloco\"\r\n ></bc-form-field-error>\r\n </div>\r\n `,\r\n styles: [\r\n `\r\n .required::after {\r\n content: '*';\r\n color: #c62828;\r\n margin-left: 0.25rem;\r\n }\r\n /* red border when invalid */\r\n .ng-invalid.ng-dirty .p-multiselect {\r\n border-color: #c62828 !important;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class BCMultiSelectComponent implements ControlValueAccessor, OnInit {\r\n /** Key translation or plain text for label */\r\n @Input() label!: string;\r\n\r\n /** Select options: { label: string, value: any }[] */\r\n @Input() options: SelectOption[] = [];\r\n\r\n /** Placeholder (if not defined, use the label itself) */\r\n @Input() placeholder?: string;\r\n\r\n /** Can manually force required; otherwise, detect via ValidatorFn */\r\n @Input() required = false;\r\n\r\n /** Inner value (array of selected items) */\r\n value: any[] = [];\r\n\r\n /** Disabled state */\r\n isDisabled = false;\r\n\r\n /** Generated ID to associate label + component */\r\n inputId = `multiselect-${Math.random().toString(36).substring(2)}`;\r\n\r\n /** Functions injected by Angular Forms */\r\n onChange: (v: any) => void = () => {};\r\n onTouched: () => void = () => {};\r\n\r\n /** NgControl reference (if formControlName is used in the parent) */\r\n private ngControlInstance: NgControl | null = null;\r\n\r\n constructor(private injector: Injector) {}\r\n\r\n ngOnInit(): void {\r\n // 1) Captures the NgControl from the host (if the parent used formControlName)\r\n this.ngControlInstance = this.injector.get(NgControl, null);\r\n\r\n if (this.ngControlInstance) {\r\n // 2) Registers this component as a ValueAccessor\r\n this.ngControlInstance.valueAccessor = this;\r\n\r\n // 3) Automatically detects if there is Validators.required in FormControl\r\n const ctrl: AbstractControl = this.ngControlInstance.control!;\r\n\r\n if (!this.required && ctrl && ctrl.validator) {\r\n // Tests the validator with a \"fakeControl\" whose value is null\r\n const fakeControl = { value: null } as AbstractControl;\r\n const result: ValidationErrors | null = ctrl.validator!(fakeControl);\r\n if (result && result['required']) {\r\n this.required = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ============== ControlValueAccessor ==============\r\n\r\n writeValue(obj: any): void {\r\n // Receives an array of values from the parent; if it's not an array, set it to empty\r\n this.value = Array.isArray(obj) ? obj : [];\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n /** Called whenever the user changes the selection */\r\n onMultiSelectChange(newValue: any[]): void {\r\n this.value = newValue;\r\n this.onChange(this.value); // Notifies Angular Forms\r\n }\r\n\r\n // ============== Getters for visual validation ==============\r\n\r\n /** Returns the associated AbstractControl (or null) */\r\n get control(): AbstractControl | null {\r\n return this.ngControlInstance ? this.ngControlInstance.control : null;\r\n }\r\n\r\n /** Returns true if the control is invalid and has been interacted with */\r\n get showError(): boolean {\r\n const c = this.control;\r\n return !!(c && c.invalid && (c.dirty || c.touched));\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, inject, model, signal } from '@angular/core';\r\nimport { FilterMatchMode, SelectItem } from 'primeng/api';\r\n\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { PrimeNG } from 'primeng/config';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { TableModule } from 'primeng/table';\r\nimport { InputNumber } from 'primeng/inputnumber';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { Slider } from 'primeng/slider';\r\nimport { BCMultiSelectComponent } from '../../custom-multi-select/custom-multi-select.component';\r\nimport { BCColumnHeader } from '../../../models/common/column-header.model';\r\n\r\n@Component({\r\n selector: 'bc-column-filter-advanced',\r\n imports: [\r\n NgTemplateOutlet,\r\n TableModule,\r\n InputNumber,\r\n FormsModule,\r\n BCMultiSelectComponent,\r\n Slider,\r\n ],\r\n templateUrl: './column-filter-advanced.component.html',\r\n styleUrl: './column-filter-advanced.component.scss',\r\n})\r\nexport class BCColumnFilterAdvancedComponent<T> {\r\n public col = model.required<BCColumnHeader<T>>();\r\n public decimalMatchModes = signal<SelectItem[]>([]);\r\n public selectMatchModes = signal<SelectItem[]>([]);\r\n\r\n private primeNG: PrimeNG = inject(PrimeNG);\r\n private cd = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n this.primeNG.translationObserver.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this.decimalMatchModes.set(\r\n [\r\n FilterMatchMode.EQUALS,\r\n FilterMatchMode.NOT_EQUALS,\r\n FilterMatchMode.LESS_THAN,\r\n FilterMatchMode.LESS_THAN_OR_EQUAL_TO,\r\n FilterMatchMode.GREATER_THAN,\r\n FilterMatchMode.GREATER_THAN_OR_EQUAL_TO,\r\n ].map((key: any) => {\r\n return {\r\n label: this.primeNG.getTranslation(key),\r\n value: key,\r\n };\r\n }),\r\n );\r\n\r\n this.selectMatchModes.set(\r\n [FilterMatchMode.IN].map((key: any) => {\r\n return {\r\n label: this.primeNG.getTranslation(key),\r\n value: key,\r\n };\r\n }),\r\n );\r\n\r\n this.cd.detectChanges();\r\n });\r\n }\r\n}\r\n","@let column = col();\r\n@if (column.filter) {\r\n @switch (column.filter.type) {\r\n @case ('text') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"columnFilterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: column.filter }\"\r\n ></ng-container>\r\n }\r\n @case ('numeric') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"columnFilterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: column.filter }\"\r\n ></ng-container>\r\n }\r\n @case ('decimal') {\r\n <p-columnFilter\r\n [type]=\"column.filter.type\"\r\n [field]=\"column.filter.field\"\r\n [display]=\"column.filter.display ?? 'menu'\"\r\n [showMenu]=\"column.filter.showMenu ?? true\"\r\n [matchMode]=\"column.filter.matchMode ?? 'equals'\"\r\n [operator]=\"column.filter.operator ?? 'and'\"\r\n [useGrouping]=\"column.filter.useGrouping ?? true\"\r\n [showOperator]=\"column.filter.showOperator ?? true\"\r\n [showClearButton]=\"column.filter.showClearButton ?? true\"\r\n [showApplyButton]=\"column.filter.showApplyButton ?? true\"\r\n [showMatchModes]=\"column.filter.showMatchModes ?? true\"\r\n [showAddButton]=\"column.filter.showAddButton ?? true\"\r\n [hideOnClear]=\"column.filter.hideOnClear ?? true\"\r\n [placeholder]=\"column.filter.placeholder\"\r\n [maxConstraints]=\"column.filter.maxConstraints ?? 2\"\r\n [showButtons]=\"column.filter.showButtons ?? false\"\r\n [prefix]=\"column.filter.prefix\"\r\n [suffix]=\"column.filter.suffix\"\r\n [matchModeOptions]=\"column.filter.matchModeOptions ?? decimalMatchModes()\"\r\n [filterOn]=\"column.filter.filterOn ?? 'enter'\"\r\n >\r\n <ng-template #filter let-value let-filter=\"filterCallback\">\r\n <p-inputNumber\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"filter($event)\"\r\n [showButtons]=\"filter.showButtons\"\r\n [minFractionDigits]=\"filter.minFractionDigits\"\r\n [maxFractionDigits]=\"filter.maxFractionDigits\"\r\n [ariaLabel]=\"filter.ariaLabel\"\r\n [prefix]=\"filter.prefix\"\r\n [suffix]=\"filter.suffix\"\r\n [placeholder]=\"filter.placeholder\"\r\n mode=\"decimal\"\r\n [locale]=\"filter.locale\"\r\n [localeMatcher]=\"filter.localeMatcher\"\r\n [currency]=\"filter.currency\"\r\n [currencyDisplay]=\"filter.currencyDisplay\"\r\n [useGrouping]=\"filter.useGrouping\"\r\n ></p-inputNumber>\r\n </ng-template>\r\n </p-columnFilter>\r\n }\r\n @case ('date') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"columnFilterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: column.filter }\"\r\n ></ng-container>\r\n }\r\n @case ('boolean') {\r\n <ng-container\r\n [ngTemplateOutlet]=\"columnFilterTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: column.filter }\"\r\n ></ng-container>\r\n }\r\n @case ('select') {\r\n <p-columnFilter\r\n [type]=\"column.filter.type\"\r\n [field]=\"column.filter.field\"\r\n [matchMode]=\"column.filter.matchMode ?? 'in'\"\r\n [matchModeOptions]=\"column.filter.matchModeOptions ?? selectMatchModes()\"\r\n [showMatchModes]=\"false\"\r\n [display]=\"column.filter.display ?? 'menu'\"\r\n [showOperator]=\"false\"\r\n [showAddButton]=\"false\"\r\n >\r\n <ng-template #filter let-value let-filter=\"filterCallback\">\r\n <div class=\"w-56\">\r\n <bc-custom-multi-select\r\n [ngModel]=\"value\"\r\n [options]=\"column.filter.customOptions\"\r\n (ngModelChange)=\"filter($event)\"\r\n ></bc-custom-multi-select>\r\n </div>\r\n </ng-template>\r\n </p-columnFilter>\r\n }\r\n @case ('slider') {\r\n <p-columnFilter\r\n [field]=\"column.filter.field\"\r\n matchMode=\"between\"\r\n [display]=\"column.filter.display ?? 'menu'\"\r\n [showMatchModes]=\"false\"\r\n [showOperator]=\"false\"\r\n [showAddButton]=\"false\"\r\n >\r\n <ng-template #filter let-value let-filter=\"filterCallback\">\r\n <p-slider\r\n [ngModel]=\"value\"\r\n [range]=\"true\"\r\n [min]=\"column.filter.minValue ?? 0\"\r\n [max]=\"column.filter.maxValue ?? 100\"\r\n class=\"m-4\"\r\n (onSlideEnd)=\"filter($event.values)\"\r\n />\r\n <div class=\"flex items-center px-2\">\r\n @if (!value) {\r\n <span>0</span>\r\n } @else {\r\n <span>{{ value[0] }} - {{ value[1] }}</span>\r\n }\r\n </div>\r\n </ng-template>\r\n </p-columnFilter>\r\n }\r\n }\r\n\r\n <ng-template #columnFilterTemplate let-filter>\r\n <p-columnFilter\r\n [type]=\"filter.type\"\r\n [field]=\"filter.field\"\r\n [display]=\"filter.display ?? 'menu'\"\r\n [showMenu]=\"filter.showMenu ?? true\"\r\n [matchMode]=\"filter.matchMode ?? 'startsWith'\"\r\n [operator]=\"filter.operator ?? 'and'\"\r\n [useGrouping]=\"filter.useGrouping ?? true\"\r\n [showOperator]=\"filter.showOperator ?? true\"\r\n [showClearButton]=\"filter.showClearButton ?? true\"\r\n [showApplyButton]=\"filter.showApplyButton ?? true\"\r\n [showMatchModes]=\"filter.showMatchModes ?? true\"\r\n [showAddButton]=\"filter.showAddButton ?? true\"\r\n [hideOnClear]=\"filter.hideOnClear ?? true\"\r\n [placeholder]=\"filter.placeholder ?? null\"\r\n [maxConstraints]=\"filter.maxConstraints ?? 2\"\r\n [showButtons]=\"filter.showButtons ?? false\"\r\n [currency]=\"filter.currency ?? null\"\r\n [currencyDisplay]=\"filter.currencyDisplay\"\r\n [minFractionDigits]=\"filter.minFractionDigits ?? null\"\r\n [maxFractionDigits]=\"filter.maxFractionDigits ?? null\"\r\n [prefix]=\"filter.prefix ?? null\"\r\n [suffix]=\"filter.suffix ?? null\"\r\n [locale]=\"filter.locale\"\r\n [filterOn]=\"filter.filterOn ?? 'enter'\"\r\n />\r\n </ng-template>\r\n}\r\n","import { CommonModule, Location } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { TranslocoPipe } from '@jsverse/transloco';\r\nimport { ButtonModule, ButtonSeverity } from 'primeng/button';\r\n\r\n@Component({\r\n selector: 'bc-button',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule, ButtonModule],\r\n templateUrl: './app-button.component.html',\r\n})\r\nexport class BCButtonComponent {\r\n\r\n @Input() label?: string; // trduction Key for button text\r\n @Input() icon?: string; // icon class (ex: 'pi pi-check')\r\n @Input() title?: string; // trduction Key for tooltip\r\n\r\n // --- ---\r\n @Input() severity: ButtonSeverity | null = 'primary'; // color (primary, secondary, success, danger, etc.)\r\n @Input() variant: 'filled' | 'outlined' | 'text' = 'filled';\r\n @Input() styleClass: string = ''; // additional classes\r\n\r\n // --- status entry ---\r\n @Input() disabled: boolean = false;\r\n @Input() loading: boolean = false;\r\n\r\n // --- action entry ---\r\n @Input() type: 'button' | 'submit' = 'button';\r\n @Input() url?: string | any[]; // For navigation with routerLink\r\n @Output() click = new EventEmitter<any>();\r\n\r\n constructor(\r\n private location: Location,\r\n private router: Router,\r\n ) { }\r\n\r\n onClick(event: Event): void {\r\n if (!this.url) {\r\n this.click.emit(event);\r\n }\r\n // If 'url' is provided, navigation is handled by routerLink or goBack() method\r\n }\r\n\r\n goBack(): void {\r\n if (this.url) {\r\n this.router.navigate(Array.isArray(this.url) ? this.url : [this.url]);\r\n } else {\r\n this.location.back();\r\n }\r\n }\r\n}\r\n","","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { TranslocoPipe } from '@jsverse/transloco';\r\nimport { BCButtonComponent } from '../buttons/app-button/app-button.component';\r\n\r\n\r\n@Component({\r\n selector: 'bc-no-records-found',\r\n templateUrl: './no-records-found.component.html',\r\n standalone: true,\r\n imports: [CommonModule, TranslocoPipe, BCButtonComponent],\r\n})\r\nexport class BCNoRecordsFoundComponent {\r\n @Input() label = 'general.phrase.no_matching_records_found';\r\n @Input() btnLabel = 'general.singular.new';\r\n @Input() length: number = 0;\r\n @Input() hasBtnCreate = true;\r\n\r\n @Output() onClick = new EventEmitter<any>();\r\n\r\n onClickButton(event: Event) {\r\n this.onClick.emit(event);\r\n }\r\n}\r\n","<div *ngIf=\"length === 0\"\r\n class=\"row g-3\">\r\n <div class=\"search-box col-xxl-4 col-lg-4\">\r\n <div class=\"position-relative\">\r\n <p class=\"text-muted mb-2\">{{ label | transloco }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-8\">\r\n <div class=\"text-sm-end\">\r\n <bc-button *ngIf=\"hasBtnCreate\"\r\n (click)=\"onClickButton($event)\"\r\n [label]=\"btnLabel\"\r\n icon=\"pi pi-plus label-icon font-size-20\"\r\n btnClass=\"btn btn-primary btn-label waves-light mb-2 me-2\">\r\n </bc-button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n@Pipe({\r\n name: 'yesNo',\r\n standalone: true,\r\n pure: true,\r\n})\r\nexport class YesNoPipe implements PipeTransform {\r\n constructor(private translate: TranslocoService) {}\r\n\r\n transform(value: any): string { \r\n if(value === null || value === undefined) return '-'; \r\n const key = value ? 'general.singular.yes' : 'general.singular.no';\r\n return this.translate.translate(key);\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { CountryCustom } from '../models/config/country-custom.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n@Pipe({\r\n name: 'zipCodeFormat',\r\n standalone: true,\r\n pure: true,\r\n})\r\nexport class ZipCodeFormatPipe implements PipeTransform {\r\n transform(value: string | number, countryCustom?: CountryCustom): string {\r\n let valorFormatado = (value ?? '') + '';\r\n // Remove qualquer caractere não numérico\r\n valorFormatado = valorFormatado.replace(/[^0-9]/g, '');\r\n // Garante que tenha 8 dígitos, preenchendo com zeros à esquerda\r\n valorFormatado = valorFormatado.padStart(8, '0').substr(0, 8);\r\n\r\n // Expressão regular padrão: 2 dígitos, 3 dígitos, 3 dígitos\r\n let searchValue = /(\\d{2})(\\d{3})(\\d{3})/;\r\n if (countryCustom?.zipCodeRegExpFormat) {\r\n // zipCodeRegExpFormat deve ser uma string sem delimitadores '/'\r\n searchValue = new RegExp(countryCustom.zipCodeRegExpFormat);\r\n }\r\n\r\n // Valor de substituição padrão\r\n let replaceValue = '$1.$2-$3';\r\n if (countryCustom?.zipCodeReplaceValue) {\r\n replaceValue = countryCustom.zipCodeReplaceValue;\r\n }\r\n\r\n return valorFormatado.replace(searchValue, replaceValue);\r\n }\r\n}\r\n","import { formatCurrency, getCurrencySymbol } from '@angular/common';\r\nimport { Inject, Injectable, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\r\nimport { CountryCustom } from '../models/config/country-custom.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n@Pipe({\r\n name: 'currencyFormat',\r\n standalone: true,\r\n pure: true,\r\n})\r\nexport class CurrencyFormatPipe implements PipeTransform {\r\n constructor(@Inject(LOCALE_ID) private globalLocaleId: string) {}\r\n\r\n transform(\r\n value: number | string | null | undefined,\r\n countryCustom?: CountryCustom,\r\n defaultCurrencyCode = 'BOB',\r\n defaultDigitsInfo = '1.2-2',\r\n ): string | null {\r\n if (value == null) return null;\r\n\r\n const amount = typeof value === 'number' ? value : Number(value);\r\n if (isNaN(amount)) return null;\r\n\r\n const currencyCode = countryCustom?.currencyCode ?? defaultCurrencyCode;\r\n const digitsInfo = countryCustom?.currencyDigitsInfo ?? defaultDigitsInfo;\r\n\r\n const locale = countryCustom?.locale ?? this.globalLocaleId;\r\n\r\n const symbol = getCurrencySymbol(currencyCode, 'wide');\r\n\r\n return formatCurrency(amount, locale, symbol, currencyCode, digitsInfo);\r\n }\r\n}\r\n","import { formatDate } from '@angular/common';\r\nimport { Inject, Injectable, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\r\nimport { CountryCustom } from '../models/config/country-custom.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n@Pipe({\r\n name: 'dateFormat',\r\n standalone: true,\r\n pure: true,\r\n})\r\nexport class DateFormatPipe implements PipeTransform {\r\n constructor(@Inject(LOCALE_ID) private globalLocaleId: string) {}\r\n\r\n transform(\r\n value?: Date | string | number,\r\n countryCustom?: CountryCustom,\r\n defaultFormat = 'dd/MM/yyyy',\r\n ): string | null {\r\n \r\n if (!value) return null;\r\n\r\n const date = value instanceof Date ? value : new Date(value);\r\n const fmt = countryCustom?.dateFormat ?? defaultFormat;\r\n\r\n const loc = countryCustom?.locale ?? this.globalLocaleId;\r\n\r\n return formatDate(date, fmt, loc);\r\n }\r\n}\r\n","import { formatDate } from '@angular/common';\r\nimport { Inject, Injectable, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\r\nimport { CountryCustom } from '../models/config/country-custom.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n@Pipe({\r\n name: 'dateTimeFormat',\r\n standalone: true,\r\n pure: true,\r\n})\r\nexport class DateTimeFormatPipe implements PipeTransform {\r\n constructor(@Inject(LOCALE_ID) private globalLocaleId: string) {}\r\n\r\n transform(\r\n value?: Date | string | number,\r\n countryCustom?: CountryCustom,\r\n defaultFormat = 'dd/MM/yyyy HH:mm:ss',\r\n ): string | null {\r\n if (!value) return null;\r\n\r\n const date = value instanceof Date ? value : new Date(value);\r\n\r\n const fmt = countryCustom?.dateTimeFormat ?? defaultFormat;\r\n\r\n const loc = countryCustom?.locale ?? this.globalLocaleId;\r\n\r\n return formatDate(date, fmt, loc);\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { CountryCustom } from '../models/config/country-custom.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n@Pipe({\r\n name: 'documentFormat',\r\n standalone: true,\r\n pure: true,\r\n})\r\nexport class DocumentFormatPipe implements PipeTransform {\r\n transform(value: string | number, countryCustom?: CountryCustom): string {\r\n let valorFormatado = (value ?? '') + '';\r\n // Remove qualquer caractere não numérico\r\n valorFormatado = valorFormatado.replace(/[^0-9]/g, '');\r\n // Garante 14 dígitos, preenchendo com zeros à esquerda\r\n valorFormatado = valorFormatado.padStart(14, '0').substr(0, 14);\r\n\r\n // Expressão regular padrão: 2 dígitos, 3 dígitos, 3 dígitos, 4 dígitos, 2 dígitos\r\n let searchValue = /(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})/;\r\n if (countryCustom?.documentRegExpFormat) {\r\n searchValue = new RegExp(countryCustom.documentRegExpFormat);\r\n }\r\n\r\n // Valor de substituição padrão\r\n let replaceValue = '$1.$2.$3/$4-$5';\r\n if (countryCustom?.documentReplaceValue) {\r\n replaceValue = countryCustom.documentReplaceValue;\r\n }\r\n\r\n return valorFormatado.replace(searchValue, replaceValue);\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { CountryCustom } from '../models/config/country-custom.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n@Pipe({\r\n name: 'personDocumentFormat',\r\n standalone: true,\r\n pure: true,\r\n})\r\nexport class PersonDocumentFormatPipe implements PipeTransform {\r\n transform(value: string | number, countryCustom?: CountryCustom, hideSomeValues: boolean = false): string {\r\n let valorFormatado = (value ?? '') + '';\r\n // Remove qualquer caractere não numérico\r\n valorFormatado = valorFormatado.replace(/[^0-9]/g, '');\r\n // Garante 11 dígitos, preenchendo com zeros à esquerda\r\n valorFormatado = valorFormatado.padStart(11, '0').substr(0, 11);\r\n\r\n // Expressão regular padrão: 3 dígitos, 3 dígitos, 3 dígitos, 2 dígitos\r\n let searchValue = /(\\d{3})(\\d{3})(\\d{3})(\\d{2})/;\r\n if (countryCustom?.personDocumentRegExpFormat) {\r\n searchValue = new RegExp(countryCustom.personDocumentRegExpFormat);\r\n }\r\n\r\n // Valor de substituição padrão\r\n let replaceValue = '$1.$2.$3-$4';\r\n if (countryCustom?.personDocumentReplaceValue) {\r\n replaceValue = countryCustom.personDocumentReplaceValue;\r\n }\r\n\r\n valorFormatado = valorFormatado.replace(searchValue, replaceValue);\r\n\r\n if (hideSomeValues) {\r\n // Esconde parte do documento\r\n const parts = valorFormatado.split(/[.\\-]/);\r\n // parts = [xxx, yyy, zzz, ww]\r\n if (parts.length === 4) {\r\n valorFormatado = `${parts[0]}.XXX.XXX-${parts[3]}`;\r\n }\r\n }\r\n\r\n return valorFormatado;\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n@Pipe({\r\n name: 'status',\r\n standalone: true,\r\n})\r\nexport class StatusPipe implements PipeTransform {\r\n constructor(private translate: TranslocoService) {}\r\n\r\n transform(value: any, args?: any): any {\r\n const key = value ? 'general.singular.active' : 'general.singular.inactive';\r\n return this.translate.translate(key);\r\n }\r\n}\r\n","export enum Color {\r\n 'SHARED.COMMON.COLOR.YELLOW' = 1,\r\n 'SHARED.COMMON.COLOR.BLUE' = 2,\r\n 'SHARED.COMMON.COLOR.BEIGE' = 3,\r\n 'SHARED.COMMON.COLOR.WHITE' = 4,\r\n 'SHARED.COMMON.COLOR.BRONZE' = 5,\r\n 'SHARED.COMMON.COLOR.DARK_GRAY' = 6,\r\n 'SHARED.COMMON.COLOR.GRAY' = 7,\r\n 'SHARED.COMMON.COLOR.GOLD' = 8,\r\n 'SHARED.COMMON.COLOR.ORANGE' = 9,\r\n 'SHARED.COMMON.COLOR.BROWN' = 10,\r\n 'SHARED.COMMON.COLOR.SILVER' = 11,\r\n 'SHARED.COMMON.COLOR.BLACK' = 12,\r\n 'SHARED.COMMON.COLOR.GREEN' = 13,\r\n 'SHARED.COMMON.COLOR.RED' = 14,\r\n 'SHARED.COMMON.COLOR.BURGUNDY' = 15,\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Color } from '../models/common/enums/color.enum';\r\n\r\n\r\nconst enumMap: Record<string, any> = {\r\n DocumentType,\r\n Color,\r\n};\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n@Pipe({\r\n name: 'enumLabel',\r\n standalone: true,\r\n})\r\nexport class EnumLabelPipe implements PipeTransform {\r\n constructor(private translate: TranslocoService) { }\r\n\r\n transform(value: number, enumType: string | any): string {\r\n if (value == null || value === undefined) return '';\r\n\r\n let enumObj = typeof enumType === 'string' ? enumMap[enumType] : enumType;\r\n\r\n if (!enumObj) return value.toString();\r\n\r\n const enumKey = enumObj[value];\r\n\r\n if (!enumKey) return value.toString();\r\n\r\n return this.translate.translate(enumKey);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ISelectItem } from '../models/common/select-item.model';\r\n\r\n\r\n// Definições de enums numéricos que ainda são usados pelo sistema\r\nexport enum Month {\r\n January = 1,\r\n February,\r\n March,\r\n April,\r\n May,\r\n June,\r\n July,\r\n August,\r\n September,\r\n October,\r\n November,\r\n December,\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LookupService {\r\n private optionsCache: Map<string, ISelectItem[]> = new Map();\r\n private isCacheBuilt = false;\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Método Público: Retorna a lista completa de opções para um dropdown.\r\n */\r\n public getOptions(lookupType: string): ISelectItem[] {\r\n this.ensureCacheIsBuilt();\r\n return this.optionsCache.get(lookupType) || [];\r\n }\r\n\r\n /**\r\n * Método Público: Converte um valor (número ou string da API) para seu label correspondente.\r\n * A lógica foi simplificada para funcionar com ambos os tipos de enums.\r\n */\r\n public getLabel(lookupType: string, value: any): string {\r\n this.ensureCacheIsBuilt();\r\n if (value === null || value === undefined || value === '') return '';\r\n\r\n const options = this.optionsCache.get(lookupType);\r\n // A busca com '===' funciona perfeitamente para 'value' do tipo number ou string.\r\n const found = options?.find((opt) => opt.id === value);\r\n\r\n return found ? found.label : value.toString();\r\n }\r\n\r\n /**\r\n * Garante que o cache de opções seja construído, mas apenas uma vez (lazy loading).\r\n */\r\n private ensureCacheIsBuilt(): void {\r\n if (this.isCacheBuilt) {\r\n return;\r\n }\r\n this.buildCaches();\r\n this.isCacheBuilt = true;\r\n }\r\n\r\n /**\r\n * Centraliza a construção de todos os caches de lookup.\r\n */\r\n private buildCaches(): void {\r\n // Enums Numéricos Antigos\r\n this.optionsCache.set('Month', this.buildNumericEnumOptions(Month));\r\n\r\n\r\n\r\n }\r\n\r\n // --- MÉTODOS HELPER GENÉRICOS ---\r\n\r\n /**\r\n * Constrói opções para ENUMS DE STRING (ex: { Senior_I: 'Sênior I' }).\r\n * O 'label' é o valor do enum (ex: 'Sênior I').\r\n * O 'value' é a chave do enum (ex: 'Senior_I').\r\n */\r\n private buildStringEnumOptions(enumObject: { [key: string]: string }): ISelectItem[] {\r\n return Object.entries(enumObject).map(([key, value]) => ({\r\n label: value,\r\n id: key,\r\n }));\r\n }\r\n\r\n /**\r\n * Constrói opções para ENUMS NUMÉRICOS (ex: { Janeiro: 1 }).\r\n * O 'label' é a chave do enum (ex: 'Janeiro').\r\n * O 'value' é o valor numérico (ex: 1).\r\n */\r\n private buildNumericEnumOptions(enumObject: any): ISelectItem[] {\r\n return Object.keys(enumObject)\r\n .filter((key) => isNaN(Number(key)))\r\n .map((key) => ({\r\n label: key,\r\n id: enumObject[key] as number,\r\n }));\r\n }\r\n}\r\n","import { inject, Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { LookupService } from '../services/lookup.service';\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Pipe({ name: 'lookup' })\r\nexport class LookupPipe implements PipeTransform {\r\n private lookupService = inject(LookupService);\r\n\r\n transform(value: number | undefined | null, lookupType: string): string {\r\n return this.lookupService.getLabel(lookupType, value);\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\n//import { CountryCustom } from '../models/config/country-custom.model';\r\nimport { CurrencyFormatPipe } from '../pipe/currency-format.pipe';\r\nimport { DateFormatPipe } from '../pipe/date-format.pipe';\r\nimport { DateTimeFormatPipe } from '../pipe/date-time-format.pipe';\r\nimport { DocumentFormatPipe } from '../pipe/document-format.pipe';\r\nimport { EnumLabelPipe } from '../pipe/enum-label.pipe';\r\nimport { LookupPipe } from '../pipe/lookup.pipe';\r\nimport { PersonDocumentFormatPipe } from '../pipe/person-document-format.pipe';\r\nimport { StatusPipe } from '../pipe/status.pipe';\r\nimport { YesNoPipe } from '../pipe/yesNo.pipe';\r\nimport { ZipCodeFormatPipe } from '../pipe/zip-code-format.pipe';\r\nimport { BCColumnHeader } from '../models/common/column-header.model';\r\nimport { BCBaseModel } from '../models/base-model';\r\nimport { CountryCustom } from '../models/config/country-custom.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TableFormattingService {\r\n // yesNoPipe = Inject(YesNoPipe);\r\n // zipCodePipe = Inject(ZipCodeFormatPipe);\r\n // currencyFormatPipe = Inject(CurrencyFormatPipe);\r\n // dateFormatPipe = Inject(DateFormatPipe);\r\n // dateTimeFormatPipe = Inject(DateTimeFormatPipe);\r\n // documentPipe = Inject(DocumentFormatPipe);\r\n // personDocumentPipe = Inject(PersonDocumentFormatPipe);\r\n // statusPipe = Inject(StatusPipe);\r\n // enumLabelPipe = Inject(EnumLabelPipe);\r\n // lookupPipe = Inject(LookupPipe);\r\n // translate = Inject(TranslocoService);\r\n\r\n constructor(\r\n private translate: TranslocoService,\r\n private yesNoPipe: YesNoPipe,\r\n private zipCodePipe: ZipCodeFormatPipe,\r\n private currencyFormatPipe: CurrencyFormatPipe,\r\n private dateFormatPipe: DateFormatPipe,\r\n private dateTimeFormatPipe: DateTimeFormatPipe,\r\n private documentPipe: DocumentFormatPipe,\r\n private personDocumentPipe: PersonDocumentFormatPipe,\r\n private statusPipe: StatusPipe,\r\n private enumLabelPipe: EnumLabelPipe,\r\n private lookupPipe: LookupPipe,\r\n ) {}\r\n\r\n // public formatCell<T extends BaseModel>(item: T, column: ColumnHeader<T>, countryCustom?: CountryCustom): string {\r\n // return \"\";\r\n // }\r\n\r\n public formatCell<T extends BCBaseModel>(\r\n item: T,\r\n column: BCColumnHeader<T>,\r\n countryCustom?: CountryCustom,\r\n ): string {\r\n const raw = item[column.field as keyof T];\r\n if (raw == null) return '';\r\n\r\n let formatted: string;\r\n\r\n if (column.formatter) {\r\n try {\r\n return column.formatter(raw, item);\r\n } catch (error) {\r\n console.error('Custom formatter error:', error);\r\n return String(raw);\r\n }\r\n }\r\n\r\n switch (column.pipe) {\r\n case 'currencyFormat': {\r\n if (typeof raw !== 'number' || isNaN(raw))\r\n throw new Error(\r\n `invalid value fo 'currencyFormat'. Waiting number, but value was : ${raw}`,\r\n );\r\n formatted =\r\n this.currencyFormatPipe.transform(\r\n raw,\r\n countryCustom,\r\n column.pipeArgs?.defaultCurrencyCode,\r\n column.pipeArgs?.defaultDigitsInfo,\r\n ) ?? '';\r\n break;\r\n }\r\n case 'dateFormat':\r\n case 'dateTimeFormat': {\r\n const dateVal = typeof raw === 'string' ? new Date(raw) : (raw as unknown as Date);\r\n if (isNaN(dateVal.getTime())) throw new Error(`Invalid date value : ${raw}`);\r\n const pipe = column.pipe === 'dateFormat' ? this.dateFormatPipe : this.dateTimeFormatPipe;\r\n formatted = pipe.transform(dateVal, countryCustom) ?? '';\r\n break;\r\n }\r\n case 'zipCodeFormat':\r\n case 'documentFormat':\r\n case 'personDocumentFormat': {\r\n if (typeof raw !== 'string') throw new Error(`invalid document number: ${typeof raw}`);\r\n if (column.pipe === 'zipCodeFormat')\r\n formatted = this.zipCodePipe.transform(raw, countryCustom) ?? '';\r\n else if (column.pipe === 'documentFormat')\r\n formatted = this.documentPipe.transform(raw, countryCustom) ?? '';\r\n else\r\n formatted =\r\n this.personDocumentPipe.transform(raw, countryCustom, !!column.pipeArgs) ?? '';\r\n break;\r\n }\r\n case 'enumLabel': {\r\n const enumName = column.enumType;\r\n if (typeof raw !== 'number' || typeof enumName !== 'string')\r\n throw new Error(`Invalid types for 'enumLabel'. Value: ${raw}, Enum: ${enumName}`);\r\n formatted = this.enumLabelPipe.transform(raw, enumName) ?? '';\r\n break;\r\n }\r\n case 'yesNo':\r\n case 'status': {\r\n if (typeof raw !== 'boolean') throw new Error(`Invalid value for boolean : ${typeof raw}`);\r\n const pipe = column.pipe === 'yesNo' ? this.yesNoPipe : this.statusPipe;\r\n formatted = pipe.transform(raw);\r\n break;\r\n }\r\n case 'companyName': {\r\n if (raw && typeof raw === 'object' && (raw as any).name) {\r\n formatted = (raw as any).name;\r\n } else if (typeof raw === 'string') {\r\n formatted = raw;\r\n } else {\r\n formatted = '';\r\n }\r\n break;\r\n }\r\n case 'lookup': {\r\n const lookupType = column.lookupType;\r\n\r\n if (!lookupType) {\r\n return String(raw);\r\n }\r\n\r\n formatted = this.lookupPipe.transform(raw as any as number, lookupType);\r\n\r\n if (column.hasTranslate)\r\n formatted = `lookups.${lookupType.toLowerCase()}.${formatted\r\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\r\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\r\n .toLowerCase()}`;\r\n break;\r\n }\r\n default:\r\n formatted = String(raw);\r\n break;\r\n }\r\n\r\n if (column.hasTranslate && formatted) {\r\n return this.translate.translate(formatted);\r\n }\r\n\r\n return formatted;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n inject,\r\n input,\r\n Input,\r\n InputSignal,\r\n OnChanges,\r\n OnInit,\r\n output,\r\n Output,\r\n OutputEmitterRef,\r\n signal,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { AvatarGroupModule } from 'primeng/avatargroup';\r\nimport { BadgeModule } from 'primeng/badge';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { FloatLabelModule } from 'primeng/floatlabel';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { Table, TableLazyLoadEvent, TableModule, TableRowExpandEvent } from 'primeng/table';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { debounceTime, Subject, tap } from 'rxjs';\r\nimport { IconField } from 'primeng/iconfield';\r\nimport { InputIcon } from 'primeng/inputicon';\r\n\r\nimport { FilterMetadata, SortMeta } from 'primeng/api';\r\n\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { TableFormattingService } from '../../services/table-formatting.service';\r\nimport { BCColumnHeader } from '../../models/common/column-header.model';\r\nimport { CountryCustom } from '../../models/config/country-custom.model';\r\nimport { BCBaseModel } from '../../models/base-model';\r\nimport { PaginationRequestDto } from '../../models/common/pagination-request-dto';\r\nimport { OrderDto } from '../../models/common/order-dto';\r\nimport { FilterDto } from '../../models/common/filter-dto';\r\nimport { BCColumnFilterAdvancedComponent } from './column-filter-advanced/column-filter-advanced.component';\r\nimport { BCNoRecordsFoundComponent } from '../no-records-found/no-records-found.component';\r\n\r\n@Component({\r\n selector: 'bc-generic-p-table',\r\n templateUrl: './generic-ptable.component.html',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n TranslocoModule,\r\n TableModule,\r\n TooltipModule,\r\n InputTextModule,\r\n ButtonModule,\r\n IconField,\r\n InputIcon,\r\n\r\n AvatarModule,\r\n AvatarGroupModule,\r\n BadgeModule,\r\n MultiSelectModule,\r\n FloatLabelModule,\r\n BCColumnFilterAdvancedComponent,\r\n BCNoRecordsFoundComponent,\r\n ],\r\n})\r\nexport class BCGenericPTableComponent<T extends BCBaseModel> implements OnInit, OnChanges {\r\n private _tableData: T[] = [];\r\n\r\n @Input() set tableData(value: T[]) {\r\n this._tableData = value.map((item, index) => ({\r\n ...item,\r\n index: index + 1,\r\n }));\r\n }\r\n get tableData(): T[] {\r\n return this._tableData;\r\n }\r\n\r\n @ContentChild('customActions') customActionsTemplate: TemplateRef<any> | undefined;\r\n\r\n @ViewChild('dt') dt: Table | undefined;\r\n\r\n @Input() totalRecords = 0;\r\n @Input() rows = 10;\r\n @Input() serverSidePagination = false;\r\n\r\n @Input() columnDefinition: BCColumnHeader<T>[] = [];\r\n @Input() optionsColumns: BCColumnHeader<T>[] = [];\r\n\r\n @Input() tableName? = '';\r\n @Input() titleBtnCreate = 'general.singular.new';\r\n @Input() hasBtnCreate = false;\r\n @Input() displayCreateAction = false;\r\n public hasExpandedRows: InputSignal<boolean> = input<boolean>(false);\r\n public expandedRowKey: InputSignal<string | 'index'> = input<string | 'index'>('id');\r\n public expandedRows: InputSignal<{ [p: string]: boolean }> = input<{ [p: string]: boolean }>({});\r\n @ContentChild('expandedrow', { descendants: false })\r\n public expandedRowTemplate: TemplateRef<any> | null = null;\r\n\r\n // --- Propriedades para Seleção de Colunas ---\r\n visibleColumns: BCColumnHeader<T>[] = [];\r\n optionalColumnOptions: BCColumnHeader<T>[] = [];\r\n selectedColumns: BCColumnHeader<T>[] = [];\r\n\r\n @Input() stripedRows = true;\r\n\r\n /**\r\n * Receipt function for applicate css classes dinamycalle to a line.\r\n * The function receives the data of the line and should return a string with the classes.\r\n */\r\n @Input() rowStyleClass?: (rowData: T) => string;\r\n\r\n /**\r\n * Properties for selection\r\n */\r\n /** Enable the display of the selection column (checkboxes). */\r\n @Input() enableSelection = false;\r\n\r\n /** Receipt function to determine if a line can be selected. */\r\n @Input() isRowSelectable?: (event: { data: T }) => boolean;\r\n\r\n // --- UPDATED SELECTION LOGIC FOR TWO-WAY BINDING ---\r\n\r\n /** 1. Receipt the selection from the parent component. */\r\n @Input() selection: T[] = [];\r\n\r\n /** 2. Emit the changes back to the parent. The 'Change' suffix is crucial. */\r\n @Output() selectionChange = new EventEmitter<T[]>();\r\n\r\n // The getter/setter and the _selectedItems property are no longer needed.\r\n\r\n /**\r\n * Internal method to propagate the change of the p-table to the parent component.\r\n */\r\n onInternalSelectionChange(currentSelection: T[]): void {\r\n this.selection = currentSelection; // Update internal state\r\n this.selectionChange.emit(this.selection); // Emit to parent\r\n }\r\n\r\n /**\r\n * Can be boolean (all) or function (by line)\r\n */\r\n @Input() displayDetailAction: boolean | ((item: any) => boolean) = false;\r\n public disableDetailCondition = input<((item: any) => boolean) | null>(null);\r\n @Input() displayEditAction = false;\r\n public disableEditCondition = input<((item: any) => boolean) | null>(null);\r\n public displayEditCondition = input<((item: any) => boolean) | null>(null);\r\n @Input() displayDeleteAction = false;\r\n public disableDeleteCondition = input<((item: any) => boolean) | null>(null);\r\n @Input() displayDeleteCondition?: (item: any) => boolean;\r\n countryCustom?: CountryCustom;\r\n\r\n @Output() genericEvent = new EventEmitter<T>();\r\n @Output() detail = new EventEmitter<T>();\r\n @Output() add = new EventEmitter<void>();\r\n @Output() edit = new EventEmitter<T>();\r\n @Output() delete = new EventEmitter<T>();\r\n\r\n @Output() readonly changeColumns = new EventEmitter<BCColumnHeader<T>[]>();\r\n public lazyLoad = output<PaginationRequestDto>();\r\n public onRowExpand: OutputEmitterRef<TableRowExpandEvent> = output<TableRowExpandEvent>();\r\n public onRowCollapse: OutputEmitterRef<TableRowExpandEvent> = output<TableRowExpandEvent>();\r\n\r\n private sortState = signal<SortMeta[]>([]);\r\n\r\n filteredTableData: T[] = [];\r\n filter = '';\r\n rowsPerPageOptions = [5, 10, 25, 50, 100];\r\n\r\n private imageFields = ['image', 'photo', 'flag', 'photoData'];\r\n private filterSubject = new Subject<string>();\r\n\r\n private hasFormattingErrorOccurred = false;\r\n\r\n private transloco = inject(TranslocoService);\r\n\r\n constructor(\r\n //private sessionService: SessionService,\r\n private notificationService: NotificationService,\r\n private formattingService: TableFormattingService,\r\n ) {\r\n this.filterSubject\r\n .pipe(\r\n debounceTime(300), // The debounce logic continues perfect\r\n tap((filterValue) => {\r\n this.filterGlobalWithFormatters(filterValue);\r\n }),\r\n )\r\n .subscribe();\r\n }\r\n\r\n /**\r\n * Verify if the \"New\" button should be disabled\r\n *\r\n * PROFILES:\r\n * - Support: disable all (maximum priority)\r\n * - Requery: enable New, Send for Analysis and Reopen\r\n * - Approval: enable all\r\n */\r\n get isCreateButtonDisabled(): boolean {\r\n //can verify permissions for enable new button\r\n return false;\r\n }\r\n\r\n public get displayActionsColumn(): boolean {\r\n return (\r\n !!this.displayDetailAction ||\r\n this.displayEditAction ||\r\n this.displayDeleteAction ||\r\n !!this.customActionsTemplate\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n // this.sessionService.getSession().then((sess) => {\r\n // this.countryCustom = sess?.countryCustom;\r\n // });\r\n // const state = JSON.parse(sessionStorage.getItem('state-' + this.tableName) || '{}');\r\n // this.filter = state.filters?.global?.value || '';\r\n // // Inicializar dados filtrados\r\n // this.filteredTableData = [...this._tableData];\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Verify if the column definition was passed or changed\r\n if (changes['columnDefinition']) {\r\n this.initializeColumns();\r\n }\r\n\r\n if (changes['tableData']) {\r\n this.hasFormattingErrorOccurred = false;\r\n\r\n // Update filtered data when tableData changes\r\n if (!this.serverSidePagination) {\r\n this.filteredTableData = [...this._tableData];\r\n // Reapply filter if exists\r\n if (this.filter) {\r\n this.filterGlobalWithFormatters(this.filter);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private readonly maxSelectedLabels = 3;\r\n /**\r\n * Prepare the lists of required, optional and visible columns.\r\n */\r\n private initializeColumns(): void {\r\n if (!this.columnDefinition) {\r\n this.visibleColumns = [];\r\n return;\r\n }\r\n\r\n // 1. Filters the columns that are optional.\r\n const optionalColumns = this.columnDefinition.filter((col) => col.optional);\r\n\r\n // 2. The list of options for the dropdown is simply the list of optional columns.\r\n // The 'header' contains the translation KEY (ex: 'features...name').\r\n this.optionalColumnOptions = optionalColumns;\r\n\r\n // 3. Define the columns that come selected by default.\r\n this.selectedColumns = this.columnDefinition.filter(\r\n (col) => col.optional && col.defaultSelected,\r\n );\r\n\r\n // 4. Calculates the columns that will be visible in the table.\r\n this.updateVisibleColumns();\r\n }\r\n\r\n /**\r\n * Getter that transforms the array of selected columns into a string for display,\r\n * respecting the limit of 'maxSelectedLabels'.\r\n */\r\n public get selectedColumnsLabel(): string {\r\n if (!this.selectedColumns || this.selectedColumns.length === 0) {\r\n return ''; // Return empty for the placeholder to appear\r\n }\r\n\r\n const count = this.selectedColumns.length;\r\n\r\n // If the quantity of selected items is greater than the limit...\r\n if (count > this.maxSelectedLabels) {\r\n // Returns a message like \"4 columns selected\"\r\n //return this.transloco.translate('components.generic-table.selected-items-count', { count: count });\r\n return count + ' items seleccionados';\r\n }\r\n\r\n // If it's less than or equal to the limit, show the names separated by commas\r\n return this.selectedColumns\r\n .map((col) => this.transloco.translate(col.header, col.headerParams))\r\n .join(', ');\r\n }\r\n\r\n onColumnSelectionChange(): void {\r\n this.updateVisibleColumns();\r\n }\r\n\r\n private updateVisibleColumns(): void {\r\n const mandatoryColumns = this.columnDefinition.filter((col) => !col.optional);\r\n this.visibleColumns = [...mandatoryColumns, ...this.selectedColumns].sort(\r\n (a, b) => (a.order ?? 0) - (b.order ?? 0),\r\n );\r\n }\r\n\r\n isImageField(field: string): boolean {\r\n return this.imageFields.includes(field);\r\n }\r\n\r\n getImageSrc(field: string, rowData: any): string {\r\n // Special case for our Base64 photo\r\n if (field === 'photoData') {\r\n if (rowData.photoData) {\r\n return `data:${rowData.photoContentType};base64,${rowData.photoData}`;\r\n }\r\n // Return a default avatar if no photo is found\r\n return './images/default-avatar.png';\r\n }\r\n\r\n // Existing logic for other image types (like URLs)\r\n const rawValue = rowData[field];\r\n return rawValue || './images/default-avatar.png';\r\n }\r\n\r\n public getFormattedValue(item: T, column: BCColumnHeader<T>): string {\r\n try {\r\n return this.formattingService.formatCell(item, column, this.countryCustom);\r\n } catch (error) {\r\n console.error('Erro retornado pelo serviço de formatação:', error);\r\n\r\n if (!this.hasFormattingErrorOccurred) {\r\n this.notificationService.error(\r\n this.transloco.translate('components.generic-table.formatting-error-message'),\r\n this.transloco.translate('components.generic-table.formatting-error-title'),\r\n );\r\n this.hasFormattingErrorOccurred = true;\r\n }\r\n\r\n const raw = item[column.field as keyof T];\r\n return raw != null ? String(raw) : '';\r\n }\r\n }\r\n\r\n getPrioritySeverity(\r\n priority: number | string,\r\n ): 'info' | 'success' | 'warn' | 'danger' | 'secondary' | 'contrast' {\r\n switch (priority) {\r\n case 1:\r\n return 'success';\r\n case 2:\r\n return 'info';\r\n case 3:\r\n return 'warn';\r\n case 4:\r\n return 'danger';\r\n default:\r\n return 'secondary';\r\n }\r\n }\r\n\r\n public onLazyLoad(event: TableLazyLoadEvent) {\r\n this.customSort(event.multiSortMeta ?? []);\r\n\r\n event.multiSortMeta = this.sortState();\r\n this.lazyLoad.emit({\r\n pageNumber: (event.first ?? 0) / (event.rows ?? 10) + 1,\r\n pageSize: event.rows ?? 10,\r\n orders: event.multiSortMeta\r\n ? event.multiSortMeta.map((o) => ({ field: o.field, order: o.order }) as OrderDto)\r\n : [],\r\n filters: Object.entries(event.filters ?? {}).flatMap(([fieldName, filters]) => {\r\n if (fieldName == 'global') return [];\r\n\r\n if (Array.isArray(filters)) {\r\n return filters.map(\r\n (f: FilterMetadata) =>\r\n ({\r\n ...f,\r\n field: fieldName,\r\n value: f.value || f.value === 0 ? `${f.value}` : null,\r\n }) as FilterDto,\r\n );\r\n } else if (filters) {\r\n return [\r\n {\r\n ...filters,\r\n field: fieldName,\r\n value: filters.value || filters.value === 0 ? `${filters.value}` : null,\r\n },\r\n ] as FilterDto[];\r\n } else {\r\n return [];\r\n }\r\n }),\r\n globalFilter: event.globalFilter as string | undefined,\r\n });\r\n }\r\n\r\n onGlobalFilter(table: Table, event: any) {\r\n const filterValue = (event.target as HTMLInputElement).value;\r\n this.filterGlobalWithFormatters(filterValue);\r\n }\r\n\r\n private filterGlobalWithFormatters(filterValue: string): void {\r\n if (!filterValue.trim()) {\r\n this.filteredTableData = [...this._tableData];\r\n return;\r\n }\r\n\r\n const lowerFilter = filterValue.toLowerCase();\r\n\r\n this.filteredTableData = this._tableData.filter((item) => {\r\n return this.columnDefinition.some((column) => {\r\n // For columns with a custom formatter, use the formatted value\r\n if (column.formatter) {\r\n try {\r\n const formattedValue = column.formatter(item[column.field as keyof T], item);\r\n return formattedValue.toLowerCase().includes(lowerFilter);\r\n } catch (error) {\r\n console.error('Error in formatter during search:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // For normal columns, use the original value\r\n const rawValue = item[column.field as keyof T];\r\n if (rawValue != null) {\r\n return String(rawValue).toLowerCase().includes(lowerFilter);\r\n }\r\n\r\n return false;\r\n });\r\n });\r\n }\r\n\r\n onFilterChange(value: string) {\r\n this.filter = value;\r\n this.filterSubject.next(value);\r\n\r\n // Apply custom filter for columns with formatter\r\n if (!this.serverSidePagination) {\r\n this.filterGlobalWithFormatters(value);\r\n }\r\n }\r\n\r\n changeColumnHeaders(cols: BCColumnHeader<T>[]) {\r\n this.changeColumns.emit(cols);\r\n }\r\n\r\n onGenericEvent(object: T): void {\r\n if (object) {\r\n this.genericEvent.emit(object);\r\n }\r\n }\r\n\r\n onDetail(object: T): void {\r\n if (object) {\r\n this.detail.emit(object);\r\n }\r\n }\r\n\r\n onAdd(): void {\r\n // Verify if the button is disabled\r\n if (this.isCreateButtonDisabled) {\r\n return; // Do not execute if the button is disabled\r\n }\r\n this.add.emit();\r\n }\r\n\r\n onEdit(object: T): void {\r\n if (object) {\r\n this.edit.emit(object);\r\n }\r\n }\r\n\r\n onDelete(object: T): void {\r\n if (object) {\r\n this.delete.emit(object);\r\n }\r\n }\r\n\r\n trackByField(_index: number, col: BCColumnHeader<T>) {\r\n return col.field;\r\n }\r\n\r\n protected canShowEditButton(item: any) {\r\n if (!this.displayEditAction) {\r\n return false;\r\n }\r\n\r\n if (this.displayEditCondition()) {\r\n return this.displayEditCondition()?.(item);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n canShowDeleteButton(item: any): boolean {\r\n if (!this.displayDeleteAction) {\r\n return false;\r\n }\r\n\r\n if (this.displayDeleteCondition) {\r\n return this.displayDeleteCondition(item);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n isDetailActionVisible(item: any): boolean {\r\n if (typeof this.displayDetailAction === 'function') {\r\n return this.displayDetailAction(item);\r\n }\r\n return !!this.displayDetailAction;\r\n }\r\n\r\n /**\r\n * NEW PUBLIC METHOD: Clears the selection and the table's saved state.\r\n * This method can be called by the parent component.\r\n */\r\n public clearSelectionAndState(): void {\r\n this.selection = []; // Clears the selection property\r\n this.selectionChange.emit([]); // Notifies the parent about the clearing\r\n\r\n if (this.dt) {\r\n this.dt.clearState(); // clear your p-table storage\r\n // Opcional: this.dt.reset() //clear too filters and sort and go to first page, if you want to reset the table to initial state.\r\n }\r\n }\r\n\r\n public customSort(multiSortMeta: SortMeta[]) {\r\n if (multiSortMeta?.length == 0) {\r\n this.sortState.set([]);\r\n }\r\n\r\n multiSortMeta?.forEach((sortMeta) => {\r\n const sortState = this.sortState().find((s) => s.field === sortMeta.field);\r\n\r\n if (this.dt && sortState && sortState.order === -1 && sortMeta.order === 1) {\r\n this.dt.multiSortMeta = this.dt.multiSortMeta?.filter((ms) => ms.field !== sortState.field);\r\n }\r\n });\r\n\r\n this.sortState.set(JSON.parse(JSON.stringify(this.dt?.multiSortMeta ?? multiSortMeta)));\r\n\r\n if (!this.serverSidePagination)\r\n this.filteredTableData =\r\n this.sortState().length > 0\r\n ? this.sortGenericList(this.filteredTableData, this.sortState())\r\n : [...this._tableData];\r\n }\r\n\r\n /**\r\n * Sorts a list of objects based on multiple field and order criteria.\r\n * @param {Array<object>} list - The list of objects to sort.\r\n * @param {Array<{ field: string, order: 1 | -1 }>} sortRules - Fields and sort directions (1 = ASC, -1 = DESC).\r\n * @returns {Array<object>} - A new sorted list.\r\n */\r\n private sortGenericList(list: any, sortRules: SortMeta[]): any[] {\r\n return list.sort((a: any, b: any) => {\r\n for (const { field, order } of sortRules) {\r\n const valueA = a[field];\r\n const valueB = b[field];\r\n\r\n if (valueA < valueB) return -1 * order;\r\n if (valueA > valueB) return order;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n public hasColumnsFilter(): boolean {\r\n return this.columnDefinition.filter((col) => col.filter).length > 0;\r\n }\r\n\r\n public hasFiltersApplied(dt: Table): boolean {\r\n const filters = Object.entries(dt.filters ?? {}).flatMap(([_, filters]) => {\r\n return filters;\r\n });\r\n\r\n if (!filters) return false;\r\n\r\n if (Array.isArray(filters)) return filters.filter((f) => f.value || f.value === 0).length > 0;\r\n\r\n return (filters as FilterMetadata).value;\r\n }\r\n}\r\n","<p-table\r\n #dt\r\n [value]=\"serverSidePagination ? tableData : filteredTableData\"\r\n [rows]=\"rows\"\r\n [stripedRows]=\"stripedRows\"\r\n [totalRecords]=\"serverSidePagination ? totalRecords : filteredTableData.length\"\r\n [lazy]=\"serverSidePagination\"\r\n (onLazyLoad)=\"onLazyLoad($event)\"\r\n [columns]=\"visibleColumns\"\r\n scrollHeight=\"auto\"\r\n [showCurrentPageReport]=\"true\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [paginator]=\"true\"\r\n stateStorage=\"session\"\r\n [stateKey]=\"tableName ? `state-${tableName}` : undefined\"\r\n currentPageReportTemplate=\"{{ 'general.phrase.show_rows' | transloco }}\"\r\n [customSort]=\"true\"\r\n [sortMode]=\"'multiple'\"\r\n (sortFunction)=\"customSort($event.multiSortMeta)\"\r\n [dataKey]=\"expandedRowKey()\"\r\n [selection]=\"selection\"\r\n (selectionChange)=\"onInternalSelectionChange($event)\"\r\n [expandedRowKeys]=\"expandedRows()\"\r\n (onRowExpand)=\"onRowExpand.emit($event)\"\r\n (onRowCollapse)=\"onRowCollapse.emit($event)\"\r\n>\r\n <!-- CAPTION: search, creation and dynamic columns -->\r\n <ng-template #caption>\r\n <div class=\"flex flex-col md:flex-row md:justify-between md:items-center gap-2\">\r\n <div class=\"flex items-center gap-2 w-full md:w-auto\">\r\n <!-- Busca Rápida -->\r\n <p-icon-field class=\"w-full sm:w-80 order-1 sm:order-none\">\r\n <p-inputicon class=\"pi pi-search\" />\r\n <input\r\n pInputText\r\n type=\"text\"\r\n [placeholder]=\"'components.generic-table.global-search-placeholder' | transloco\"\r\n class=\"w-full\"\r\n [(ngModel)]=\"filter\"\r\n (ngModelChange)=\"onFilterChange($event)\"\r\n (input)=\"dt.filterGlobal($any($event.target).value, 'contains')\"\r\n />\r\n </p-icon-field>\r\n\r\n @if (hasColumnsFilter()) {\r\n <p-button\r\n class=\"w-60 md:w-72 md:h-11\"\r\n [label]=\"'general.singular.clear' | transloco\"\r\n [outlined]=\"true\"\r\n [icon]=\"hasFiltersApplied(dt) ? 'pi pi-filter-fill' : 'pi pi-filter-slash'\"\r\n (click)=\"dt.clear(); filter = ''; dt.saveState()\"\r\n />\r\n }\r\n </div>\r\n\r\n <div class=\"flex items-center gap-2 self-end md:self-auto\">\r\n <!-- MultiSelect -->\r\n <p-floatlabel *ngIf=\"optionalColumnOptions.length > 0\" variant=\"on\">\r\n <p-multiSelect\r\n [options]=\"optionalColumnOptions\"\r\n [(ngModel)]=\"selectedColumns\"\r\n (onChange)=\"onColumnSelectionChange()\"\r\n optionLabel=\"header\"\r\n styleClass=\"w-60 md:w-72 md:h-11\"\r\n >\r\n <ng-template let-value pTemplate=\"selectedItems\">\r\n <div *ngIf=\"!value || value.length === 0\">\r\n {{ 'components.generic-table.column-selector-placeholder' | transloco }}\r\n </div>\r\n\r\n <div *ngIf=\"value && value.length > 0\">\r\n {{ selectedColumnsLabel }}\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template let-option pTemplate=\"item\">\r\n <div>{{ option.header | transloco }}</div>\r\n </ng-template>\r\n </p-multiSelect>\r\n\r\n <label for=\"columnSelector\">\r\n {{ 'components.generic-table.column-selector-placeholder' | transloco }}\r\n </label>\r\n </p-floatlabel>\r\n\r\n <!-- Item Dinâmico -->\r\n <ng-content></ng-content>\r\n\r\n <p-button\r\n *ngIf=\"displayCreateAction\"\r\n (onClick)=\"onAdd()\"\r\n [label]=\"'general.singular.new' | transloco\"\r\n icon=\"pi pi-plus\"\r\n [disabled]=\"isCreateButtonDisabled\"\r\n >\r\n </p-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- HEADER -->\r\n <ng-template #header let-columns>\r\n <tr>\r\n @if (hasExpandedRows()) {\r\n <th [style.width.rem]=\"1\">&nbsp;</th>\r\n }\r\n <th *ngIf=\"enableSelection\" style=\"width: 4rem\">\r\n <p-tableHeaderCheckbox />\r\n </th>\r\n <th\r\n *ngFor=\"let col of columns; trackBy: trackByField\"\r\n [pSortableColumn]=\"col.field\"\r\n [style]=\"col.style\"\r\n >\r\n <div class=\"flex items-center justify-between\">\r\n <div class=\"flex items-center gap-2\">\r\n {{ col.header | transloco: col.headerParams }}\r\n\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n\r\n <bc-column-filter-advanced [col]=\"col\"></bc-column-filter-advanced>\r\n </div>\r\n </th>\r\n <th *ngIf=\"displayActionsColumn\" style=\"min-width: 12rem\"></th>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- BODY -->\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowIndex=\"rowIndex\"\r\n let-expanded=\"expanded\"\r\n >\r\n <tr [ngClass]=\"rowStyleClass ? rowStyleClass(rowData) : null\">\r\n @if (hasExpandedRows()) {\r\n <td>\r\n <p-button\r\n type=\"button\"\r\n pRipple\r\n [pRowToggler]=\"rowData\"\r\n [text]=\"true\"\r\n severity=\"secondary\"\r\n [attr.aria-label]=\"\r\n (expanded ? 'components.generic-table.retract' : 'components.generic-table.expand')\r\n | transloco\r\n \"\r\n [pTooltip]=\"\r\n (expanded ? 'components.generic-table.retract' : 'components.generic-table.expand')\r\n | transloco\r\n \"\r\n tooltipPosition=\"top\"\r\n [rounded]=\"true\"\r\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"\r\n />\r\n </td>\r\n }\r\n <td *ngIf=\"enableSelection\">\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isRowSelectable ? !isRowSelectable({ data: rowData }) : false\"\r\n >\r\n </p-tableCheckbox>\r\n </td>\r\n <td *ngFor=\"let col of columns; trackBy: trackByField\">\r\n <ng-container *ngIf=\"isImageField(col.field); else textCell\">\r\n <div class=\"flex items-center gap-2\">\r\n <p-avatar [image]=\"getImageSrc(col.field, rowData)\" shape=\"circle\"></p-avatar>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #textCell>\r\n <ng-container *ngIf=\"col.displayAs === 'badge'; else priorityCell\">\r\n <p-badge\r\n [value]=\"getFormattedValue(rowData, col)\"\r\n [severity]=\"col.badgeSeverityMap?.[rowData[col.field]] || 'info'\"\r\n >\r\n </p-badge>\r\n </ng-container>\r\n\r\n <ng-template #priorityCell>\r\n <ng-container *ngIf=\"col.enumType === 'Priority'; else defaultTextCell\">\r\n <p-badge\r\n [value]=\"getFormattedValue(rowData, col)\"\r\n [severity]=\"getPrioritySeverity(rowData[col.field])\"\r\n >\r\n </p-badge>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #defaultTextCell>\r\n <span>{{ getFormattedValue(rowData, col) }}</span>\r\n </ng-template>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"displayActionsColumn\">\r\n <div class=\"flex justify-end-safe\">\r\n <ng-container\r\n *ngIf=\"customActionsTemplate\"\r\n [ngTemplateOutlet]=\"customActionsTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n\r\n <p-button\r\n *ngIf=\"isDetailActionVisible(rowData)\"\r\n (onClick)=\"onDetail(rowData)\"\r\n styleClass=\"mr-2 p-button-sm\"\r\n variant=\"outlined\"\r\n icon=\"pi pi-info-circle\"\r\n [attr.aria-label]=\"'components.generic-table.actions.details' | transloco\"\r\n severity=\"primary\"\r\n [pTooltip]=\"'components.generic-table.actions.details' | transloco\"\r\n tooltipPosition=\"top\"\r\n [disabled]=\"disableDetailCondition() ? disableDetailCondition()!(rowData) : false\"\r\n />\r\n\r\n <p-button\r\n *ngIf=\"canShowEditButton(rowData)\"\r\n (onClick)=\"onEdit(rowData)\"\r\n styleClass=\"mr-2 p-button-sm\"\r\n variant=\"outlined\"\r\n icon=\"pi pi-pencil\"\r\n [attr.aria-label]=\"'components.generic-table.actions.edit' | transloco\"\r\n severity=\"primary\"\r\n [pTooltip]=\"'components.generic-table.actions.edit' | transloco\"\r\n tooltipPosition=\"top\"\r\n [disabled]=\"disableEditCondition() ? disableEditCondition()!(rowData) : false\"\r\n />\r\n\r\n <p-button\r\n *ngIf=\"canShowDeleteButton(rowData)\"\r\n (onClick)=\"onDelete(rowData)\"\r\n styleClass=\"mr-2 p-button-sm\"\r\n variant=\"outlined\"\r\n icon=\"pi pi-trash\"\r\n [attr.aria-label]=\"'components.generic-table.actions.delete' | transloco\"\r\n severity=\"danger\"\r\n [pTooltip]=\"'components.generic-table.actions.delete' | transloco\"\r\n tooltipPosition=\"top\"\r\n [disabled]=\"disableDeleteCondition() ? disableDeleteCondition()!(rowData) : false\"\r\n />\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #expandedrow let-rowData>\r\n <tr>\r\n <td\r\n [colSpan]=\"\r\n (enableSelection ? 1 : 0) +\r\n (hasExpandedRows() ? 1 : 0) +\r\n visibleColumns.length +\r\n (displayActionsColumn ? 1 : 0)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"expandedRowTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n ></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<bc-no-records-found\r\n [length]=\"tableData.length || 0\"\r\n [hasBtnCreate]=\"displayCreateAction && hasBtnCreate\"\r\n (onClick)=\"onAdd()\"\r\n></bc-no-records-found>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n forwardRef,\r\n OnInit,\r\n Injector,\r\n ContentChild,\r\n TemplateRef,\r\n input,\r\n InputSignal,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NG_VALUE_ACCESSOR,\r\n ControlValueAccessor,\r\n NgControl,\r\n AbstractControl,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { AutoCompleteModule } from 'primeng/autocomplete';\r\nimport { InputGroupModule } from 'primeng/inputgroup';\r\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { FormFieldErrorComponent } from '../forms/form-field-error/form-field-error.component';\r\n\r\n@Component({\r\n selector: 'bc-autocomplete',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n AutoCompleteModule,\r\n InputGroupModule,\r\n InputGroupAddonModule,\r\n TooltipModule,\r\n FormFieldErrorComponent,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BCAutoCompleteComponent),\r\n multi: true,\r\n },\r\n ],\r\n templateUrl: './bc-autocomplete.component.html',\r\n styles: [\r\n `\r\n .required::after {\r\n content: '*';\r\n color: #c62828;\r\n margin-left: 0.25rem;\r\n }\r\n :host ::ng-deep .ng-invalid.ng-dirty .p-autocomplete-input {\r\n border-color: #c62828 !important;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class BCAutoCompleteComponent implements ControlValueAccessor, OnInit {\r\n /** Label del campo */\r\n @Input() label!: string;\r\n public subLabel = input<string | undefined>(undefined);\r\n\r\n /** Sugerencias que vienen del padre */\r\n @Input() suggestions: any[] = [];\r\n\r\n /** Campo a mostrar del objeto */\r\n @Input() field: string = 'label';\r\n\r\n @Input() placeholder?: string;\r\n @Input() minLength: number = 1;\r\n @Input() dropdown: boolean = true;\r\n @Input() forceSelection: boolean = true;\r\n @Input() required = false;\r\n\r\n /** Evento para que el padre busque en el servicio */\r\n @Output() completeMethod = new EventEmitter<any>();\r\n @Output() onSelect = new EventEmitter<any>();\r\n @Output() onClear = new EventEmitter<any>();\r\n\r\n value: any = null;\r\n isDisabled = false;\r\n inputId = `auto-${Math.random().toString(36).substring(2)}`;\r\n\r\n onChange: (v: any) => void = () => {};\r\n onTouched: () => void = () => {};\r\n\r\n private ngControlInstance: NgControl | null = null;\r\n\r\n @ContentChild('addOnBefore') addOnBeforeTemplate: TemplateRef<any> | null = null;\r\n @ContentChild('addOnAfter') addOnAfterTemplate: TemplateRef<any> | null = null;\r\n\r\n constructor(private injector: Injector) {}\r\n\r\n ngOnInit(): void {\r\n this.ngControlInstance = this.injector.get(NgControl, null);\r\n if (this.ngControlInstance) {\r\n this.ngControlInstance.valueAccessor = this;\r\n const ctrl = this.ngControlInstance.control;\r\n if (!this.required && ctrl?.validator) {\r\n const result = ctrl.validator({ value: null } as AbstractControl);\r\n if (result?.['required']) this.required = true;\r\n }\r\n }\r\n }\r\n\r\n // --- ControlValueAccessor ---\r\n writeValue(obj: any): void {\r\n this.value = obj;\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n // --- Event Handlers ---\r\n onSearch(event: any) {\r\n this.completeMethod.emit(event);\r\n }\r\n\r\n onItemSelect(event: any) {\r\n this.onChange(this.value);\r\n this.onSelect.emit(event);\r\n }\r\n\r\n onBlur() {\r\n this.onTouched();\r\n }\r\n\r\n get control(): AbstractControl | null {\r\n return this.ngControlInstance?.control || null;\r\n }\r\n\r\n get showError(): boolean {\r\n const c = this.control;\r\n return !!(c && c.invalid && (c.dirty || c.touched));\r\n }\r\n}\r\n","<div class=\"field\">\r\n <label [attr.for]=\"inputId\" class=\"block font-bold mb-2\">\r\n <span [ngClass]=\"required ? 'required' : ''\">\r\n {{ label }}\r\n </span>\r\n <br />\r\n @if (subLabel()) {\r\n <span class=\"text-muted-color font-normal text-sm\">\r\n {{ subLabel() }}\r\n </span>\r\n }\r\n </label>\r\n\r\n <p-input-group>\r\n @if (addOnBeforeTemplate) {\r\n <p-inputgroup-addon>\r\n <ng-container [ngTemplateOutlet]=\"addOnBeforeTemplate\"></ng-container>\r\n </p-inputgroup-addon>\r\n }\r\n\r\n <div class=\"w-full\">\r\n <p-autoComplete\r\n [id]=\"inputId\"\r\n [(ngModel)]=\"value\"\r\n [suggestions]=\"suggestions\"\r\n (completeMethod)=\"onSearch($event)\"\r\n (onSelect)=\"onItemSelect($event)\"\r\n (onClear)=\"onItemSelect($event)\"\r\n (onBlur)=\"onBlur()\"\r\n [optionLabel]=\"field\"\r\n [dropdown]=\"dropdown\"\r\n [forceSelection]=\"forceSelection\"\r\n [minLength]=\"minLength\"\r\n [placeholder]=\"placeholder || label\"\r\n [disabled]=\"isDisabled\"\r\n styleClass=\"w-full\"\r\n inputStyleClass=\"w-full\"\r\n [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\r\n >\r\n </p-autoComplete>\r\n </div>\r\n\r\n @if (addOnAfterTemplate) {\r\n <p-inputgroup-addon>\r\n <ng-container [ngTemplateOutlet]=\"addOnAfterTemplate\"></ng-container>\r\n </p-inputgroup-addon>\r\n }\r\n </p-input-group>\r\n\r\n <ng-container [ngTemplateOutlet]=\"formFieldErrorComponent\"></ng-container>\r\n\r\n <ng-template #formFieldErrorComponent>\r\n <bc-form-field-error [control]=\"control\" [fieldName]=\"label\"></bc-form-field-error>\r\n </ng-template>\r\n</div>\r\n","import { Component } from '@angular/core';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'bc-confirm-dialog',\r\n imports: [ConfirmDialogModule],\r\n template: `\r\n <p-confirmDialog\r\n [style]=\"{ width: '450px' }\"\r\n [appendTo]=\"'body'\"\r\n acceptButtonStyleClass=\"p-button-danger\"\r\n rejectButtonStyleClass=\"p-button-secondary\"\r\n acceptIcon=\"pi pi-check\"\r\n rejectIcon=\"pi pi-times\"\r\n ></p-confirmDialog>\r\n `,\r\n})\r\nexport class BCConfirmDialogComponent {}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LoadingService {\r\n private _loading$ = new BehaviorSubject<boolean>(false);\r\n public readonly loading$ = this._loading$.asObservable();\r\n\r\n show(): void {\r\n // Usamos setTimeout para garantir que a mudança de estado\r\n // ocorra no próximo ciclo de detecção de mudanças do Angular,\r\n // evitando o erro ExpressionChangedAfterItHasBeenCheckedError.\r\n setTimeout(() => this._loading$.next(true), 0);\r\n }\r\n\r\n hide(): void {\r\n // Também aplicamos o setTimeout aqui por consistência e segurança,\r\n // embora o erro geralmente ocorra mais no 'show'.\r\n setTimeout(() => this._loading$.next(false), 0);\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\r\nimport { LoadingService } from '../../services/loading.service';\r\n\r\n@Component({\r\n selector: 'bc-loading',\r\n standalone: true,\r\n imports: [CommonModule, ProgressSpinnerModule],\r\n template: `\r\n <div class=\"loading-overlay\" *ngIf=\"loadingService.loading$ | async\">\r\n <p-progressSpinner></p-progressSpinner>\r\n </div>\r\n `,\r\n styles: [\r\n `\r\n .loading-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(255, 255, 255, 0.7);\r\n z-index: 10000;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class BCLoadingComponent {\r\n constructor(public loadingService: LoadingService) {}\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Injector, Input, OnInit } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, NgControl, ValidationErrors } from '@angular/forms';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { FormFieldErrorComponent } from '../forms/form-field-error/form-field-error.component';\r\n\r\n@Component({\r\n selector: 'bc-checkbox',\r\n standalone: true,\r\n imports: [CommonModule, CheckboxModule, FormFieldErrorComponent],\r\n template: `\r\n <div class=\"field-checkbox-wrapper\">\r\n <div class=\"flex align-items-center\">\r\n <p-checkbox\r\n [inputId]=\"inputId\"\r\n [binary]=\"true\"\r\n [formControl]=\"control\"\r\n [disabled]=\"isDisabled\"\r\n (onChange)=\"onCheckboxChange($event)\"\r\n [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\r\n ></p-checkbox>\r\n\r\n <label [for]=\"inputId\" class=\"ml-2 font-bold cursor-pointer\">\r\n <span [ngClass]=\"required ? 'required' : ''\">\r\n {{ label }}\r\n </span>\r\n </label>\r\n </div>\r\n\r\n <bc-form-field-error [control]=\"control\" [fieldName]=\"label\"> </bc-form-field-error>\r\n </div>\r\n `,\r\n styles: [\r\n `\r\n .field-checkbox-wrapper {\r\n margin-bottom: 1rem;\r\n }\r\n /* Alineación vertical perfecta */\r\n .flex {\r\n display: flex;\r\n }\r\n .align-items-center {\r\n align-items: center;\r\n }\r\n .ml-2 {\r\n margin-left: 0.5rem;\r\n }\r\n .cursor-pointer {\r\n cursor: pointer;\r\n }\r\n\r\n .required::after {\r\n content: '*';\r\n color: #c62828;\r\n margin-left: 0.25rem;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class BCCheckboxComponent implements ControlValueAccessor, OnInit {\r\n @Input() label!: string;\r\n @Input() required = false;\r\n\r\n value: boolean = false;\r\n isDisabled = false;\r\n inputId = `chk-${Math.random().toString(36).substring(2)}`;\r\n\r\n private ngControlInstance: NgControl | null = null;\r\n\r\n constructor(private injector: Injector) {}\r\n\r\n ngOnInit(): void {\r\n // Obtenemos el NgControl vinculado vía formControlName o ngModel\r\n this.ngControlInstance = this.injector.get(NgControl, null);\r\n\r\n if (this.ngControlInstance) {\r\n this.ngControlInstance.valueAccessor = this;\r\n\r\n const ctrl = this.ngControlInstance.control;\r\n\r\n // Detección automática de validador requerido\r\n if (!this.required && ctrl?.validator) {\r\n const validateFn = ctrl.validator({} as AbstractControl);\r\n if (validateFn && validateFn['required']) {\r\n this.required = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // --- ControlValueAccessor ---\r\n writeValue(obj: any): void {\r\n this.value = !!obj;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n // Evento de PrimeNG\r\n onCheckboxChange(event: any): void {\r\n this.value = event.checked;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n // --- Getters para validación ---\r\n get control(): any {\r\n return this.ngControlInstance?.control || null;\r\n }\r\n\r\n get showError(): boolean {\r\n const ctrl = this.control;\r\n return !!(ctrl && ctrl.invalid && (ctrl.dirty || ctrl.touched));\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n ContentChild,\r\n Injector,\r\n input,\r\n Input,\r\n OnInit,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n ValidationErrors,\r\n FormsModule,\r\n} from '@angular/forms';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { InputGroupModule } from 'primeng/inputgroup';\r\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\r\nimport { FormFieldErrorComponent } from '../forms/form-field-error/form-field-error.component';\r\n\r\n@Component({\r\n selector: 'bc-currencybox',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n InputNumberModule,\r\n InputGroupModule,\r\n InputGroupAddonModule,\r\n FormFieldErrorComponent,\r\n ],\r\n template: `\r\n <label [attr.for]=\"inputId\" class=\"block font-bold mb-2\">\r\n <span [ngClass]=\"required ? 'required' : ''\">\r\n {{ label }}\r\n </span>\r\n </label>\r\n\r\n <p-inputGroup>\r\n @if (addOnBeforeTemplate) {\r\n <p-inputGroupAddon>\r\n <ng-container [ngTemplateOutlet]=\"addOnBeforeTemplate\"></ng-container>\r\n </p-inputGroupAddon>\r\n }\r\n\r\n <p-inputNumber\r\n [(ngModel)]=\"value\"\r\n [id]=\"inputId\"\r\n [mode]=\"mode\"\r\n [currency]=\"currency\"\r\n [locale]=\"locale\"\r\n [placeholder]=\"placeholder || label\"\r\n [disabled]=\"isDisabled\"\r\n [readonly]=\"readonly()\"\r\n [styleClass]=\"'w-full'\"\r\n [inputStyleClass]=\"'w-full ' + (showError ? 'ng-invalid ng-dirty' : '')\"\r\n (onInput)=\"onInputValueChange($event.value)\"\r\n (onBlur)=\"onTouched()\"\r\n ></p-inputNumber>\r\n\r\n @if (addOnAfterTemplate) {\r\n <p-inputGroupAddon>\r\n <ng-container [ngTemplateOutlet]=\"addOnAfterTemplate\"></ng-container>\r\n </p-inputGroupAddon>\r\n }\r\n </p-inputGroup>\r\n\r\n <bc-form-field-error [control]=\"control\" [fieldName]=\"label\"></bc-form-field-error>\r\n `,\r\n styles: [\r\n `\r\n .required::after {\r\n content: '*';\r\n color: #c62828;\r\n margin-left: 0.25rem;\r\n }\r\n :host ::ng-deep .p-inputnumber {\r\n width: 100%;\r\n }\r\n `,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: BCCurrencyboxComponent,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class BCCurrencyboxComponent implements ControlValueAccessor, OnInit {\r\n @Input() label!: string;\r\n @Input() placeholder?: string;\r\n @Input() required = false;\r\n\r\n // Propiedades específicas de Currency\r\n @Input() mode = 'currency';\r\n @Input() currency = 'BRL';\r\n @Input() locale = 'pt-BR';\r\n\r\n value: number | null = null;\r\n isDisabled = false;\r\n inputId = `input-cur-${Math.random().toString(36).substring(2)}`;\r\n\r\n public readonly = input<boolean>(false);\r\n public fluid = input(false);\r\n\r\n @ContentChild('addOnBefore', { descendants: false })\r\n public addOnBeforeTemplate: TemplateRef<any> | null = null;\r\n @ContentChild('addOnAfter', { descendants: false })\r\n public addOnAfterTemplate: TemplateRef<any> | null = null;\r\n\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n private ngControlInstance: NgControl | null = null;\r\n\r\n constructor(private injector: Injector) {}\r\n\r\n ngOnInit(): void {\r\n this.ngControlInstance = this.injector.get(NgControl, null);\r\n\r\n if (this.ngControlInstance) {\r\n this.ngControlInstance.valueAccessor = this;\r\n const ctrl: AbstractControl = this.ngControlInstance.control!;\r\n\r\n if (!this.required && ctrl && ctrl.validator) {\r\n const validateFn = ctrl.validator!;\r\n const fakeControl = { value: null } as AbstractControl;\r\n const validationResult: ValidationErrors | null = validateFn(fakeControl);\r\n\r\n if (validationResult && validationResult['required']) {\r\n this.required = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ================= ControlValueAccessor =================\r\n writeValue(obj: any): void {\r\n this.value = obj;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n onInputValueChange(val: number | null): void {\r\n this.value = val;\r\n this.onChange(this.value);\r\n }\r\n\r\n // ========== error getters ==========\r\n get control(): AbstractControl | null {\r\n return this.ngControlInstance ? this.ngControlInstance.control : null;\r\n }\r\n\r\n get showError(): boolean {\r\n const ctrl = this.control;\r\n return !!(ctrl && ctrl.invalid && (ctrl.dirty || ctrl.touched));\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nexport class BaseHttpService {\r\n constructor(\r\n protected http: HttpClient,\r\n protected envBaseUrl: string,\r\n protected apiName: string,\r\n ) {}\r\n\r\n protected get baseUrl(): string {\r\n return `${this.envBaseUrl}/${this.apiName}`;\r\n }\r\n\r\n protected buildHttpParams(params: any): HttpParams {\r\n let httpParams = new HttpParams();\r\n if (!params) return httpParams;\r\n\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== null && value !== undefined && value !== '') {\r\n if (value instanceof Date) {\r\n // ...formata para 'AAAA-MM-DD' antes de enviar.\r\n const formattedDate = value.toISOString().split('T')[0];\r\n httpParams = httpParams.set(key, formattedDate);\r\n } else if (Array.isArray(value)) {\r\n value.forEach((item: any) => (httpParams = httpParams.append(key, item)));\r\n } else {\r\n httpParams = httpParams.set(key, String(value));\r\n }\r\n }\r\n });\r\n return httpParams;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseHttpService } from './base-http.service';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, first, map } from 'rxjs';\r\nimport { ApiResponse } from '../models/common/api-response.model';\r\nimport { PaginationRequestDto } from '../models/common/pagination-request-dto';\r\nimport { PaginationResponseDto } from '../models/common/pagination-response-dto';\r\nimport { ISelectItem } from '../models/common/select-item.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport abstract class BCBaseService<T> extends BaseHttpService {\r\n constructor(\r\n protected override http: HttpClient,\r\n protected override envBaseUrl: string,\r\n protected override apiName: string,\r\n private modelType?: new (init?: Partial<T>) => T,\r\n ) {\r\n super(http, envBaseUrl, apiName);\r\n }\r\n\r\n list(params: any): Observable<T[]> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.http.get<ApiResponse<T[]>>(`${this.baseUrl}`, { params: httpParams }).pipe(\r\n map((response) => {\r\n const data = response.data || [];\r\n return this.modelType ? data.map((item) => new this.modelType!(item)) : data;\r\n }),\r\n first(),\r\n );\r\n }\r\n\r\n getFilteredPages(paginationRequest: PaginationRequestDto): Observable<PaginationResponseDto<T>> {\r\n return this.http\r\n .post<\r\n ApiResponse<PaginationResponseDto<T>>\r\n >(`${this.baseUrl}/get-filtered-pages`, paginationRequest)\r\n .pipe(map((response) => response.data));\r\n }\r\n\r\n getAllForSelect(): Observable<ISelectItem[]> {\r\n return this.http\r\n .get<ApiResponse<ISelectItem[]>>(`${this.baseUrl}/all-for-select`)\r\n .pipe(map((response) => response.data || []));\r\n }\r\n\r\n getByFilterForSelect(filter: string): Observable<ISelectItem[]> {\r\n const params = this.buildHttpParams({ filter });\r\n return this.http\r\n .get<ApiResponse<ISelectItem[]>>(`${this.baseUrl}/filter-for-select`, { params })\r\n .pipe(map((response) => response.data || []));\r\n }\r\n\r\n get(id: number): Observable<T> {\r\n return this.http.get<ApiResponse<T>>(`${this.baseUrl}/${id}`).pipe(\r\n map((response) => {\r\n const data = response.data;\r\n return this.modelType && data ? new this.modelType(data) : data;\r\n }),\r\n first(),\r\n );\r\n }\r\n\r\n create(obj: T): Observable<T> {\r\n return this.http.post<ApiResponse<T>>(`${this.baseUrl}`, obj).pipe(\r\n map((response) => {\r\n return response.data;\r\n }),\r\n first(),\r\n );\r\n }\r\n\r\n update(obj: T, id: number): Observable<boolean> {\r\n return this.http.put<ApiResponse<any>>(`${this.baseUrl}/${id}`, obj).pipe(\r\n map((response) => response.success),\r\n first(),\r\n );\r\n }\r\n\r\n delete(id: number): Observable<void> {\r\n return this.http.delete<ApiResponse<null>>(`${this.baseUrl}/${id}`).pipe(\r\n map(() => void 0), // transforms the response into 'void'\r\n first(),\r\n );\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Translation, TranslocoLoader } from '@jsverse/transloco';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TranslationHttpLoader implements TranslocoLoader {\r\n private http = inject(HttpClient);\r\n\r\n getTranslation(lang: string) {\r\n return this.http.get<Translation>(`./i18n/${lang}.json`);\r\n }\r\n}\r\n","import { HttpInterceptorFn } from '@angular/common/http'; // Import HttpInterceptorFn\r\nimport { inject } from '@angular/core'; // Don't forget inject\r\nimport { finalize } from 'rxjs';\r\nimport { LoadingService } from '../services/loading.service';\r\n\r\nlet totalRequests = 0;\r\n\r\nexport const loadingInterceptor: HttpInterceptorFn = (req, next) => {\r\n const loadingService = inject(LoadingService);\r\n\r\n totalRequests++;\r\n loadingService.show();\r\n\r\n return next(req).pipe(\r\n finalize(() => {\r\n totalRequests--;\r\n if (totalRequests === 0) {\r\n loadingService.hide();\r\n }\r\n }),\r\n );\r\n};\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'app-dialog',\r\n template: `\r\n <div class=\"error-dialog-content\">\r\n <div [innerHtml]=\"config.data.message\"></div>\r\n </div>\r\n `,\r\n styles: [\r\n `\r\n .error-dialog-content {\r\n padding: 1rem;\r\n }\r\n .error-dialog-content h2 {\r\n color: var(--red-500); /* Use the error color from your PrimeNG theme. */\r\n margin-top: 0;\r\n margin-bottom: 1rem;\r\n }\r\n\r\n .error-dialog-content div[innerHtml] {\r\n max-height: 300px; /* Limits the scroll height. */\r\n overflow-y: auto; /* Adds scroll if the content is large. */\r\n background-color: var(--red-50);\r\n border: 1px solid var(--red-200);\r\n padding: 10px;\r\n border-radius: 4px;\r\n font-size: 0.9em;\r\n line-height: 1.5;\r\n }\r\n `,\r\n ],\r\n imports: [CommonModule, ButtonModule],\r\n})\r\nexport class DialogComponent implements OnInit {\r\n constructor(\r\n public ref: DynamicDialogRef,\r\n public config: DynamicDialogConfig,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n // access to data passed to the dialog via config.data\r\n // config.data.title and config.data.message\r\n }\r\n}\r\n","// src/app/core/interceptors/error.interceptor.ts\r\nimport { HttpErrorResponse, HttpInterceptorFn } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { DialogComponent } from '../components/dialog/dialog.component';\r\nimport { NotificationService } from '../services/notification.service';\r\n\r\n\r\n\r\nfunction extractMessage(error: HttpErrorResponse, translate: TranslocoService): string {\r\n const errorData = error.error;\r\n let messages: string[] = [];\r\n\r\n if (errorData?.errors) {\r\n \r\n // 1. Verifies if 'errors' is an object (standard validation pattern of ASP.NET Core)\r\n if (typeof errorData.errors === 'object' && !Array.isArray(errorData.errors)) {\r\n // Get all message arrays from the object and flatten them into a single array\r\n messages = Object.values<string[]>(errorData.errors).flat();\r\n }\r\n // 2. Maintains the verification for our custom format (array of strings/keys)\r\n else if (Array.isArray(errorData.errors)) {\r\n messages = errorData.errors;\r\n }\r\n } else if (typeof errorData === 'string') {\r\n messages.push(errorData);\r\n } else if (errorData.messages && Array.isArray(errorData.messages)) {\r\n messages = errorData.messages;\r\n }\r\n\r\n if (messages.length > 0) {\r\n return messages\r\n .map((rawMessage) => {\r\n // --- SMART TRANSLATION LOGIC ---\r\n const knownPrefixes = [\r\n 'features.',\r\n 'components.',\r\n 'registers.',\r\n 'general.',\r\n 'base-components.',\r\n 'error.',\r\n ];\r\n let keyToTranslate = rawMessage;\r\n let translationFound = false;\r\n\r\n // 1. Searches for a known prefix in the message\r\n const foundPrefix = knownPrefixes.find((prefix) => rawMessage.includes(prefix));\r\n\r\n // 2. If found, extracts the real key from the prefix\r\n if (foundPrefix) {\r\n keyToTranslate = rawMessage.substring(rawMessage.indexOf(foundPrefix));\r\n }\r\n\r\n // 3. Tries to translate the extracted key (or the original message)\r\n const translated = translate.translate(keyToTranslate);\r\n\r\n // 4. Checks if the translation was successful\r\n // (If the translation returns the key itself, it means it wasn't found)\r\n if (translated !== keyToTranslate) {\r\n translationFound = true;\r\n }\r\n\r\n // 5. Returns the translated message or the original message if no translation was found\r\n return translationFound ? translated : rawMessage;\r\n })\r\n .join('\\n');\r\n }\r\n\r\n // Fallback for generic errors\r\n return translate.translate('error.unknown_error_details');\r\n}\r\n\r\nexport const errorInterceptor: HttpInterceptorFn = (req, next) => {\r\n const router = inject(Router);\r\n const translate = inject(TranslocoService);\r\n const dialogService = inject(DialogService);\r\n const notificationService = inject(NotificationService);\r\n\r\n return next(req).pipe(\r\n catchError((error: HttpErrorResponse) => {\r\n let title = '';\r\n let message = '';\r\n let useDialog = false;\r\n\r\n if (error.error instanceof ErrorEvent) {\r\n // Client-side error (network, etc.)\r\n title = translate.translate('error.client_error_title');\r\n message = translate.translate('error.client_error_message');\r\n useDialog = true;\r\n } else {\r\n // Server-side error\r\n switch (error.status) {\r\n case 400: // Bad Request (Validation Errors)\r\n title = translate.translate('error.bad_request');\r\n message = extractMessage(error, translate);\r\n break;\r\n\r\n case 401:\r\n case 403:\r\n title = translate.translate('error.unauthorized_title');\r\n message = translate.translate('error.unauthorized_message');\r\n // Logout or redirection logic can come here\r\n router.navigate(['/login']);\r\n break;\r\n\r\n case 404:\r\n title = translate.translate('error.not_found_title');\r\n message = translate.translate('error.not_found_message');\r\n break;\r\n\r\n case 500:\r\n title = translate.translate('error.server_error_title');\r\n // Tries to extract the detailed message; if there isn't one, uses a generic one.\r\n message = extractMessage(error, translate) || translate.translate('error.server_error_message');\r\n useDialog = true;\r\n break;\r\n\r\n default: // Other errors (0, 502, 503, etc.)\r\n title = translate.translate('error.connection_error_title');\r\n message = translate.translate('error.connection_error_message');\r\n useDialog = true;\r\n break;\r\n }\r\n }\r\n\r\n // --- UNIQUE DISPLAY POINT ---\r\n if (useDialog && message) {\r\n dialogService.open(DialogComponent, {\r\n header: title,\r\n data: { title: title, message: message },\r\n styleClass: 'dynamic-error-dialog',\r\n contentStyle: {\r\n 'max-height': '400px',\r\n overflow: 'auto',\r\n 'overflow-wrap': 'break-word',\r\n },\r\n closable: true,\r\n modal: true,\r\n dismissableMask: true,\r\n });\r\n } else if (message) {\r\n notificationService.error(message, title);\r\n }\r\n\r\n // throw exception for another listeners(as .subscribe of your component)\r\n // also execute their error logic \r\n return throwError(() => error);\r\n }),\r\n );\r\n};\r\n","/*\r\n * Public API Surface of bc-primeng-ui\r\n */\r\n\r\nexport * from './lib/bc-models';\r\nexport * from './lib/bc-components';\r\nexport * from './lib/bc-services';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.CryptoService","i2.StorageService","i1.SessionService","PrimeConfirmationService","i2","i3","i4","i2.YesNoPipe","i3.ZipCodeFormatPipe","i4.CurrencyFormatPipe","i5.DateFormatPipe","i6.DateTimeFormatPipe","i7.DocumentFormatPipe","i8.PersonDocumentFormatPipe","i9.StatusPipe","i10.EnumLabelPipe","i11.LookupPipe","i1.NotificationService","i2.TableFormattingService","i6","i8","i9","i12","i14","i5","i1.LoadingService"],"mappings":"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"}