ngx-obelisco-example
Version:
Componentes funcionales y reutilizables para Angular.
1 lines • 10.4 kB
Source Map (JSON)
{"version":3,"file":"ngx-obelisco-example-search.mjs","sources":["../../../projects/ngx-obelisco/search/o-search.component.ts","../../../projects/ngx-obelisco/search/o-search.component.html","../../../projects/ngx-obelisco/search/o-search.module.ts","../../../projects/ngx-obelisco/search/ngx-obelisco-example-search.ts"],"sourcesContent":["import { AfterViewInit, Component, ElementRef, Input, Renderer2, ViewChild } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { SearchbarItem } from 'ngx-obelisco-example/core/models';\r\n\r\n@Component({\r\n selector: 'o-search',\r\n templateUrl: './o-search.component.html',\r\n styleUrls: ['./o-search.component.scss']\r\n})\r\nexport class OSearchComponent implements AfterViewInit {\r\n @Input() public searchbarItems!: SearchbarItem[];\r\n @Input() public maxLengthResults: number = 10;\r\n @Input() public placeholder: string = 'Buscar...';\r\n @Input() public type: string = '';\r\n @Input() public onSelectItem?: (item: SearchbarItem) => void;\r\n\r\n term = '';\r\n isHover = false;\r\n noResults = false;\r\n filteredResults: SearchbarItem[] = [];\r\n selectedIndex: number = 0;\r\n\r\n @ViewChild('inputElement') inputElement!: ElementRef;\r\n\r\n constructor(private router: Router, private elementRef: ElementRef, private renderer: Renderer2) {}\r\n\r\n adjustResultsWidth() {\r\n const inputWidth = this.inputElement.nativeElement.getBoundingClientRect().width;\r\n const searchResults = this.elementRef.nativeElement.querySelector('.search-results');\r\n const noResults = this.elementRef.nativeElement.querySelector('.no-results');\r\n\r\n if (searchResults && noResults) {\r\n if (inputWidth > 0) {\r\n this.renderer.setStyle(searchResults, 'width', inputWidth + 'px');\r\n this.renderer.setStyle(noResults, 'width', inputWidth + 'px');\r\n }\r\n }\r\n }\r\n\r\n search() {\r\n if (this.term === '') {\r\n this.resetSearch();\r\n } else {\r\n this.filteredResults = this.searchbarItems\r\n .filter((e) => e.title.toLowerCase().includes(this.term.toLowerCase()))\r\n .slice(0, this.maxLengthResults);\r\n this.noResults = this.filteredResults.length === 0;\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.adjustResultsWidth();\r\n }\r\n\r\n resetSearch() {\r\n this.term = '';\r\n this.isHover = false;\r\n this.noResults = false;\r\n this.filteredResults = [];\r\n this.selectedIndex = 0;\r\n }\r\n\r\n goTo(e: SearchbarItem) {\r\n if (this.onSelectItem) {\r\n this.onSelectItem(e);\r\n } else {\r\n this.router.navigate([e.route]);\r\n }\r\n this.resetSearch();\r\n }\r\n\r\n onEnter() {\r\n if (this.filteredResults.length > 0) {\r\n this.goTo(this.filteredResults[this.selectedIndex]);\r\n }\r\n }\r\n\r\n onUp() {\r\n if (this.selectedIndex > 0) {\r\n this.selectedIndex--;\r\n this.isHover = false;\r\n }\r\n }\r\n\r\n onDown() {\r\n if (this.selectedIndex < this.filteredResults.length - 1) {\r\n this.selectedIndex++;\r\n this.isHover = false;\r\n }\r\n }\r\n\r\n onMouseEnter() {\r\n this.isHover = true;\r\n }\r\n\r\n onMouseLeave() {\r\n this.isHover = false;\r\n }\r\n}\r\n","<div class=\"navbar-search\" *ngIf=\"searchbarItems\">\r\n <form class=\"form-search\">\r\n <div class=\"form-group\">\r\n <label class=\"sr-only\" for=\"search-input\">Buscador</label>\r\n <input\r\n #inputElement\r\n type=\"search\"\r\n class=\"form-control input-search\"\r\n [ngClass]=\"type ? 'bg-' + type : ''\"\r\n id=\"name-input\"\r\n name=\"name\"\r\n aria-label=\"Ingrese su búsqueda\"\r\n [placeholder]=\"placeholder\"\r\n [(ngModel)]=\"term\"\r\n (input)=\"search()\"\r\n (keydown.enter)=\"onEnter()\"\r\n (keydown.ArrowUp)=\"onUp()\"\r\n (keydown.ArrowDown)=\"onDown()\"\r\n />\r\n <button class=\"reset\" type=\"reset\" aria-label=\"Borrar\" (click)=\"resetSearch()\"></button>\r\n </div>\r\n </form>\r\n <div class=\"search-results\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n <ng-container *ngIf=\"filteredResults.length > 0\">\r\n <div\r\n class=\"search-item\"\r\n *ngFor=\"let result of filteredResults; let i = index\"\r\n [class.selected-search-item]=\"i === selectedIndex\"\r\n [class.first-search-item]=\"i === selectedIndex && !isHover\"\r\n (click)=\"goTo(result)\"\r\n >\r\n {{ result.title }}\r\n </div>\r\n </ng-container>\r\n <div class=\"no-results\" *ngIf=\"noResults\">No se encontraron resultados😢.</div>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OSearchComponent } from './o-search.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\n\r\n@NgModule({\r\n declarations: [OSearchComponent],\r\n imports: [CommonModule, RouterModule, FormsModule],\r\n exports: [OSearchComponent]\r\n})\r\nexport class OSearchModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}