@kolkov/ngx-dadata
Version:
Angular 6+ and 13+ DaData suggestion (подсказки) implementation
1 lines • 22.3 kB
Source Map (JSON)
{"version":3,"file":"kolkov-ngx-dadata.mjs","sources":["../../../projects/ngx-dadata/src/lib/ngx-dadata.service.ts","../../../projects/ngx-dadata/src/lib/dadata-config.ts","../../../projects/ngx-dadata/src/lib/ngx-dadata.component.ts","../../../projects/ngx-dadata/src/lib/ngx-dadata.component.html","../../../projects/ngx-dadata/src/lib/ngx-dadata.module.ts","../../../projects/ngx-dadata/src/public-api.ts","../../../projects/ngx-dadata/src/kolkov-ngx-dadata.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {DadataResponse} from './models/dadata-response';\nimport {Bounds, DadataConfig, Location} from './dadata-config';\n\nexport enum DadataType {\n fio = 'fio',\n address = 'address',\n party = 'party',\n bank = 'bank',\n email = 'email'\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxDadataService {\n apiKey = '';\n\n constructor(private http: HttpClient) {\n }\n\n setApiKey(key: string) {\n this.apiKey = key;\n }\n\n // eslint-disable-next-line max-len\n getData(value: string, type: DadataType = DadataType.address, config: DadataConfig): Observable<DadataResponse> {\n const httpOptions = {\n headers: new HttpHeaders({\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: 'Token ' + this.apiKey,\n })\n };\n const body = Object.assign(\n {},\n {query: value},\n {count: config?.limit},\n {location: config?.locations},\n {location_bust: config?.locationsBoost},\n {from_bound: config?.bounds?.fromBound},\n {to_bound: config?.bounds?.toBound}\n );\n return this.http.post<DadataResponse>('https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/' + type, body, httpOptions);\n }\n}\n","import {DadataType} from './ngx-dadata.service';\n\nexport interface Location {\n country?: string;\n country_iso_code?: string;\n region?: string;\n area?: string;\n city?: string;\n street?: string;\n street_type_full?: string;\n settlement_type_full?: string;\n city_district_type_full?: string;\n city_type_full?: string;\n area_type_full?: string;\n region_type_full?: string;\n kladr_id?: string;\n region_fias_id?: string;\n area_fias_id?: string;\n city_fias_id?: string;\n settlement_fias_id?: string;\n street_fias_id?: string;\n}\n\nexport interface Bound {\n value: 'country' | 'region' | 'city' | 'street' | 'settlement' | 'area' | 'house';\n}\n\nexport interface Bounds {\n fromBound?: Bound;\n toBound?: Bound;\n}\n\nexport interface DadataConfig {\n apiKey: string;\n type?: DadataType;\n delay?: number;\n limit?: number;\n width?: 'auto' | string;\n minWidth?: '0' | string;\n partyAddress?: 'city' | 'full';\n locations?: Location[];\n locationsBoost?: Location[];\n bounds?: Bounds;\n}\n\nexport const DadataConfigDefault: DadataConfig = {\n apiKey: '',\n type: DadataType.address,\n delay: 500,\n limit: 10,\n width: 'auto',\n minWidth: '0',\n partyAddress: 'city',\n locations: null,\n};\n","import {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener, Inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {DadataType, NgxDadataService} from './ngx-dadata.service';\nimport {Subject, timer} from 'rxjs';\nimport {debounce} from 'rxjs/operators';\nimport {DadataResponse} from './models/dadata-response';\nimport {DadataSuggestion} from './models/suggestion';\nimport {DadataConfig, DadataConfigDefault} from './dadata-config';\nimport {ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {DOCUMENT} from '@angular/common';\nimport {unwrapHtmlForSink} from 'safevalues';\nimport {createHtml} from 'safevalues/implementation/html_impl';\n\n/*const NGX_DADATA_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgxDadataComponent),\n multi: true,\n};*/\n\nexport function createDaDataValidator(value) {\n return (c: FormControl) => {\n const err = {\n rangeError: {\n given: c.value,\n expected: value,\n }\n };\n\n return (c.value !== value) ? err : null;\n };\n}\n\n/**\n * Autocomplete IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet uniqueDadataIdCounter = 0;\n\n@Component({\n selector: 'ngx-dadata',\n templateUrl: './ngx-dadata.component.html',\n styleUrls: ['./ngx-dadata.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxDadataComponent),\n multi: true\n }, /*NGX_DADATA_VALIDATOR*/]\n})\nexport class NgxDadataComponent implements OnInit, ControlValueAccessor, OnChanges {\n private v: any = '';\n currentFocus = -1;\n\n opened = false;\n\n data: DadataSuggestion[] = [];\n\n @Input() config: DadataConfig = DadataConfigDefault;\n @Input() apiKey: string;\n @Input() disabled = null;\n @Input() type = DadataType.address;\n @Input() limit = DadataConfigDefault.limit;\n @Input() placeholder = '';\n @Input() locations = null;\n\n @Output() selectedSuggestion: DadataSuggestion;\n @Output() selected: EventEmitter<DadataSuggestion> = new EventEmitter<DadataSuggestion>();\n // @Output() selectedData = new EventEmitter<DaDataAddress | DaDataFIO | DaDataBank | DaDataParty | DaDataEmail>();\n // @Output() selectedString = new EventEmitter<string>();\n\n @ViewChild('inputValue', { static: true }) inputValue: ElementRef;\n\n private inputString$ = new Subject<string>();\n\n /** Unique ID to be used by autocomplete trigger's \"aria-owns\" property. */\n id = `ngx-dadata-${uniqueDadataIdCounter++}`;\n\n // onSuggestionSelected = (value: string) => {};\n onTouched = () => {};\n propagateChange: any = () => {};\n validateFn: any = () => {};\n\n constructor(\n private dataService: NgxDadataService,\n private r: Renderer2,\n private elRef: ElementRef,\n @Inject(DOCUMENT) private document: Document,\n ) {\n }\n\n get value(): any {\n return this.v;\n }\n\n set value(v: any) {\n if (v !== this.v) {\n this.v = v;\n this.propagateChange(v);\n }\n }\n\n ngOnInit() {\n /*this.validateFn = createDaDataValidator(this._value);\n this.propagateChange(this._value);*/\n this.type = this.config.type;\n this.locations = this.config.locations;\n this.dataService.setApiKey(this.apiKey ? this.apiKey : this.config.apiKey);\n this.inputString$.pipe(\n debounce(() => timer(this.config.delay ? this.config.delay : 500)),\n ).subscribe(x => {\n this.dataService.getData(x, this.type, this.config)\n .subscribe((y: DadataResponse) => {\n this.data = y.suggestions;\n if (this.data.length) {\n this.opened = true;\n }\n });\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.value) {\n // console.log('ngOnChanges');\n }\n }\n\n getData(value: string) {\n this.inputString$.next(value);\n this.currentFocus = -1;\n }\n\n onClick(e: MouseEvent, item: DadataSuggestion) {\n this.inputValue.nativeElement.value = item.value;\n this.propagateChange(item.value);\n this.inputValue.nativeElement.focus();\n this.selectedSuggestion = item;\n this.data = [];\n this.currentFocus = -1;\n this.opened = false;\n this.selected.emit(item);\n // this.selectedData.emit(item.data);\n // this.selectedString.emit(item.value);\n }\n\n @HostListener('document:click', ['$event'])\n onOutsideClick($event: MouseEvent) {\n if (!this.opened) {\n return;\n }\n if (!this.elRef.nativeElement.contains($event.target)) {\n this.data = [];\n this.opened = false;\n }\n }\n\n onArrowDown() {\n this.removeFocus(this.currentFocus);\n if (this.currentFocus >= this.data.length - 1) {\n this.currentFocus = 0;\n } else {\n this.currentFocus++;\n }\n this.setFocus(this.currentFocus);\n }\n\n onArrowUp() {\n this.removeFocus(this.currentFocus);\n if (this.currentFocus === 0) {\n this.currentFocus = this.data.length - 1;\n } else {\n this.currentFocus--;\n }\n this.setFocus(this.currentFocus);\n }\n\n onEnter(event: KeyboardEvent) {\n this.selectedSuggestion = this.data[this.currentFocus];\n this.inputValue.nativeElement.value = this.selectedSuggestion.value;\n this.data = [];\n this.currentFocus = -1;\n this.propagateChange(this.selectedSuggestion.value);\n this.selected.emit(this.selectedSuggestion);\n // this.selectedData.emit(this.selectedSuggestion.data);\n // this.selectedString.emit(this.selectedSuggestion.value);\n }\n\n setFocus(id: number) {\n const activeEl = this.document.getElementById(id + 'item');\n this.r.addClass(activeEl, 'active');\n }\n\n removeFocus(id: number) {\n if (id !== -1) {\n const activeEl = this.document.getElementById(id + 'item');\n this.r.removeClass(activeEl, 'active');\n }\n }\n\n writeValue(value: any): void {\n if (value !== undefined && value !== null) {\n this.v = value;\n } else {\n this.v = '';\n }\n\n this.r.setProperty(this.inputValue.nativeElement, 'innerHTML', unwrapHtmlForSink(createHtml(this.v)));\n }\n\n /**\n * Set the function to be called\n * when the control receives a change event.\n *\n * @param fn a function\n */\n registerOnChange(fn: any): void {\n // this.onSuggestionSelected = fn;\n this.propagateChange = fn;\n }\n\n /**\n * Set the function to be called\n * when the control receives a touch event.\n *\n * @param fn a function\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Implements disabled state for this element\n *\n * @param isDisabled Disabled state flag\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div class=\"autocomplete\">\n <input [disabled]=\"disabled ? true : null\" type=\"text\" class=\"search\" #inputValue (input)=\"getData(inputValue.value)\"\n [placeholder]=\"placeholder\" (keyup.ArrowDown)=\"onArrowDown()\" (keyup.ArrowUp)=\"onArrowUp()\"\n (keyup.Enter)=\"onEnter($event)\" spellcheck=\"false\" [(ngModel)]=\"value\" autocomplete=\"off\" />\n <div *ngIf=\"data.length\">\n <div class=\"autocomplete-items\">\n <div class=\"autocomplele-item\" *ngFor=\"let item of data; let i = index\" (click)=\"onClick($event, item)\" [id]=\"i+'item'\">\n {{item.value}}\n <ng-template [ngIf]=\"type==='party'\">\n <br/>\n <span>{{item.data?.inn}} {{config.partyAddress === 'full' ? item.data?.address?.value : item.data?.address?.data?.city}}</span>\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { NgxDadataComponent } from './ngx-dadata.component';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule\n ],\n declarations: [NgxDadataComponent],\n exports: [NgxDadataComponent]\n})\nexport class NgxDadataModule { }\n","/*\n * Public API Surface of ngx-dadata\n */\n\nexport * from './lib/ngx-dadata.service';\nexport * from './lib/ngx-dadata.component';\nexport * from './lib/ngx-dadata.module';\nexport * from './lib/dadata-config';\nexport * from './lib/models/data';\nexport * from './lib/models/suggestion';\nexport {DadataType} from './lib/ngx-dadata.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}