@mediusinc/mng-commons 6.1.0-rc.1 → 6.2.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -103,9 +103,12 @@ class AutocompleteComponent {
103
103
  }
104
104
  }
105
105
  onSearch(event, isInit = false) {
106
- this.searchSubscription?.unsubscribe();
106
+ if (!this.inlineSearch()) {
107
+ this.searchSubscription?.unsubscribe();
108
+ }
107
109
  const optionsLabelProperty = this.optionsLabelProperty();
108
110
  const query = this.trimValue(event?.query);
111
+ this.currentQuery = query;
109
112
  const params = {
110
113
  limit: 50
111
114
  };
@@ -349,6 +352,10 @@ class AutocompleteComponent {
349
352
  });
350
353
  }
351
354
  setSuggestionsFromItems(items, query) {
355
+ if (query && query !== this.currentQuery) {
356
+ // Skip processing to avoid outdated queries during inline search updates.
357
+ return;
358
+ }
352
359
  if (this.inlineSearch()) {
353
360
  const queryLowerCase = query?.toLowerCase() ?? '';
354
361
  const filteredItems = items.filter(i => {
@@ -1 +1 @@
1
- {"version":3,"file":"mediusinc-mng-commons-form.mjs","sources":["../../form/src/components/autocomplete/autocomplete.component.ts","../../form/src/components/autocomplete/autocomplete.component.html","../../form/src/components/date-range/date-range.component.ts","../../form/src/components/date-range/date-range.component.html","../../form/src/components/dropdown/dropdown.component.ts","../../form/src/components/dropdown/dropdown.component.html","../../form/src/components/number-range/number-range.component.ts","../../form/src/components/number-range/number-range.component.html","../../form/src/directives/input-empty-value.directive.ts","../../form/src/directives/input-trim.directive.ts","../../form/src/index.ts","../../form/src/mediusinc-mng-commons-form.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ExistingProvider,\n Injector,\n OnInit,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {TranslatePipe, TranslateService, TranslationObject} from '@ngx-translate/core';\nimport {AutoComplete, AutoCompleteCompleteEvent, AutoCompleteSelectEvent, AutoCompleteUnselectEvent} from 'primeng/autocomplete';\nimport {Observable, ReplaySubject, Subscription, of, switchMap, take} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {\n CommonsInternalError,\n DataListParams,\n FilterMatchMode,\n ILookupDataProvider,\n LoggerService,\n fromSubscribeError,\n getErrorLogLevel,\n toObservable\n} from '@mediusinc/mng-commons/core';\nimport {InputTrimType} from '@mediusinc/mng-commons/form/api';\n\nexport const AUTOCOMPLETE_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutocompleteComponent),\n multi: true\n};\n\n@Component({\n selector: 'mng-autocomplete',\n templateUrl: './autocomplete.component.html',\n providers: [AUTOCOMPLETE_VALUE_ACCESSOR],\n imports: [TranslatePipe, FormsModule, AutoComplete],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AutocompleteComponent implements ControlValueAccessor, OnInit {\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly translate = inject(TranslateService);\n private readonly logger = inject(LoggerService).create('AutocompleteComponent');\n\n public dataProvider = input.required<ILookupDataProvider<any, any, any, any>>();\n public optionsTrackProperty = input<string>();\n public optionsValuePropertyInit = input<string | undefined>(undefined, {alias: 'optionsValueProperty'});\n public optionsLabelPropertyInit = input<string | undefined>(undefined, {alias: 'optionsLabelProperty'});\n public optionsLabelTranslate = input(false, {transform: booleanAttribute});\n public inlineSearch = input(false, {transform: booleanAttribute});\n public openOnFocus = input(false, {transform: booleanAttribute});\n public multiselect = input(false, {transform: booleanAttribute});\n public placeholder = input<string>();\n public className = input<string>();\n public dropdownClassName = input<string>();\n public showClear = input(false, {transform: booleanAttribute});\n public autoClear = input(false, {transform: booleanAttribute});\n public selectFirst = input(false, {transform: booleanAttribute}); //on every input field change return first given value (or null)\n public searchTrim = input<InputTrimType | undefined>(undefined);\n public disabledInput = input<boolean, unknown>(false, {transform: booleanAttribute, alias: 'disabled'});\n\n public valueChange = output<any>();\n // eslint-disable-next-line @angular-eslint/no-output-native\n public blur = output<Event>();\n\n private primeAutocomplete = viewChild(AutoComplete);\n\n private isInited = false;\n private searchSubscription: Subscription | null = null;\n private dataProviderService: any = null;\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChangeFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedFn: any = () => {};\n\n private _value?: any | null;\n private _rawValue?: any | null;\n public ngModelValue = signal<undefined | null | any>(undefined);\n\n private _disabled = signal(false);\n public disabled = computed(() => this._disabled() || this.disabledInput());\n\n public suggestions = signal<Array<any>>([]);\n private isPanelShown = false;\n private isFocused = false;\n private userSelectedItem?: any | any[];\n private queryResultCacheSubject?: ReplaySubject<any>;\n\n public optionsLabelProperty = computed(() => {\n if (this.optionsLabelTranslate()) {\n // setup translation properties\n if (this.optionsLabelPropertyInit()) {\n return `${this.optionsLabelPropertyInit()}_i18n`;\n } else if (!this.optionsLabelPropertyInit() && !this.optionsValuePropertyInit()) {\n return 'title_i18n';\n } else {\n throw new CommonsInternalError(`Invalid use with value (${this.optionsValuePropertyInit()}) and label (${this.optionsLabelPropertyInit()}) property setup.`, {\n name: 'AutocompleteComponentError'\n });\n }\n }\n\n return this.optionsLabelPropertyInit();\n });\n public optionsValueProperty = computed(() => {\n if (this.optionsLabelTranslate()) {\n // setup translation properties\n if (!this.optionsLabelPropertyInit() && !this.optionsValuePropertyInit()) {\n return 'value';\n } else if (!this.optionsLabelPropertyInit()) {\n throw new CommonsInternalError(`Invalid use with value (${this.optionsValuePropertyInit()}) and label (${this.optionsLabelPropertyInit()}) property setup.`, {\n name: 'AutocompleteComponentError'\n });\n }\n }\n\n return this.optionsValuePropertyInit();\n });\n\n public get value() {\n return this._value;\n }\n\n constructor() {\n effect(() => {\n this._value = this.convertValueWithOptionsValuePropSetting(this.ngModelValue());\n this._rawValue = this.ngModelValue();\n });\n }\n\n ngOnInit() {\n this.setItemsAndDataProvider();\n\n if (this.selectFirst() && !this._value) {\n this.onSearch(undefined, true);\n }\n }\n\n onSearch(event?: AutoCompleteCompleteEvent, isInit = false) {\n this.searchSubscription?.unsubscribe();\n const optionsLabelProperty = this.optionsLabelProperty();\n const query = this.trimValue(event?.query);\n\n const params: DataListParams = {\n limit: 50\n };\n if (optionsLabelProperty) {\n params.sort = [{property: optionsLabelProperty}];\n }\n if (query && query.length > 0 && optionsLabelProperty) {\n params.filters = {\n [optionsLabelProperty]: {\n value: query,\n matchMode: FilterMatchMode.StartsWith\n }\n };\n }\n\n if (!this.queryResultCacheSubject || !this.inlineSearch()) {\n if (!this.queryResultCacheSubject) {\n this.queryResultCacheSubject = new ReplaySubject<any>(1);\n }\n this.searchSubscription = this.getLookup(params, query)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: items => {\n this.queryResultCacheSubject?.next(items);\n this.setSuggestionsFromItems(items, query);\n if (isInit && !this._value) {\n this.selectFirstItem();\n }\n },\n error: err => {\n this.setSuggestionsFromItems([], query);\n\n const error = fromSubscribeError(err, 'AutocompleteComponentError', {\n search: query,\n params: params\n });\n this.logger.log(error, getErrorLogLevel(error));\n }\n });\n } else if (this.queryResultCacheSubject) {\n this.searchSubscription = this.queryResultCacheSubject.pipe(take(1)).subscribe(result => {\n this.setSuggestionsFromItems(result, query);\n });\n }\n }\n\n private selectFirstItem() {\n if (!this.selectFirst() || this.multiselect()) return;\n\n const suggestions = this.suggestions();\n if (suggestions.length > 0 && !this.userSelectedItem) {\n this.setValue(suggestions[0]);\n } else if (!this.userSelectedItem) {\n // handles the case if the user provides an input and de-focuses the input field before suggestions are loaded or if there are no suggestions at all\n this.setValue(null);\n }\n }\n\n /**\n * Triggered by user when selecting an item from an autocomplete suggestion list.\n */\n onSelect(event: AutoCompleteSelectEvent) {\n let newValue = event.value;\n if (this.multiselect() && Array.isArray(this._rawValue) && this._rawValue.length > 0) {\n newValue = [...this._rawValue, newValue];\n } else if (this.multiselect()) {\n newValue = [newValue];\n }\n\n this.setValue(newValue, true);\n this.isFocused = false;\n }\n\n /**\n * Triggered by user when selecting an item from an autocomplete suggestion list.\n */\n onUnselect(event: AutoCompleteUnselectEvent) {\n let newValue = null;\n if (this.multiselect() && Array.isArray(this._rawValue) && this._rawValue.length > 0) {\n const cmpProp = this.optionsValueProperty() ?? this.optionsTrackProperty();\n newValue = this._rawValue.filter(i => (cmpProp ? i[cmpProp] !== event.value[cmpProp] : i !== event.value));\n } else if (this.multiselect()) {\n newValue = [];\n }\n this.setValue(newValue, true);\n this.isFocused = false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onFocus(event: Event) {\n this.isFocused = true;\n }\n\n /**\n * calls the selectFirst item anytime the input field goes out of focus and if the suggestions panel is not displayed.\n */\n onBlur(event: Event) {\n this.isFocused = false;\n const inputSearchVal = this.primeAutocomplete()?.inputEL?.nativeElement?.value;\n if (this.autoClear() && this._value != null && (inputSearchVal == null || inputSearchVal === '')) {\n this.propagateValueChange(null);\n } else if (!this.isPanelShown) {\n this.selectFirstItem();\n }\n this.onTouchedFn();\n this.blur.emit(event);\n }\n\n onShow() {\n this.isPanelShown = true;\n }\n\n /**\n * calls the selectFirst item anytime the suggestions panel is closed and input field isn't focused.\n */\n onHide() {\n this.isPanelShown = false;\n if (!this.isFocused) {\n this.selectFirstItem();\n }\n }\n\n onClear() {\n this.propagateValueChange(this.multiselect() ? [] : null);\n }\n\n registerOnChange(fn: any): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n setTimeout(() => this._disabled.set(isDisabled));\n }\n\n writeValue(value: any): void {\n this.setItemsAndDataProvider();\n\n // write value immediately - it is important so that first select is not triggered!\n this._value = value;\n\n const optionsValuePropertyInit = this.optionsValuePropertyInit();\n if (optionsValuePropertyInit && value != null && typeof value !== 'object') {\n const defaultItem: any = {[optionsValuePropertyInit]: value};\n const optionsLabelProperty = this.optionsLabelProperty();\n if (optionsLabelProperty) {\n defaultItem[optionsLabelProperty] = value;\n }\n\n const matchedItem = this.suggestions().find(i => i[optionsValuePropertyInit] === value);\n if (matchedItem) {\n this.setValueFromWrite(matchedItem);\n } else {\n this.getLookup({\n limit: 50,\n filters: {\n [optionsValuePropertyInit]: {\n value: value,\n matchMode: FilterMatchMode.Equals\n }\n }\n })\n .pipe(take(1))\n .subscribe({\n next: items => {\n let isMatch = false;\n if (items.length === 1) {\n this.setValueFromWrite(items[0]);\n isMatch = true;\n } else if (items.length > 1) {\n // for lookup data providers not using query params\n const matchedItem = items.find(i => i[optionsValuePropertyInit] === value);\n if (matchedItem) {\n this.setValueFromWrite(matchedItem);\n isMatch = true;\n }\n }\n\n if (!isMatch) {\n this.setValueFromWrite(defaultItem);\n }\n },\n error: () => {\n this.setValueFromWrite(defaultItem);\n }\n });\n }\n } else {\n this.setValueFromWrite(value);\n }\n }\n\n private setItemsAndDataProvider() {\n if (this.isInited) {\n return;\n }\n\n const dataProvider = this.dataProvider();\n this.dataProviderService = dataProvider.serviceType ? this.injector.get<any>(dataProvider.serviceType) : null;\n\n this.isInited = true;\n }\n\n private setValueFromWrite(value: any | any[] | null | undefined) {\n if (value && this.optionsLabelTranslate()) {\n value = this.i18nPopulateItems([value], this.translate.instant(this.i18nGetItemsKeys([value])))[0];\n }\n if (this.ngModelValue() == null && this._rawValue != null) {\n // value must first be set to synchronise states, then in next async cycle set to wanted null value\n this.ngModelValue.set(this._rawValue);\n setTimeout(() => {\n this.ngModelValue.set(value);\n });\n } else {\n this.ngModelValue.set(value);\n }\n }\n\n private getLookup(params: DataListParams, query?: string): Observable<Array<any>> {\n return toObservable(this.dataProvider().lookup(params, this.dataProviderService, query)).pipe(\n switchMap(items => {\n if (this.optionsLabelTranslate()) {\n const translatedItems = this.i18nGetItemsKeys(items);\n if (translatedItems.length === 0) {\n return of([]);\n }\n\n return this.translate.stream(translatedItems).pipe(map((translations: TranslationObject) => this.i18nPopulateItems(items, translations)));\n } else {\n return of(items);\n }\n })\n );\n }\n\n private i18nGetItemsKeys(items: Array<any>): Array<string> {\n return items.map(\n item => (typeof item === 'object' && this.optionsLabelPropertyInit() ? (item[this.optionsLabelPropertyInit() as keyof object] as string) : item) as string\n );\n }\n\n private i18nPopulateItems(items: Array<any>, i18nMap: TranslationObject): Array<any> {\n return items.map(item => {\n if (typeof item === 'object' && this.optionsLabelPropertyInit()) {\n const label = item[this.optionsLabelPropertyInit() as keyof object] as string;\n const translation: string | undefined = i18nMap[label];\n if (translation) {\n return {...item, [this.optionsLabelProperty()!]: translation};\n }\n return {...item};\n } else {\n const translation = i18nMap[item];\n return {\n [this.optionsLabelProperty()!]: translation ?? item,\n [this.optionsValueProperty()!]: item\n };\n }\n });\n }\n\n private setSuggestionsFromItems(items: Array<any>, query?: string) {\n if (this.inlineSearch()) {\n const queryLowerCase = query?.toLowerCase() ?? '';\n const filteredItems = items.filter(i => {\n let itemLabel = i;\n const optionsLabelProperty = this.optionsLabelProperty();\n if (optionsLabelProperty && typeof i === 'object') {\n itemLabel = i[optionsLabelProperty];\n }\n if (itemLabel == null) {\n return queryLowerCase == null || !queryLowerCase.length;\n }\n if (typeof itemLabel !== 'string') {\n itemLabel = itemLabel.toString();\n }\n return itemLabel.toLowerCase().startsWith(queryLowerCase);\n });\n this.suggestions.set([...filteredItems]);\n this.userSelectedItem = undefined;\n } else {\n this.suggestions.set([...items]);\n this.userSelectedItem = undefined;\n }\n }\n\n /**\n * Selects and sets new value.\n *\n * @param value Represents the object value.\n * @param fromUser If set value is triggered from user.\n */\n private setValue(value: any | any[] | null | undefined, fromUser = false) {\n if (fromUser) {\n this.userSelectedItem = value;\n } else {\n this.ngModelValue.set(value);\n }\n\n this.propagateValueChange(value);\n }\n\n private trimValue(value: string | undefined) {\n switch (this.searchTrim()) {\n case 'start':\n return value?.trimStart();\n case 'end':\n return value?.trimEnd();\n case 'both':\n return value?.trim();\n default:\n return value;\n }\n }\n\n /**\n * Propagates final value to _value, on change fn and outputs.\n */\n private propagateValueChange(value: any | any[] | null | undefined) {\n this._value = this.convertValueWithOptionsValuePropSetting(value);\n this._rawValue = value;\n this.onChangeFn(this._value);\n this.valueChange.emit(this._value);\n }\n\n private convertValueWithOptionsValuePropSetting(value: any | any[] | null | undefined) {\n const optionsValueProperty = this.optionsValueProperty();\n if (!optionsValueProperty) {\n return value;\n }\n if (this.multiselect() && Array.isArray(value)) {\n return value.map((item: any) => {\n if (item && typeof item === 'object') {\n return item[optionsValueProperty];\n }\n return null;\n });\n } else if (value && typeof value === 'object') {\n return value[optionsValueProperty];\n } else {\n return value;\n }\n }\n}\n","<p-autoComplete\n [ngModel]=\"ngModelValue()\"\n [placeholder]=\"placeholder()\"\n [dropdown]=\"true\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [suggestions]=\"suggestions()\"\n [multiple]=\"multiselect()\"\n [showEmptyMessage]=\"true\"\n [emptyMessage]=\"'mngAutocomplete.noMatches' | translate\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [minLength]=\"openOnFocus() ? 0 : 1\"\n [showClear]=\"showClear()\"\n [forceSelection]=\"autoClear()\"\n [disabled]=\"disabled()\"\n [completeOnFocus]=\"openOnFocus()\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n (onUnselect)=\"onUnselect($event)\"\n (onFocus)=\"onFocus($event)\"\n (onBlur)=\"onBlur($event)\"\n (onClear)=\"onClear()\"\n (onShow)=\"onShow()\"\n (onHide)=\"onHide()\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ExistingProvider,\n Injector,\n OnInit,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n forwardRef,\n inject,\n input\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n Validators\n} from '@angular/forms';\n\nimport {DatePicker} from 'primeng/datepicker';\nimport {merge} from 'rxjs';\n\nexport const DATE_RANGE_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateRangeComponent),\n multi: true\n};\n\nexport const DATE_RANGE_VALIDATOR: ExistingProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateRangeComponent),\n multi: true\n};\n\n@Component({\n selector: 'mng-date-range',\n templateUrl: './date-range.component.html',\n styleUrl: './date-range.component.css',\n providers: [DATE_RANGE_VALUE_ACCESSOR, DATE_RANGE_VALIDATOR],\n imports: [FormsModule, ReactiveFormsModule, DatePicker],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'className()'\n }\n})\nexport class DateRangeComponent implements OnInit, ControlValueAccessor, Validator {\n private readonly formBuilder = inject(FormBuilder);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly cdr = inject(ChangeDetectorRef);\n\n public placeholder = input<string>();\n public showTime = input(false, {transform: booleanAttribute});\n public showSeconds = input(false, {transform: booleanAttribute});\n public dateFormat = input<string>();\n public className = input<string>();\n public required = input(false, {transform: booleanAttribute});\n public disabled = input(false, {\n transform: booleanAttribute\n });\n public vertical = input(false, {transform: booleanAttribute});\n\n private fromToFormControl!: FormGroup;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChangeFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onValidatorChangeFn: any = () => {};\n\n public get fromCtrl() {\n return this.fromToFormControl.get('from') as FormControl;\n }\n\n public get toCtrl() {\n return this.fromToFormControl.get('to') as FormControl;\n }\n\n public get dateRangeCtrl() {\n return this.fromToFormControl.get('dateRange') as FormControl;\n }\n\n ngOnInit() {\n this.fromToFormControl = this.formBuilder.group({\n from: [null, Validators.required],\n to: [null, Validators.required],\n dateRange: [null, Validators.required]\n });\n\n effect(\n () => {\n this.setDisabledState(this.disabled());\n },\n {injector: this.injector}\n );\n\n merge(this.fromCtrl.valueChanges, this.toCtrl.valueChanges, this.dateRangeCtrl.valueChanges)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.onValueChange());\n }\n\n registerOnChange(fn: any): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedFn = fn;\n }\n\n registerOnValidatorChange?(fn: () => void): void {\n this.onValidatorChangeFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (isDisabled && this.fromToFormControl?.enabled) {\n this.fromToFormControl.disable();\n } else if (!isDisabled && this.fromToFormControl?.disabled) {\n this.fromToFormControl.enable();\n }\n }\n\n onBlur() {\n this.onTouchedFn();\n }\n\n writeValue(obj: any): void {\n let startDate: Date | null = null;\n let endDate: Date | null = null;\n\n if (Array.isArray(obj)) {\n if (obj.length > 0 && (obj[0] instanceof Date || typeof obj[0] === 'string' || typeof obj[0] === 'number')) {\n startDate = new Date(obj[0]);\n }\n if (obj.length > 1 && (obj[1] instanceof Date || typeof obj[1] === 'string' || typeof obj[1] === 'number')) {\n endDate = new Date(obj[1]);\n }\n } else if (obj instanceof Date || typeof obj === 'string' || typeof obj === 'number') {\n startDate = new Date(obj);\n }\n\n if (this.showTime()) {\n this.fromCtrl.setValue(startDate, {emitEvent: false});\n this.toCtrl.setValue(endDate, {emitEvent: false});\n } else if (startDate || endDate) {\n this.dateRangeCtrl.setValue([startDate, endDate], {emitEvent: false});\n } else {\n this.dateRangeCtrl.setValue(null, {emitEvent: false});\n }\n }\n\n validate(): ValidationErrors | null {\n if (!this.required()) return null;\n\n if (this.showTime()) {\n if (this.fromCtrl.hasError('required') || this.toCtrl.hasError('required')) {\n return {\n required: true\n };\n }\n } else {\n if (this.dateRangeCtrl.hasError('required')) {\n return {\n required: true\n };\n }\n }\n\n return null;\n }\n\n private onValueChange() {\n if (this.showTime()) {\n const fromDate = this.fromCtrl.value as Date;\n const toDate = this.toCtrl.value as Date;\n this.onChangeFn([fromDate, toDate]);\n } else {\n const date = this.dateRangeCtrl.value as Date[];\n this.onChangeFn(date);\n }\n }\n}\n","@if (showTime()) {\n <div class=\"flex gap-1\" [class.flex-col]=\"vertical()\">\n <p-date-picker\n appendTo=\"body\"\n [formControl]=\"fromCtrl\"\n [maxDate]=\"toCtrl.value\"\n [placeholder]=\"placeholder()\"\n [dateFormat]=\"dateFormat()\"\n [showTime]=\"true\"\n [showSeconds]=\"showSeconds()\"\n [showIcon]=\"true\"\n [firstDayOfWeek]=\"1\"\n (onBlur)=\"onBlur()\"></p-date-picker>\n <p-date-picker\n appendTo=\"body\"\n [formControl]=\"toCtrl\"\n [minDate]=\"fromCtrl.value\"\n [placeholder]=\"placeholder()\"\n [dateFormat]=\"dateFormat()\"\n [showTime]=\"true\"\n [showSeconds]=\"showSeconds()\"\n [showIcon]=\"true\"\n [firstDayOfWeek]=\"1\"\n (onBlur)=\"onBlur()\"></p-date-picker>\n </div>\n} @else {\n <p-date-picker\n appendTo=\"body\"\n [formControl]=\"dateRangeCtrl\"\n [placeholder]=\"placeholder()\"\n [dateFormat]=\"dateFormat()\"\n selectionMode=\"range\"\n [showIcon]=\"true\"\n [firstDayOfWeek]=\"1\"\n (onBlur)=\"onBlur()\"></p-date-picker>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ExistingProvider,\n Injector,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport {takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop';\nimport {ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {TranslatePipe, TranslateService, TranslationObject} from '@ngx-translate/core';\nimport {DropdownChangeEvent} from 'primeng/dropdown';\nimport {MultiSelect, MultiSelectBlurEvent, MultiSelectChangeEvent} from 'primeng/multiselect';\nimport {Select} from 'primeng/select';\nimport {Subject, Subscription, combineLatest, debounceTime, distinctUntilChanged, map, of, switchMap, tap} from 'rxjs';\n\nimport {\n CommonsInternalError,\n DataListParams,\n FilterMatchMode,\n ILookupDataProvider,\n LoggerService,\n toObservable as commonsToObservable,\n fromSubscribeError,\n getErrorLogLevel\n} from '@mediusinc/mng-commons/core';\nimport {InputTrimType} from '@mediusinc/mng-commons/form/api';\n\nexport const DROPDOWN_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropdownComponent),\n multi: true\n};\n\n@Component({\n selector: 'mng-dropdown',\n templateUrl: './dropdown.component.html',\n providers: [DROPDOWN_VALUE_ACCESSOR],\n imports: [TranslatePipe, FormsModule, Select, MultiSelect],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DropdownComponent implements ControlValueAccessor {\n private readonly logger = inject(LoggerService).create('DropdownComponent');\n\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly translate = inject(TranslateService);\n\n public dataProvider = input<ILookupDataProvider<any, any, any, any>>();\n public options = input<Array<any>>([]);\n public optionsTrackProperty = input<string>();\n public optionsLabelPropertyInit = input<string | undefined>(undefined, {alias: 'optionsLabelProperty'});\n public optionsLabelTranslate = input(false, {transform: booleanAttribute});\n public optionsValuePropertyInput = input<string | undefined>(undefined, {alias: 'optionsValueProperty'});\n public optionsDisabledProperty = input<string>();\n public multiselect = input(false, {transform: booleanAttribute});\n public placeholder = input<string>();\n public showClear = input(false, {transform: booleanAttribute});\n public selectFirstItemInput = input(false, {transform: booleanAttribute, alias: 'selectFirstItem'});\n public className = input<string>();\n public dropdownClassName = input<string>();\n public changeValueOnBlur = input(false, {transform: booleanAttribute});\n public loadingInput = input(false, {alias: 'loading', transform: booleanAttribute});\n public disabledInput = input(false, {alias: 'disabled', transform: booleanAttribute});\n public allowInput = input(false, {transform: booleanAttribute});\n public appendTo = input<string | null>('body');\n\n public inlineSearch = input(false, {transform: booleanAttribute});\n public searchTrim = input<InputTrimType | undefined>(undefined);\n\n public valueChange = output<any>();\n // eslint-disable-next-line @angular-eslint/no-output-native\n public blur = output<Event>();\n\n public primeSelect = viewChild(Select);\n public primeMultiselect = viewChild(MultiSelect);\n\n private _value?: any | null;\n public ngModelValue = signal<undefined | null | any>(undefined);\n\n private _loading = signal(false);\n private _disabled = signal(false);\n public loading = computed(() => this.loadingInput() || this._loading());\n public disabled = computed(() => this.disabledInput() || this._disabled());\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChangeFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedFn: any = () => {};\n\n private dataProviderService: any = null;\n public items = signal<any[]>([]);\n private firstTimeSettingItems = true;\n\n private isDropdownPanelShown = false;\n\n // used with custom input functionality\n private fetchedItems: any[] = [];\n private optionsSubscription?: Subscription;\n private customInputSubject = new Subject<string | undefined>();\n\n public optionsLabelProperty = computed(() => {\n if (this.optionsLabelTranslate()) {\n // setup translation properties\n if (this.optionsLabelPropertyInit()) {\n return `${this.optionsLabelPropertyInit()}_i18n`;\n } else if (!this.optionsLabelPropertyInit() && !this.optionsValuePropertyInput()) {\n return 'title_i18n';\n } else {\n throw new CommonsInternalError(`Invalid use with value (${this.optionsValuePropertyInput()}) and label (${this.optionsLabelPropertyInit()}) property setup.`, {\n name: 'DropdownComponentError'\n });\n }\n }\n\n return this.optionsLabelPropertyInit();\n });\n public optionsValueProperty = computed(() => {\n if (this.optionsLabelTranslate()) {\n // setup translation properties\n if (!this.optionsLabelPropertyInit() && !this.optionsValuePropertyInput()) {\n return 'value';\n } else if (!this.optionsLabelPropertyInit()) {\n throw new CommonsInternalError(`Invalid use with value (${this.optionsValuePropertyInput()}) and label (${this.optionsLabelPropertyInit()}) property setup.`, {\n name: 'DropdownComponentError'\n });\n }\n }\n\n return this.optionsValuePropertyInput();\n });\n\n public get value() {\n return this._value;\n }\n\n constructor() {\n effect(() => {\n this._value = this.ngModelValue();\n });\n\n this.customInputSubject\n .asObservable()\n .pipe(distinctUntilChanged(), debounceTime(250), takeUntilDestroyed())\n .subscribe(v => this.searchItems(v));\n\n this.fetchItems();\n\n effect(() => {\n if (this.allowInput()) {\n if (this.optionsLabelProperty() && !this.optionsValueProperty()) {\n throw new CommonsInternalError(\n `allowInput is not supported when optionsLabelProperty is defined but optionsValueProperty is missing. Set optionsValueProperty to enable allowInput.`\n );\n }\n }\n });\n }\n\n registerOnChange(fn: any): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n setTimeout(() => this._disabled.set(isDisabled));\n }\n\n writeValue(value: any): void {\n // this check is required because angular in some cases writes null value\n // before value accessor is initialized\n // if form control value is of primitive type (ex: enums) then write value is not called (we think)\n if (value == null && this._value == null) {\n return;\n }\n // write value immediately - it is important so that first select is not triggered!\n this._value = value;\n this.adjustValueOnItemsValuePropertyTypeMismatch(true);\n }\n\n onDropdownBlur(event: Event) {\n // if allowCustomInput is enabled, the input element might still be in focus with the\n // dropdown panel hidden - that's why the !this.allowCustomInput() check is needed\n if (this.isDropdownPanelShown && !this.allowInput()) {\n // ignore this blur event\n return;\n }\n const primeDropdown = this.primeSelect();\n if (this.changeValueOnBlur() && primeDropdown) {\n this.propagateValueChange(primeDropdown.value);\n }\n this.onTouchedFn();\n this.blur.emit(event);\n }\n\n onDropdownChange(event: DropdownChangeEvent) {\n if (!this.changeValueOnBlur()) {\n this.propagateValueChange(event.value);\n }\n\n if (this.allowInput()) {\n const query = typeof event.value !== 'string' || event.value.length === 0 ? undefined : this.trimValue(event.value as string);\n this.customInputSubject.next(query);\n }\n }\n\n private searchItems(query?: string) {\n if (this.inlineSearch()) {\n // no need to refetch, just set items from cached fetched items\n this.setItems(this.fetchedItems, query);\n } else {\n this.fetchItems(query);\n }\n }\n\n private fetchItems(query?: string) {\n this.optionsSubscription?.unsubscribe();\n this.optionsSubscription = combineLatest([toObservable(this.dataProvider, {injector: this.injector}), toObservable(this.options, {injector: this.injector})])\n .pipe(\n tap(() => this._loading.set(true)),\n switchMap(([dataProvider, options]) => {\n if (dataProvider) {\n if (!this.dataProviderService) {\n this.dataProviderService = dataProvider.serviceType ? this.injector.get<any>(dataProvider.serviceType) : null;\n }\n\n const params: DataListParams = {\n limit: this.allowInput() ? 10 : 50\n };\n\n const optionsLabelProperty = this.optionsLabelProperty();\n if (optionsLabelProperty) {\n params.sort = [{property: optionsLabelProperty}];\n }\n if (query != null && optionsLabelProperty) {\n params.filters = {\n [optionsLabelProperty]: {\n value: query,\n matchMode: FilterMatchMode.StartsWith\n }\n };\n }\n\n return commonsToObservable(dataProvider.lookup(params, this.dataProviderService, query));\n } else {\n return of(options ?? []);\n }\n }),\n switchMap(items => this.transformItems(items)),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe({\n next: res => {\n this.fetchedItems = res;\n this.setItems(res, query);\n this._loading.set(false);\n this.selectFirstItem(); // only selects first item if selectFirstItemInput is set accordingly\n this.adjustValueOnItemsValuePropertyTypeMismatch();\n },\n error: err => {\n this.setItems([], query);\n this._loading.set(false);\n const error = fromSubscribeError(err, 'DropdownComponentError');\n this.logger.log(error, getErrorLogLevel(error));\n }\n });\n }\n\n /**\n * Sets the items in the dropdown. If a query is provided, the items will be filtered by the query (using a 'starts with' filter).\n *\n * @param items The items to set.\n */\n private setItems(items: Array<any>, query?: string) {\n if (this.allowInput()) {\n // just validate that items are as expected in case of allowing input\n if (items.length > 0) {\n // items can either be objects (with optionsValueProperty specifying a string property) or strings\n if (typeof items[0] === 'object') {\n if (!this.optionsValueProperty()) {\n throw new CommonsInternalError(\n `allowInput is not supported when optionValueProperty is not set and the dropdown items are of type object. Set optionsValueProperty to enable allowInput.`\n );\n }\n if (typeof items[0]?.[this.optionsValueProperty()!] !== 'string') {\n throw new CommonsInternalError(`allowInput is only supported when the value property (specified with optionsValueProperty) is of type string.`);\n }\n } else if (!(typeof items[0] === 'string' && !this.optionsLabelProperty() && !this.optionsValueProperty())) {\n throw new CommonsInternalError(\n `'allowInput' is only supported for items of type string or object. For object types, ensure that the 'optionsValueProperty' is specified and represents a property of type string.`\n );\n }\n }\n }\n\n if (query && query.length > 0 && (this.inlineSearch() || this.allowInput())) {\n const queryLowerCase = query?.toLowerCase() ?? '';\n const filteredItems = items.filter(i => {\n let itemLabel = i;\n const optionsLabelProperty = this.optionsLabelProperty();\n if (optionsLabelProperty && typeof i === 'object') {\n itemLabel = i[optionsLabelProperty];\n }\n if (itemLabel == null) {\n return queryLowerCase == null || !queryLowerCase.length;\n }\n if (typeof itemLabel !== 'string') {\n itemLabel = itemLabel.toString();\n }\n return itemLabel.toLowerCase().startsWith(queryLowerCase);\n });\n this.items.set([...filteredItems]);\n } else {\n this.items.set([...items]);\n }\n }\n\n onDropdownPanelShow() {\n this.isDropdownPanelShown = true;\n }\n\n onDropdownPanelHide() {\n this.isDropdownPanelShown = false;\n }\n\n onMultiselectChange(event: MultiSelectChangeEvent) {\n if (!this.changeValueOnBlur()) {\n this.propagateValueChange(event.value);\n }\n }\n\n onMultiselectBlur(event: MultiSelectBlurEvent) {\n this.onTouchedFn();\n this.blur.emit(event.originalEvent);\n }\n\n onMultiselectPanelHide() {\n const primeMultiselect = this.primeMultiselect();\n if (this.changeValueOnBlur() && primeMultiselect) {\n this.propagateValueChange(primeMultiselect.value);\n }\n }\n\n private selectFirstItem() {\n if (this.firstTimeSettingItems && this.items().length > 0 && this.selectFirstItemInput() && !this._value) {\n const optionsValueProperty = this.optionsValueProperty();\n const value = optionsValueProperty ? this.items()[0][optionsValueProperty] : this.items()[0];\n this.ngModelValue.set(value); // set to write for input\n this.firstTimeSettingItems = false;\n this.propagateValueChange(value);\n }\n }\n\n private transformItems(items: any[]) {\n if (this.optionsLabelTranslate()) {\n const translationKeys: string[] = items.map(\n item => (typeof item === 'object' && this.optionsLabelPropertyInit() ? (item[this.optionsLabelPropertyInit() as keyof object] as string) : item) as string\n );\n\n if (translationKeys.length === 0) {\n return of([]);\n }\n\n return this.translate.stream(translationKeys).pipe(\n map((translations: TranslationObject) =>\n items.map(item => {\n if (typeof item === 'object' && this.optionsLabelPropertyInit()) {\n const label = item[this.optionsLabelPropertyInit() as keyof object] as string;\n const translation: string | undefined = translations[label];\n if (translation) {\n return {...item, [this.optionsLabelProperty()!]: translation};\n }\n return {...item};\n } else {\n const translation = translations[item];\n return {\n [this.optionsLabelProperty()!]: translation ?? item,\n [this.optionsValueProperty()!]: item\n };\n }\n })\n )\n );\n } else {\n return of(items);\n }\n }\n\n private adjustValueOnItemsValuePropertyTypeMismatch(setNgModelValue = false) {\n const optionsValueProp = this.optionsValueProperty();\n if (optionsValueProp && this._value != null && this.items().length > 0 && this.items()[0][optionsValueProp] != null) {\n if (Array.isArray(this._value)) {\n if (this._value.length > 0 && typeof this.items()[0][optionsValueProp] !== typeof this._value[0]) {\n const stringValues = this._value.map(v => v.toString());\n const selectedOptions = this.items().filter(i => i[optionsValueProp] != null && stringValues.includes(i[optionsValueProp].toString()));\n if (selectedOptions.length > 0) {\n this.ngModelValue.set(selectedOptions.map(i => i[optionsValueProp]));\n return;\n }\n }\n } else if (typeof this.items()[0][optionsValueProp] !== typeof this._value) {\n // types don't match, search and compare by string\n const selectedOption = this.items().find(i => i[optionsValueProp] != null && i[optionsValueProp].toString() === this._value.toString());\n if (selectedOption) {\n this.ngModelValue.set(selectedOption[optionsValueProp]);\n return;\n }\n }\n }\n\n if (setNgModelValue) {\n // force write to ngModelValue anyway\n this.ngModelValue.set(this._value);\n }\n }\n\n private propagateValueChange(value: any) {\n this._value = value;\n this.onChangeFn(value);\n this.valueChange.emit(value);\n }\n\n /**\n * Trims the leading and/or trailing whitespace from the given value based on the search trimming mode.\n *\n * @param value - The value to be trimmed.\n */\n private trimValue(value: string | undefined) {\n switch (this.searchTrim()) {\n case 'start':\n return value?.trimStart();\n case 'end':\n return value?.trimEnd();\n case 'both':\n return value?.trim();\n default:\n return value;\n }\n }\n}\n","@if (!multiselect()) {\n <p-select\n [(ngModel)]=\"ngModelValue\"\n [placeholder]=\"placeholder()\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [optionValue]=\"optionsValueProperty()\"\n [optionDisabled]=\"optionsDisabledProperty()\"\n [options]=\"items()\"\n [showClear]=\"showClear()\"\n [editable]=\"allowInput()\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [disabled]=\"disabled()\"\n [filter]=\"inlineSearch() && !allowInput()\"\n [filterBy]=\"optionsLabelProperty()\"\n (onBlur)=\"onDropdownBlur($event)\"\n (onChange)=\"onDropdownChange($event)\"\n (onShow)=\"onDropdownPanelShow()\"\n (onHide)=\"onDropdownPanelHide()\"\n [dropdownIcon]=\"loading() ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\n [appendTo]=\"appendTo()\">\n </p-select>\n} @else {\n <p-multiSelect\n [ngModel]=\"ngModelValue()\"\n [maxSelectedLabels]=\"1\"\n [selectedItemsLabel]=\"'mngDropdown.multiselectOverMaxDisplayLimit' | translate\"\n [placeholder]=\"placeholder()\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [optionValue]=\"optionsValueProperty()\"\n [optionDisabled]=\"optionsDisabledProperty()\"\n [options]=\"items()\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [filter]=\"true\"\n [showToggleAll]=\"false\"\n [disabled]=\"disabled()\"\n (onChange)=\"onMultiselectChange($event)\"\n (onPanelHide)=\"onMultiselectPanelHide()\"\n (onBlur)=\"onMultiselectBlur($event)\"\n appendTo=\"body\">\n </p-multiSelect>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ExistingProvider,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n forwardRef,\n inject,\n input,\n output\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n Validators\n} from '@angular/forms';\n\nimport {InputNumber} from 'primeng/inputnumber';\nimport {merge} from 'rxjs';\n\nimport {Nullable} from '@mediusinc/mng-commons/core';\n\nexport const NUMBER_RANGE_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberRangeComponent),\n multi: true\n};\n\nexport const NUMBER_RANGE_VALIDATOR: ExistingProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NumberRangeComponent),\n multi: true\n};\n\n@Component({\n selector: 'mng-number-range',\n templateUrl: './number-range.component.html',\n styleUrl: './number-range.component.css',\n providers: [NUMBER_RANGE_VALUE_ACCESSOR, NUMBER_RANGE_VALIDATOR],\n imports: [FormsModule, ReactiveFormsModule, InputNumber],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class NumberRangeComponent implements ControlValueAccessor, Validator {\n private readonly formBuilder = inject(FormBuilder);\n private readonly cdr = inject(ChangeDetectorRef);\n\n public placeholder = input<string>();\n public useGrouping = input(true, {transform: booleanAttribute});\n public minFractionDigits = input<number>();\n public maxFractionDigits = input<number>();\n public required = input(false, {transform: booleanAttribute});\n public disabled = input(false, {\n transform: booleanAttribute\n });\n public vertical = input(false, {transform: booleanAttribute});\n public keyDown = output<KeyboardEvent>();\n\n private fromToFormControl: FormGroup = this.formBuilder.group({\n from: [null, Validators.required],\n to: [null, Validators.required]\n });\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChangeFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onValidatorChangeFn: any = () => {};\n\n public get fromCtrl() {\n return this.fromToFormControl.get('from') as FormControl;\n }\n\n public get toCtrl() {\n return this.fromToFormControl.get('to') as FormControl;\n }\n\n constructor() {\n effect(() => {\n this.setDisabledState(this.disabled());\n });\n\n merge(this.fromCtrl.valueChanges, this.toCtrl.valueChanges)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.onValueChange());\n }\n\n registerOnChange(fn: any): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (isDisabled && this.fromToFormControl?.enabled) {\n this.fromToFormControl.disable();\n } else if (!isDisabled && this.fromToFormControl?.disabled) {\n this.fromToFormControl.enable();\n }\n }\n\n writeValue(obj: any): void {\n let start: number | null = null;\n let end: number | null = null;\n\n if (Array.isArray(obj)) {\n if (obj.length > 0 && (typeof obj[0] === 'string' || typeof obj[0] === 'number')) {\n start = this.toNumber(obj[0]);\n }\n if (obj.length > 1 && (typeof obj[1] === 'string' || typeof obj[1] === 'number')) {\n end = this.toNumber(obj[1]);\n }\n } else if (typeof obj === 'string' || typeof obj === 'number') {\n start = this.toNumber(obj);\n }\n\n this.fromCtrl.setValue(start, {emitEvent: false});\n this.toCtrl.setValue(end, {emitEvent: false});\n }\n\n validate(): ValidationErrors | null {\n if (!this.required()) return null;\n\n if (this.fromCtrl.hasError('required') || this.toCtrl.hasError('required')) {\n return {\n required: true\n };\n }\n\n return null;\n }\n\n onKeyDown(event: KeyboardEvent) {\n this.keyDown.emit(event);\n }\n\n onBlur() {\n this.onTouchedFn();\n }\n\n private toNumber(val: Nullable<string | number>) {\n if (val == null || typeof val === 'number') {\n return val ?? null;\n }\n val = val.replaceAll(',', '');\n const numVal = parseFloat(val);\n return isNaN(numVal) ? null : numVal;\n }\n\n private onValueChange() {\n const fromDate = this.fromCtrl.value as Date;\n const toDate = this.toCtrl.value as Date;\n this.onChangeFn([fromDate, toDate]);\n }\n}\n","<div class=\"flex gap-1\" [class.flex-col]=\"vertical()\">\n <p-inputNumber\n [formControl]=\"fromCtrl\"\n [placeholder]=\"placeholder()\"\n [useGrouping]=\"useGrouping()\"\n [minFractionDigits]=\"minFractionDigits()\"\n [maxFractionDigits]=\"maxFractionDigits()\"\n [max]=\"toCtrl.value\"\n (onKeyDown)=\"onKeyDown($event)\"\n (onBlur)=\"onBlur()\" />\n <p-inputNumber\n [formControl]=\"toCtrl\"\n [placeholder]=\"placeholder()\"\n [useGrouping]=\"useGrouping()\"\n [minFractionDigits]=\"minFractionDigits()\"\n [maxFractionDigits]=\"maxFractionDigits()\"\n [min]=\"fromCtrl.value\"\n (onKeyDown)=\"onKeyDown($event)\"\n (onBlur)=\"onBlur()\" />\n</div>\n","import {Directive, ElementRef, Renderer2, afterNextRender, inject, input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\nimport {EmptyValueType} from '@mediusinc/mng-commons/form/api';\n\n/**\n * Directive that converts empty string values to undefined or null when the input loses focus.\n * Can also be configured to leave empty strings as is.\n *\n * Usage:\n * ```html\n * <input mngInputEmptyValue=\"undefined\" />\n * ```\n *\n * @example\n * // Convert empty strings to undefined (default behavior)\n * <input mngInputEmptyValue />\n *\n * @example\n * // Convert empty strings to null\n * <input mngInputEmptyValue=\"null\" />\n *\n * @example\n * // Leave empty strings as is (no conversion)\n * <input mngInputEmptyValue=\"none\" />\n */\n@Directive({\n selector: '[mngInputEmptyValue]',\n host: {'(blur)': 'onBlur()'}\n})\nexport class InputEmptyValueDirective {\n /**\n * Input property that specifies how empty string values should be handled.\n *\n * @default 'undefined'\n */\n public mngInputEmptyValue = input<EmptyValueType>('undefined');\n\n readonly #el = inject(ElementRef);\n readonly #ngControl = inject(NgControl, {optional: true});\n readonly #renderer = inject(Renderer2);\n\n #afterNextRenderRef = afterNextRender(() => {\n const nativeElement = this.#el.nativeElement as HTMLElement;\n const inputChildElement = nativeElement.querySelector('input');\n\n if (inputChildElement) {\n this.#renderer.listen(inputChildElement, 'blur', () => this.onBlur());\n }\n });\n\n /**\n * Handler for the blur event.\n * Checks if the input value is an empty string and converts it to undefined, null, or leaves it as is\n * based on the configuration.\n */\n onBlur() {\n if (!this.#ngControl?.control) {\n return;\n }\n const value = this.#ngControl?.control.value;\n\n if (typeof value === 'string' && value.trim() === '') {\n const emptyValue = this.#getEmptyValue();\n\n // Only update the value if we're not using 'none' option (which would return '')\n if (emptyValue !== '') {\n this.#ngControl.control.setValue(emptyValue, {emitEvent: false});\n }\n }\n }\n\n /**\n * Returns the appropriate empty value based on the configuration.\n *\n * @returns undefined, null, or empty string based on the mngInputEmptyValue configuration\n */\n #getEmptyValue(): undefined | null | string {\n switch (this.mngInputEmptyValue()) {\n case 'null':\n return null;\n case 'none':\n return '';\n case 'undefined':\n default:\n return undefined;\n }\n }\n}\n","import {Directive, ElementRef, Renderer2, afterNextRender, inject, input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\nimport {InputTrimType} from '@mediusinc/mng-commons/form/api';\n\n@Directive({\n selector: '[mngInputTrim]',\n host: {'(blur)': 'onBlur()'}\n})\nexport class InputTrimDirective {\n public readonly mngInputTrim = input<InputTrimType>();\n\n readonly #el = inject(ElementRef);\n readonly #ngControl = inject(NgControl, {optional: true});\n readonly #renderer = inject(Renderer2);\n\n #inputEl: HTMLInputElement = this.#el.nativeElement as HTMLInputElement;\n\n #afterNextRenderRef = afterNextRender(() => {\n const nativeElement = this.#el.nativeElement as HTMLElement;\n const inputChildElement = nativeElement.querySelector('input');\n\n if (inputChildElement) {\n this.#inputEl = inputChildElement as HTMLInputElement;\n this.#renderer.listen(inputChildElement, 'blur', () => this.onBlur());\n }\n });\n\n protected onBlur() {\n const control = this.#ngControl?.control;\n const value = control ? control.value : this.#inputEl.value;\n let trimmedValue: string;\n\n if (typeof value === 'string') {\n trimmedValue = this.#getTrimmedValue(value);\n\n if (trimmedValue != value) {\n if (control) {\n control.setValue(trimmedValue, {emitEvent: false});\n } else {\n this.#inputEl.value = trimmedValue;\n }\n }\n }\n }\n\n #getTrimmedValue(value: string): string {\n switch (this.mngInputTrim()) {\n case 'both':\n return value.trim();\n case 'start':\n return value.trimStart();\n case 'end':\n return value.trimEnd();\n default:\n return value;\n }\n }\n}\n","// components\nexport * from './components/autocomplete/autocomplete.component';\nexport * from './components/date-range/date-range.component';\nexport * from './components/dropdown/dropdown.component';\nexport * from './components/number-range/number-range.component';\n\n// directives\nexport * from './directives/input-empty-value.directive';\nexport * from './directives/input-trim.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["toObservable","commonsToObservable","map"],"mappings":"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"}
1
+ {"version":3,"file":"mediusinc-mng-commons-form.mjs","sources":["../../form/src/components/autocomplete/autocomplete.component.ts","../../form/src/components/autocomplete/autocomplete.component.html","../../form/src/components/date-range/date-range.component.ts","../../form/src/components/date-range/date-range.component.html","../../form/src/components/dropdown/dropdown.component.ts","../../form/src/components/dropdown/dropdown.component.html","../../form/src/components/number-range/number-range.component.ts","../../form/src/components/number-range/number-range.component.html","../../form/src/directives/input-empty-value.directive.ts","../../form/src/directives/input-trim.directive.ts","../../form/src/index.ts","../../form/src/mediusinc-mng-commons-form.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ExistingProvider,\n Injector,\n OnInit,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {TranslatePipe, TranslateService, TranslationObject} from '@ngx-translate/core';\nimport {AutoComplete, AutoCompleteCompleteEvent, AutoCompleteSelectEvent, AutoCompleteUnselectEvent} from 'primeng/autocomplete';\nimport {Observable, ReplaySubject, Subscription, of, switchMap, take} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {\n CommonsInternalError,\n DataListParams,\n FilterMatchMode,\n ILookupDataProvider,\n LoggerService,\n fromSubscribeError,\n getErrorLogLevel,\n toObservable\n} from '@mediusinc/mng-commons/core';\nimport {InputTrimType} from '@mediusinc/mng-commons/form/api';\n\nexport const AUTOCOMPLETE_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutocompleteComponent),\n multi: true\n};\n\n@Component({\n selector: 'mng-autocomplete',\n templateUrl: './autocomplete.component.html',\n providers: [AUTOCOMPLETE_VALUE_ACCESSOR],\n imports: [TranslatePipe, FormsModule, AutoComplete],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AutocompleteComponent implements ControlValueAccessor, OnInit {\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly translate = inject(TranslateService);\n private readonly logger = inject(LoggerService).create('AutocompleteComponent');\n\n public dataProvider = input.required<ILookupDataProvider<any, any, any, any>>();\n public optionsTrackProperty = input<string>();\n public optionsValuePropertyInit = input<string | undefined>(undefined, {alias: 'optionsValueProperty'});\n public optionsLabelPropertyInit = input<string | undefined>(undefined, {alias: 'optionsLabelProperty'});\n public optionsLabelTranslate = input(false, {transform: booleanAttribute});\n public inlineSearch = input(false, {transform: booleanAttribute});\n public openOnFocus = input(false, {transform: booleanAttribute});\n public multiselect = input(false, {transform: booleanAttribute});\n public placeholder = input<string>();\n public className = input<string>();\n public dropdownClassName = input<string>();\n public showClear = input(false, {transform: booleanAttribute});\n public autoClear = input(false, {transform: booleanAttribute});\n public selectFirst = input(false, {transform: booleanAttribute}); //on every input field change return first given value (or null)\n public searchTrim = input<InputTrimType | undefined>(undefined);\n public disabledInput = input<boolean, unknown>(false, {transform: booleanAttribute, alias: 'disabled'});\n\n public valueChange = output<any>();\n // eslint-disable-next-line @angular-eslint/no-output-native\n public blur = output<Event>();\n\n private primeAutocomplete = viewChild(AutoComplete);\n\n private isInited = false;\n private searchSubscription: Subscription | null = null;\n private dataProviderService: any = null;\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChangeFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedFn: any = () => {};\n\n private _value?: any | null;\n private _rawValue?: any | null;\n public ngModelValue = signal<undefined | null | any>(undefined);\n\n private _disabled = signal(false);\n public disabled = computed(() => this._disabled() || this.disabledInput());\n\n public suggestions = signal<Array<any>>([]);\n private isPanelShown = false;\n private isFocused = false;\n private userSelectedItem?: any | any[];\n private queryResultCacheSubject?: ReplaySubject<any>;\n private currentQuery?: string;\n\n public optionsLabelProperty = computed(() => {\n if (this.optionsLabelTranslate()) {\n // setup translation properties\n if (this.optionsLabelPropertyInit()) {\n return `${this.optionsLabelPropertyInit()}_i18n`;\n } else if (!this.optionsLabelPropertyInit() && !this.optionsValuePropertyInit()) {\n return 'title_i18n';\n } else {\n throw new CommonsInternalError(`Invalid use with value (${this.optionsValuePropertyInit()}) and label (${this.optionsLabelPropertyInit()}) property setup.`, {\n name: 'AutocompleteComponentError'\n });\n }\n }\n\n return this.optionsLabelPropertyInit();\n });\n public optionsValueProperty = computed(() => {\n if (this.optionsLabelTranslate()) {\n // setup translation properties\n if (!this.optionsLabelPropertyInit() && !this.optionsValuePropertyInit()) {\n return 'value';\n } else if (!this.optionsLabelPropertyInit()) {\n throw new CommonsInternalError(`Invalid use with value (${this.optionsValuePropertyInit()}) and label (${this.optionsLabelPropertyInit()}) property setup.`, {\n name: 'AutocompleteComponentError'\n });\n }\n }\n\n return this.optionsValuePropertyInit();\n });\n\n public get value() {\n return this._value;\n }\n\n constructor() {\n effect(() => {\n this._value = this.convertValueWithOptionsValuePropSetting(this.ngModelValue());\n this._rawValue = this.ngModelValue();\n });\n }\n\n ngOnInit() {\n this.setItemsAndDataProvider();\n\n if (this.selectFirst() && !this._value) {\n this.onSearch(undefined, true);\n }\n }\n\n onSearch(event?: AutoCompleteCompleteEvent, isInit = false) {\n if (!this.inlineSearch()) {\n this.searchSubscription?.unsubscribe();\n }\n const optionsLabelProperty = this.optionsLabelProperty();\n const query = this.trimValue(event?.query);\n this.currentQuery = query;\n\n const params: DataListParams = {\n limit: 50\n };\n if (optionsLabelProperty) {\n params.sort = [{property: optionsLabelProperty}];\n }\n if (query && query.length > 0 && optionsLabelProperty) {\n params.filters = {\n [optionsLabelProperty]: {\n value: query,\n matchMode: FilterMatchMode.StartsWith\n }\n };\n }\n\n if (!this.queryResultCacheSubject || !this.inlineSearch()) {\n if (!this.queryResultCacheSubject) {\n this.queryResultCacheSubject = new ReplaySubject<any>(1);\n }\n this.searchSubscription = this.getLookup(params, query)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: items => {\n this.queryResultCacheSubject?.next(items);\n this.setSuggestionsFromItems(items, query);\n if (isInit && !this._value) {\n this.selectFirstItem();\n }\n },\n error: err => {\n this.setSuggestionsFromItems([], query);\n\n const error = fromSubscribeError(err, 'AutocompleteComponentError', {\n search: query,\n params: params\n });\n this.logger.log(error, getErrorLogLevel(error));\n }\n });\n } else if (this.queryResultCacheSubject) {\n this.searchSubscription = this.queryResultCacheSubject.pipe(take(1)).subscribe(result => {\n this.setSuggestionsFromItems(result, query);\n });\n }\n }\n\n private selectFirstItem() {\n if (!this.selectFirst() || this.multiselect()) return;\n\n const suggestions = this.suggestions();\n if (suggestions.length > 0 && !this.userSelectedItem) {\n this.setValue(suggestions[0]);\n } else if (!this.userSelectedItem) {\n // handles the case if the user provides an input and de-focuses the input field before suggestions are loaded or if there are no suggestions at all\n this.setValue(null);\n }\n }\n\n /**\n * Triggered by user when selecting an item from an autocomplete suggestion list.\n */\n onSelect(event: AutoCompleteSelectEvent) {\n let newValue = event.value;\n if (this.multiselect() && Array.isArray(this._rawValue) && this._rawValue.length > 0) {\n newValue = [...this._rawValue, newValue];\n } else if (this.multiselect()) {\n newValue = [newValue];\n }\n\n this.setValue(newValue, true);\n this.isFocused = false;\n }\n\n /**\n * Triggered by user when selecting an item from an autocomplete suggestion list.\n */\n onUnselect(event: AutoCompleteUnselectEvent) {\n let newValue = null;\n if (this.multiselect() && Array.isArray(this._rawValue) && this._rawValue.length > 0) {\n const cmpProp = this.optionsValueProperty() ?? this.optionsTrackProperty();\n newValue = this._rawValue.filter(i => (cmpProp ? i[cmpProp] !== event.value[cmpProp] : i !== event.value));\n } else if (this.multiselect()) {\n newValue = [];\n }\n this.setValue(newValue, true);\n this.isFocused = false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onFocus(event: Event) {\n this.isFocused = true;\n }\n\n /**\n * calls the selectFirst item anytime the input field goes out of focus and if the suggestions panel is not displayed.\n */\n onBlur(event: Event) {\n this.isFocused = false;\n const inputSearchVal = this.primeAutocomplete()?.inputEL?.nativeElement?.value;\n if (this.autoClear() && this._value != null && (inputSearchVal == null || inputSearchVal === '')) {\n this.propagateValueChange(null);\n } else if (!this.isPanelShown) {\n this.selectFirstItem();\n }\n this.onTouchedFn();\n this.blur.emit(event);\n }\n\n onShow() {\n this.isPanelShown = true;\n }\n\n /**\n * calls the selectFirst item anytime the suggestions panel is closed and input field isn't focused.\n */\n onHide() {\n this.isPanelShown = false;\n if (!this.isFocused) {\n this.selectFirstItem();\n }\n }\n\n onClear() {\n this.propagateValueChange(this.multiselect() ? [] : null);\n }\n\n registerOnChange(fn: any): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n setTimeout(() => this._disabled.set(isDisabled));\n }\n\n writeValue(value: any): void {\n this.setItemsAndDataProvider();\n\n // write value immediately - it is important so that first select is not triggered!\n this._value = value;\n\n const optionsValuePropertyInit = this.optionsValuePropertyInit();\n if (optionsValuePropertyInit && value != null && typeof value !== 'object') {\n const defaultItem: any = {[optionsValuePropertyInit]: value};\n const optionsLabelProperty = this.optionsLabelProperty();\n if (optionsLabelProperty) {\n defaultItem[optionsLabelProperty] = value;\n }\n\n const matchedItem = this.suggestions().find(i => i[optionsValuePropertyInit] === value);\n if (matchedItem) {\n this.setValueFromWrite(matchedItem);\n } else {\n this.getLookup({\n limit: 50,\n filters: {\n [optionsValuePropertyInit]: {\n value: value,\n matchMode: FilterMatchMode.Equals\n }\n }\n })\n .pipe(take(1))\n .subscribe({\n next: items => {\n let isMatch = false;\n if (items.length === 1) {\n this.setValueFromWrite(items[0]);\n isMatch = true;\n } else if (items.length > 1) {\n // for lookup data providers not using query params\n const matchedItem = items.find(i => i[optionsValuePropertyInit] === value);\n if (matchedItem) {\n this.setValueFromWrite(matchedItem);\n isMatch = true;\n }\n }\n\n if (!isMatch) {\n this.setValueFromWrite(defaultItem);\n }\n },\n error: () => {\n this.setValueFromWrite(defaultItem);\n }\n });\n }\n } else {\n this.setValueFromWrite(value);\n }\n }\n\n private setItemsAndDataProvider() {\n if (this.isInited) {\n return;\n }\n\n const dataProvider = this.dataProvider();\n this.dataProviderService = dataProvider.serviceType ? this.injector.get<any>(dataProvider.serviceType) : null;\n\n this.isInited = true;\n }\n\n private setValueFromWrite(value: any | any[] | null | undefined) {\n if (value && this.optionsLabelTranslate()) {\n value = this.i18nPopulateItems([value], this.translate.instant(this.i18nGetItemsKeys([value])))[0];\n }\n if (this.ngModelValue() == null && this._rawValue != null) {\n // value must first be set to synchronise states, then in next async cycle set to wanted null value\n this.ngModelValue.set(this._rawValue);\n setTimeout(() => {\n this.ngModelValue.set(value);\n });\n } else {\n this.ngModelValue.set(value);\n }\n }\n\n private getLookup(params: DataListParams, query?: string): Observable<Array<any>> {\n return toObservable(this.dataProvider().lookup(params, this.dataProviderService, query)).pipe(\n switchMap(items => {\n if (this.optionsLabelTranslate()) {\n const translatedItems = this.i18nGetItemsKeys(items);\n if (translatedItems.length === 0) {\n return of([]);\n }\n\n return this.translate.stream(translatedItems).pipe(map((translations: TranslationObject) => this.i18nPopulateItems(items, translations)));\n } else {\n return of(items);\n }\n })\n );\n }\n\n private i18nGetItemsKeys(items: Array<any>): Array<string> {\n return items.map(\n item => (typeof item === 'object' && this.optionsLabelPropertyInit() ? (item[this.optionsLabelPropertyInit() as keyof object] as string) : item) as string\n );\n }\n\n private i18nPopulateItems(items: Array<any>, i18nMap: TranslationObject): Array<any> {\n return items.map(item => {\n if (typeof item === 'object' && this.optionsLabelPropertyInit()) {\n const label = item[this.optionsLabelPropertyInit() as keyof object] as string;\n const translation: string | undefined = i18nMap[label];\n if (translation) {\n return {...item, [this.optionsLabelProperty()!]: translation};\n }\n return {...item};\n } else {\n const translation = i18nMap[item];\n return {\n [this.optionsLabelProperty()!]: translation ?? item,\n [this.optionsValueProperty()!]: item\n };\n }\n });\n }\n\n private setSuggestionsFromItems(items: Array<any>, query?: string) {\n if (query && query !== this.currentQuery) {\n // Skip processing to avoid outdated queries during inline search updates.\n return;\n }\n if (this.inlineSearch()) {\n const queryLowerCase = query?.toLowerCase() ?? '';\n const filteredItems = items.filter(i => {\n let itemLabel = i;\n const optionsLabelProperty = this.optionsLabelProperty();\n if (optionsLabelProperty && typeof i === 'object') {\n itemLabel = i[optionsLabelProperty];\n }\n if (itemLabel == null) {\n return queryLowerCase == null || !queryLowerCase.length;\n }\n if (typeof itemLabel !== 'string') {\n itemLabel = itemLabel.toString();\n }\n return itemLabel.toLowerCase().startsWith(queryLowerCase);\n });\n this.suggestions.set([...filteredItems]);\n this.userSelectedItem = undefined;\n } else {\n this.suggestions.set([...items]);\n this.userSelectedItem = undefined;\n }\n }\n\n /**\n * Selects and sets new value.\n *\n * @param value Represents the object value.\n * @param fromUser If set value is triggered from user.\n */\n private setValue(value: any | any[] | null | undefined, fromUser = false) {\n if (fromUser) {\n this.userSelectedItem = value;\n } else {\n this.ngModelValue.set(value);\n }\n\n this.propagateValueChange(value);\n }\n\n private trimValue(value: string | undefined) {\n switch (this.searchTrim()) {\n case 'start':\n return value?.trimStart();\n case 'end':\n return value?.trimEnd();\n case 'both':\n return value?.trim();\n default:\n return value;\n }\n }\n\n /**\n * Propagates final value to _value, on change fn and outputs.\n */\n private propagateValueChange(value: any | any[] | null | undefined) {\n this._value = this.convertValueWithOptionsValuePropSetting(value);\n this._rawValue = value;\n this.onChangeFn(this._value);\n this.valueChange.emit(this._value);\n }\n\n private convertValueWithOptionsValuePropSetting(value: any | any[] | null | undefined) {\n const optionsValueProperty = this.optionsValueProperty();\n if (!optionsValueProperty) {\n return value;\n }\n if (this.multiselect() && Array.isArray(value)) {\n return value.map((item: any) => {\n if (item && typeof item === 'object') {\n return item[optionsValueProperty];\n }\n return null;\n });\n } else if (value && typeof value === 'object') {\n return value[optionsValueProperty];\n } else {\n return value;\n }\n }\n}\n","<p-autoComplete\n [ngModel]=\"ngModelValue()\"\n [placeholder]=\"placeholder()\"\n [dropdown]=\"true\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [suggestions]=\"suggestions()\"\n [multiple]=\"multiselect()\"\n [showEmptyMessage]=\"true\"\n [emptyMessage]=\"'mngAutocomplete.noMatches' | translate\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [minLength]=\"openOnFocus() ? 0 : 1\"\n [showClear]=\"showClear()\"\n [forceSelection]=\"autoClear()\"\n [disabled]=\"disabled()\"\n [completeOnFocus]=\"openOnFocus()\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n (onUnselect)=\"onUnselect($event)\"\n (onFocus)=\"onFocus($event)\"\n (onBlur)=\"onBlur($event)\"\n (onClear)=\"onClear()\"\n (onShow)=\"onShow()\"\n (onHide)=\"onHide()\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ExistingProvider,\n Injector,\n OnInit,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n forwardRef,\n inject,\n input\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n Validators\n} from '@angular/forms';\n\nimport {DatePicker} from 'primeng/datepicker';\nimport {merge} from 'rxjs';\n\nexport const DATE_RANGE_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateRangeComponent),\n multi: true\n};\n\nexport const DATE_RANGE_VALIDATOR: ExistingProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DateRangeComponent),\n multi: true\n};\n\n@Component({\n selector: 'mng-date-range',\n templateUrl: './date-range.component.html',\n styleUrl: './date-range.component.css',\n providers: [DATE_RANGE_VALUE_ACCESSOR, DATE_RANGE_VALIDATOR],\n imports: [FormsModule, ReactiveFormsModule, DatePicker],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'className()'\n }\n})\nexport class DateRangeComponent implements OnInit, ControlValueAccessor, Validator {\n private readonly formBuilder = inject(FormBuilder);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly cdr = inject(ChangeDetectorRef);\n\n public placeholder = input<string>();\n public showTime = input(false, {transform: booleanAttribute});\n public showSeconds = input(false, {transform: booleanAttribute});\n public dateFormat = input<string>();\n public className = input<string>();\n public required = input(false, {transform: booleanAttribute});\n public disabled = input(false, {\n transform: booleanAttribute\n });\n public vertical = input(false, {transform: booleanAttribute});\n\n private fromToFormControl!: FormGroup;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChangeFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onValidatorChangeFn: any = () => {};\n\n public get fromCtrl() {\n return this.fromToFormControl.get('from') as FormControl;\n }\n\n public get toCtrl() {\n return this.fromToFormControl.get('to') as FormControl;\n }\n\n public get dateRangeCtrl() {\n return this.fromToFormControl.get('dateRange') as FormControl;\n }\n\n ngOnInit() {\n this.fromToFormControl = this.formBuilder.group({\n from: [null, Validators.required],\n to: [null, Validators.required],\n dateRange: [null, Validators.required]\n });\n\n effect(\n () => {\n this.setDisabledState(this.disabled());\n },\n {injector: this.injector}\n );\n\n merge(this.fromCtrl.valueChanges, this.toCtrl.valueChanges, this.dateRangeCtrl.valueChanges)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.onValueChange());\n }\n\n registerOnChange(fn: any): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedFn = fn;\n }\n\n registerOnValidatorChange?(fn: () => void): void {\n this.onValidatorChangeFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (isDisabled && this.fromToFormControl?.enabled) {\n this.fromToFormControl.disable();\n } else if (!isDisabled && this.fromToFormControl?.disabled) {\n this.fromToFormControl.enable();\n }\n }\n\n onBlur() {\n this.onTouchedFn();\n }\n\n writeValue(obj: any): void {\n let startDate: Date | null = null;\n let endDate: Date | null = null;\n\n if (Array.isArray(obj)) {\n if (obj.length > 0 && (obj[0] instanceof Date || typeof obj[0] === 'string' || typeof obj[0] === 'number')) {\n startDate = new Date(obj[0]);\n }\n if (obj.length > 1 && (obj[1] instanceof Date || typeof obj[1] === 'string' || typeof obj[1] === 'number')) {\n endDate = new Date(obj[1]);\n }\n } else if (obj instanceof Date || typeof obj === 'string' || typeof obj === 'number') {\n startDate = new Date(obj);\n }\n\n if (this.showTime()) {\n this.fromCtrl.setValue(startDate, {emitEvent: false});\n this.toCtrl.setValue(endDate, {emitEvent: false});\n } else if (startDate || endDate) {\n this.dateRangeCtrl.setValue([startDate, endDate], {emitEvent: false});\n } else {\n this.dateRangeCtrl.setValue(null, {emitEvent: false});\n }\n }\n\n validate(): ValidationErrors | null {\n if (!this.required()) return null;\n\n if (this.showTime()) {\n if (this.fromCtrl.hasError('required') || this.toCtrl.hasError('required')) {\n return {\n required: true\n };\n }\n } else {\n if (this.dateRangeCtrl.hasError('required')) {\n return {\n required: true\n };\n }\n }\n\n return null;\n }\n\n private onValueChange() {\n if (this.showTime()) {\n const fromDate = this.fromCtrl.value as Date;\n const toDate = this.toCtrl.value as Date;\n this.onChangeFn([fromDate, toDate]);\n } else {\n const date = this.dateRangeCtrl.value as Date[];\n this.onChangeFn(date);\n }\n }\n}\n","@if (showTime()) {\n <div class=\"flex gap-1\" [class.flex-col]=\"vertical()\">\n <p-date-picker\n appendTo=\"body\"\n [formControl]=\"fromCtrl\"\n [maxDate]=\"toCtrl.value\"\n [placeholder]=\"placeholder()\"\n [dateFormat]=\"dateFormat()\"\n [showTime]=\"true\"\n [showSeconds]=\"showSeconds()\"\n [showIcon]=\"true\"\n [firstDayOfWeek]=\"1\"\n (onBlur)=\"onBlur()\"></p-date-picker>\n <p-date-picker\n appendTo=\"body\"\n [formControl]=\"toCtrl\"\n [minDate]=\"fromCtrl.value\"\n [placeholder]=\"placeholder()\"\n [dateFormat]=\"dateFormat()\"\n [showTime]=\"true\"\n [showSeconds]=\"showSeconds()\"\n [showIcon]=\"true\"\n [firstDayOfWeek]=\"1\"\n (onBlur)=\"onBlur()\"></p-date-picker>\n </div>\n} @else {\n <p-date-picker\n appendTo=\"body\"\n [formControl]=\"dateRangeCtrl\"\n [placeholder]=\"placeholder()\"\n [dateFormat]=\"dateFormat()\"\n selectionMode=\"range\"\n [showIcon]=\"true\"\n [firstDayOfWeek]=\"1\"\n (onBlur)=\"onBlur()\"></p-date-picker>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ExistingProvider,\n Injector,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport {takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop';\nimport {ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {TranslatePipe, TranslateService, TranslationObject} from '@ngx-translate/core';\nimport {DropdownChangeEvent} from 'primeng/dropdown';\nimport {MultiSelect, MultiSelectBlurEvent, MultiSelectChangeEvent} from 'primeng/multiselect';\nimport {Select} from 'primeng/select';\nimport {Subject, Subscription, combineLatest, debounceTime, distinctUntilChanged, map, of, switchMap, tap} from 'rxjs';\n\nimport {\n CommonsInternalError,\n DataListParams,\n FilterMatchMode,\n ILookupDataProvider,\n LoggerService,\n toObservable as commonsToObservable,\n fromSubscribeError,\n getErrorLogLevel\n} from '@mediusinc/mng-commons/core';\nimport {InputTrimType} from '@mediusinc/mng-commons/form/api';\n\nexport const DROPDOWN_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropdownComponent),\n multi: true\n};\n\n@Component({\n selector: 'mng-dropdown',\n templateUrl: './dropdown.component.html',\n providers: [DROPDOWN_VALUE_ACCESSOR],\n imports: [TranslatePipe, FormsModule, Select, MultiSelect],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DropdownComponent implements ControlValueAccessor {\n private readonly logger = inject(LoggerService).create('DropdownComponent');\n\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly translate = inject(TranslateService);\n\n public dataProvider = input<ILookupDataProvider<any, any, any, any>>();\n public options = input<Array<any>>([]);\n public optionsTrackProperty = input<string>();\n public optionsLabelPropertyInit = input<string | undefined>(undefined, {alias: 'optionsLabelProperty'});\n public optionsLabelTranslate = input(false, {transform: booleanAttribute});\n public optionsValuePropertyInput = input<string | undefined>(undefined, {alias: 'optionsValueProperty'});\n public optionsDisabledProperty = input<string>();\n public multiselect = input(false, {transform: booleanAttribute});\n public placeholder = input<string>();\n public showClear = input(false, {transform: booleanAttribute});\n public selectFirstItemInput = input(false, {transform: booleanAttribute, alias: 'selectFirstItem'});\n public className = input<string>();\n public dropdownClassName = input<string>();\n public changeValueOnBlur = input(false, {transform: booleanAttribute});\n public loadingInput = input(false, {alias: 'loading', transform: booleanAttribute});\n public disabledInput = input(false, {alias: 'disabled', transform: booleanAttribute});\n public allowInput = input(false, {transform: booleanAttribute});\n public appendTo = input<string | null>('body');\n\n public inlineSearch = input(false, {transform: booleanAttribute});\n public searchTrim = input<InputTrimType | undefined>(undefined);\n\n public valueChange = output<any>();\n // eslint-disable-next-line @angular-eslint/no-output-native\n public blur = output<Event>();\n\n public primeSelect = viewChild(Select);\n public primeMultiselect = viewChild(MultiSelect);\n\n private _value?: any | null;\n public ngModelValue = signal<undefined | null | any>(undefined);\n\n private _loading = signal(false);\n private _disabled = signal(false);\n public loading = computed(() => this.loadingInput() || this._loading());\n public disabled = computed(() => this.disabledInput() || this._disabled());\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChangeFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedFn: any = () => {};\n\n private dataProviderService: any = null;\n public items = signal<any[]>([]);\n private firstTimeSettingItems = true;\n\n private isDropdownPanelShown = false;\n\n // used with custom input functionality\n private fetchedItems: any[] = [];\n private optionsSubscription?: Subscription;\n private customInputSubject = new Subject<string | undefined>();\n\n public optionsLabelProperty = computed(() => {\n if (this.optionsLabelTranslate()) {\n // setup translation properties\n if (this.optionsLabelPropertyInit()) {\n return `${this.optionsLabelPropertyInit()}_i18n`;\n } else if (!this.optionsLabelPropertyInit() && !this.optionsValuePropertyInput()) {\n return 'title_i18n';\n } else {\n throw new CommonsInternalError(`Invalid use with value (${this.optionsValuePropertyInput()}) and label (${this.optionsLabelPropertyInit()}) property setup.`, {\n name: 'DropdownComponentError'\n });\n }\n }\n\n return this.optionsLabelPropertyInit();\n });\n public optionsValueProperty = computed(() => {\n if (this.optionsLabelTranslate()) {\n // setup translation properties\n if (!this.optionsLabelPropertyInit() && !this.optionsValuePropertyInput()) {\n return 'value';\n } else if (!this.optionsLabelPropertyInit()) {\n throw new CommonsInternalError(`Invalid use with value (${this.optionsValuePropertyInput()}) and label (${this.optionsLabelPropertyInit()}) property setup.`, {\n name: 'DropdownComponentError'\n });\n }\n }\n\n return this.optionsValuePropertyInput();\n });\n\n public get value() {\n return this._value;\n }\n\n constructor() {\n effect(() => {\n this._value = this.ngModelValue();\n });\n\n this.customInputSubject\n .asObservable()\n .pipe(distinctUntilChanged(), debounceTime(250), takeUntilDestroyed())\n .subscribe(v => this.searchItems(v));\n\n this.fetchItems();\n\n effect(() => {\n if (this.allowInput()) {\n if (this.optionsLabelProperty() && !this.optionsValueProperty()) {\n throw new CommonsInternalError(\n `allowInput is not supported when optionsLabelProperty is defined but optionsValueProperty is missing. Set optionsValueProperty to enable allowInput.`\n );\n }\n }\n });\n }\n\n registerOnChange(fn: any): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n setTimeout(() => this._disabled.set(isDisabled));\n }\n\n writeValue(value: any): void {\n // this check is required because angular in some cases writes null value\n // before value accessor is initialized\n // if form control value is of primitive type (ex: enums) then write value is not called (we think)\n if (value == null && this._value == null) {\n return;\n }\n // write value immediately - it is important so that first select is not triggered!\n this._value = value;\n this.adjustValueOnItemsValuePropertyTypeMismatch(true);\n }\n\n onDropdownBlur(event: Event) {\n // if allowCustomInput is enabled, the input element might still be in focus with the\n // dropdown panel hidden - that's why the !this.allowCustomInput() check is needed\n if (this.isDropdownPanelShown && !this.allowInput()) {\n // ignore this blur event\n return;\n }\n const primeDropdown = this.primeSelect();\n if (this.changeValueOnBlur() && primeDropdown) {\n this.propagateValueChange(primeDropdown.value);\n }\n this.onTouchedFn();\n this.blur.emit(event);\n }\n\n onDropdownChange(event: DropdownChangeEvent) {\n if (!this.changeValueOnBlur()) {\n this.propagateValueChange(event.value);\n }\n\n if (this.allowInput()) {\n const query = typeof event.value !== 'string' || event.value.length === 0 ? undefined : this.trimValue(event.value as string);\n this.customInputSubject.next(query);\n }\n }\n\n private searchItems(query?: string) {\n if (this.inlineSearch()) {\n // no need to refetch, just set items from cached fetched items\n this.setItems(this.fetchedItems, query);\n } else {\n this.fetchItems(query);\n }\n }\n\n private fetchItems(query?: string) {\n this.optionsSubscription?.unsubscribe();\n this.optionsSubscription = combineLatest([toObservable(this.dataProvider, {injector: this.injector}), toObservable(this.options, {injector: this.injector})])\n .pipe(\n tap(() => this._loading.set(true)),\n switchMap(([dataProvider, options]) => {\n if (dataProvider) {\n if (!this.dataProviderService) {\n this.dataProviderService = dataProvider.serviceType ? this.injector.get<any>(dataProvider.serviceType) : null;\n }\n\n const params: DataListParams = {\n limit: this.allowInput() ? 10 : 50\n };\n\n const optionsLabelProperty = this.optionsLabelProperty();\n if (optionsLabelProperty) {\n params.sort = [{property: optionsLabelProperty}];\n }\n if (query != null && optionsLabelProperty) {\n params.filters = {\n [optionsLabelProperty]: {\n value: query,\n matchMode: FilterMatchMode.StartsWith\n }\n };\n }\n\n return commonsToObservable(dataProvider.lookup(params, this.dataProviderService, query));\n } else {\n return of(options ?? []);\n }\n }),\n switchMap(items => this.transformItems(items)),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe({\n next: res => {\n this.fetchedItems = res;\n this.setItems(res, query);\n this._loading.set(false);\n this.selectFirstItem(); // only selects first item if selectFirstItemInput is set accordingly\n this.adjustValueOnItemsValuePropertyTypeMismatch();\n },\n error: err => {\n this.setItems([], query);\n this._loading.set(false);\n const error = fromSubscribeError(err, 'DropdownComponentError');\n this.logger.log(error, getErrorLogLevel(error));\n }\n });\n }\n\n /**\n * Sets the items in the dropdown. If a query is provided, the items will be filtered by the query (using a 'starts with' filter).\n *\n * @param items The items to set.\n */\n private setItems(items: Array<any>, query?: string) {\n if (this.allowInput()) {\n // just validate that items are as expected in case of allowing input\n if (items.length > 0) {\n // items can either be objects (with optionsValueProperty specifying a string property) or strings\n if (typeof items[0] === 'object') {\n if (!this.optionsValueProperty()) {\n throw new CommonsInternalError(\n `allowInput is not supported when optionValueProperty is not set and the dropdown items are of type object. Set optionsValueProperty to enable allowInput.`\n );\n }\n if (typeof items[0]?.[this.optionsValueProperty()!] !== 'string') {\n throw new CommonsInternalError(`allowInput is only supported when the value property (specified with optionsValueProperty) is of type string.`);\n }\n } else if (!(typeof items[0] === 'string' && !this.optionsLabelProperty() && !this.optionsValueProperty())) {\n throw new CommonsInternalError(\n `'allowInput' is only supported for items of type string or object. For object types, ensure that the 'optionsValueProperty' is specified and represents a property of type string.`\n );\n }\n }\n }\n\n if (query && query.length > 0 && (this.inlineSearch() || this.allowInput())) {\n const queryLowerCase = query?.toLowerCase() ?? '';\n const filteredItems = items.filter(i => {\n let itemLabel = i;\n const optionsLabelProperty = this.optionsLabelProperty();\n if (optionsLabelProperty && typeof i === 'object') {\n itemLabel = i[optionsLabelProperty];\n }\n if (itemLabel == null) {\n return queryLowerCase == null || !queryLowerCase.length;\n }\n if (typeof itemLabel !== 'string') {\n itemLabel = itemLabel.toString();\n }\n return itemLabel.toLowerCase().startsWith(queryLowerCase);\n });\n this.items.set([...filteredItems]);\n } else {\n this.items.set([...items]);\n }\n }\n\n onDropdownPanelShow() {\n this.isDropdownPanelShown = true;\n }\n\n onDropdownPanelHide() {\n this.isDropdownPanelShown = false;\n }\n\n onMultiselectChange(event: MultiSelectChangeEvent) {\n if (!this.changeValueOnBlur()) {\n this.propagateValueChange(event.value);\n }\n }\n\n onMultiselectBlur(event: MultiSelectBlurEvent) {\n this.onTouchedFn();\n this.blur.emit(event.originalEvent);\n }\n\n onMultiselectPanelHide() {\n const primeMultiselect = this.primeMultiselect();\n if (this.changeValueOnBlur() && primeMultiselect) {\n this.propagateValueChange(primeMultiselect.value);\n }\n }\n\n private selectFirstItem() {\n if (this.firstTimeSettingItems && this.items().length > 0 && this.selectFirstItemInput() && !this._value) {\n const optionsValueProperty = this.optionsValueProperty();\n const value = optionsValueProperty ? this.items()[0][optionsValueProperty] : this.items()[0];\n this.ngModelValue.set(value); // set to write for input\n this.firstTimeSettingItems = false;\n this.propagateValueChange(value);\n }\n }\n\n private transformItems(items: any[]) {\n if (this.optionsLabelTranslate()) {\n const translationKeys: string[] = items.map(\n item => (typeof item === 'object' && this.optionsLabelPropertyInit() ? (item[this.optionsLabelPropertyInit() as keyof object] as string) : item) as string\n );\n\n if (translationKeys.length === 0) {\n return of([]);\n }\n\n return this.translate.stream(translationKeys).pipe(\n map((translations: TranslationObject) =>\n items.map(item => {\n if (typeof item === 'object' && this.optionsLabelPropertyInit()) {\n const label = item[this.optionsLabelPropertyInit() as keyof object] as string;\n const translation: string | undefined = translations[label];\n if (translation) {\n return {...item, [this.optionsLabelProperty()!]: translation};\n }\n return {...item};\n } else {\n const translation = translations[item];\n return {\n [this.optionsLabelProperty()!]: translation ?? item,\n [this.optionsValueProperty()!]: item\n };\n }\n })\n )\n );\n } else {\n return of(items);\n }\n }\n\n private adjustValueOnItemsValuePropertyTypeMismatch(setNgModelValue = false) {\n const optionsValueProp = this.optionsValueProperty();\n if (optionsValueProp && this._value != null && this.items().length > 0 && this.items()[0][optionsValueProp] != null) {\n if (Array.isArray(this._value)) {\n if (this._value.length > 0 && typeof this.items()[0][optionsValueProp] !== typeof this._value[0]) {\n const stringValues = this._value.map(v => v.toString());\n const selectedOptions = this.items().filter(i => i[optionsValueProp] != null && stringValues.includes(i[optionsValueProp].toString()));\n if (selectedOptions.length > 0) {\n this.ngModelValue.set(selectedOptions.map(i => i[optionsValueProp]));\n return;\n }\n }\n } else if (typeof this.items()[0][optionsValueProp] !== typeof this._value) {\n // types don't match, search and compare by string\n const selectedOption = this.items().find(i => i[optionsValueProp] != null && i[optionsValueProp].toString() === this._value.toString());\n if (selectedOption) {\n this.ngModelValue.set(selectedOption[optionsValueProp]);\n return;\n }\n }\n }\n\n if (setNgModelValue) {\n // force write to ngModelValue anyway\n this.ngModelValue.set(this._value);\n }\n }\n\n private propagateValueChange(value: any) {\n this._value = value;\n this.onChangeFn(value);\n this.valueChange.emit(value);\n }\n\n /**\n * Trims the leading and/or trailing whitespace from the given value based on the search trimming mode.\n *\n * @param value - The value to be trimmed.\n */\n private trimValue(value: string | undefined) {\n switch (this.searchTrim()) {\n case 'start':\n return value?.trimStart();\n case 'end':\n return value?.trimEnd();\n case 'both':\n return value?.trim();\n default:\n return value;\n }\n }\n}\n","@if (!multiselect()) {\n <p-select\n [(ngModel)]=\"ngModelValue\"\n [placeholder]=\"placeholder()\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [optionValue]=\"optionsValueProperty()\"\n [optionDisabled]=\"optionsDisabledProperty()\"\n [options]=\"items()\"\n [showClear]=\"showClear()\"\n [editable]=\"allowInput()\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [disabled]=\"disabled()\"\n [filter]=\"inlineSearch() && !allowInput()\"\n [filterBy]=\"optionsLabelProperty()\"\n (onBlur)=\"onDropdownBlur($event)\"\n (onChange)=\"onDropdownChange($event)\"\n (onShow)=\"onDropdownPanelShow()\"\n (onHide)=\"onDropdownPanelHide()\"\n [dropdownIcon]=\"loading() ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\n [appendTo]=\"appendTo()\">\n </p-select>\n} @else {\n <p-multiSelect\n [ngModel]=\"ngModelValue()\"\n [maxSelectedLabels]=\"1\"\n [selectedItemsLabel]=\"'mngDropdown.multiselectOverMaxDisplayLimit' | translate\"\n [placeholder]=\"placeholder()\"\n [dataKey]=\"optionsTrackProperty()\"\n [optionLabel]=\"optionsLabelProperty()\"\n [optionValue]=\"optionsValueProperty()\"\n [optionDisabled]=\"optionsDisabledProperty()\"\n [options]=\"items()\"\n [styleClass]=\"className()\"\n [panelStyleClass]=\"dropdownClassName()\"\n [filter]=\"true\"\n [showToggleAll]=\"false\"\n [disabled]=\"disabled()\"\n (onChange)=\"onMultiselectChange($event)\"\n (onPanelHide)=\"onMultiselectPanelHide()\"\n (onBlur)=\"onMultiselectBlur($event)\"\n appendTo=\"body\">\n </p-multiSelect>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ExistingProvider,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n forwardRef,\n inject,\n input,\n output\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n Validators\n} from '@angular/forms';\n\nimport {InputNumber} from 'primeng/inputnumber';\nimport {merge} from 'rxjs';\n\nimport {Nullable} from '@mediusinc/mng-commons/core';\n\nexport const NUMBER_RANGE_VALUE_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberRangeComponent),\n multi: true\n};\n\nexport const NUMBER_RANGE_VALIDATOR: ExistingProvider = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NumberRangeComponent),\n multi: true\n};\n\n@Component({\n selector: 'mng-number-range',\n templateUrl: './number-range.component.html',\n styleUrl: './number-range.component.css',\n providers: [NUMBER_RANGE_VALUE_ACCESSOR, NUMBER_RANGE_VALIDATOR],\n imports: [FormsModule, ReactiveFormsModule, InputNumber],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class NumberRangeComponent implements ControlValueAccessor, Validator {\n private readonly formBuilder = inject(FormBuilder);\n private readonly cdr = inject(ChangeDetectorRef);\n\n public placeholder = input<string>();\n public useGrouping = input(true, {transform: booleanAttribute});\n public minFractionDigits = input<number>();\n public maxFractionDigits = input<number>();\n public required = input(false, {transform: booleanAttribute});\n public disabled = input(false, {\n transform: booleanAttribute\n });\n public vertical = input(false, {transform: booleanAttribute});\n public keyDown = output<KeyboardEvent>();\n\n private fromToFormControl: FormGroup = this.formBuilder.group({\n from: [null, Validators.required],\n to: [null, Validators.required]\n });\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChangeFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouchedFn: any = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onValidatorChangeFn: any = () => {};\n\n public get fromCtrl() {\n return this.fromToFormControl.get('from') as FormControl;\n }\n\n public get toCtrl() {\n return this.fromToFormControl.get('to') as FormControl;\n }\n\n constructor() {\n effect(() => {\n this.setDisabledState(this.disabled());\n });\n\n merge(this.fromCtrl.valueChanges, this.toCtrl.valueChanges)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.onValueChange());\n }\n\n registerOnChange(fn: any): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n if (isDisabled && this.fromToFormControl?.enabled) {\n this.fromToFormControl.disable();\n } else if (!isDisabled && this.fromToFormControl?.disabled) {\n this.fromToFormControl.enable();\n }\n }\n\n writeValue(obj: any): void {\n let start: number | null = null;\n let end: number | null = null;\n\n if (Array.isArray(obj)) {\n if (obj.length > 0 && (typeof obj[0] === 'string' || typeof obj[0] === 'number')) {\n start = this.toNumber(obj[0]);\n }\n if (obj.length > 1 && (typeof obj[1] === 'string' || typeof obj[1] === 'number')) {\n end = this.toNumber(obj[1]);\n }\n } else if (typeof obj === 'string' || typeof obj === 'number') {\n start = this.toNumber(obj);\n }\n\n this.fromCtrl.setValue(start, {emitEvent: false});\n this.toCtrl.setValue(end, {emitEvent: false});\n }\n\n validate(): ValidationErrors | null {\n if (!this.required()) return null;\n\n if (this.fromCtrl.hasError('required') || this.toCtrl.hasError('required')) {\n return {\n required: true\n };\n }\n\n return null;\n }\n\n onKeyDown(event: KeyboardEvent) {\n this.keyDown.emit(event);\n }\n\n onBlur() {\n this.onTouchedFn();\n }\n\n private toNumber(val: Nullable<string | number>) {\n if (val == null || typeof val === 'number') {\n return val ?? null;\n }\n val = val.replaceAll(',', '');\n const numVal = parseFloat(val);\n return isNaN(numVal) ? null : numVal;\n }\n\n private onValueChange() {\n const fromDate = this.fromCtrl.value as Date;\n const toDate = this.toCtrl.value as Date;\n this.onChangeFn([fromDate, toDate]);\n }\n}\n","<div class=\"flex gap-1\" [class.flex-col]=\"vertical()\">\n <p-inputNumber\n [formControl]=\"fromCtrl\"\n [placeholder]=\"placeholder()\"\n [useGrouping]=\"useGrouping()\"\n [minFractionDigits]=\"minFractionDigits()\"\n [maxFractionDigits]=\"maxFractionDigits()\"\n [max]=\"toCtrl.value\"\n (onKeyDown)=\"onKeyDown($event)\"\n (onBlur)=\"onBlur()\" />\n <p-inputNumber\n [formControl]=\"toCtrl\"\n [placeholder]=\"placeholder()\"\n [useGrouping]=\"useGrouping()\"\n [minFractionDigits]=\"minFractionDigits()\"\n [maxFractionDigits]=\"maxFractionDigits()\"\n [min]=\"fromCtrl.value\"\n (onKeyDown)=\"onKeyDown($event)\"\n (onBlur)=\"onBlur()\" />\n</div>\n","import {Directive, ElementRef, Renderer2, afterNextRender, inject, input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\nimport {EmptyValueType} from '@mediusinc/mng-commons/form/api';\n\n/**\n * Directive that converts empty string values to undefined or null when the input loses focus.\n * Can also be configured to leave empty strings as is.\n *\n * Usage:\n * ```html\n * <input mngInputEmptyValue=\"undefined\" />\n * ```\n *\n * @example\n * // Convert empty strings to undefined (default behavior)\n * <input mngInputEmptyValue />\n *\n * @example\n * // Convert empty strings to null\n * <input mngInputEmptyValue=\"null\" />\n *\n * @example\n * // Leave empty strings as is (no conversion)\n * <input mngInputEmptyValue=\"none\" />\n */\n@Directive({\n selector: '[mngInputEmptyValue]',\n host: {'(blur)': 'onBlur()'}\n})\nexport class InputEmptyValueDirective {\n /**\n * Input property that specifies how empty string values should be handled.\n *\n * @default 'undefined'\n */\n public mngInputEmptyValue = input<EmptyValueType>('undefined');\n\n readonly #el = inject(ElementRef);\n readonly #ngControl = inject(NgControl, {optional: true});\n readonly #renderer = inject(Renderer2);\n\n #afterNextRenderRef = afterNextRender(() => {\n const nativeElement = this.#el.nativeElement as HTMLElement;\n const inputChildElement = nativeElement.querySelector('input');\n\n if (inputChildElement) {\n this.#renderer.listen(inputChildElement, 'blur', () => this.onBlur());\n }\n });\n\n /**\n * Handler for the blur event.\n * Checks if the input value is an empty string and converts it to undefined, null, or leaves it as is\n * based on the configuration.\n */\n onBlur() {\n if (!this.#ngControl?.control) {\n return;\n }\n const value = this.#ngControl?.control.value;\n\n if (typeof value === 'string' && value.trim() === '') {\n const emptyValue = this.#getEmptyValue();\n\n // Only update the value if we're not using 'none' option (which would return '')\n if (emptyValue !== '') {\n this.#ngControl.control.setValue(emptyValue, {emitEvent: false});\n }\n }\n }\n\n /**\n * Returns the appropriate empty value based on the configuration.\n *\n * @returns undefined, null, or empty string based on the mngInputEmptyValue configuration\n */\n #getEmptyValue(): undefined | null | string {\n switch (this.mngInputEmptyValue()) {\n case 'null':\n return null;\n case 'none':\n return '';\n case 'undefined':\n default:\n return undefined;\n }\n }\n}\n","import {Directive, ElementRef, Renderer2, afterNextRender, inject, input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\nimport {InputTrimType} from '@mediusinc/mng-commons/form/api';\n\n@Directive({\n selector: '[mngInputTrim]',\n host: {'(blur)': 'onBlur()'}\n})\nexport class InputTrimDirective {\n public readonly mngInputTrim = input<InputTrimType>();\n\n readonly #el = inject(ElementRef);\n readonly #ngControl = inject(NgControl, {optional: true});\n readonly #renderer = inject(Renderer2);\n\n #inputEl: HTMLInputElement = this.#el.nativeElement as HTMLInputElement;\n\n #afterNextRenderRef = afterNextRender(() => {\n const nativeElement = this.#el.nativeElement as HTMLElement;\n const inputChildElement = nativeElement.querySelector('input');\n\n if (inputChildElement) {\n this.#inputEl = inputChildElement as HTMLInputElement;\n this.#renderer.listen(inputChildElement, 'blur', () => this.onBlur());\n }\n });\n\n protected onBlur() {\n const control = this.#ngControl?.control;\n const value = control ? control.value : this.#inputEl.value;\n let trimmedValue: string;\n\n if (typeof value === 'string') {\n trimmedValue = this.#getTrimmedValue(value);\n\n if (trimmedValue != value) {\n if (control) {\n control.setValue(trimmedValue, {emitEvent: false});\n } else {\n this.#inputEl.value = trimmedValue;\n }\n }\n }\n }\n\n #getTrimmedValue(value: string): string {\n switch (this.mngInputTrim()) {\n case 'both':\n return value.trim();\n case 'start':\n return value.trimStart();\n case 'end':\n return value.trimEnd();\n default:\n return value;\n }\n }\n}\n","// components\nexport * from './components/autocomplete/autocomplete.component';\nexport * from './components/date-range/date-range.component';\nexport * from './components/dropdown/dropdown.component';\nexport * from './components/number-range/number-range.component';\n\n// directives\nexport * from './directives/input-empty-value.directive';\nexport * from './directives/input-trim.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["toObservable","commonsToObservable","map"],"mappings":"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"}