@firestitch/address
Version:
99 lines • 15.2 kB
JavaScript
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==