novo-elements
Version:
1 lines • 14.8 kB
Source Map (JSON)
{"version":3,"file":"novo-elements-elements-search.mjs","sources":["../../../projects/novo-elements/src/elements/search/SearchBox.ts","../../../projects/novo-elements/src/elements/search/SearchBox.module.ts","../../../projects/novo-elements/src/elements/search/novo-elements-elements-search.ts"],"sourcesContent":["// NG2\nimport { ENTER } from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n NgZone,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Key } from 'novo-elements/utils';\nimport { NovoOverlayTemplateComponent } from 'novo-elements/elements/common';\n\n// Value accessor for the component (supports ngModel)\nconst SEARCH_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoSearchBoxElement),\n multi: true,\n};\n\n@Component({\n selector: 'novo-search',\n providers: [SEARCH_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- SEARCH ICON -->\n <novo-icon (click)=\"showSearch($event)\" [tooltip]=\"hint\" tooltipPosition=\"bottom\">{{ icon }}</novo-icon>\n <!-- SEARCH INPUT -->\n <input\n type=\"text\"\n [attr.name]=\"name\"\n [attr.value]=\"displayValue\"\n [attr.placeholder]=\"placeholder\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keydown)=\"_handleKeydown($event)\"\n (input)=\"_handleInput($event)\"\n #input\n data-automation-id=\"novo-search-input\"\n />\n <!-- SEARCH OVERLAY -->\n <novo-overlay-template\n [parent]=\"element\"\n [closeOnSelect]=\"closeOnSelect\"\n [position]=\"position\"\n [hasBackdrop]=\"hasBackdrop\"\n (select)=\"onSelect()\"\n (closing)=\"onBlur()\"\n >\n <ng-content></ng-content>\n </novo-overlay-template>\n `,\n styleUrls: ['./SearchBox.scss'],\n standalone: false,\n})\nexport class NovoSearchBoxElement implements ControlValueAccessor, OnInit {\n @Input()\n public name: string;\n @Input()\n public icon: string = 'search';\n @Input()\n public position: string = 'bottom-left';\n @Input()\n public placeholder: string = 'Search...';\n @Input()\n @HostBinding('class.always-open')\n public alwaysOpen: boolean = false;\n @Input()\n public theme: string;\n @Input()\n public color: string = 'positive';\n @Input()\n public closeOnSelect: boolean = true;\n @Input()\n public displayField: string;\n @Input()\n public displayValue: string;\n @Input()\n public hint: string;\n @Input()\n public keepOpen: boolean = false;\n @Input()\n public hasBackdrop: boolean = false;\n @Input()\n public allowPropagation: boolean = false;\n @Input()\n public overrideElement: ElementRef;\n @Output()\n public searchChanged: EventEmitter<string> = new EventEmitter<string>();\n @Output()\n public applySearch: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @HostBinding('class.focused')\n focused: boolean = false;\n public value: any;\n\n /** View -> model callback called when value changes */\n _onChange: (value: any) => void = () => {};\n /** View -> model callback called when autocomplete has been touched */\n _onTouched = () => {};\n\n /** Element for the panel containing the autocomplete options. */\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: any;\n @ViewChild('input', { static: true })\n input: any;\n\n private debounceSearchChange: any;\n\n constructor(\n public element: ElementRef,\n public labels: NovoLabelService,\n private _changeDetectorRef: ChangeDetectorRef,\n private _zone: NgZone,\n ) {}\n\n ngOnInit() {\n if (this.overrideElement) {\n this.element = this.overrideElement;\n }\n }\n\n /**\n * @name showFasterFind\n * @description This function shows the picker and adds the active class (for animation)\n */\n showSearch(event?: any, forceClose: boolean = false) {\n if (!this.panelOpen) {\n // Reset search\n // Set focus on search\n setTimeout(() => {\n const element = this.input.nativeElement;\n if (element) {\n element.focus();\n }\n }, 10);\n } else {\n this.closePanel();\n }\n }\n onFocus() {\n this._zone.run(() => {\n this.focused = true;\n this.openPanel();\n });\n }\n onBlur() {\n if (!this.keepOpen || !this.panelOpen) {\n this.focused = false;\n }\n }\n onSelect() {\n if (!this.keepOpen) {\n this.closePanel();\n }\n }\n /** BEGIN: Convenient Panel Methods. */\n openPanel(): void {\n this.overlay.openPanel();\n }\n closePanel(): void {\n setTimeout(() => this.overlay.closePanel());\n this.focused = false;\n }\n get panelOpen(): boolean {\n return this.overlay && this.overlay.panelOpen;\n }\n @HostBinding('class.active')\n get active(): boolean {\n return this.panelOpen || this.alwaysOpen;\n }\n /** END: Convenient Panel Methods. */\n\n _handleKeydown(event: KeyboardEvent): void {\n if ((event.key === Key.Escape || event.key === Key.Enter || event.key === Key.Tab) && this.panelOpen) {\n if (event.keyCode === ENTER) {\n this.applySearch.emit(event);\n }\n this.closePanel();\n if (!this.allowPropagation) {\n event.stopPropagation();\n }\n }\n }\n _handleInput(event: KeyboardEvent): void {\n if (document.activeElement === event.target) {\n this.value = (event.target as HTMLInputElement).value;\n this._onChange((event.target as HTMLInputElement).value);\n\n if (this.debounceSearchChange) {\n clearTimeout(this.debounceSearchChange);\n }\n this.debounceSearchChange = setTimeout(() => {\n this.searchChanged.emit((event.target as HTMLInputElement).value);\n }, 400);\n }\n }\n writeValue(value: any): void {\n this._setValue(value);\n }\n registerOnChange(fn: (value: any) => {}): void {\n this._onChange = fn;\n }\n registerOnTouched(fn: () => {}) {\n this._onTouched = fn;\n }\n private _setValue(value: any): void {\n this.value = value;\n let toDisplay = value;\n if (value && this.displayField) {\n toDisplay = value.hasOwnProperty(this.displayField) ? value[this.displayField] : value;\n }\n // Simply falling back to an empty string if the display value is falsy does not work properly.\n // The display value can also be the number zero and shouldn't fall back to an empty string.\n this.displayValue = toDisplay ? toDisplay : '';\n this.input.nativeElement.value = this.displayValue;\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * This method closes the panel, and if a value is specified, also sets the associated\n * control to that value. It will also mark the control as dirty if this interaction\n * stemmed from the user.\n */\n public setValueAndClose(event: any | null): void {\n if (event && event.value) {\n this._setValue(event.value);\n this._onChange(event.value);\n }\n this.closePanel();\n }\n\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n public clearValue(skip: any) {\n this.writeValue(null);\n this._onChange(null);\n }\n}\n","// NG2\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n// APP\nimport { NovoOverlayModule } from 'novo-elements/elements/common';\nimport { NovoIconModule } from 'novo-elements/elements/icon';\nimport { NovoPickerModule } from 'novo-elements/elements/picker';\nimport { NovoTooltipModule } from 'novo-elements/elements/tooltip';\nimport { NovoSearchBoxElement } from './SearchBox';\n@NgModule({\n imports: [CommonModule, NovoIconModule, NovoPickerModule, NovoTooltipModule, NovoOverlayModule],\n declarations: [NovoSearchBoxElement],\n exports: [NovoSearchBoxElement],\n})\nexport class NovoSearchBoxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}