mis-crystal-design-system 18.1.4 → 18.1.5

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.
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, output, signal, effect, Component, ViewChild, ContentChild, HostListener, NgModule } from '@angular/core';
2
+ import { input, output, signal, Component, ViewChild, ContentChild, HostListener, NgModule } from '@angular/core';
3
3
  import * as i3 from '@angular/forms';
4
4
  import { UntypedFormControl, ReactiveFormsModule, FormsModule } from '@angular/forms';
5
5
  import * as i1 from '@angular/cdk/overlay';
6
6
  import { ConnectionPositionPair, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
7
7
  import { TemplatePortal } from '@angular/cdk/portal';
8
- import { tap, debounceTime, distinctUntilChanged } from 'rxjs/operators';
8
+ import { tap, debounceTime, distinctUntilChanged, filter } from 'rxjs/operators';
9
9
  import { Subject, merge } from 'rxjs';
10
10
  import * as i2 from '@angular/common';
11
11
  import { CommonModule } from '@angular/common';
@@ -230,34 +230,20 @@ class AsyncDropdownComponent {
230
230
  this.error = signal(false);
231
231
  this.openPopUpOnTab = signal(false);
232
232
  this.data = signal([]);
233
- // === Effect to handle search ===
234
- this.searchEffect = effect(() => {
235
- // Merge form control changes and manual triggers
236
- merge(this.searchInput.valueChanges.pipe(tap((val) => this.searchQueryChange.emit(val)), debounceTime(this.debounceTime()), distinctUntilChanged()), this.httpStreamTrigger).subscribe((query) => {
237
- const q = query?.trim() ?? '';
238
- if (!q || q.length < this.minInputLength()) {
239
- this.closeDropdown();
240
- return;
241
- }
242
- this.loading.set(true);
243
- this.error.set(false);
244
- // Open overlay if not yet open
245
- if (!this.overlayRef?.hasAttached()) {
246
- this.openDropdown(this.dd, this.origin.nativeElement);
247
- }
248
- // Call HTTP stream
249
- this.httpStream()(q).subscribe({
250
- next: (list) => {
251
- this.loading.set(false);
252
- this.data.set(list);
253
- },
254
- error: () => {
255
- this.loading.set(false);
256
- this.error.set(true);
257
- },
258
- });
259
- });
260
- });
233
+ /**
234
+ * Tracks the last selected value to prevent dropdown from reopening when:
235
+ * - Input regains focus after selection (showing selected value)
236
+ * - Parent component re-renders and triggers change detection
237
+ * - User hasn't actually typed a new search query
238
+ *
239
+ * This is necessary because the input serves dual purposes:
240
+ * 1. Search input (user types, triggers API calls)
241
+ * 2. Display selected value (shows what was selected)
242
+ *
243
+ * Without this, setting the input value after selection would trigger
244
+ * the search subscription, causing unwanted API calls and dropdown reopening.
245
+ */
246
+ this.lastSelectedValue = signal(null);
261
247
  this.handleControlChanges = (values) => {
262
248
  values.forEach((el) => this.selectData(el, true));
263
249
  };
@@ -267,17 +253,92 @@ class AsyncDropdownComponent {
267
253
  if (this.multi() && !this.uniqueKey()) {
268
254
  throw new Error('[uniqueKey] required in multi mode.');
269
255
  }
270
- if (this.disabled())
256
+ if (this.disabled()) {
271
257
  this.searchInput.disable();
258
+ }
259
+ /**
260
+ * Search observable pipeline with RxJS operators to filter at the source.
261
+ * This declarative approach prevents unwanted searches by filtering:
262
+ * 1. Empty queries or queries below minInputLength
263
+ * 2. Queries that match the last selected value (prevents reopening after selection)
264
+ *
265
+ * Filtering at the source is preferred over checking flags in subscribe()
266
+ * because it's more declarative, testable, and follows RxJS best practices.
267
+ */
268
+ const searchObservable = this.searchInput.valueChanges.pipe(tap((val) => this.searchQueryChange.emit(val)), debounceTime(this.debounceTime()), distinctUntilChanged(),
269
+ // Filter: Only process non-empty queries that meet minInputLength requirement
270
+ filter((query) => {
271
+ const q = query?.trim() ?? '';
272
+ if (!q || q.length < this.minInputLength()) {
273
+ // Close dropdown if query is too short
274
+ this.closeDropdown();
275
+ return false;
276
+ }
277
+ return true;
278
+ }),
279
+ // Filter: Ignore queries that match the last selected value
280
+ // This prevents dropdown from reopening when input shows selected value
281
+ filter((query) => {
282
+ const q = query?.trim() ?? '';
283
+ const lastSelected = this.lastSelectedValue();
284
+ // Allow search if no previous selection OR query is different from selected value
285
+ return !lastSelected || q !== lastSelected;
286
+ }));
287
+ /**
288
+ * Subscribe to search queries and trigger HTTP stream.
289
+ * All filtering is done in the pipe chain above, so this callback
290
+ * only handles the actual search execution.
291
+ */
292
+ this.searchSubscription = merge(searchObservable, this.httpStreamTrigger)
293
+ .pipe(
294
+ // Additional filter for httpStreamTrigger (manual refresh)
295
+ filter((query) => {
296
+ const q = query?.trim() ?? '';
297
+ // For manual triggers, still respect minInputLength and lastSelectedValue
298
+ if (!q || q.length < this.minInputLength()) {
299
+ return false;
300
+ }
301
+ const lastSelected = this.lastSelectedValue();
302
+ return !lastSelected || q !== lastSelected;
303
+ }))
304
+ .subscribe((query) => {
305
+ const q = query?.trim() ?? '';
306
+ this.loading.set(true);
307
+ this.error.set(false);
308
+ // Open overlay if not yet open
309
+ if (!this.overlayRef?.hasAttached()) {
310
+ this.openDropdown(this.dd, this.origin.nativeElement);
311
+ }
312
+ // Call HTTP stream
313
+ this.httpStream()(q).subscribe({
314
+ next: (list) => {
315
+ this.loading.set(false);
316
+ this.data.set(list);
317
+ if (!this.overlayRef?.hasAttached() && list.length > 0) {
318
+ this.openDropdown(this.dd, this.origin.nativeElement);
319
+ }
320
+ },
321
+ error: () => {
322
+ this.loading.set(false);
323
+ this.error.set(true);
324
+ },
325
+ });
326
+ });
272
327
  if (this.control()?.value) {
273
328
  this.handleControlChanges(this.control().value);
274
329
  }
275
- this.control()?.valueChanges.subscribe(this.handleControlChanges);
330
+ this.controlSubscription = this.control()?.valueChanges.subscribe(this.handleControlChanges);
331
+ // Handle searchValue input changes
332
+ if (this.searchValue()) {
333
+ this.searchInput.patchValue(this.searchValue(), { emitEvent: false });
334
+ }
276
335
  }
277
336
  ngOnChanges() {
278
- if (this.searchValue()) {
279
- this.searchInput.patchValue(this.searchValue());
337
+ // Handle searchValue changes
338
+ if (this.searchValue() !== undefined) {
339
+ this.searchInput.patchValue(this.searchValue(), { emitEvent: false });
280
340
  }
341
+ // Handle disabled changes
281
342
  if (this.disabled()) {
282
343
  this.searchInput.disable();
283
344
  }
@@ -286,6 +347,9 @@ class AsyncDropdownComponent {
286
347
  }
287
348
  }
288
349
  ngOnDestroy() {
350
+ this.searchSubscription?.unsubscribe();
351
+ this.controlSubscription?.unsubscribe();
352
+ this.httpStreamTrigger.complete();
289
353
  this.overlayRef?.dispose();
290
354
  }
291
355
  // === Methods ===
@@ -317,10 +381,12 @@ class AsyncDropdownComponent {
317
381
  width: origin.clientWidth,
318
382
  });
319
383
  this.overlayRef = this.overlay.create(configs);
320
- if (this.dropdownListWidth())
384
+ if (this.dropdownListWidth()) {
321
385
  this.overlayRef.updateSize({ width: this.dropdownListWidth() });
386
+ }
322
387
  this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));
323
388
  this.overlayRef.backdropClick().subscribe(() => this.closeDropdown());
389
+ this.opened.set(true);
324
390
  }
325
391
  closeDropdown() {
326
392
  this.opened.set(false);
@@ -337,12 +403,29 @@ class AsyncDropdownComponent {
337
403
  this.closeDropdown();
338
404
  }
339
405
  }
406
+ /**
407
+ * Handles item selection from dropdown.
408
+ *
409
+ * For single-select mode:
410
+ * - Sets input value to display selected item (standard UX pattern)
411
+ * - Stores selected value to prevent reopening dropdown on focus/change detection
412
+ * - Blurs input to prevent immediate focus-triggered searches
413
+ *
414
+ * For multi-select mode:
415
+ * - Clears input for next selection
416
+ * - Maintains focus for continuous selection
417
+ */
340
418
  selectData(item, effectedFromOutside = true) {
341
419
  if (item.disabled)
342
420
  return;
343
421
  this.itemSelected.emit(item);
344
422
  if (!this.multi()) {
345
- this.searchInput.patchValue(item[this.displayKey()], { emitEvent: false });
423
+ const selectedValue = item[this.displayKey()];
424
+ // Set input value to show selected item (standard UX - like Angular Material, etc.)
425
+ // Use emitEvent: false to prevent triggering valueChanges subscription
426
+ this.searchInput.patchValue(selectedValue, { emitEvent: false });
427
+ // Store selected value - RxJS filter will prevent reopening with same value
428
+ this.lastSelectedValue.set(selectedValue);
346
429
  this.setControlValue(item);
347
430
  }
348
431
  else {
@@ -360,6 +443,11 @@ class AsyncDropdownComponent {
360
443
  this.data.set([]);
361
444
  }
362
445
  this.closeDropdown();
446
+ // Blur input to prevent focus events from immediately triggering search
447
+ // The lastSelectedValue filter will also prevent reopening if focus occurs
448
+ if (this.inputRef?.nativeElement) {
449
+ this.inputRef.nativeElement.blur();
450
+ }
363
451
  }
364
452
  removeItem(item) {
365
453
  this.itemRemoved.emit(item);
@@ -374,12 +462,34 @@ class AsyncDropdownComponent {
374
462
  get selectedItems() {
375
463
  return Array.from(this.selections().values());
376
464
  }
465
+ /**
466
+ * Clears the input and resets selection state.
467
+ * Clearing lastSelectedValue allows new searches to proceed normally.
468
+ */
377
469
  removeInputValue() {
378
470
  this.searchInput.reset();
379
471
  this.data.set([]);
472
+ this.lastSelectedValue.set(null);
380
473
  this.clear.emit(true);
381
474
  }
475
+ /**
476
+ * Called when input receives focus.
477
+ * Only opens dropdown if:
478
+ * 1. minInputLength allows it (-1 or 0 means open on focus)
479
+ * 2. Input value doesn't match last selected value (prevents reopening after selection)
480
+ *
481
+ * This handles the case where input regains focus after selection.
482
+ * The RxJS filter in searchObservable handles valueChanges, but focus events
483
+ * need separate handling since they bypass valueChanges.
484
+ */
382
485
  defaultCall() {
486
+ const currentValue = this.searchInput.value?.trim() || '';
487
+ const lastSelected = this.lastSelectedValue();
488
+ // Don't open if value matches last selected (user hasn't typed new query)
489
+ if (lastSelected && currentValue === lastSelected) {
490
+ return;
491
+ }
492
+ // Only open on focus if minInputLength allows it
383
493
  if (this.minInputLength() === -1) {
384
494
  this.loading.set(true);
385
495
  this.httpStream()(this.searchInput.value || '').subscribe({
@@ -1 +1 @@
1
- {"version":3,"file":"mis-crystal-design-system-async-search-dropdown.mjs","sources":["../../../projects/mis-components/async-search-dropdown/async-dropdown.component.html","../../../projects/mis-components/async-search-dropdown/async-dropdown.component.ts","../../../projects/mis-components/async-search-dropdown/async-dropdown.module.ts","../../../projects/mis-components/async-search-dropdown/mis-crystal-design-system-async-search-dropdown.ts"],"sourcesContent":["<div class=\"dd-wrapper\"\n [ngClass]=\"{ opened: opened(), disabled: disabled(), readonly: readonly() }\"\n [style.width]=\"width()\"\n #ddBtn>\n \n <!-- Selected chips for multi-select -->\n <div class=\"selected-list\" *ngIf=\"multi() && selectedItems.length > 0\">\n <div class=\"chip\"\n [ngClass]=\"{ 'chip-md': size() === 'md', 'chip-sm': size() === 'sm' }\"\n *ngFor=\"let item of selectedItems\">\n <span [ngClass]=\"{ 'h6': size() === 'md', 'h8-b': size() === 'sm' }\"\n style=\"margin-right: 4px;\">\n {{ item[displayKey()] }}\n </span>\n <span class=\"icon-ic-navigation-cancel-24\"\n [ngStyle]=\"{ cursor: 'pointer', 'font-size': size() === 'sm' ? '12px' : '14px' }\"\n tabindex=\"0\"\n (click)=\"removeItem(item)\"\n (keyup.enter)=\"removeItem(item)\">\n </span>\n </div>\n </div>\n\n <!-- Search input -->\n <div class=\"search-input\">\n <!-- Placeholder icon -->\n <div *ngIf=\"customPlaceholderIcon(); else defaultSearchIcon\" class=\"custom-icon\">\n <img [src]=\"customPlaceholderIcon()\" alt=\"customIcon\" />\n </div>\n <ng-template #defaultSearchIcon>\n <span class=\"icon-ic-action-search-24\"></span>\n </ng-template>\n\n <!-- Input field -->\n <input [ngClass]=\"{ 'ip-md': size() === 'md', 'ip-sm': size() === 'sm' }\"\n [placeholder]=\"placeholder()\"\n [formControl]=\"searchInput\"\n [attr.tabindex]=\"0\"\n type=\"text\"\n class=\"black-text h6\"\n #input\n (focus)=\"defaultCall()\"\n (keyup.enter)=\"enablePopUpOnTab()\"\n (copy)=\"disableCopyPaste() ? false : true\"\n (paste)=\"disableCopyPaste() ? false : true\"\n (cut)=\"disableCopyPaste() ? false : true\"/>\n\n <!-- Clear input -->\n <div class=\"icon-ic-navigation-cancel-24 croos-icon\"\n *ngIf=\"searchInput.value?.length\"\n tabindex=\"0\"\n (click)=\"removeInputValue()\"\n (keyup.enter)=\"removeInputValue()\">\n </div>\n </div>\n</div>\n\n<!-- Dropdown template -->\n<ng-template #dd>\n <div class=\"dd-list\"\n [ngStyle]=\"{ 'max-height': height(), 'width': dropdownListWidth() }\"\n [ngClass]=\"{ 'dd-list-pd': data().length === 0 }\"\n tabindex=\"0\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"openPopUpOnTab()\">\n\n <!-- Loader -->\n <ng-container *ngIf=\"loading()\">\n <ng-container *ngIf=\"customLoader; else defaultLoader\" [ngTemplateOutlet]=\"customLoader\"></ng-container>\n <ng-template #defaultLoader>\n <div class=\"status-container\" *ngIf=\"loading() && !customLoader\">\n <mis-loader [mobileView]=\"true\"></mis-loader>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Error -->\n <ng-container *ngIf=\"error()\">\n <div class=\"status-container\">\n <p>Unknown error has occurred, <br/> Please try again later.</p>\n </div>\n </ng-container>\n\n <!-- Data list -->\n <div *ngIf=\"!loading() && !error() && data().length > 0\">\n <ng-container *ngFor=\"let item of data()\">\n <div (click)=\"selectData(item, false)\" (keyup.enter)=\"selectData(item, false)\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n\n <!-- Custom item -->\n <ng-container *ngIf=\"customItem; else standardItem\">\n <ng-container [ngTemplateOutlet]=\"customItem\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-container>\n\n <!-- Standard item -->\n <ng-template #standardItem>\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div class=\"item\"\n [tabindex]=\"openPopUpOnTab() ? 0 : -1\"\n (click)=\"selectData(item, false)\"\n (keyup.enter)=\"selectData(item, false)\">\n <div class=\"value\">\n <div class=\"primary\">{{ item[displayKey()] }}</div>\n <div class=\"secondary\">{{ item[secondaryDisplayKey()] }}</div>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </div>\n\n <!-- No data -->\n <div *ngIf=\"!loading() && !error() && data().length === 0 && searchInput.value\">\n <div class=\"data-not-found\">No Data Available</div>\n </div>\n </div>\n</ng-template>\n","import {\n Component,\n ContentChild,\n ElementRef,\n HostListener,\n Injector,\n NgZone,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport {\n Overlay,\n OverlayConfig,\n OverlayRef,\n ConnectionPositionPair,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { signal, effect, input, output } from '@angular/core';\nimport { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\nimport { merge, Subject } from 'rxjs';\n\ntype IListData = any;\n\n@Component({\n selector: 'mis-async-search-dropdown',\n templateUrl: './async-dropdown.component.html',\n styleUrls: ['./async-dropdown.component.scss'],\n})\nexport class AsyncDropdownComponent {\n constructor(\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private _ngZone: NgZone,\n private injector: Injector\n ) {}\n\n // === Inputs ===\n height = input<string>();\n width = input<string>();\n size = input<'md' | 'sm'>('md');\n httpStream = input.required<(searchKey: string) => any>();\n displayKey = input<any>();\n secondaryDisplayKey = input<string>('');\n placeholder = input('Select');\n debounceTime = input(400);\n minInputLength = input(2);\n multi = input(false);\n uniqueKey = input<string>();\n control = input<AbstractControl | null>(null);\n disabled = input(false);\n readonly = input(false);\n disableCopyPaste = input(false);\n dropdownListWidth = input<string>();\n dropdownListPosition = input<'Left' | 'Right'>('Left');\n customPlaceholderIcon = input<string>('');\n selections = input<Map<string, any>>(new Map());\n searchValue = input<any>();\n\n // === Outputs ===\n onSelect = output<IListData | IListData[]>();\n searchQueryChange = output<string>();\n clear = output<boolean>();\n itemSelected = output<IListData>();\n itemRemoved = output<IListData>();\n\n // === Template Refs ===\n @ViewChild('ddBtn', { static: false }) origin!: ElementRef;\n @ViewChild('input', { static: false }) inputRef!: ElementRef;\n @ViewChild('dd', { static: false }) dd!: TemplateRef<Element>;\n @ContentChild('misCustomItem', { static: false }) customItem!: TemplateRef<Element>;\n @ContentChild('asyncCustomLoader', { static: false }) customLoader!: TemplateRef<Element>;\n\n // === Internal state ===\n searchInput: UntypedFormControl = new UntypedFormControl();\n private httpStreamTrigger = new Subject<string>();\n private overlayRef?: OverlayRef;\n\n // === Signals ===\n opened = signal(false);\n loading = signal(false);\n error = signal(false);\n openPopUpOnTab = signal(false);\n data = signal<IListData[]>([]);\n\n // === Effect to handle search ===\n private searchEffect = effect(() => {\n // Merge form control changes and manual triggers\n merge(\n this.searchInput.valueChanges.pipe(\n tap((val) => this.searchQueryChange.emit(val)),\n debounceTime(this.debounceTime()),\n distinctUntilChanged()\n ),\n this.httpStreamTrigger\n ).subscribe((query: string) => {\n const q = query?.trim() ?? '';\n if (!q || q.length < this.minInputLength()) {\n this.closeDropdown();\n return;\n }\n\n this.loading.set(true);\n this.error.set(false);\n\n // Open overlay if not yet open\n if (!this.overlayRef?.hasAttached()) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n\n // Call HTTP stream\n this.httpStream()(q).subscribe({\n next: (list: IListData[]) => {\n this.loading.set(false);\n this.data.set(list);\n },\n error: () => {\n this.loading.set(false);\n this.error.set(true);\n },\n });\n });\n });\n\n // === Lifecycle ===\n ngOnInit() {\n if (this.multi() && !this.uniqueKey()) {\n throw new Error('[uniqueKey] required in multi mode.');\n }\n\n if (this.disabled()) this.searchInput.disable();\n\n if (this.control()?.value) {\n this.handleControlChanges(this.control()!.value);\n }\n\n this.control()?.valueChanges.subscribe(this.handleControlChanges);\n }\n\n ngOnChanges() {\n if (this.searchValue()) {\n this.searchInput.patchValue(this.searchValue());\n }\n if (this.disabled()) {\n this.searchInput.disable();\n } else {\n this.searchInput.enable();\n }\n }\n\n ngOnDestroy() {\n this.overlayRef?.dispose();\n }\n\n // === Methods ===\n refreshHttpStream(query: string) {\n this.httpStreamTrigger.next(query);\n }\n\n private handleControlChanges = (values: IListData[]) => {\n values.forEach((el) => this.selectData(el, true));\n };\n\n private openDropdown(template: TemplateRef<Element>, origin: HTMLElement) {\n const positionsBottom = [\n new ConnectionPositionPair(\n { originX: 'start', originY: 'bottom' },\n { overlayX: 'start', overlayY: 'top' },\n 0,\n 4\n ),\n new ConnectionPositionPair(\n { originX: 'end', originY: 'bottom' },\n { overlayX: 'end', overlayY: 'top' },\n 0,\n 4\n ),\n ];\n const positionsTop = [\n new ConnectionPositionPair(\n { originX: 'start', originY: 'top' },\n { overlayX: 'start', overlayY: 'bottom' },\n 0,\n -4\n ),\n new ConnectionPositionPair(\n { originX: 'end', originY: 'top' },\n { overlayX: 'end', overlayY: 'bottom' },\n 0,\n -4\n ),\n ];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(origin)\n .withPositions([\n ...(this.dropdownListPosition() === 'Right' ? positionsBottom.reverse() : positionsBottom),\n ...(this.dropdownListPosition() === 'Right' ? positionsTop.reverse() : positionsTop),\n ])\n .withPush(true);\n\n const configs = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n positionStrategy,\n width: origin.clientWidth,\n });\n\n this.overlayRef = this.overlay.create(configs);\n if (this.dropdownListWidth()) this.overlayRef.updateSize({ width: this.dropdownListWidth() });\n\n this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));\n this.overlayRef.backdropClick().subscribe(() => this.closeDropdown());\n }\n\n closeDropdown() {\n this.opened.set(false);\n this.openPopUpOnTab.set(false);\n this.overlayRef?.detach();\n this.data.set([]);\n }\n\n enablePopUpOnTab() {\n this.openPopUpOnTab.set(true);\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.searchInput.reset();\n this.closeDropdown();\n }\n }\n\n selectData(item: IListData, effectedFromOutside = true) {\n if (item.disabled) return;\n\n this.itemSelected.emit(item);\n\n if (!this.multi()) {\n this.searchInput.patchValue(item[this.displayKey()], { emitEvent: false });\n this.setControlValue(item);\n } else {\n if (!this.selections().has(item[this.uniqueKey()])) {\n this.selections().set(item[this.uniqueKey()], item);\n }\n this.setControlValue(this.selectedItems);\n if (!effectedFromOutside) {\n setTimeout(() => {\n this.inputRef.nativeElement.focus();\n this.inputRef.nativeElement.scrollIntoView();\n }, 10);\n }\n this.searchInput.patchValue('');\n this.data.set([]);\n }\n this.closeDropdown();\n }\n\n removeItem(item: IListData) {\n this.itemRemoved.emit(item);\n this.selections().delete(item[this.uniqueKey()]);\n this.setControlValue(this.selectedItems);\n this.inputRef.nativeElement.focus();\n }\n\n private setControlValue(value: IListData | IListData[]) {\n this.onSelect.emit(value);\n this.control()?.patchValue(value, { emitEvent: false });\n }\n\n get selectedItems() {\n return Array.from(this.selections().values());\n }\n\n removeInputValue() {\n this.searchInput.reset();\n this.data.set([]);\n this.clear.emit(true);\n }\n\n defaultCall() {\n if (this.minInputLength() === -1) {\n this.loading.set(true);\n this.httpStream()(this.searchInput.value || '').subscribe({\n next: (list: IListData[]) => {\n this.loading.set(false);\n this.data.set(list);\n if (!this.overlayRef?.hasAttached() && list.length > 0) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set(true);\n },\n });\n }\n }\n}\n","import { OverlayModule } from \"@angular/cdk/overlay\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { LoaderModule } from \"mis-crystal-design-system/loader\";\nimport { AsyncDropdownComponent } from \"./async-dropdown.component\";\nimport { A11yModule } from \"@angular/cdk/a11y\";\n\n@NgModule({\n declarations: [AsyncDropdownComponent],\n imports: [CommonModule, OverlayModule, ReactiveFormsModule, FormsModule, LoaderModule, A11yModule],\n exports: [AsyncDropdownComponent]\n})\nexport class AsyncDropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mis-crystal-design-system-async-search-dropdown.mjs","sources":["../../../projects/mis-components/async-search-dropdown/async-dropdown.component.html","../../../projects/mis-components/async-search-dropdown/async-dropdown.component.ts","../../../projects/mis-components/async-search-dropdown/async-dropdown.module.ts","../../../projects/mis-components/async-search-dropdown/mis-crystal-design-system-async-search-dropdown.ts"],"sourcesContent":["<div class=\"dd-wrapper\"\n [ngClass]=\"{ opened: opened(), disabled: disabled(), readonly: readonly() }\"\n [style.width]=\"width()\"\n #ddBtn>\n \n <!-- Selected chips for multi-select -->\n <div class=\"selected-list\" *ngIf=\"multi() && selectedItems.length > 0\">\n <div class=\"chip\"\n [ngClass]=\"{ 'chip-md': size() === 'md', 'chip-sm': size() === 'sm' }\"\n *ngFor=\"let item of selectedItems\">\n <span [ngClass]=\"{ 'h6': size() === 'md', 'h8-b': size() === 'sm' }\"\n style=\"margin-right: 4px;\">\n {{ item[displayKey()] }}\n </span>\n <span class=\"icon-ic-navigation-cancel-24\"\n [ngStyle]=\"{ cursor: 'pointer', 'font-size': size() === 'sm' ? '12px' : '14px' }\"\n tabindex=\"0\"\n (click)=\"removeItem(item)\"\n (keyup.enter)=\"removeItem(item)\">\n </span>\n </div>\n </div>\n\n <!-- Search input -->\n <div class=\"search-input\">\n <!-- Placeholder icon -->\n <div *ngIf=\"customPlaceholderIcon(); else defaultSearchIcon\" class=\"custom-icon\">\n <img [src]=\"customPlaceholderIcon()\" alt=\"customIcon\" />\n </div>\n <ng-template #defaultSearchIcon>\n <span class=\"icon-ic-action-search-24\"></span>\n </ng-template>\n\n <!-- Input field -->\n <input [ngClass]=\"{ 'ip-md': size() === 'md', 'ip-sm': size() === 'sm' }\"\n [placeholder]=\"placeholder()\"\n [formControl]=\"searchInput\"\n [attr.tabindex]=\"0\"\n type=\"text\"\n class=\"black-text h6\"\n #input\n (focus)=\"defaultCall()\"\n (keyup.enter)=\"enablePopUpOnTab()\"\n (copy)=\"disableCopyPaste() ? false : true\"\n (paste)=\"disableCopyPaste() ? false : true\"\n (cut)=\"disableCopyPaste() ? false : true\"/>\n\n <!-- Clear input -->\n <div class=\"icon-ic-navigation-cancel-24 croos-icon\"\n *ngIf=\"searchInput.value?.length\"\n tabindex=\"0\"\n (click)=\"removeInputValue()\"\n (keyup.enter)=\"removeInputValue()\">\n </div>\n </div>\n</div>\n\n<!-- Dropdown template -->\n<ng-template #dd>\n <div class=\"dd-list\"\n [ngStyle]=\"{ 'max-height': height(), 'width': dropdownListWidth() }\"\n [ngClass]=\"{ 'dd-list-pd': data().length === 0 }\"\n tabindex=\"0\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"openPopUpOnTab()\">\n\n <!-- Loader -->\n <ng-container *ngIf=\"loading()\">\n <ng-container *ngIf=\"customLoader; else defaultLoader\" [ngTemplateOutlet]=\"customLoader\"></ng-container>\n <ng-template #defaultLoader>\n <div class=\"status-container\" *ngIf=\"loading() && !customLoader\">\n <mis-loader [mobileView]=\"true\"></mis-loader>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Error -->\n <ng-container *ngIf=\"error()\">\n <div class=\"status-container\">\n <p>Unknown error has occurred, <br/> Please try again later.</p>\n </div>\n </ng-container>\n\n <!-- Data list -->\n <div *ngIf=\"!loading() && !error() && data().length > 0\">\n <ng-container *ngFor=\"let item of data()\">\n <div (click)=\"selectData(item, false)\" (keyup.enter)=\"selectData(item, false)\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n\n <!-- Custom item -->\n <ng-container *ngIf=\"customItem; else standardItem\">\n <ng-container [ngTemplateOutlet]=\"customItem\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-container>\n\n <!-- Standard item -->\n <ng-template #standardItem>\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div class=\"item\"\n [tabindex]=\"openPopUpOnTab() ? 0 : -1\"\n (click)=\"selectData(item, false)\"\n (keyup.enter)=\"selectData(item, false)\">\n <div class=\"value\">\n <div class=\"primary\">{{ item[displayKey()] }}</div>\n <div class=\"secondary\">{{ item[secondaryDisplayKey()] }}</div>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </div>\n\n <!-- No data -->\n <div *ngIf=\"!loading() && !error() && data().length === 0 && searchInput.value\">\n <div class=\"data-not-found\">No Data Available</div>\n </div>\n </div>\n</ng-template>\n","import {\n Component,\n ContentChild,\n ElementRef,\n HostListener,\n Injector,\n NgZone,\n OnInit,\n OnDestroy,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport {\n Overlay,\n OverlayConfig,\n OverlayRef,\n ConnectionPositionPair,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { signal, input, output } from '@angular/core';\nimport { debounceTime, distinctUntilChanged, tap, filter } from 'rxjs/operators';\nimport { merge, Subject, Subscription } from 'rxjs';\n\ntype IListData = any;\n\n@Component({\n selector: 'mis-async-search-dropdown',\n templateUrl: './async-dropdown.component.html',\n styleUrls: ['./async-dropdown.component.scss'],\n})\nexport class AsyncDropdownComponent implements OnInit, OnDestroy {\n constructor(\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private _ngZone: NgZone,\n private injector: Injector\n ) {}\n\n // === Inputs ===\n height = input<string>();\n width = input<string>();\n size = input<'md' | 'sm'>('md');\n httpStream = input.required<(searchKey: string) => any>();\n displayKey = input<any>();\n secondaryDisplayKey = input<string>('');\n placeholder = input('Select');\n debounceTime = input(400);\n minInputLength = input(2);\n multi = input(false);\n uniqueKey = input<string>();\n control = input<AbstractControl | null>(null);\n disabled = input(false);\n readonly = input(false);\n disableCopyPaste = input(false);\n dropdownListWidth = input<string>();\n dropdownListPosition = input<'Left' | 'Right'>('Left');\n customPlaceholderIcon = input<string>('');\n selections = input<Map<string, any>>(new Map());\n searchValue = input<any>();\n\n // === Outputs ===\n onSelect = output<IListData | IListData[]>();\n searchQueryChange = output<string>();\n clear = output<boolean>();\n itemSelected = output<IListData>();\n itemRemoved = output<IListData>();\n\n // === Template Refs ===\n @ViewChild('ddBtn', { static: false }) origin!: ElementRef;\n @ViewChild('input', { static: false }) inputRef!: ElementRef;\n @ViewChild('dd', { static: false }) dd!: TemplateRef<Element>;\n @ContentChild('misCustomItem', { static: false }) customItem!: TemplateRef<Element>;\n @ContentChild('asyncCustomLoader', { static: false }) customLoader!: TemplateRef<Element>;\n\n // === Internal state ===\n searchInput: UntypedFormControl = new UntypedFormControl();\n private httpStreamTrigger = new Subject<string>();\n private overlayRef?: OverlayRef;\n private searchSubscription?: Subscription;\n private controlSubscription?: Subscription;\n\n // === Signals ===\n opened = signal(false);\n loading = signal(false);\n error = signal(false);\n openPopUpOnTab = signal(false);\n data = signal<IListData[]>([]);\n \n /**\n * Tracks the last selected value to prevent dropdown from reopening when:\n * - Input regains focus after selection (showing selected value)\n * - Parent component re-renders and triggers change detection\n * - User hasn't actually typed a new search query\n * \n * This is necessary because the input serves dual purposes:\n * 1. Search input (user types, triggers API calls)\n * 2. Display selected value (shows what was selected)\n * \n * Without this, setting the input value after selection would trigger\n * the search subscription, causing unwanted API calls and dropdown reopening.\n */\n private lastSelectedValue = signal<string | null>(null);\n\n // === Lifecycle ===\n ngOnInit() {\n if (this.multi() && !this.uniqueKey()) {\n throw new Error('[uniqueKey] required in multi mode.');\n }\n\n if (this.disabled()) {\n this.searchInput.disable();\n }\n\n /**\n * Search observable pipeline with RxJS operators to filter at the source.\n * This declarative approach prevents unwanted searches by filtering:\n * 1. Empty queries or queries below minInputLength\n * 2. Queries that match the last selected value (prevents reopening after selection)\n * \n * Filtering at the source is preferred over checking flags in subscribe()\n * because it's more declarative, testable, and follows RxJS best practices.\n */\n const searchObservable = this.searchInput.valueChanges.pipe(\n tap((val) => this.searchQueryChange.emit(val)),\n debounceTime(this.debounceTime()),\n distinctUntilChanged(),\n // Filter: Only process non-empty queries that meet minInputLength requirement\n filter((query: string) => {\n const q = query?.trim() ?? '';\n if (!q || q.length < this.minInputLength()) {\n // Close dropdown if query is too short\n this.closeDropdown();\n return false;\n }\n return true;\n }),\n // Filter: Ignore queries that match the last selected value\n // This prevents dropdown from reopening when input shows selected value\n filter((query: string) => {\n const q = query?.trim() ?? '';\n const lastSelected = this.lastSelectedValue();\n // Allow search if no previous selection OR query is different from selected value\n return !lastSelected || q !== lastSelected;\n })\n );\n\n /**\n * Subscribe to search queries and trigger HTTP stream.\n * All filtering is done in the pipe chain above, so this callback\n * only handles the actual search execution.\n */\n this.searchSubscription = merge(searchObservable, this.httpStreamTrigger)\n .pipe(\n // Additional filter for httpStreamTrigger (manual refresh)\n filter((query: string) => {\n const q = query?.trim() ?? '';\n // For manual triggers, still respect minInputLength and lastSelectedValue\n if (!q || q.length < this.minInputLength()) {\n return false;\n }\n const lastSelected = this.lastSelectedValue();\n return !lastSelected || q !== lastSelected;\n })\n )\n .subscribe((query: string) => {\n const q = query?.trim() ?? '';\n \n this.loading.set(true);\n this.error.set(false);\n\n // Open overlay if not yet open\n if (!this.overlayRef?.hasAttached()) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n\n // Call HTTP stream\n this.httpStream()(q).subscribe({\n next: (list: IListData[]) => {\n this.loading.set(false);\n this.data.set(list);\n if (!this.overlayRef?.hasAttached() && list.length > 0) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set(true);\n },\n });\n });\n\n if (this.control()?.value) {\n this.handleControlChanges(this.control()!.value);\n }\n\n this.controlSubscription = this.control()?.valueChanges.subscribe(\n this.handleControlChanges\n );\n\n // Handle searchValue input changes\n if (this.searchValue()) {\n this.searchInput.patchValue(this.searchValue(), { emitEvent: false });\n }\n }\n\n ngOnChanges() {\n // Handle searchValue changes\n if (this.searchValue() !== undefined) {\n this.searchInput.patchValue(this.searchValue(), { emitEvent: false });\n }\n\n // Handle disabled changes\n if (this.disabled()) {\n this.searchInput.disable();\n } else {\n this.searchInput.enable();\n }\n }\n\n ngOnDestroy() {\n this.searchSubscription?.unsubscribe();\n this.controlSubscription?.unsubscribe();\n this.httpStreamTrigger.complete();\n this.overlayRef?.dispose();\n }\n\n // === Methods ===\n refreshHttpStream(query: string) {\n this.httpStreamTrigger.next(query);\n }\n\n private handleControlChanges = (values: IListData[]) => {\n values.forEach((el) => this.selectData(el, true));\n };\n\n private openDropdown(template: TemplateRef<Element>, origin: HTMLElement) {\n const positionsBottom = [\n new ConnectionPositionPair(\n { originX: 'start', originY: 'bottom' },\n { overlayX: 'start', overlayY: 'top' },\n 0,\n 4\n ),\n new ConnectionPositionPair(\n { originX: 'end', originY: 'bottom' },\n { overlayX: 'end', overlayY: 'top' },\n 0,\n 4\n ),\n ];\n const positionsTop = [\n new ConnectionPositionPair(\n { originX: 'start', originY: 'top' },\n { overlayX: 'start', overlayY: 'bottom' },\n 0,\n -4\n ),\n new ConnectionPositionPair(\n { originX: 'end', originY: 'top' },\n { overlayX: 'end', overlayY: 'bottom' },\n 0,\n -4\n ),\n ];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(origin)\n .withPositions([\n ...(this.dropdownListPosition() === 'Right' ? positionsBottom.reverse() : positionsBottom),\n ...(this.dropdownListPosition() === 'Right' ? positionsTop.reverse() : positionsTop),\n ])\n .withPush(true);\n\n const configs = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n positionStrategy,\n width: origin.clientWidth,\n });\n\n this.overlayRef = this.overlay.create(configs);\n if (this.dropdownListWidth()) {\n this.overlayRef.updateSize({ width: this.dropdownListWidth() });\n }\n\n this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));\n this.overlayRef.backdropClick().subscribe(() => this.closeDropdown());\n this.opened.set(true);\n }\n\n closeDropdown() {\n this.opened.set(false);\n this.openPopUpOnTab.set(false);\n this.overlayRef?.detach();\n this.data.set([]);\n }\n\n enablePopUpOnTab() {\n this.openPopUpOnTab.set(true);\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.searchInput.reset();\n this.closeDropdown();\n }\n }\n\n /**\n * Handles item selection from dropdown.\n * \n * For single-select mode:\n * - Sets input value to display selected item (standard UX pattern)\n * - Stores selected value to prevent reopening dropdown on focus/change detection\n * - Blurs input to prevent immediate focus-triggered searches\n * \n * For multi-select mode:\n * - Clears input for next selection\n * - Maintains focus for continuous selection\n */\n selectData(item: IListData, effectedFromOutside = true) {\n if (item.disabled) return;\n\n this.itemSelected.emit(item);\n\n if (!this.multi()) {\n const selectedValue = item[this.displayKey()];\n // Set input value to show selected item (standard UX - like Angular Material, etc.)\n // Use emitEvent: false to prevent triggering valueChanges subscription\n this.searchInput.patchValue(selectedValue, { emitEvent: false });\n \n // Store selected value - RxJS filter will prevent reopening with same value\n this.lastSelectedValue.set(selectedValue);\n this.setControlValue(item);\n } else {\n if (!this.selections().has(item[this.uniqueKey()!])) {\n this.selections().set(item[this.uniqueKey()!], item);\n }\n this.setControlValue(this.selectedItems);\n if (!effectedFromOutside) {\n setTimeout(() => {\n this.inputRef.nativeElement.focus();\n this.inputRef.nativeElement.scrollIntoView();\n }, 10);\n }\n this.searchInput.patchValue('');\n this.data.set([]);\n }\n\n this.closeDropdown();\n\n // Blur input to prevent focus events from immediately triggering search\n // The lastSelectedValue filter will also prevent reopening if focus occurs\n if (this.inputRef?.nativeElement) {\n this.inputRef.nativeElement.blur();\n }\n }\n\n removeItem(item: IListData) {\n this.itemRemoved.emit(item);\n this.selections().delete(item[this.uniqueKey()!]);\n this.setControlValue(this.selectedItems);\n this.inputRef.nativeElement.focus();\n }\n\n private setControlValue(value: IListData | IListData[]) {\n this.onSelect.emit(value);\n this.control()?.patchValue(value, { emitEvent: false });\n }\n\n get selectedItems() {\n return Array.from(this.selections().values());\n }\n\n /**\n * Clears the input and resets selection state.\n * Clearing lastSelectedValue allows new searches to proceed normally.\n */\n removeInputValue() {\n this.searchInput.reset();\n this.data.set([]);\n this.lastSelectedValue.set(null);\n this.clear.emit(true);\n }\n\n /**\n * Called when input receives focus.\n * Only opens dropdown if:\n * 1. minInputLength allows it (-1 or 0 means open on focus)\n * 2. Input value doesn't match last selected value (prevents reopening after selection)\n * \n * This handles the case where input regains focus after selection.\n * The RxJS filter in searchObservable handles valueChanges, but focus events\n * need separate handling since they bypass valueChanges.\n */\n defaultCall() {\n const currentValue = this.searchInput.value?.trim() || '';\n const lastSelected = this.lastSelectedValue();\n \n // Don't open if value matches last selected (user hasn't typed new query)\n if (lastSelected && currentValue === lastSelected) {\n return;\n }\n \n // Only open on focus if minInputLength allows it\n if (this.minInputLength() === -1) {\n this.loading.set(true);\n this.httpStream()(this.searchInput.value || '').subscribe({\n next: (list: IListData[]) => {\n this.loading.set(false);\n this.data.set(list);\n if (!this.overlayRef?.hasAttached() && list.length > 0) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set(true);\n },\n });\n }\n }\n}","import { OverlayModule } from \"@angular/cdk/overlay\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { LoaderModule } from \"mis-crystal-design-system/loader\";\nimport { AsyncDropdownComponent } from \"./async-dropdown.component\";\nimport { A11yModule } from \"@angular/cdk/a11y\";\n\n@NgModule({\n declarations: [AsyncDropdownComponent],\n imports: [CommonModule, OverlayModule, ReactiveFormsModule, FormsModule, LoaderModule, A11yModule],\n exports: [AsyncDropdownComponent]\n})\nexport class AsyncDropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}