{"version":3,"file":"seniorsistemas-angular-components-custom-fields.mjs","sources":["../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.service.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/models/custom-field-type.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.component.ts","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.component.html","../../projects/angular-components/custom-fields/src/lib/custom-fields/custom-fields.module.ts","../../projects/angular-components/custom-fields/src/seniorsistemas-angular-components-custom-fields.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CustomFieldsResponse } from './models';\n\n@Injectable()\nexport class CustomFieldsService {\n    private http = inject(HttpClient);\n\n\n    public getCustomFields(\n        domain: string,\n        service: string,\n        entity: string,\n        endpoint: string,\n    ): Observable<CustomFieldsResponse> {\n        const entityDto = { entityId: { domain_: domain, service_: service, id: entity } };\n        return this.http.post<CustomFieldsResponse>(endpoint, entityDto);\n    }\n\n    public getFileLocationUrl(\n        dto: {\n            domain: string;\n            service: string;\n            entityName: string;\n            field: string;\n            fileName: string;\n        },\n        endpoint: string,\n    ): Observable<any> {\n        return this.http.post(endpoint, dto);\n    }\n\n    public uploadTempFile(location: string, file: File) {\n        return this.http.put(location, file, {\n            reportProgress: true,\n            observe: 'events',\n            headers: { 'Content-Type': file.type },\n        });\n    }\n\n    public requestAccess(objectId: string, endpoint: string) {\n        return this.http.post(endpoint, { objectId });\n    }\n\n    public getFile(permanentUrl: string) {\n        return this.http.get(permanentUrl, { responseType: 'blob' });\n    }\n}\n\n","import { FieldType } from '@seniorsistemas/angular-components/dynamic-form';\n\nexport enum CustomFieldType {\n    String = 'String',\n    Boolean = 'Boolean',\n    Integer = 'Integer',\n    Double = 'Double',\n    Date = 'Date',\n    DateTime = 'DateTime',\n    LocalDateTime = 'LocalDateTime',\n    Time = 'Time',\n    Money = 'Money',\n    Blob = 'Blob',\n    Binary = 'Binary',\n    Any = 'Any',\n    Enum = 'Enum',\n}\n\nexport type CustomFieldsTypeAPI = 'Enumeration' | keyof typeof CustomFieldType;\n\nexport const apiTypesToDynamicFormType = (type: CustomFieldsTypeAPI): FieldType => {\n    switch (type) {\n        case 'String':\n        case 'Any':\n            return 'string';\n        case 'Binary':\n            return 'binary';\n        case 'Blob':\n            return 'blob';\n        case 'DateTime':\n        case 'Time':\n        case 'Date':\n        case 'LocalDateTime':\n            return 'date';\n        case 'Enumeration':\n        case 'Enum':\n            return 'enum';\n        case 'Boolean':\n            return 'boolean';\n        case 'Money':\n        case 'Double':\n        case 'Integer':\n            return 'legacyNumber';\n    }\n};\n\nexport interface FieldFromAPI {\n    id: string;\n    type: CustomFieldsTypeAPI;\n    customizable: boolean;\n    customization: FieldCustomization;\n}\n\nexport interface FieldCustomization {\n    active: boolean;\n    label: string;\n    tooltip: string;\n    mask?: string;\n    validationRegex?: string;\n    customEnumeration?: CustomEnumeration;\n    infoSign?: string;\n    mandatory?: boolean;\n}\n\nexport interface CustomEnumeration {\n    multiple?: boolean;\n    values: EnumValue[];\n}\n\nexport interface EnumValue {\n    key: string;\n    value: string;\n}\n\nexport interface CustomFieldsResponse {\n    entity_: {\n        active: boolean;\n        fields: FieldFromAPI[];\n    };\n}\n\n","import { HttpErrorResponse, HttpEventType } from '@angular/common/http';\r\nimport {\r\n    AfterViewInit,\r\n    Component,\r\n    ElementRef,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    SimpleChanges,\r\n    inject,\r\n} from '@angular/core';\r\nimport {\r\n    ControlContainer,\r\n    ControlValueAccessor,\r\n    FormArray,\r\n    FormControl,\r\n    FormGroup,\r\n    NG_VALIDATORS,\r\n    NG_VALUE_ACCESSOR,\r\n    Validator,\r\n    ValidatorFn,\r\n    Validators,\r\n} from '@angular/forms';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport BigNumber from 'bignumber.js';\r\nimport { BehaviorSubject, forkJoin, Observable, of, Subject, throwError } from 'rxjs';\r\nimport { catchError, finalize, takeUntil } from 'rxjs/operators';\r\n\r\nimport {\r\n    BlobFieldConfig,\r\n    BooleanFieldConfig,\r\n    DynamicStructure,\r\n    DynamicType,\r\n    dynamicTypeToDynamicStructure,\r\n    ExpandedDynamicType,\r\n    NumberFieldConfig,\r\n    SelectFieldConfig,\r\n    StructureType,\r\n} from '@seniorsistemas/angular-components/dynamic-form';\r\nimport { FileDto } from '@seniorsistemas/angular-components/file-upload';\r\nimport {\r\n    CalendarLocaleOptions,\r\n    LocaleOptions,\r\n    LocaleService,\r\n    NumberLocaleOptions,\r\n} from '@seniorsistemas/angular-components/locale';\r\nimport moment from 'moment';\r\nimport { CustomFieldsService } from './custom-fields.service';\r\nimport {\r\n    apiTypesToDynamicFormType,\r\n    CustomFieldsResponse,\r\n    CustomFieldsTypeAPI,\r\n    CustomFieldType,\r\n    FieldFromAPI,\r\n} from './models';\r\nimport { DynamicFormComponent as DynamicFormComponent_1 } from '@seniorsistemas/angular-components/dynamic-form';\r\n\r\n/**\r\n * @description Componente que carrega e renderiza campos customizados dinamicamente\r\n * a partir da API de customização de campos do Senior. Realiza chamadas HTTP para\r\n * obter a configuração dos campos, gera o formulário reativamente via {@link DynamicFormComponent}\r\n * e implementa {@link ControlValueAccessor} e {@link Validator} para integração completa\r\n * com formulários Angular.\r\n *\r\n * @example\r\n * ```html\r\n * <s-custom-fields\r\n *   formControlName=\"camposCustomizados\"\r\n *   domain=\"plataforma\"\r\n *   service=\"servico\"\r\n *   entity=\"entidade\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n    selector: 's-custom-fields',\r\n    templateUrl: './custom-fields.component.html',\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: CustomFieldsComponent,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: NG_VALIDATORS,\r\n            useExisting: CustomFieldsComponent,\r\n            multi: true,\r\n        },\r\n    ],\r\n    standalone: true,\r\n    imports: [DynamicFormComponent_1],\r\n})\r\nexport class CustomFieldsComponent\r\n    implements OnInit, OnDestroy, ControlValueAccessor, Validator, OnChanges, AfterViewInit\r\n{\r\n    private readonly customFieldsService = inject(CustomFieldsService);\r\n    private readonly localeService = inject(LocaleService);\r\n    private readonly sanitizer = inject(DomSanitizer);\r\n    private readonly translateService = inject(TranslateService);\r\n    private readonly controlContainer = inject(ControlContainer, { optional: true });\r\n\r\n    /** @description Domínio utilizado para buscar os campos customizados na API. Campo obrigatório. */\r\n    @Input({ required: true })\r\n    public domain!: string;\r\n\r\n    /** @description Nome do serviço utilizado para identificar os campos customizados. Campo obrigatório. */\r\n    @Input({ required: true })\r\n    public service!: string;\r\n\r\n    /** @description Nome da entidade para a qual os campos customizados são carregados. Campo obrigatório. */\r\n    @Input({ required: true })\r\n    public entity!: string;\r\n\r\n    /** @description Mensagem de erro exibida quando algum campo customizado está inválido. @default '' */\r\n    @Input()\r\n    public invalidErrorLabel = '';\r\n\r\n    /** @description Objeto com dados pré-carregados da entidade, evitando chamadas extras à API. */\r\n    @Input()\r\n    public entityObject?: CustomFieldsResponse;\r\n\r\n    /** @description Endpoint para buscar a configuração dos campos customizados. */\r\n    @Input()\r\n    public customFieldsEndpoint = 'platform/field_customization/queries/getEntity';\r\n\r\n    /** @description Endpoint para solicitar o upload de arquivos em campos do tipo blob. */\r\n    @Input()\r\n    public fileLocationEndpoint = 'platform/field_customization/actions/requestUpload';\r\n\r\n    /** @description Endpoint para solicitar acesso a arquivos já enviados. */\r\n    @Input()\r\n    public requestAccessEndpoint = 'platform/field_customization/actions/requestAccess';\r\n\r\n    /** @description Mensagem de erro exibida quando um campo obrigatório não está preenchido. @default '' */\r\n    @Input()\r\n    public requiredErrorMessage = '';\r\n\r\n    /** @description Tempo em ms após o qual o info-sign de campos do tipo data é exibido. @default 0 */\r\n    @Input()\r\n    public displayTimeInfoSign = 0;\r\n\r\n    /** @description Exibe a data de upload nos campos do tipo arquivo. @default false */\r\n    @Input()\r\n    public showFileUploadDate = false;\r\n\r\n    /** @description Observable que sinaliza quando o componente deve iniciar o carregamento dos campos. @default null */\r\n    @Input()\r\n    public ready$: BehaviorSubject<boolean> | null = null;\r\n\r\n    /** @description Quando `true`, todos os campos customizados são desabilitados. */\r\n    @Input()\r\n    public disableFields: boolean | undefined;\r\n\r\n    protected rowType: StructureType = 'row';\r\n\r\n    public fields: DynamicType[] = [];\r\n    public formGroup: FormGroup = new FormGroup({});\r\n\r\n    protected dynamicStructure: DynamicStructure[] = [];\r\n\r\n    private ready = false;\r\n    private onChange: any;\r\n    private onTouched: any;\r\n    private value: any;\r\n    private readonly ngUsubscribe: Subject<void> = new Subject();\r\n    private uploadCanceled: boolean | undefined;\r\n    private hasBlob: boolean | undefined;\r\n    private hasUploaded: boolean | undefined;\r\n\r\n    constructor() {\r\n        this.invalidErrorLabel = this.translateService.instant('platform.angular_components.invalid_value');\r\n    }\r\n\r\n    public get hasCustomFields(): boolean {\r\n        return !!this.fields?.length;\r\n    }\r\n\r\n    public get parentForm(): FormGroup {\r\n        return this.controlContainer!.control as FormGroup;\r\n    }\r\n\r\n    public get parentControl(): FormControl {\r\n        return this.parentForm.get('custom') as FormControl;\r\n    }\r\n\r\n    public ngOnInit(): void {\r\n        this._validateInputs();\r\n        this._createForm();\r\n        this.addDisplayTimeInfoSignToFields();\r\n    }\r\n\r\n    public ngAfterViewInit(): void {\r\n        this.enableOrDisableFields(!!this.disableFields);\r\n\r\n        this.formGroup.valueChanges.subscribe(() => this.onChange?.(this.parseFieldsValues()));\r\n    }\r\n\r\n    public ngOnChanges(changes: SimpleChanges): void {\r\n        const _disableFields = changes['disableFields'];\r\n        if (_disableFields) {\r\n            this.enableOrDisableFields(_disableFields.currentValue);\r\n        }\r\n    }\r\n\r\n    public ngOnDestroy() {\r\n        this.ngUsubscribe.next();\r\n        this.ngUsubscribe.complete();\r\n    }\r\n\r\n    public registerOnChange(fn: Function) {\r\n        this.onChange = fn;\r\n    }\r\n\r\n    public registerOnTouched(fn: Function) {\r\n        this.onTouched = fn;\r\n    }\r\n\r\n    public writeValue(value: any) {\r\n        if (this.ready) {\r\n            const newValue = this.parseValuesForFields(value);\r\n            this.formGroup.patchValue(newValue);\r\n            this.value = newValue;\r\n            this.createFilesIfSetFormValuesAfterInit();\r\n        } else {\r\n            this.formGroup.patchValue(value || {});\r\n            this.value = value;\r\n        }\r\n    }\r\n\r\n    public setDisabledState(isDisabled: boolean) {\r\n        if (isDisabled) {\r\n            this.formGroup.disable({ emitEvent: false });\r\n        } else {\r\n            this.formGroup.enable({ emitEvent: false });\r\n        }\r\n    }\r\n\r\n    public getCustomFields(): Observable<CustomFieldsResponse> {\r\n        if (this.entityObject?.entity_) {\r\n            return of(this.entityObject);\r\n        }\r\n        return this.customFieldsService.getCustomFields(\r\n            this.domain,\r\n            this.service,\r\n            this.entity,\r\n            this.customFieldsEndpoint,\r\n        );\r\n    }\r\n\r\n    public validate() {\r\n        const errors: any = {};\r\n        Object.keys(this.formGroup.controls).forEach((field) => {\r\n            const { errors: controlErrors } = this.formGroup.get(field) as FormGroup;\r\n            if (controlErrors) {\r\n                errors[field] = controlErrors;\r\n            }\r\n        });\r\n        return errors;\r\n    }\r\n\r\n    public cleanFields() {\r\n        this.formGroup.reset();\r\n    }\r\n\r\n    private enableOrDisableFields(disabled: boolean): void {\r\n        if (!this.formGroup) {\r\n            return;\r\n        }\r\n\r\n        for (const controlName of Object.keys(this.formGroup.value)) {\r\n            disabled ? this.formGroup.get(controlName)?.disable() : this.formGroup.get(controlName)?.enable();\r\n        }\r\n    }\r\n\r\n    private _validateInputs(): void {\r\n        if (!this.domain) {\r\n            throw new Error('You need to specify the custom-fields domain!');\r\n        }\r\n        if (!this.service) {\r\n            throw new Error('You need to specify the custom-fields service!');\r\n        }\r\n        if (!this.entity) {\r\n            throw new Error('You need to specify the custom-fields entity!');\r\n        }\r\n    }\r\n\r\n    private _createForm(): void {\r\n        this.formGroup = new FormGroup({});\r\n        const observables = [this.getCustomFields(), this.localeService.get()];\r\n        forkJoin(observables)\r\n            .pipe(\r\n                takeUntil(this.ngUsubscribe),\r\n                finalize(() => {\r\n                    this.formGroup.markAsPristine();\r\n                    this.parentControl?.markAsPristine();\r\n\r\n                    if (this.ready$) {\r\n                        this.ready$.next(true);\r\n                    }\r\n                }),\r\n            )\r\n            .subscribe((response) => {\r\n                const [customFieldsResponse, localeOptions] = response as [CustomFieldsResponse, LocaleOptions];\r\n                const defaults: { [key in string]: { defaultValue?: boolean; defaultMask?: string } } = {};\r\n                defaults[CustomFieldType.String] = {};\r\n                defaults[CustomFieldType.Boolean] = { defaultValue: false };\r\n                defaults[CustomFieldType.Integer] = {};\r\n                defaults[CustomFieldType.Double] = { defaultMask: '' };\r\n                defaults[CustomFieldType.Money] = {};\r\n                defaults[CustomFieldType.Date] = {};\r\n                defaults[CustomFieldType.DateTime] = {};\r\n                defaults[CustomFieldType.LocalDateTime] = {};\r\n                defaults[CustomFieldType.Time] = {};\r\n                defaults[CustomFieldType.Blob] = {};\r\n                defaults[CustomFieldType.Enum] = {};\r\n                defaults[CustomFieldType.Binary] = {};\r\n                defaults[CustomFieldType.Any] = {};\r\n\r\n                if (!customFieldsResponse || !customFieldsResponse.entity_) {\r\n                    return;\r\n                }\r\n                const { active, fields } = customFieldsResponse.entity_;\r\n                if (!active) {\r\n                    return;\r\n                }\r\n\r\n                fields\r\n                    .filter((field) => field.customizable && field.customization?.active)\r\n                    .forEach((field) => {\r\n                        const dynamicType = this.getDynamicType(field, localeOptions);\r\n\r\n                        const fieldType = field.type;\r\n\r\n                        if (field.type === CustomFieldType.Blob && this.value && this.value[dynamicType.name]) {\r\n                            this.createBlobToFileUpload(dynamicType as BlobFieldConfig);\r\n                        }\r\n\r\n                        const { validationRegex } = field.customization;\r\n\r\n                        const asIsTypes: CustomFieldsTypeAPI[] = [\r\n                            CustomFieldType.Boolean,\r\n                            CustomFieldType.Money,\r\n                            CustomFieldType.Date,\r\n                            CustomFieldType.DateTime,\r\n                            CustomFieldType.LocalDateTime,\r\n                            CustomFieldType.Time,\r\n                        ];\r\n\r\n                        const validators = [];\r\n                        if (validationRegex && !asIsTypes.includes(fieldType)) {\r\n                            validators.push(Validators.pattern(validationRegex));\r\n                        }\r\n                        if (fieldType === CustomFieldType.Integer && !(dynamicType as NumberFieldConfig).mask) {\r\n                            validators.push(Validators.pattern(/^\\-?\\d*$/));\r\n                        }\r\n\r\n                        if (dynamicType.required?.()) {\r\n                            validators.push(Validators.required);\r\n                        }\r\n\r\n                        const control = new FormControl(\r\n                            { value: defaults[fieldType].defaultValue, disabled: this.formGroup.disabled },\r\n                            validators,\r\n                        );\r\n\r\n                        this.formGroup.addControl(dynamicType.name, control);\r\n\r\n                        this.fields.push(dynamicType);\r\n                    });\r\n                this.dynamicStructure = dynamicTypeToDynamicStructure(this.fields);\r\n\r\n                this.createFieldCustomization(fields);\r\n                this.formGroup.patchValue(this.parseValuesForFields(this.value));\r\n                this.ready = true;\r\n            });\r\n    }\r\n\r\n    private parseValuesForFields(values: any) {\r\n        const parsedValues = { ...values };\r\n\r\n        this.fields.forEach((field) => {\r\n            const type = field.type;\r\n            const name = field.name;\r\n            const value = values?.[name];\r\n\r\n            /**\r\n             * Tratamento exclusivo para campos boolean que tem o status Empty\r\n             * Essa condicional necessita estar antes do if (!value) return;\r\n             * Pois ela tem um status que usa null no valor do campo radio boolean\r\n             */\r\n            if (type === 'boolean') {\r\n                const isString = typeof value === 'string';\r\n                const notValid = !isString && typeof value !== 'boolean';\r\n                if (notValid) {\r\n                    parsedValues[name] = null;\r\n                } else {\r\n                    // Condicional para campos que retornam string de boolen do backand\r\n                    if (isString) {\r\n                        parsedValues[name] = value === 'true' ? true : false;\r\n                    } else {\r\n                        parsedValues[name] = value;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (!value) {\r\n                return;\r\n            }\r\n\r\n            switch (type) {\r\n                case 'date':\r\n                    parsedValues[name] = moment(value).toDate();\r\n                    break;\r\n                case 'dateTime':\r\n                    parsedValues[name] = moment(value).toDate();\r\n                    break;\r\n                case 'localDateTime':\r\n                    parsedValues[name] = moment(value, 'YYYY-MM-DD[T]HH:mm:ss.SSS').toDate();\r\n                    break;\r\n                case 'time':\r\n                    parsedValues[name] = moment(value, 'HH:mm:ss').toDate();\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n        });\r\n\r\n        return parsedValues;\r\n    }\r\n\r\n    /**\r\n     * Algumas equipes só setam valor no formulário, após o carregamento da tela\r\n     * Como é bem padrão isso, foi necessário criar esse método para gerar o file\r\n     * após setar o valor no formulário\r\n     */\r\n    private createFilesIfSetFormValuesAfterInit() {\r\n        if (!this.hasUploaded) {\r\n            this.fields\r\n                .filter((field) => field.type === 'blob')\r\n                .forEach((field) => {\r\n                    if (this.formGroup.get(field.name)?.value) {\r\n                        this.createBlobToFileUpload(field);\r\n                    }\r\n                });\r\n        }\r\n    }\r\n\r\n    private parseFieldsValues() {\r\n        const parsedValues: any = {};\r\n\r\n        this.fields.forEach((field) => {\r\n            const { type } = field;\r\n            const name = field.name;\r\n            let value = this.formGroup.get(name)?.value;\r\n\r\n            if (value) {\r\n                switch (type) {\r\n                    case 'number':\r\n                        const { mask, scale } = field;\r\n                        if (mask) value = new BigNumber(value).toFixed(scale as number).toString();\r\n                        break;\r\n                    case 'date':\r\n                        value = moment(value).format('YYYY-MM-DD');\r\n                        break;\r\n                    case 'dateTime':\r\n                        value = moment(value).format();\r\n                        break;\r\n                    case 'localDateTime':\r\n                        value = moment(value).format('YYYY-MM-DD[T]HH:mm:ss.SSS');\r\n                        break;\r\n                    case 'time':\r\n                        value = moment(value).format('HH:mm:ss');\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n            if ((value === null || value === undefined) && (type === 'number' || type === 'enum')) {\r\n                const isMultiple = (field as SelectFieldConfig).multiple;\r\n                parsedValues[name] = isMultiple ? [] : null;\r\n            } else {\r\n                parsedValues[name] = value;\r\n            }\r\n        });\r\n\r\n        if (this.hasBlob) {\r\n            parsedValues['fieldCustomization'] = this.formGroup.get('fieldCustomization')?.value;\r\n        }\r\n        return parsedValues;\r\n    }\r\n\r\n    private getDynamicType(field: FieldFromAPI, localeOptions: LocaleOptions): DynamicType {\r\n        let parameters: Partial<DynamicType> = {};\r\n\r\n        switch (field.type) {\r\n            case CustomFieldType.Blob:\r\n                parameters = this.getBlobParameters();\r\n                break;\r\n            case CustomFieldType.Boolean:\r\n                parameters = this.getBooleanParameters();\r\n                break;\r\n            case 'Enumeration':\r\n            case CustomFieldType.Enum:\r\n                field.type = 'Enum';\r\n                parameters = this.getSelectParameters(field);\r\n                break;\r\n            case CustomFieldType.Money:\r\n                parameters = {\r\n                    type: 'legacyNumber',\r\n                    precision: 15,\r\n                    scale: 2,\r\n                    leftAddon: {\r\n                        label: localeOptions?.number?.currencySymbol ?? 'R$',\r\n                    },\r\n                };\r\n                break;\r\n            case CustomFieldType.Double:\r\n                parameters = {\r\n                    type: 'legacyNumber',\r\n                    precision: 15,\r\n                    scale: 2,\r\n                    localizedNumber: true,\r\n                };\r\n                break;\r\n            case CustomFieldType.Integer:\r\n                parameters = {\r\n                    type: 'legacyNumber',\r\n                    precision: 15,\r\n                    scale: 0,\r\n                };\r\n                break;\r\n            case CustomFieldType.Any:\r\n                field.type = 'String';\r\n                parameters = {\r\n                    type: 'string',\r\n                };\r\n                break;\r\n        }\r\n\r\n        const dynamicType: DynamicType & {\r\n            calendarOptions: CalendarLocaleOptions;\r\n            currencyOptions: NumberLocaleOptions;\r\n        } = {\r\n            ...parameters,\r\n            name: field.id,\r\n            label: field.customization.label,\r\n            tooltip: field.customization.tooltip,\r\n            infoSign: field.customization.infoSign,\r\n            type: apiTypesToDynamicFormType(field.type),\r\n            mask: field.customization.mask,\r\n            required: () => field.customization.mandatory ?? false,\r\n            calendarOptions: localeOptions.calendar,\r\n            currencyOptions: localeOptions.number,\r\n        } as DynamicType & { calendarOptions: CalendarLocaleOptions; currencyOptions: NumberLocaleOptions };\r\n        return dynamicType;\r\n    }\r\n\r\n    private getSelectParameters(field: any): Partial<SelectFieldConfig> {\r\n        return {\r\n            type: 'enum',\r\n            showClear: true,\r\n            multiple: field.customization.customEnumeration.multiple,\r\n            options: field.customization.customEnumeration.values.map((e: any) => ({ label: e.value, value: e.key })),\r\n        };\r\n    }\r\n\r\n    private getBooleanParameters(): Partial<BooleanFieldConfig> {\r\n        return {\r\n            type: 'boolean',\r\n            optionsLabel: {\r\n                true: this.getTranslateLabel(`true_label`),\r\n                false: this.getTranslateLabel(`false_label`),\r\n                empty: this.getTranslateLabel(`empty_label`),\r\n            },\r\n        };\r\n    }\r\n\r\n    private getBlobParameters(): Partial<ExpandedDynamicType> {\r\n        return {\r\n            type: 'blob',\r\n            size: {\r\n                sm: 12,\r\n                md: 12,\r\n                lg: 12,\r\n                xl: 12,\r\n            }, // Como vai ser filho de Row, faz sentido habilitar o tipo expandido.\r\n            accept: 'image/*, application/*, text/*',\r\n            chooseLabel: this.getTranslateLabel(`choose_label`),\r\n            removeLabel: this.getTranslateLabel(`remove_label`),\r\n            cancelLabel: this.getTranslateLabel(`cancel_label`),\r\n            successTooltip: this.getTranslateLabel(`success_tooltip`),\r\n            multiple: false,\r\n            onUploadFile: (event: { files: FileDto[] }, blobField: BlobFieldConfig) => {\r\n                this.hasUploaded = true;\r\n                this.uploadFile(event, blobField);\r\n            },\r\n            onRemoveFile: (event: FileDto, blobField: BlobFieldConfig) => {\r\n                this.removeFile({ file: event }, blobField);\r\n            },\r\n            onCancelUpload: (event: number, blobField: BlobFieldConfig) => {\r\n                this.cancelUpload(event, blobField);\r\n            },\r\n            onDownloadFile: (event: { index: number; anchor: ElementRef }, blobField: BlobFieldConfig) => {\r\n                this.downloadFile(event, blobField);\r\n            },\r\n            showFileUploadDate: this.showFileUploadDate,\r\n        };\r\n    }\r\n\r\n    /**\r\n     * É necessário criar o fieldCustomization quando há um Blob na entidade para gerar o\r\n     * com os fields inseridos e deletados.\r\n     */\r\n    private createFieldCustomization(fields: FieldFromAPI[]): void {\r\n        this.hasBlob = !!fields.filter((field) => field.type === CustomFieldType.Blob).length;\r\n        if (this.hasBlob) {\r\n            this.formGroup.addControl(\r\n                'fieldCustomization',\r\n                new FormArray([\r\n                    new FormGroup({\r\n                        domain: new FormControl(this.domain),\r\n                        service: new FormControl(this.service),\r\n                        entity: new FormControl(this.entity),\r\n                        toDelete: new FormControl({ value: {}, disabled: false }),\r\n                        toInsert: new FormControl({ value: {}, disabled: false }),\r\n                    }),\r\n                ]),\r\n            );\r\n        }\r\n    }\r\n\r\n    private createBlobToFileUpload(field: BlobFieldConfig) {\r\n        const _name = field.name;\r\n        const objectId = this.value[_name] ? this.value[_name] : this.formGroup.get(_name)?.value;\r\n        const fileName = objectId.substring(objectId.lastIndexOf('/') + 1);\r\n        const file: Partial<FileDto> = { objectId, name: fileName, savedFile: true };\r\n        field.files = [file as FileDto];\r\n    }\r\n\r\n    private downloadFile(event: { index: number; anchor: ElementRef }, field: BlobFieldConfig) {\r\n        const { index, anchor } = event;\r\n        const _files = field.files || [];\r\n        if (!_files.length) {\r\n            return;\r\n        }\r\n        const currentFile = _files[index];\r\n        if (currentFile.objectURL) {\r\n            anchor.nativeElement.click();\r\n        } else {\r\n            const _objectId = currentFile.objectId as string;\r\n            this.customFieldsService\r\n                .requestAccess(_objectId, this.requestAccessEndpoint)\r\n                .pipe(takeUntil(this.ngUsubscribe))\r\n                .subscribe((data: any) => {\r\n                    const { fileName, uri } = data;\r\n                    this.customFieldsService\r\n                        .getFile(uri)\r\n                        .pipe(takeUntil(this.ngUsubscribe))\r\n                        .subscribe((blob: any) => {\r\n                            const newFile = new File([blob], fileName) as FileDto;\r\n                            newFile.objectURL = this.sanitizer.bypassSecurityTrustUrl(uri);\r\n                            anchor.nativeElement.setAttribute('href', uri);\r\n                            newFile.objectId = currentFile.objectId;\r\n                            newFile.savedFile = true;\r\n                            _files[index] = newFile;\r\n                            field.files = [..._files];\r\n                            anchor.nativeElement.click();\r\n                        });\r\n                });\r\n        }\r\n    }\r\n\r\n    private uploadFile(event: { files: FileDto[] }, formField: BlobFieldConfig): void {\r\n        const { files } = event;\r\n        const field = this.fields.find((record) => record.name === formField.name) as BlobFieldConfig;\r\n        if (!field) {\r\n            return;\r\n        }\r\n\r\n        // Se ocorrer um upload, já existindo um arquivo com upload feito. É necessário excluir o mesmo.\r\n        if (field?.files?.length) {\r\n            this.removeFile({ file: field.files[0] }, field);\r\n        }\r\n        field.files = files;\r\n        const _name = field.name;\r\n\r\n        for (let i = 0; i < files.length; i++) {\r\n            const file = files[i];\r\n            if (!file.savedFile && !file.progress) {\r\n                file.isUploading = true;\r\n                this.formGroup.get(_name)?.setValidators(isUploading(file));\r\n                this.formGroup.get(_name)?.updateValueAndValidity();\r\n                this.customFieldsService\r\n                    .getFileLocationUrl(\r\n                        {\r\n                            domain: this.domain,\r\n                            service: this.service,\r\n                            entityName: this.entity,\r\n                            field: _name,\r\n                            fileName: file.name,\r\n                        },\r\n                        this.fileLocationEndpoint,\r\n                    )\r\n                    .pipe(\r\n                        takeUntil(this.ngUsubscribe),\r\n                        catchError((err: HttpErrorResponse) => of(this.defaltCatchError(field, err, i))),\r\n                    )\r\n                    .subscribe((data: any) => {\r\n                        const { location, version, objectId } = data;\r\n                        file.version = version;\r\n                        file.objectId = objectId;\r\n                        file.uploadSubscribe = this.customFieldsService\r\n                            .uploadTempFile(location, file)\r\n                            .pipe(\r\n                                takeUntil(this.ngUsubscribe),\r\n                                catchError((err: HttpErrorResponse) => of(this.defaltCatchError(field, err, i))),\r\n                                finalize(() => {\r\n                                    file.isUploading = false;\r\n                                }),\r\n                            )\r\n                            .subscribe((response: any) => {\r\n                                const { type } = response;\r\n                                if (!this.uploadCanceled) {\r\n                                    if (type === HttpEventType.UploadProgress) {\r\n                                        file.progress = Math.round(response.loaded / response.total) * 100;\r\n                                    } else if (type === HttpEventType.Response) {\r\n                                        file.objectURL = this.sanitizer.bypassSecurityTrustUrl(\r\n                                            URL.createObjectURL(file),\r\n                                        );\r\n\r\n                                        const value = { objectId, name: file.name, version: file.version };\r\n                                        const toInsert = this.formGroup.get('fieldCustomization')?.value[0].toInsert;\r\n                                        const fieldCustomization = this.formGroup.get('fieldCustomization')?.value;\r\n                                        if (fieldCustomization?.value?.[0]) {\r\n                                            fieldCustomization.value[0].toInsert = {\r\n                                                ...toInsert,\r\n                                                [_name]: value,\r\n                                            };\r\n                                        }\r\n                                        this.formGroup.get(_name)?.setValue(`${file.objectId}/${file.name}`);\r\n                                        this.formGroup.get(_name)?.clearValidators();\r\n                                        this.formGroup.get(_name)?.updateValueAndValidity();\r\n                                        field.files = [file];\r\n                                    }\r\n                                } else if (this.uploadCanceled && type === HttpEventType.Response) {\r\n                                    this.uploadCanceled = false;\r\n                                }\r\n                            });\r\n                        field.files = [file];\r\n                    });\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeFile(event: { file: FileDto }, blobField: BlobFieldConfig): void {\r\n        const { file } = event;\r\n\r\n        const field = this.fields.find((record) => record.name === blobField.name) as BlobFieldConfig;\r\n\r\n        field!.files = [];\r\n\r\n        if (file.objectId) {\r\n            // Quando é um arquivo já salvo o objectId já é no formato \"objectId/name\"\r\n            const value = file.savedFile ? `${file.objectId}` : `${file.objectId}/${file.name}`;\r\n            const toDelete = this.formGroup.get('fieldCustomization')!.value[0].toDelete;\r\n            delete this.formGroup.get('fieldCustomization')!.value[0].toInsert[field!.name];\r\n            this.formGroup.get('fieldCustomization')!.value[0].toDelete = {\r\n                ...toDelete,\r\n                [field!.name]: [...(toDelete[field!.name] || []), value],\r\n            };\r\n        }\r\n\r\n        this.formGroup.get(field!.name)!.clearValidators();\r\n        this.formGroup.get(field!.name)!.setValue('');\r\n        this.formGroup.get(field!.name)!.updateValueAndValidity();\r\n    }\r\n\r\n    private cancelUpload(index: number, formField: BlobFieldConfig): void {\r\n        this.uploadCanceled = true;\r\n        const field = this.fields.find((record) => record.name === formField.name) as BlobFieldConfig;\r\n        if (!field) {\r\n            return;\r\n        }\r\n        const _name = field.name;\r\n        const _files = field.files || [];\r\n        _files[index]?.uploadSubscribe?.unsubscribe();\r\n        field.files = [];\r\n        const fieldCustomization = this.formGroup.get('fieldCustomization')?.value[0];\r\n        delete fieldCustomization.toInsert[_name];\r\n        this.formGroup.get(_name)?.clearValidators();\r\n        this.formGroup.get(_name)?.setValue('');\r\n        this.formGroup.get(_name)?.updateValueAndValidity();\r\n    }\r\n\r\n    private defaltCatchError(field: BlobFieldConfig, err: HttpErrorResponse, index: number): Observable<never> {\r\n        const { files } = field;\r\n        if (files) {\r\n            files[index].error = err;\r\n            files[index].isUploading = false;\r\n            field.files = [...files];\r\n            const _name = field.name;\r\n            this.formGroup.get(_name)?.setValidators([errorOnUpload(files[index])]);\r\n            this.formGroup.get(_name)?.updateValueAndValidity();\r\n            return throwError(() => new Error('error in upload file. Details: ' + err.message));\r\n        } else {\r\n            return throwError(() => new Error('error in upload file. Details: ' + err.message));\r\n        }\r\n    }\r\n\r\n    private getTranslateLabel(label: string): string {\r\n        return this.translateService.instant(`${this.domain}.${this.service}.${label}`);\r\n    }\r\n\r\n    private addDisplayTimeInfoSignToFields(): void {\r\n        this.fields.forEach((field) => {\r\n            field.displayTimeInfoSign = this.displayTimeInfoSign;\r\n        });\r\n    }\r\n}\r\n\r\nfunction isUploading(file: FileDto): ValidatorFn {\r\n    return () => (file.isUploading ? { isUploading: true } : null);\r\n}\r\n\r\nfunction errorOnUpload(file: FileDto): ValidatorFn {\r\n    return () => (file.error ? { uploadError: true } : null);\r\n}\r\n","@let errorMessages =\n    {\n        pattern: invalidErrorLabel,\n        required: requiredErrorMessage,\n    };\n\n<s-dynamic-form\n    [configs]=\"dynamicStructure\"\n    [form]=\"formGroup\"\n    [errorMessages]=\"errorMessages\"\n>\n</s-dynamic-form>\n\n","import { NgModule } from '@angular/core';\r\nimport { CustomFieldsComponent } from './custom-fields.component';\r\nimport { CustomFieldsService } from './custom-fields.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@NgModule({\r\n    imports: [CustomFieldsComponent],\r\n    exports: [CustomFieldsComponent],\r\n    providers: [CustomFieldsService, TranslateService],\r\n})\r\nexport class CustomFieldsModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DynamicFormComponent_1"],"mappings":"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"}