{"version":3,"file":"guajiritos-general-autocomplete.mjs","sources":["../../../projects/guachos-general-autocomplete/src/utils/constants/constants.ts","../../../projects/guachos-general-autocomplete/src/utils/services/utils.service.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/resolve-property-path.pipe.ts","../../../projects/guachos-general-autocomplete/src/lib/guachos-general-autocomplete.component.ts","../../../projects/guachos-general-autocomplete/src/lib/guachos-general-autocomplete.component.html","../../../projects/guachos-general-autocomplete/src/public-api.ts","../../../projects/guachos-general-autocomplete/src/guajiritos-general-autocomplete.ts"],"sourcesContent":["import { DisplayOption, DisplayOptionItemType } from '@guajiritos/services';\nimport {DisplayOptionItem} from \"@guajiritos/services/lib/interfaces/interfaces\";\n\n\nexport const GENERAL_DISPLAY_OPTIONS: DisplayOption = {\n    firthLabel: [\n        {\n            type: DisplayOptionItemType.PATH,\n            path: ['name']\n        }\n    ],\n    applyTranslate: true\n};\n\nexport interface ServiceConfig {\n    service: any;\n    method: string;\n    postBody: any;\n    searchProperty: string;\n}\n","import {Injectable} from '@angular/core';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class UtilsService {\n    /**\n     * Resolves the value of a property in an object by providing a path.\n     *\n     * @param {any} obj - The object to traverse.\n     * @param {string[]} path - An array of strings representing the path to the desired property.\n     * @return {any} The value of the property at the given path, or null if the path is invalid.\n     */\n    public static resolvePropertyByPath(obj: any, path: string[]): any {\n        return path.reduce((prev, curr: string) => {\n            return prev ? prev[curr] : null;\n        }, obj || self);\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { DisplayOptionItem, DisplayOptionItemType } from '@guajiritos/services';\n\nimport { UtilsService } from '../services/utils.service';\n\n@Pipe({\n  name: 'resolvePropertyPath',\n  standalone: true\n})\nexport class ResolvePropertyPath implements PipeTransform {\n  /**\n   * Transforms the given object based on the provided path and returns the transformed string.\n   *\n   * @param {any} obj - The object to be transformed.\n   * @param {DisplayOptionItem[]} path - The array of display option items used for transformation.\n   * @return {string} The transformed string.\n   */\n  transform(obj: any, path: DisplayOptionItem[]): string {\n    let result: string = '';\n\n    path?.forEach((item: DisplayOptionItem): void => {\n      if (item?.type === DisplayOptionItemType.DIVIDER) {\n        result += item?.divider;\n      } else {\n        if (item?.path) {\n          result += UtilsService.resolvePropertyByPath(obj, item.path);\n        }\n      }\n    });\n\n    return result;\n  }\n}\n","import {CommonModule} from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component, DestroyRef,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Input,\n  NgZone,\n  Output,\n  signal,\n  TemplateRef,\n  ViewChild,\n  WritableSignal\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  NG_VALUE_ACCESSOR,\n  ReactiveFormsModule,\n  UntypedFormControl, ValidationErrors,\n  ValidatorFn,\n  Validators\n} from '@angular/forms';\nimport {MatAutocompleteModule, MatAutocompleteTrigger} from '@angular/material/autocomplete';\nimport {MatButtonModule} from '@angular/material/button';\nimport {ThemePalette} from '@angular/material/core';\nimport {\n  FloatLabelType,\n  MatFormFieldAppearance,\n  MatFormFieldModule,\n  SubscriptSizing\n} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {debounceTime, distinctUntilChanged, finalize, Observable, Subject} from 'rxjs';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\n\nimport {\n  ApiFormData,\n  AutocompleteService,\n  DisplayOption,\n  DisplayOptionItemType,\n  I18nPipe,\n  RestrictionFilter\n} from '@guajiritos/services';\n\nimport {GENERAL_DISPLAY_OPTIONS, ServiceConfig} from '../utils/constants/constants';\nimport {ResolvePropertyPath} from '../utils/pipes/resolve-property-path.pipe';\nimport {UtilsService} from '../utils/services/utils.service';\n\n@Component({\n  selector: 'guajiritos-general-autocomplete',\n  templateUrl: './guachos-general-autocomplete.component.html',\n  styleUrls: ['./guachos-general-autocomplete.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    CommonModule,\n    MatFormFieldModule,\n    TranslateModule,\n    MatIconModule,\n    ReactiveFormsModule,\n    MatInputModule,\n    MatButtonModule,\n    MatProgressSpinnerModule,\n    MatAutocompleteModule,\n    I18nPipe,\n    ResolvePropertyPath\n  ],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => GuajiritosGeneralAutocomplete),\n      multi: true\n    }\n  ]\n})\nexport class GuajiritosGeneralAutocomplete implements ControlValueAccessor {\n\n  constructor(\n    private _autocompleteService: AutocompleteService,\n    private _zone: NgZone,\n    private _destroyRef: DestroyRef,\n    public translateService: TranslateService\n  ) {\n  }\n\n  private wasSelected: boolean = false;\n  private firstCall: boolean = true;\n  private clearData$: Subject<void>;\n  private doFocusSubject$: Subject<void>;\n  private selectedElement: any = null;\n  private _url: string = null;\n  private restrictionsFilters: RestrictionFilter[] = [];\n\n  public disabled: WritableSignal<boolean> = signal(false);\n  public loading: WritableSignal<boolean> = signal(false);\n  public required: WritableSignal<boolean> = signal(false);\n  public filteredOptions: WritableSignal<any[]> = signal([]);\n  public originalOptions: WritableSignal<any[]> = signal([]);\n  public notAllowedOption: WritableSignal<any> = signal(null);\n  public component: UntypedFormControl = new UntypedFormControl({value: null, disabled: false});\n\n  @ViewChild('inputText', {static: true}) inputText: ElementRef;\n  /**\n   * Possible values 'never', 'auto' or 'always'\n   */\n  @Input() floatLabel: FloatLabelType = 'auto';\n  @Input() color: ThemePalette = 'accent';\n  @Input() appearance: MatFormFieldAppearance = 'outline';\n  @Input() subscriptSizing: SubscriptSizing = 'dynamic';\n  @Input() bodyRequest: ApiFormData;\n  @Input() debounceTimeValue: number = 300;\n  @Input() detailsTemplate: TemplateRef<any>;\n  @Input() label: string = 'Seleccione';\n  @Input() showLabel: boolean = true;\n  @Input() placeholder: string = 'Seleccione un elemento';\n  @Input() field: string[] = ['name'];\n  @Input() filterString: string[] | string = 'filter[$and][name][$like]';\n  @Input() displayOptions: DisplayOption = GENERAL_DISPLAY_OPTIONS;\n  @Input() withoutPaddingBottom: boolean = true;\n  @Input() valueId: boolean = false;\n  @Input() showSuffix: boolean = false;\n  @Input() requireSelection: boolean = false;\n  @Input() order: string;\n  @Input() serviceConfig: ServiceConfig;\n  @Input() suffixIcon: string = 'search';\n  @Input() removeProperties: string[] = [];\n  @Input() modifyResultFn: (options: any) => any = () => null;\n\n  @Output() SelectElement: EventEmitter<any> = new EventEmitter<any>();\n  @Output() clearElement: EventEmitter<any> = new EventEmitter<any>();\n\n  @Input() set url(data: string) {\n    if (data) {\n      this._url = data;\n      this.subscribeComponentChanges();\n    }\n  }\n\n  @Input() set clearData(value: Subject<void>) {\n    this.clearData$ = value;\n    if (this.clearData$) {\n      this.clearData$\n        .pipe(takeUntilDestroyed(this._destroyRef))\n        .subscribe({\n          next: (): void => {\n            this.component.setValue(null, {emitEvent: false});\n            this.selectedElement = null;\n            this.SelectElement.emit(null);\n            this.filteredOptions.set([]);\n            this.propagateChange(null);\n          }\n        });\n    }\n  }\n\n  @Input() set initialValue(value: any) {\n    this.component.setValue(value);\n  }\n\n  /**\n   * Añade o elimina restricciones para la búsqueda\n   *\n   * @param restrictions - Restricciones para la búsqueda\n   */\n  @Input() set restrictions(restrictions: RestrictionFilter[]) {\n    if (restrictions?.length) {\n      this.restrictionsFilters = [...restrictions];\n    } else {\n      this.restrictionsFilters = [];\n    }\n  }\n\n  /**\n   * Añade o elimina la validación de que el campo sea requerido\n   *\n   * @param required - Define si es requerido o no\n   */\n  @Input() set isRequired(required: boolean) {\n    this.required.set(required);\n    if (required) {\n      this.component.setValidators([Validators.required, autocompleteValidator]);\n    } else {\n      this.component.clearValidators();\n      this.component.setValidators([autocompleteValidator]);\n    }\n\n    this.component.updateValueAndValidity();\n    this.component.markAsDirty();\n    this.component.markAsTouched();\n  }\n\n  /**\n   * Define si vamos a realizar una búsqueda al elemento estar en el focus de la aplicación\n   *\n   * @param focusSubject - Observable para la subscripción al evento Focus\n   */\n  @Input() set doFocus(focusSubject: Subject<void>) {\n    this.doFocusSubject$ = focusSubject;\n\n    if (this.doFocusSubject$) {\n      this.doFocusSubject$\n        .pipe(debounceTime(this.debounceTimeValue), takeUntilDestroyed(this._destroyRef))\n        .subscribe({\n          next: (): void => {\n            this._zone.run((): void => {\n              setTimeout((): void => {\n                this.inputText?.nativeElement?.focus();\n              }, 500);\n            });\n          }\n        });\n    }\n  }\n\n  @Input() set notAllowedElements(element: any) {\n    if (element) {\n      this.notAllowedOption.set(element);\n\n      if (this.originalOptions()?.length) {\n        this.filteredOptions.set(this.originalOptions()?.filter((option: any): any => JSON.stringify(option) !== JSON.stringify(this.notAllowedOption())));\n      }\n    }\n  }\n\n  /**\n   * Subscripción a los cambios del input de búsqueda\n   */\n  private subscribeComponentChanges(): void {\n    this.component.valueChanges\n      .pipe(debounceTime(this.debounceTimeValue), takeUntilDestroyed(this._destroyRef))\n      .subscribe({\n        next: (): void => {\n          if (!this.firstCall && !this.wasSelected) {\n            this.getAutocompleteByTextHandler(this.getAutocompleteSearchText());\n          }\n\n          this.firstCall = false;\n          this.wasSelected = false;\n        }\n      });\n  }\n\n  /**\n   * Búsqueda de los elementos a mostrar en el componente de auto-completamiento\n   *\n   * @param text - Texto a buscar\n   */\n  private getAutocompleteByTextHandler(text?: string): void {\n    this.loading.set(true);\n    this.propagateChange(null);\n    this.selectedElement = null;\n    this.SelectElement.emit(null);\n    if (!this.serviceConfig) {\n      this._autocompleteService\n        .getAutocompleteByText(this._url, text, this.filterString, this.restrictionsFilters, this.removeProperties, this.order, this.bodyRequest)\n        .then((resp: Observable<any>): void => {\n          resp?.pipe(finalize((): void => this.loading.set(false))).subscribe({\n            next: (result: any): void => {\n              this.originalOptions.set(result?.payload?.data ?? result?.data);\n\n              // Modifica los options con una función que se le pase como parámetro\n              const modifiedOptions = this.modifyResultFn(this.originalOptions());\n              if (modifiedOptions) this.filteredOptions.set(modifiedOptions);\n\n              if (this.notAllowedOption()) {\n                this.filteredOptions.set(this.originalOptions()?.filter((option: any): any => JSON.stringify(option) !== JSON.stringify(this.notAllowedOption())));\n              } else {\n                this.filteredOptions.set(this.originalOptions());\n              }\n            }\n          });\n        });\n    } else {\n      let body: any = this.serviceConfig;\n      body[this.serviceConfig.searchProperty] = text;\n      this.serviceConfig\n        .service[this.serviceConfig.method](body)\n        .pipe(takeUntilDestroyed(this._destroyRef), debounceTime(this.debounceTimeValue || 300), finalize((): void => this.loading.set(false)))\n        .subscribe({\n          next: (result: any): void => {\n            this.originalOptions.set(result?.payload?.data ?? result?.data);\n\n            // Modifica los options con una función que se le pase como parámetro\n            const modifiedOptions = this.modifyResultFn(this.originalOptions());\n            if (modifiedOptions) this.filteredOptions.set(modifiedOptions);\n\n            if (this.notAllowedOption()) {\n              this.filteredOptions.set(this.originalOptions()?.filter((option: any): any => JSON.stringify(option) !== JSON.stringify(this.notAllowedOption())));\n            } else {\n              this.filteredOptions.set(this.originalOptions());\n            }\n          }\n        });\n    }\n  }\n\n  /**\n   * Define el texto por el que se va a realizar la búsqueda\n   *\n   * @return {string} Texto de la búsqueda\n   */\n  private getAutocompleteSearchText(): string {\n    let text: string = '';\n\n    if (this.component.value) {\n      if (typeof this.component.value === 'object') {\n        const componentValue = this.component.value?.[this.field?.[0]];\n        if (typeof componentValue === 'object') {\n          let lang: string = 'es';\n          if (this.field?.[1]) {\n            lang = this.field?.[1];\n          }\n\n          text = componentValue?.[lang];\n        }\n      } else if (typeof this.component.value === 'string') {\n        text = this.component.value;\n      }\n    }\n\n    return text;\n  }\n\n  propagateChange = (_: any): void => {\n  };\n\n  registerOnChange(fn: (_: any) => void): void {\n    this.propagateChange = fn;\n  }\n\n  registerOnTouched(): void {\n  }\n\n  /**\n   * Recibe el valor del FormControl\n   *\n   * @param value - Valor entrado por FormControl\n   */\n  writeValue(value: any): void {\n    if (value) {\n      this.component.setValue(value, {emitEvent: false});\n\n      if (typeof value === 'object' && this.valueId) {\n        this.selectedElement = value?.id;\n      } else {\n        this.selectedElement = value;\n      }\n    } else {\n      this.selectedElement = null;\n    }\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled.set(isDisabled);\n\n    if (this.disabled()) {\n      this.component.disable();\n    } else {\n      this.component.enable();\n    }\n  }\n\n  /**\n   * Función para mostrar los elementos a seleccionar\n   *\n   * @param value - Valor a mostrar\n   */\n  public displayFn = (value: any): string => {\n    if (value) {\n      if (typeof value === 'string') {\n        return value;\n      }\n\n      let displayText: string = '';\n      if (!this.displayOptions) {\n        this.displayOptions = GENERAL_DISPLAY_OPTIONS;\n      }\n\n      this.displayOptions?.firthLabel?.forEach((field: any): void => {\n        if (field?.type === DisplayOptionItemType.PATH) {\n          displayText += UtilsService.resolvePropertyByPath(value, field?.path);\n        } else {\n          displayText += field?.divider;\n        }\n      });\n\n      return displayText;\n    }\n  };\n\n  /**\n   * Acción al limpiar el valor del input\n   *\n   * @param trigger\n   */\n  public clear(trigger: MatAutocompleteTrigger): void {\n    this.clearElement.emit(this.component.value);\n    this.component.setValue(null);\n    this.selectedElement = null;\n    this.SelectElement.emit(null);\n    this.propagateChange(null);\n\n    this._zone.run((): void => {\n      setTimeout((): void => {\n        trigger.openPanel();\n      }, 100);\n    });\n  }\n\n  /**\n   * Acción en el Focus del elemento\n   */\n  public onFocus(): void {\n    if (!this.selectedElement) {\n      this.getAutocompleteByTextHandler(this.getAutocompleteSearchText());\n    }\n  }\n\n  public optionSelected($event: any): void {\n    if ($event?.option?.value) {\n      this.wasSelected = true;\n      this.selectedElement = $event.option.value;\n      this.SelectElement.emit($event.option.value);\n\n      if (this.valueId) {\n        this.propagateChange(typeof $event.option.value === 'object' ? $event.option.value?.id : $event.option.value);\n      } else {\n        this.propagateChange($event.option.value);\n      }\n    } else {\n      this.propagateChange($event.option.value);\n    }\n  }\n}\n\n/**\n * Validación customizada para la selección de elementos\n */\nexport function autocompleteValidator(control: AbstractControl): ValidationErrors | null {\n    if (control?.value?.constructor !== Object || !control?.value?.id) {\n      return {invalidSelection: true};\n    }\n    return null;\n}\n","<mat-form-field [floatLabel]=\"floatLabel\" class=\"w-100\" [appearance]=\"appearance\" [color]=\"color\"\n                [subscriptSizing]=\"subscriptSizing\">\n\n  @if (showLabel) {\n    <mat-label>{{ label | translate }}</mat-label>\n  }\n  @if (showSuffix) {\n    <mat-icon matSuffix>{{ suffixIcon ?? \"search\" }}</mat-icon>\n  }\n  <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\" type=\"text\"\n         [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\n         autocomplete=\"off\" matInput [required]=\"required()\">\n  @if (!loading() && component.value) {\n    <button (click)=\"clear(trigger)\" [disabled]=\"disabled()\"\n            aria-label=\"Clear\" mat-icon-button matSuffix>\n      <mat-icon>close</mat-icon>\n    </button>\n  }\n  @if (loading()) {\n    <button aria-label=\"search\" mat-icon-button matSuffix>\n      <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\n    </button>\n  }\n  <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\" [requireSelection]=\"requireSelection\"\n                    (optionSelected)=\"optionSelected($event)\">\n    @for (option of filteredOptions(); track option) {\n      <mat-option [value]=\"option\">\n        @if (!displayOptions && !detailsTemplate) {\n          {{ option?.name | i18n: translateService.currentLang }}\n        }\n        @if (!detailsTemplate) {\n          <div class=\"display-options\">\n              <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\n                {{ option | resolvePropertyPath:displayOptions.firthLabel | i18n: translateService.currentLang }}\n              </span>\n            @if (displayOptions?.secondLabel) {\n              <span class=\"mat-caption\">\n                  {{ option | resolvePropertyPath: displayOptions.secondLabel | i18n: translateService.currentLang }}\n                </span>\n            }\n          </div>\n        }\n        @if (detailsTemplate) {\n          <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\n        }\n      </mat-option>\n    }\n  </mat-autocomplete>\n\n  @if (component.invalid) {\n    <mat-error>\n      {{ 'Este campo es requerido.' | translate }}\n    </mat-error>\n  }\n</mat-form-field>\n","/*\n * Public API Surface of guachos-general-autocomplete\n */\n\nexport * from './utils/constants/constants';\nexport * from './lib/guachos-general-autocomplete.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}