UNPKG

@firestitch/address

Version:
122 lines 19.4 kB
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, Output, ViewChild, } from '@angular/core'; import { ControlContainer, NgForm, FormsModule } from '@angular/forms'; import { guid } from '@firestitch/common'; import { controlContainerFactory } from '@firestitch/core'; import { Subject } from 'rxjs'; import { AddressFormat } from '../../enums/address-format.enum'; import { createEmptyAddress } from '../../helpers/create-empty-address'; import { FsAddressAutocompleteComponent } from '../address-autocomplete/address-autocomplete.component'; import { FsFormModule } from '@firestitch/form'; import { NgClass } from '@angular/common'; import { FsAddressFormatComponent } from '../address-format/address-format.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "@firestitch/form"; export class FsAddressSearchComponent { set config(value) { this._config = value; if (this._config) { this.required = ((this.config.name && this.config.name.required) || (this.config.country && this.config.country.required) || (this.config.region && this.config.region.required) || (this.config.city && this.config.city.required) || (this.config.street && this.config.street.required) || (this.config.address2 && this.config.address2.required) || (this.config.address3 && this.config.address3.required) || (this.config.zip && this.config.zip.required)); } } get config() { return this._config; } showName = true; address = {}; format = AddressFormat.TwoLine; disabled = false; readonly = false; required = false; cleared = new EventEmitter(); addressChange = new EventEmitter(); edit = new EventEmitter(); selected = new EventEmitter(); addressManual = new EventEmitter(); autocomplete; autocompleteName = `search-${guid('xxxxxxxx')}`; _destroy$ = new Subject(); _config = {}; get editable() { return !this.disabled && !this.readonly; } ngOnDestroy() { this._destroy$.next(null); this._destroy$.complete(); } clear() { this.address = createEmptyAddress(); this.cleared.emit(createEmptyAddress()); this.addressChange.emit(createEmptyAddress()); this.autocomplete.clear(); } editClick() { if (this.editable) { this.edit.emit(); } } addressSelected() { this.selected.emit(this.address); this.addressChange.emit(this.address); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAddressSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: FsAddressSearchComponent, isStandalone: true, selector: "fs-address-search", inputs: { config: "config", showName: "showName", address: "address", format: "format", disabled: "disabled", readonly: "readonly", required: "required" }, outputs: { cleared: "cleared", addressChange: "addressChange", edit: "edit", selected: "selected", addressManual: "addressManual" }, viewQueries: [{ propertyName: "autocomplete", first: true, predicate: FsAddressAutocompleteComponent, descendants: true }], ngImport: i0, template: "<fs-address-autocomplete\n [config]=\"config\"\n [(ngModel)]=\"address\"\n [disabled]=\"disabled\"\n (addressChange)=\"addressSelected()\"\n (addressManual)=\"addressManual.emit($event)\"\n [ngClass]=\"{ hide: !addressControl.empty }\"\n [placeholder]=\"config.label\"\n [name]=\"autocompleteName\"\n [required]=\"required\"\n #addressControl>\n <fs-address-format\n [address]=\"address\"\n [format]=\"format\"\n [showName]=\"showName\"\n (click)=\"editClick()\"\n [ngClass]=\"{ editable: editable }\"\n [disabled]=\"disabled\">\n </fs-address-format>\n</fs-address-autocomplete>\n", styles: [":host ::ng-deep fs-address-format{display:block}:host ::ng-deep fs-address-format.editable{cursor:pointer}:host ::ng-deep mat-form-field{width:100%}:host ::ng-deep .hide input{visibility:hidden;position:absolute}\n"], dependencies: [{ kind: "component", type: FsAddressAutocompleteComponent, selector: "fs-address-autocomplete", inputs: ["format", "readonly", "showClear", "suggestions", "config", "disabled", "required", "placeholder"], outputs: ["addressChange", "addressManual"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FsAddressFormatComponent, selector: "fs-address-format", inputs: ["address", "format", "includeFirst", "disabled", "showName"] }], 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: FsAddressSearchComponent, decorators: [{ type: Component, args: [{ selector: 'fs-address-search', viewProviders: [ { provide: ControlContainer, useFactory: controlContainerFactory, deps: [[new Optional(), NgForm]], }, ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ FsAddressAutocompleteComponent, FormsModule, FsFormModule, NgClass, FsAddressFormatComponent, ], template: "<fs-address-autocomplete\n [config]=\"config\"\n [(ngModel)]=\"address\"\n [disabled]=\"disabled\"\n (addressChange)=\"addressSelected()\"\n (addressManual)=\"addressManual.emit($event)\"\n [ngClass]=\"{ hide: !addressControl.empty }\"\n [placeholder]=\"config.label\"\n [name]=\"autocompleteName\"\n [required]=\"required\"\n #addressControl>\n <fs-address-format\n [address]=\"address\"\n [format]=\"format\"\n [showName]=\"showName\"\n (click)=\"editClick()\"\n [ngClass]=\"{ editable: editable }\"\n [disabled]=\"disabled\">\n </fs-address-format>\n</fs-address-autocomplete>\n", styles: [":host ::ng-deep fs-address-format{display:block}:host ::ng-deep fs-address-format.editable{cursor:pointer}:host ::ng-deep mat-form-field{width:100%}:host ::ng-deep .hide input{visibility:hidden;position:absolute}\n"] }] }], propDecorators: { config: [{ type: Input }], showName: [{ type: Input }], address: [{ type: Input }], format: [{ type: Input }], disabled: [{ type: Input }], readonly: [{ type: Input }], required: [{ type: Input }], cleared: [{ type: Output }], addressChange: [{ type: Output }], edit: [{ type: Output }], selected: [{ type: Output }], addressManual: [{ type: Output }], autocomplete: [{ type: ViewChild, args: [FsAddressAutocompleteComponent] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2FkZHJlc3Mtc2VhcmNoL2FkZHJlc3Mtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hZGRyZXNzLXNlYXJjaC9hZGRyZXNzLXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR3hFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7QUF3QnRGLE1BQU0sT0FBTyx3QkFBd0I7SUFFbkMsSUFDVyxNQUFNLENBQUMsS0FBNEI7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FB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QixNQUFNO2dCQUNVLElBQUk7c0JBQXBCLE1BQU07Z0JBQ1UsUUFBUTtzQkFBeEIsTUFBTTtnQkFDbUIsYUFBYTtzQkFBdEMsTUFBTTtnQkFHQSxZQUFZO3NCQURsQixTQUFTO3VCQUFDLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cblxuaW1wb3J0IHsgZ3VpZCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbic7XG5pbXBvcnQgeyBjb250cm9sQ29udGFpbmVyRmFjdG9yeSB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFkZHJlc3NGb3JtYXQgfSBmcm9tICcuLi8uLi9lbnVtcy9hZGRyZXNzLWZvcm1hdC5lbnVtJztcbmltcG9ydCB7IGNyZWF0ZUVtcHR5QWRkcmVzcyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvY3JlYXRlLWVtcHR5LWFkZHJlc3MnO1xuaW1wb3J0IHsgRnNBZGRyZXNzUGlja2VyQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hZGRyZXNzLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRnNBZGRyZXNzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hZGRyZXNzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGc0FkZHJlc3NBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuLi9hZGRyZXNzLWF1dG9jb21wbGV0ZS9hZGRyZXNzLWF1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRnNGb3JtTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZm9ybSc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZzQWRkcmVzc0Zvcm1hdENvbXBvbmVudCB9IGZyb20gJy4uL2FkZHJlc3MtZm9ybWF0L2FkZHJlc3MtZm9ybWF0LmNvbXBvbmVudCc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmcy1hZGRyZXNzLXNlYXJjaCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkZHJlc3Mtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hZGRyZXNzLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICAgIHZpZXdQcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGNvbnRyb2xDb250YWluZXJGYWN0b3J5LFxuICAgICAgICAgICAgZGVwczogW1tuZXcgT3B0aW9uYWwoKSwgTmdGb3JtXV0sXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRnNBZGRyZXNzQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgRnNGb3JtTW9kdWxlLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBGc0FkZHJlc3NGb3JtYXRDb21wb25lbnQsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNBZGRyZXNzU2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogRnNBZGRyZXNzUGlja2VyQ29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuX2NvbmZpZykge1xuICAgICAgdGhpcy5yZXF1aXJlZCA9XG4gICAgICAgICgodGhpcy5jb25maWcubmFtZSAmJiB0aGlzLmNvbmZpZy5uYW1lLnJlcXVpcmVkKSB8fFxuICAgICAgICAgICh0aGlzLmNvbmZpZy5jb3VudHJ5ICYmIHRoaXMuY29uZmlnLmNvdW50cnkucmVxdWlyZWQpIHx8XG4gICAgICAgICAgKHRoaXMuY29uZmlnLnJlZ2lvbiAmJiB0aGlzLmNvbmZpZy5yZWdpb24ucmVxdWlyZWQpIHx8XG4gICAgICAgICAgKHRoaXMuY29uZmlnLmNpdHkgJiYgdGhpcy5jb25maWcuY2l0eS5yZXF1aXJlZCkgfHxcbiAgICAgICAgICAodGhpcy5jb25maWcuc3RyZWV0ICYmIHRoaXMuY29uZmlnLnN0cmVldC5yZXF1aXJlZCkgfHxcbiAgICAgICAgICAodGhpcy5jb25maWcuYWRkcmVzczIgJiYgdGhpcy5jb25maWcuYWRkcmVzczIucmVxdWlyZWQpIHx8XG4gICAgICAgICAgKHRoaXMuY29uZmlnLmFkZHJlc3MzICYmIHRoaXMuY29uZmlnLmFkZHJlc3MzLnJlcXVpcmVkKSB8fFxuICAgICAgICAgICh0aGlzLmNvbmZpZy56aXAgJiYgdGhpcy5jb25maWcuemlwLnJlcXVpcmVkKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBjb25maWcoKTogRnNBZGRyZXNzUGlja2VyQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgQElucHV0KCkgcHVibGljIHNob3dOYW1lID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGFkZHJlc3M6IEZzQWRkcmVzcyA9IHt9O1xuICBASW5wdXQoKSBwdWJsaWMgZm9ybWF0ID0gQWRkcmVzc0Zvcm1hdC5Ud29MaW5lO1xuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xlYXJlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBhZGRyZXNzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYWRkcmVzc01hbnVhbCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBWaWV3Q2hpbGQoRnNBZGRyZXNzQXV0b2NvbXBsZXRlQ29tcG9uZW50KVxuICBwdWJsaWMgYXV0b2NvbXBsZXRlOiBGc0FkZHJlc3NBdXRvY29tcGxldGVDb21wb25lbnQ7XG5cbiAgcHVibGljIGF1dG9jb21wbGV0ZU5hbWUgPSBgc2VhcmNoLSR7Z3VpZCgneHh4eHh4eHgnKX1gO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBGc0FkZHJlc3NQaWNrZXJDb25maWcgPSB7fTtcblxuICBwdWJsaWMgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5hZGRyZXNzID0gY3JlYXRlRW1wdHlBZGRyZXNzKCk7XG4gICAgdGhpcy5jbGVhcmVkLmVtaXQoY3JlYXRlRW1wdHlBZGRyZXNzKCkpO1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZS5lbWl0KGNyZWF0ZUVtcHR5QWRkcmVzcygpKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZS5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGVkaXRDbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgdGhpcy5lZGl0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkcmVzc1NlbGVjdGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLmFkZHJlc3MpO1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZS5lbWl0KHRoaXMuYWRkcmVzcyk7XG4gIH1cblxufVxuIiwiPGZzLWFkZHJlc3MtYXV0b2NvbXBsZXRlXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgIFsobmdNb2RlbCldPVwiYWRkcmVzc1wiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAoYWRkcmVzc0NoYW5nZSk9XCJhZGRyZXNzU2VsZWN0ZWQoKVwiXG4gICAgKGFkZHJlc3NNYW51YWwpPVwiYWRkcmVzc01hbnVhbC5lbWl0KCRldmVudClcIlxuICAgIFtuZ0NsYXNzXT1cInsgaGlkZTogIWFkZHJlc3NDb250cm9sLmVtcHR5IH1cIlxuICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWcubGFiZWxcIlxuICAgIFtuYW1lXT1cImF1dG9jb21wbGV0ZU5hbWVcIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgI2FkZHJlc3NDb250cm9sPlxuICA8ZnMtYWRkcmVzcy1mb3JtYXRcbiAgICBbYWRkcmVzc109XCJhZGRyZXNzXCJcbiAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgW3Nob3dOYW1lXT1cInNob3dOYW1lXCJcbiAgICAoY2xpY2spPVwiZWRpdENsaWNrKClcIlxuICAgIFtuZ0NsYXNzXT1cInsgZWRpdGFibGU6IGVkaXRhYmxlIH1cIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICA8L2ZzLWFkZHJlc3MtZm9ybWF0PlxuPC9mcy1hZGRyZXNzLWF1dG9jb21wbGV0ZT5cbiJdfQ==