UNPKG

@firestitch/address

Version:
99 lines 15.2 kB
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Optional, Output, forwardRef, inject } from '@angular/core'; import { ControlContainer, FormsModule, NG_VALUE_ACCESSOR, NgForm } from '@angular/forms'; import { FsAutocompleteChipsModule } from '@firestitch/autocomplete-chips'; import { guid } from '@firestitch/common'; import { controlContainerFactory } from '@firestitch/core'; import { FsFormModule } from '@firestitch/form'; import { of } from 'rxjs'; import { map } from 'rxjs/operators'; import { Countries } from '../../consts/countries.const'; import { searchCountryRegions } from '../../helpers'; import * as i0 from "@angular/core"; import * as i1 from "@firestitch/autocomplete-chips"; import * as i2 from "@angular/forms"; import * as i3 from "@firestitch/form"; export class FsAddressCountryComponent { disabled = false; required = false; excludeCountries; countries = Countries; label = 'Country'; selectionChange = new EventEmitter(); country; name = `addressCountry${guid()}`; onChange; onTouched; _cdRef = inject(ChangeDetectorRef); fetch = (keyword) => { return of(keyword) .pipe(map((kw) => { return searchCountryRegions(kw, this.countries, 10); })); }; writeValue(data) { this.country = this.countries .find((country) => country.code === data); this._cdRef.markForCheck(); } changed(value) { const code = value?.code || null; this.onChange(code); this.selectionChange.emit(code); } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } ngOnChanges(changes) { if (changes.excludeCountries && changes.excludeCountries.currentValue) { this.countries = this.countries.filter((country) => { return this.excludeCountries.indexOf(country.code) === -1; }); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAddressCountryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: FsAddressCountryComponent, isStandalone: true, selector: "fs-address-country", inputs: { disabled: "disabled", required: "required", excludeCountries: "excludeCountries", countries: "countries", label: "label" }, outputs: { selectionChange: "selectionChange" }, providers: [{ provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => FsAddressCountryComponent), }], usesOnChanges: true, ngImport: i0, template: "<fs-autocomplete-chips\n [fetch]=\"fetch\"\n [fetchOnFocus]=\"true\"\n [(ngModel)]=\"country\"\n [size]=\"'small'\"\n (ngModelChange)=\"changed($event)\"\n [label]=\"label\"\n [multiple]=\"false\"\n [disabled]=\"disabled\"\n [fsFormRequired]=\"required\"\n [name]=\"name\">\n <ng-template\n fsAutocompleteChipsTemplate\n let-object=\"object\">\n {{ object.name }}\n </ng-template>\n</fs-autocomplete-chips>", styles: [""], dependencies: [{ kind: "ngmodule", type: FsAutocompleteChipsModule }, { kind: "component", type: i1.FsAutocompleteChipsComponent, selector: "fs-autocomplete-chips", inputs: ["fetch", "appearance", "floatLabel", "readonly", "size", "label", "placeholder", "chipImage", "chipBackground", "chipColor", "chipIcon", "chipIconColor", "chipClass", "chipPadding", "shape", "hint", "allowText", "allowObject", "delay", "minPanelWidth", "validateText", "removable", "allowClear", "color", "background", "orderable", "padless", "initOnClick", "fetchOnFocus", "multiple", "confirm", "disabled", "groupBy", "panelWidth", "panelClass", "compareWith"], outputs: ["selected", "removed", "reordered", "clear"] }, { kind: "directive", type: i1.FsAutocompleteObjectDirective, selector: "[fsAutocompleteObject],[fsAutocompleteChipsTemplate]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i3.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }], viewProviders: [ { provide: ControlContainer, useFactory: controlContainerFactory, deps: [[new Optional(), NgForm]], }, ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAddressCountryComponent, decorators: [{ type: Component, args: [{ selector: 'fs-address-country', providers: [{ provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => FsAddressCountryComponent), }], viewProviders: [ { provide: ControlContainer, useFactory: controlContainerFactory, deps: [[new Optional(), NgForm]], }, ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ FsAutocompleteChipsModule, FormsModule, FsFormModule, ], template: "<fs-autocomplete-chips\n [fetch]=\"fetch\"\n [fetchOnFocus]=\"true\"\n [(ngModel)]=\"country\"\n [size]=\"'small'\"\n (ngModelChange)=\"changed($event)\"\n [label]=\"label\"\n [multiple]=\"false\"\n [disabled]=\"disabled\"\n [fsFormRequired]=\"required\"\n [name]=\"name\">\n <ng-template\n fsAutocompleteChipsTemplate\n let-object=\"object\">\n {{ object.name }}\n </ng-template>\n</fs-autocomplete-chips>" }] }], propDecorators: { disabled: [{ type: Input }], required: [{ type: Input }], excludeCountries: [{ type: Input }], countries: [{ type: Input }], label: [{ type: Input }], selectionChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1jb3VudHJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hZGRyZXNzLWNvdW50cnkvYWRkcmVzcy1jb3VudHJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hZGRyZXNzLWNvdW50cnkvYWRkcmVzcy1jb3VudHJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQUUsTUFBTSxFQUFpQixVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNLLE9BQU8sRUFBRSxnQkFBZ0IsRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUEyQnJELE1BQU0sT0FBTyx5QkFBeUI7SUFFcEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pC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QkFDbkMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3lCQUNqQztxQkFDRixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AseUJBQXlCO3dCQUN6QixXQUFXO3dCQUNYLFlBQVk7cUJBQ2I7OEJBSWUsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBR1csZUFBZTtzQkFBL0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9wdGlvbmFsLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIGZvcndhcmRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBGc0F1dG9jb21wbGV0ZUNoaXBzTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvYXV0b2NvbXBsZXRlLWNoaXBzJztcbmltcG9ydCB7IGd1aWQgfSBmcm9tICdAZmlyZXN0aXRjaC9jb21tb24nO1xuaW1wb3J0IHsgY29udHJvbENvbnRhaW5lckZhY3RvcnkgfSBmcm9tICdAZmlyZXN0aXRjaC9jb3JlJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb3VudHJpZXMgfSBmcm9tICcuLi8uLi9jb25zdHMvY291bnRyaWVzLmNvbnN0JztcbmltcG9ydCB7IHNlYXJjaENvdW50cnlSZWdpb25zIH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtYWRkcmVzcy1jb3VudHJ5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZHJlc3MtY291bnRyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FkZHJlc3MtY291bnRyeS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgbXVsdGk6IHRydWUsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRnNBZGRyZXNzQ291bnRyeUNvbXBvbmVudCksXG4gIH1dLFxuICB2aWV3UHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lcixcbiAgICAgIHVzZUZhY3Rvcnk6IGNvbnRyb2xDb250YWluZXJGYWN0b3J5LFxuICAgICAgZGVwczogW1tuZXcgT3B0aW9uYWwoKSwgTmdGb3JtXV0sXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGc0F1dG9jb21wbGV0ZUNoaXBzTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZzRm9ybU1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNBZGRyZXNzQ291bnRyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGV4Y2x1ZGVDb3VudHJpZXM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBwdWJsaWMgY291bnRyaWVzID0gQ291bnRyaWVzO1xuICBASW5wdXQoKSBwdWJsaWMgbGFiZWwgPSAnQ291bnRyeSc7XG4gIFxuXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHVibGljIGNvdW50cnk7XG4gIHB1YmxpYyBuYW1lID0gYGFkZHJlc3NDb3VudHJ5JHtndWlkKCl9YDtcbiAgcHVibGljIG9uQ2hhbmdlOiAoZGF0YTogYW55KSA9PiB2b2lkO1xuICBwdWJsaWMgb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBwdWJsaWMgZmV0Y2ggPSAoa2V5d29yZDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIG9mKGtleXdvcmQpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChrdykgPT4ge1xuICAgICAgICAgIHJldHVybiBzZWFyY2hDb3VudHJ5UmVnaW9ucyhrdywgdGhpcy5jb3VudHJpZXMsIDEwKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9O1xuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY291bnRyeSA9IHRoaXMuY291bnRyaWVzXG4gICAgICAuZmluZCgoY291bnRyeSkgPT4gY291bnRyeS5jb2RlID09PSBkYXRhKTtcbiAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VkKHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IHZhbHVlPy5jb2RlIHx8IG51bGw7XG4gICAgdGhpcy5vbkNoYW5nZShjb2RlKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGNvZGUpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChkYXRhOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5leGNsdWRlQ291bnRyaWVzICYmIGNoYW5nZXMuZXhjbHVkZUNvdW50cmllcy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY291bnRyaWVzID0gdGhpcy5jb3VudHJpZXMuZmlsdGVyKChjb3VudHJ5KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4Y2x1ZGVDb3VudHJpZXMuaW5kZXhPZihjb3VudHJ5LmNvZGUpID09PSAtMTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGZzLWF1dG9jb21wbGV0ZS1jaGlwc1xuICAgIFtmZXRjaF09XCJmZXRjaFwiXG4gICAgW2ZldGNoT25Gb2N1c109XCJ0cnVlXCJcbiAgICBbKG5nTW9kZWwpXT1cImNvdW50cnlcIlxuICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KVwiXG4gICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2ZzRm9ybVJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbbmFtZV09XCJuYW1lXCI+XG4gIDxuZy10ZW1wbGF0ZVxuICAgICAgZnNBdXRvY29tcGxldGVDaGlwc1RlbXBsYXRlXG4gICAgICBsZXQtb2JqZWN0PVwib2JqZWN0XCI+XG4gICAge3sgb2JqZWN0Lm5hbWUgfX1cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZnMtYXV0b2NvbXBsZXRlLWNoaXBzPiJdfQ==