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