{"version":3,"file":"asoftwareworld-form-builder-pro-form-control-gps.mjs","sources":["../../src/components/form-control/gps/google-map.service.ts","../../src/components/form-control/gps/gps-dialog.ts","../../src/components/form-control/gps/gps-dialog.html","../../src/components/form-control/gps/gps.ts","../../src/components/form-control/gps/gps.html","../../src/components/form-control/gps/gps.module.ts","../../src/components/form-control/gps/public_api.ts","../../src/components/form-control/gps/asoftwareworld-form-builder-pro-form-control-gps.ts"],"sourcesContent":["/**\n * @license\n * Copyright ASW (A Software World) All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file\n */\nimport { Injectable } from '@angular/core';\ndeclare const google: any;\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class GoogleMapService {\n    autocompleteService: any;\n    private geoCoder: any;\n    searchedAddress: any[] = [];\n    latitude!: number;\n    longitude!: number;\n    placesService: any;\n\n    setCurrentLocation(): void {\n        this.geoCoder = new google.maps.Geocoder();\n        this.latitude = 31.67431470650697;\n        this.longitude = 75.64344802329514;\n        if ('geolocation' in navigator) {\n            navigator.geolocation.getCurrentPosition((position) => {\n                this.latitude = position.coords.latitude ? position.coords.latitude : 31.67431470650697;\n                this.longitude = position.coords.longitude ? position.coords.longitude : 75.64344802329514;\n                this.getAddress(this.latitude, this.longitude);\n            });\n        }\n    }\n\n    getNearestAddress(): Promise<any> {\n        this.placesService = new google.maps.places.PlacesService(document.createElement('div'));\n        this.setCurrentLocation();\n        const nearestAddress: any[] = [];\n        return new Promise((resolve, reject) => {\n            const userLocation = new google.maps.LatLng(this.latitude, this.longitude);\n            const request = {\n                location: userLocation,\n                radius: 1500,\n                types: ['establishment'],\n                rankby: 'distance'\n            };\n            this.placesService.nearbySearch(request, (options: any[], status: any) => {\n                if (status === google.maps.places.PlacesServiceStatus.OK) {\n                    options.map((element) => {\n                        const address = {\n                            id: element.place_id,\n                            label: element.name + ', ' + element.vicinity,\n                            alias: element.name,\n                            addressName: element.vicinity,\n                            latitude: element.geometry.location.lat(),\n                            longitude: element.geometry.location.lng(),\n                            icon: 'https://maps.gstatic.com/consumer/images/icons/2x/place_grey650.png'\n                        };\n                        nearestAddress.push(address);\n                    });\n                    this.searchedAddress = nearestAddress;\n                    resolve(this.searchedAddress);\n                } else {\n                    reject(status);\n                }\n            });\n        }).then();\n    }\n\n    getQueryPredictions(query: string): Promise<any> {\n        this.autocompleteService = new google.maps.places.AutocompleteService();\n        const request = {\n            input: query\n        };\n        let resultAddress: any[] = [];\n        return new Promise((resolve, reject) => {\n            this.autocompleteService.getQueryPredictions(request, (options: any[], status: any) => {\n                if (status === google.maps.places.PlacesServiceStatus.OK && options.length > 0) {\n                    options.map((element) => {\n                        const address = {\n                            id: element.place_id,\n                            label: element.structured_formatting.main_text + ', ' + element.structured_formatting.secondary_text,\n                            alias: element.structured_formatting.main_text,\n                            addressName: element.structured_formatting.secondary_text,\n                            icon: 'https://maps.gstatic.com/consumer/images/icons/2x/place_grey650.png'\n                        };\n                        resultAddress.push(address);\n                    });\n                    this.searchedAddress = resultAddress;\n                    resolve(this.searchedAddress);\n                } else if (status === google.maps.places.PlacesServiceStatus.ZERO_RESULTS) {\n                    resultAddress = [];\n                    resolve(resultAddress);\n                }\n            });\n        }).then();\n    }\n\n    getAddress(latitude: number, longitude: number): Promise<any> {\n        this.geoCoder = new google.maps.Geocoder();\n        this.searchedAddress = [];\n        return new Promise((resolve, reject) => {\n            this.geoCoder.geocode(\n                {\n                    location: {\n                        lat: latitude,\n                        lng: longitude\n                    }\n                },\n                (results: any[], status: string) => {\n                    if (status === google.maps.GeocoderStatus.OK) {\n                        const element = results[0];\n                        const address = {\n                            id: element.place_id,\n                            label: element.formatted_address,\n                            alias: element.formatted_address,\n                            addressName: element.formatted_address,\n                            icon: 'https://maps.gstatic.com/consumer/images/icons/2x/place_grey650.png',\n                            latitude,\n                            longitude\n                        };\n                        this.searchedAddress.push(address);\n                        resolve(this.searchedAddress);\n                    } else {\n                        reject(status);\n                    }\n                }\n            );\n        }).then();\n    }\n\n    getDetails(data: any): Promise<any> {\n        let lat;\n        let lng;\n        return new Promise((resolve, reject) => {\n            this.placesService.getDetails({ placeId: data.id, fields: ['geometry', 'icon'] }, (details: { geometry: { location: { lat: () => any; lng: () => any } }; icon: any }, status: any) => {\n                if (status === google.maps.places.PlacesServiceStatus.OK) {\n                    lat = details.geometry.location.lat();\n                    lng = details.geometry.location.lng();\n                    const address = {\n                        id: data.id,\n                        label: data.label,\n                        alias: data.alias,\n                        addressName: data.addressName,\n                        latitude: lat,\n                        longitude: lng,\n                        icon: data.icon\n                    };\n                    resolve(address);\n                } else {\n                    reject(status);\n                }\n            });\n        }).then();\n    }\n\n    isLetter(value: string): boolean {\n        const letters = /[a-z A-Z]/g;\n        if (value && value.match(letters)) {\n            return false;\n        }\n        return true;\n    }\n}\n","/**\n * @license\n * Copyright ASW (A Software World) All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file\n */\n\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Constants, Icons } from '@asoftwareworld/form-builder-pro/common';\nimport { map, startWith } from 'rxjs/operators';\nimport { GoogleMapService } from './google-map.service';\nimport { GpsControl } from './gps-control';\n\n@Component({\n    selector: 'asw-gps-dialog',\n    templateUrl: './gps-dialog.html'\n})\nexport class AswGpsDialog implements OnInit {\n    constants: any = Constants;\n    icons = Icons;\n    aswEditGpsForm!: FormGroup;\n    status!: boolean;\n    disabled!: boolean;\n    filteredAddress: any;\n    searchedAddress: any[] = [];\n    control: any;\n    constructor(\n        private formBuilder: FormBuilder,\n        private googleMapService: GoogleMapService,\n        public dialogRef: MatDialogRef<AswGpsDialog>,\n        @Inject(MAT_DIALOG_DATA) public data: any\n    ) {}\n\n    async ngOnInit(): Promise<void> {\n        this.control = this.data.control;\n        this.validateFormBuilder();\n        this.searchedAddress = await this.googleMapService.getNearestAddress();\n        this.editProperty(this.control);\n        this.aswEditGpsForm\n            .get('value')\n            ?.valueChanges.pipe(\n                startWith(''),\n                map((address) => address)\n            )\n            .subscribe(async (address) => {\n                await this.searchAddressFromExitingData(address);\n            });\n    }\n\n    validateFormBuilder(): void {\n        this.aswEditGpsForm = this.formBuilder.group({\n            id: ['', [Validators.required]],\n            customClass: [],\n            tooltip: ['', []],\n            label: ['', [Validators.required, Validators.minLength(2)]],\n            latitude: ['', []],\n            longitude: ['', []],\n            value: ['', []],\n            style: ['', [Validators.required]],\n            isRequired: [false],\n            isDisabled: [false]\n        });\n    }\n\n    editProperty(control: GpsControl): void {\n        this.aswEditGpsForm.setValue({\n            id: control.id,\n            customClass: control.customClass ?? '',\n            latitude: control.latitude,\n            longitude: control.longitude,\n            value: control.value ?? '',\n            tooltip: control.tooltip,\n            label: control.label,\n            style: control.style,\n            isRequired: control.isRequired,\n            isDisabled: control.isDisabled\n        });\n    }\n\n    onNoClick(): void {\n        this.dialogRef.close();\n    }\n\n    onSubmit(): void {\n        if (this.aswEditGpsForm.invalid) {\n            return;\n        }\n        this.aswEditGpsForm.value.controlType = this.control.controlType;\n        this.aswEditGpsForm.value.guid = this.control.guid;\n        this.dialogRef.close(this.aswEditGpsForm.value);\n    }\n\n    onStatusChange(event: any): void {\n        this.status = event.checked ? true : false;\n        if (event.checked === undefined) {\n            this.status = event.target.checked ? true : false;\n        }\n    }\n\n    private async searchAddressFromExitingData(address: string): Promise<void> {\n        const filteredAddress = this.searchedAddress.find((x) => x.label === address);\n        if (filteredAddress) {\n            await this.selectedAddress(filteredAddress);\n        } else {\n            await this.getAddressFromGoogleApi(address);\n        }\n    }\n\n    private async selectedAddress(filteredAddress: any): Promise<void> {\n        if (!filteredAddress?.latitude && !filteredAddress?.longitude) {\n            filteredAddress = await this.googleMapService.getDetails(filteredAddress);\n        }\n        this.aswEditGpsForm.patchValue({\n            latitude: filteredAddress.latitude,\n            longitude: filteredAddress.longitude\n        });\n    }\n\n    async getAddressFromGoogleApi(address: string): Promise<void> {\n        if (address) {\n            this.searchedAddress = await this.googleMapService.getQueryPredictions(address);\n            if (this.searchedAddress.length === 0) {\n                const isValidSearch = this.googleMapService.isLetter(address);\n                if (isValidSearch) {\n                    const lat = address.split(',')[0].trim();\n                    const lng = address.split(',')[1].trim();\n                    this.searchedAddress = await this.googleMapService.getAddress(Number(lat), Number(lng));\n                } else {\n                    this.searchedAddress = [];\n                    this.aswEditGpsForm.get('value')?.setErrors({ searchAddress: true });\n                }\n            }\n            this.filteredAddress = this.searchedAddress;\n        } else {\n            this.filteredAddress = this.searchedAddress;\n        }\n    }\n}\n","<div class=\"asw-dialog-header\">\r\n    <div class=\"asw-edit-row-dialog\">\r\n        <div class=\"asw-dialog-header clearfix\">\r\n            <div class=\"asw-dialog-about\">\r\n                <h1 mat-dialog-title class=\"asw-m-0\">{{'FormControl.Edit' | aswTranslate}} {{control.label | aswTranslate}}</h1>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <button mat-icon-button (click)=\"onNoClick()\" aria-label=\"Close dialog\" class=\"asw-mt-2 asw-me-2\">\r\n        <div [innerHTML]=\"icons.close | aswSafeHtml\"></div>\r\n    </button>\r\n</div>\r\n<form [formGroup]=\"aswEditGpsForm\" (ngSubmit)=\"onSubmit()\">\r\n    <mat-dialog-content class=\"mat-typography\">\r\n        <div class=\"asw-row\">\r\n            <ng-container *ngIf=\"data.CSSFramework === 'material'; else bootstrap\">\r\n                <ng-container *ngIf=\"!data.propertyPersonalization.includes('uniqueId')\">\r\n                    <div class=\"asw-col-md-12\">\r\n                        <mat-form-field appearance=\"outline\" class=\"asw-width-100\">\r\n                            <mat-label>{{'FormControl.UniqueId' | aswTranslate}}</mat-label>\r\n                            <input matInput type=\"text\"\r\n                                            name=\"id\"\r\n                                            placeholder=\"{{'FormControl.UniqueId' | aswTranslate}}\"\r\n                                            matTooltip=\"{{'FormControl.UniqueId' | aswTranslate}}\"\r\n                                            formControlName=\"id\" required>\r\n                            <mat-error *ngFor=\"let validation of constants.accountValidationMessages.id\">\r\n                                <ng-container *ngIf=\"aswEditGpsForm.get('id')?.hasError(validation.type) && (aswEditGpsForm.get('id')?.dirty || aswEditGpsForm.get('id')?.touched)\">\r\n                                    {{validation.message | aswTranslate}}\r\n                                </ng-container>\r\n                            </mat-error>\r\n                        </mat-form-field>\r\n                    </div>\r\n                </ng-container>\r\n                <div class=\"asw-col-md-6\">\r\n                    <mat-form-field appearance=\"outline\" class=\"asw-width-100\">\r\n                        <mat-label>{{'FormControl.Label' | aswTranslate}}</mat-label>\r\n                        <input matInput type=\"text\"\r\n                                        placeholder=\"{{'FormControl.Label' | aswTranslate}}\"\r\n                                        matTooltip=\"{{'FormControl.Label' | aswTranslate}}\"\r\n                                        formControlName=\"label\" required>\r\n                        <mat-error *ngFor=\"let validation of constants.accountValidationMessages.label\">\r\n                            <ng-container *ngIf=\"aswEditGpsForm.get('label')?.hasError(validation.type) && (aswEditGpsForm.get('label')?.dirty || aswEditGpsForm.get('label')?.touched)\">\r\n                                {{validation.message | aswTranslate}}\r\n                            </ng-container>\r\n                        </mat-error>\r\n                    </mat-form-field>\r\n                </div>\r\n                <div class=\"asw-col-md-6\">\r\n                    <mat-form-field appearance=\"outline\" class=\"asw-width-100\">\r\n                        <mat-label>{{'FormControl.Tooltip' | aswTranslate}}</mat-label>\r\n                        <input matInput type=\"text\"\r\n                            placeholder=\"{{'FormControl.Tooltip' | aswTranslate}}\"\r\n                            matTooltip=\"{{'FormControl.Tooltip' | aswTranslate}}\"\r\n                            formControlName=\"tooltip\">\r\n                    </mat-form-field>\r\n                </div>\r\n                <ng-container *ngIf=\"!data.propertyPersonalization.includes('customCSSClass')\">\r\n                    <div class=\"asw-col-md-12\">\r\n                        <mat-form-field appearance=\"outline\" class=\"asw-width-100\">\r\n                            <mat-label>{{'FormControl.CustomCSSClass' | aswTranslate}}</mat-label>\r\n                            <input matInput type=\"text\"\r\n                                    name=\"customClass\"\r\n                                    placeholder=\"{{'FormControl.CustomCSSClass' | aswTranslate}}\"\r\n                                    matTooltip=\"{{'FormControl.CustomCSSClass' | aswTranslate}}\"\r\n                                    formControlName=\"customClass\">\r\n                        </mat-form-field>\r\n                    </div>\r\n                </ng-container>\r\n                <div class=\"asw-col-md-12\">\r\n                    <mat-form-field appearance=\"outline\" class=\"asw-width-100\">\r\n                        <mat-label>{{'FormControl.Style' | aswTranslate}}</mat-label>\r\n                        <mat-select formControlName=\"style\" matTooltip=\"{{'FormControl.SelectStyle' | aswTranslate}}\">\r\n                            <mat-option value=\"legacy\">Legacy</mat-option>\r\n                            <mat-option value=\"standard\">Standard</mat-option>\r\n                            <mat-option value=\"fill\">Fill</mat-option>\r\n                            <mat-option value=\"outline\">Outline</mat-option>                    \r\n                        </mat-select>\r\n                    </mat-form-field>\r\n                </div>\r\n                <div class=\"asw-col-md-6\">\r\n                    <mat-form-field appearance=\"outline\" class=\"asw-width-100\">\r\n                        <mat-label>{{'FormControl.Latitude' | aswTranslate}}</mat-label>\r\n                        <input matInput type=\"text\"\r\n                                        name=\"latitude\"\r\n                                        placeholder=\"{{'FormControl.Latitude' | aswTranslate}}\"\r\n                                        matTooltip=\"{{'FormControl.Latitude' | aswTranslate}}\"\r\n                                        formControlName=\"latitude\">\r\n                    </mat-form-field>\r\n                </div>\r\n                <div class=\"asw-col-md-6\">\r\n                    <mat-form-field appearance=\"outline\" class=\"asw-width-100\">\r\n                        <mat-label>{{'FormControl.Longitude' | aswTranslate}}</mat-label>\r\n                        <input matInput type=\"text\"\r\n                                        name=\"longitude\"\r\n                                        placeholder=\"{{'FormControl.Longitude' | aswTranslate}}\"\r\n                                        matTooltip=\"{{'FormControl.Longitude' | aswTranslate}}\"\r\n                                        formControlName=\"longitude\">\r\n                    </mat-form-field>\r\n                </div>\r\n                <div class=\"asw-col-md-12\">\r\n                    <mat-form-field appearance=\"outline\" class=\"asw-width-100\">\r\n                        <mat-label>{{'FormControl.SearchLocation' | aswTranslate}}</mat-label>\r\n                        <input matInput\r\n                            aria-label=\"location\"\r\n                            [matAutocomplete]=\"auto\"\r\n                            formControlName=\"value\">\r\n                        <mat-autocomplete #auto=\"matAutocomplete\">\r\n                            <mat-option *ngFor=\"let address of filteredAddress\" [value]=\"address.label\">\r\n                                <img class=\"example-option-img\" aria-hidden [src]=\"address.icon\" height=\"20\">\r\n                                <span>{{address.alias}}</span> \r\n                                <small> {{address.addressName}}</small>\r\n                            </mat-option>\r\n                        </mat-autocomplete>\r\n                        <mat-error *ngFor=\"let validation of constants.accountValidationMessages.searchAddress\">\r\n                            <ng-container *ngIf=\"aswEditGpsForm.get('value')?.errors?.searchAddress\">\r\n                                {{validation.message | aswTranslate}}\r\n                            </ng-container>\r\n                        </mat-error>\r\n                    </mat-form-field>\r\n                </div>\r\n                <div class=\"asw-col-md-4\">\r\n                    <mat-slide-toggle color=\"primary\"\r\n                        #isActive\r\n                        formControlName=\"isRequired\"\r\n                        (change)=\"onStatusChange($event)\">\r\n                        {{(status ? 'FormControl.Required' : 'FormControl.NotRequired') | aswTranslate}}\r\n                    </mat-slide-toggle>\r\n                </div>\r\n                <div class=\"asw-col-md-4\">\r\n                    <mat-slide-toggle color=\"primary\"\r\n                            #isDisable\r\n                            formControlName=\"isDisabled\">\r\n                            {{'FormControl.Readonly' | aswTranslate}}\r\n                    </mat-slide-toggle>\r\n                </div>\r\n            </ng-container>\r\n            <ng-template #bootstrap>\r\n                <ng-container *ngIf=\"!data.propertyPersonalization.includes('uniqueId')\">\r\n                    <div class=\"asw-col-md-6\">\r\n                        <div class=\"asw-mb-3\">\r\n                            <label class=\"asw-input-label asw-invalid-label {{(aswEditGpsForm.get('id')?.invalid && (aswEditGpsForm.get('id')?.dirty || aswEditGpsForm.get('id')?.touched)) ? 'asw-red-color' : ''}}\">{{'FormControl.UniqueId' | aswTranslate}}</label>\r\n                            <input type=\"text\"\r\n                                name=\"id\"\r\n                                class=\"asw-input-control\"\r\n                                [class.asw-is-invalid]=\"(aswEditGpsForm.get('id')?.invalid && (aswEditGpsForm.get('id')?.dirty || aswEditGpsForm.get('id')?.touched))\"\r\n                                matTooltip=\"{{'FormControl.UniqueId' | aswTranslate}}\"\r\n                                formControlName=\"id\" required>\r\n                            <div *ngFor=\"let validation of constants.accountValidationMessages.id\" class=\"invalid-feedback\">\r\n                                <ng-container *ngIf=\"aswEditGpsForm.get('id')?.hasError(validation.type) && (aswEditGpsForm.get('id')?.dirty || aswEditGpsForm.get('id')?.touched)\">\r\n                                    {{validation.message | aswTranslate}}\r\n                                </ng-container>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </ng-container>\r\n                <div class=\"asw-col-md-6\">\r\n                    <div class=\"asw-mb-3\">\r\n                        <label class=\"asw-input-label asw-invalid-label {{(aswEditGpsForm.get('label')?.invalid && (aswEditGpsForm.get('label')?.dirty || aswEditGpsForm.get('label')?.touched)) ? 'asw-red-color' : ''}}\">{{'FormControl.Label' | aswTranslate}}</label>\r\n                        <input type=\"text\"\r\n                            class=\"asw-input-control\"\r\n                            [class.asw-is-invalid]=\"(aswEditGpsForm.get('label')?.invalid && (aswEditGpsForm.get('label')?.dirty || aswEditGpsForm.get('label')?.touched))\"\r\n                            matTooltip=\"{{'FormControl.Label' | aswTranslate}}\"\r\n                            formControlName=\"label\" required>\r\n                        <div *ngFor=\"let validation of constants.accountValidationMessages.label\" class=\"invalid-feedback\">\r\n                            <ng-container *ngIf=\"aswEditGpsForm.get('label')?.hasError(validation.type) && (aswEditGpsForm.get('label')?.dirty || aswEditGpsForm.get('label')?.touched)\">\r\n                                {{validation.message | aswTranslate}}\r\n                            </ng-container>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <ng-container *ngIf=\"!data.propertyPersonalization.includes('customCSSClass')\">\r\n                    <div class=\"asw-col-md-6\">\r\n                        <div class=\"asw-mb-3\">\r\n                            <label class=\"asw-input-label\">{{'FormControl.CustomCSSClass' | aswTranslate}}</label>\r\n                            <input type=\"text\"\r\n                                name=\"customClass\"\r\n                                class=\"asw-input-control\"\r\n                                matTooltip=\"{{'FormControl.CustomCSSClass' | aswTranslate}}\"\r\n                                formControlName=\"customClass\">\r\n                        </div>\r\n                    </div>\r\n                </ng-container>\r\n                <div class=\"asw-col-md-6\">\r\n                    <div class=\"asw-mb-3\">\r\n                        <label class=\"asw-input-label\">{{'FormControl.Tooltip' | aswTranslate}}</label>\r\n                        <input type=\"text\"\r\n                            class=\"asw-input-control\"\r\n                            matTooltip=\"{{'FormControl.Tooltip' | aswTranslate}}\"\r\n                            formControlName=\"tooltip\">\r\n                    </div>\r\n                </div>\r\n                <div class=\"asw-col-md-6\">\r\n                    <div class=\"asw-mb-3\">\r\n                        <label class=\"asw-input-label\">{{'FormControl.Latitude' | aswTranslate}}</label>\r\n                        <input type=\"text\"\r\n                            name=\"latitude\"\r\n                            class=\"asw-input-control\"\r\n                            matTooltip=\"{{'FormControl.Latitude' | aswTranslate}}\"\r\n                            formControlName=\"latitude\">\r\n                    </div>\r\n                </div>\r\n                <div class=\"asw-col-md-6\">\r\n                    <div class=\"asw-mb-3\">\r\n                        <label class=\"asw-input-label\">{{'FormControl.Longitude' | aswTranslate}}</label>\r\n                        <input type=\"text\"\r\n                            name=\"longitude\"\r\n                            class=\"asw-input-control\"\r\n                            matTooltip=\"{{'FormControl.Longitude' | aswTranslate}}\"\r\n                            formControlName=\"longitude\">\r\n                    </div>\r\n                </div>\r\n                <div class=\"asw-col-md-12\">\r\n                    <div class=\"asw-mb-3\">\r\n                        <label class=\"asw-input-label\">{{'FormControl.SearchLocation' | aswTranslate}}</label>\r\n                        <input class=\"asw-input-control\"\r\n                            aria-label=\"location\"\r\n                            [matAutocomplete]=\"auto\"\r\n                            formControlName=\"value\">\r\n                        <mat-autocomplete #auto=\"matAutocomplete\">\r\n                            <mat-option *ngFor=\"let address of filteredAddress\" [value]=\"address.label\">\r\n                                <img class=\"example-option-img\" aria-hidden [src]=\"address.icon\" height=\"20\">\r\n                                <span>{{address.alias}}</span> \r\n                                <small> {{address.addressName}}</small>\r\n                            </mat-option>\r\n                        </mat-autocomplete>\r\n                        <div *ngFor=\"let validation of constants.accountValidationMessages.searchAddress\">\r\n                            <ng-container *ngIf=\"aswEditGpsForm.get('value')?.errors?.searchAddress\">\r\n                                {{validation.message | aswTranslate}}\r\n                            </ng-container>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"asw-col-md-4\">\r\n                    <div class=\"asw-mb-3\">\r\n                        <div class=\"asw-form-check asw-form-switch\">\r\n                            <input class=\"asw-form-check-input\" \r\n                                type=\"checkbox\" \r\n                                #isActive\r\n                                id=\"isActive\" \r\n                                formControlName=\"isRequired\"\r\n                                (change)=\"onStatusChange($event)\">\r\n                            <label class=\"asw-form-check-label\" for=\"isActive\">\r\n                                {{(status ? 'FormControl.Required' : 'FormControl.NotRequired') | aswTranslate}}\r\n                            </label>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"asw-col-md-4\">\r\n                    <div class=\"asw-mb-3\">\r\n                        <div class=\"asw-form-check asw-form-switch\">\r\n                            <input class=\"asw-form-check-input\" \r\n                                type=\"checkbox\"\r\n                                id=\"isDisable\" \r\n                                #isDisable\r\n                                formControlName=\"isDisabled\"\r\n                                (change)=\"onStatusChange($event)\">\r\n                            <label class=\"asw-form-check-label\" for=\"isDisable\">\r\n                                {{'FormControl.Readonly' | aswTranslate}}\r\n                            </label>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </ng-template>\r\n        </div>\r\n    </mat-dialog-content>\r\n    <mat-dialog-actions align=\"end\">\r\n        <button type=\"button\"\r\n                class=\"asw-button asw-button-danger asw-mb-1 asw-me-2\"\r\n                (click)=\"onNoClick()\">\r\n            {{'FormControl.No' | aswTranslate}}\r\n        </button>\r\n        <button type=\"submit\"\r\n                class=\"asw-button asw-button-primary asw-mb-1\"\r\n                cdkFocusInitial>\r\n            {{'FormControl.Yes' | aswTranslate}}\r\n        </button>\r\n    </mat-dialog-actions>\r\n</form>\r\n\r\n","/**\n * @license\n * Copyright ASW (A Software World) All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file\n */\n\nimport { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { CSSFrameworkEnum } from '@asoftwareworld/form-builder-pro/api';\nimport { Constants, Icons } from '@asoftwareworld/form-builder-pro/common';\nimport { AswConfirmDialog } from '@asoftwareworld/form-builder-pro/form-control/confirm-dialog';\nimport { GoogleMapService } from './google-map.service';\nimport { GpsControl } from './gps-control';\nimport { AswGpsDialog } from './gps-dialog';\n\n@Component({\n    selector: 'asw-gps',\n    templateUrl: './gps.html'\n})\nexport class AswGps implements OnInit {\n    searchedAddress: any[] = [];\n    filteredAddress: any;\n    constants: any = Constants;\n    icons = Icons;\n    @ViewChild('input') gpsForm!: HTMLFormElement;\n    /**\n     * Button control\n     */\n    @Input() control: GpsControl | null = null;\n    @Input() CSSFramework: CSSFrameworkEnum = CSSFrameworkEnum.Material;\n    @Input() isPreviewTemplate = false;\n    @Input() propertyPersonalization: string[] = [];\n\n    @Output() gpsUpdateEvent = new EventEmitter<GpsControl>();\n    @Output() gpsDeleteEvent = new EventEmitter<GpsControl>();\n    @Output() gpsAddressChange = new EventEmitter<GpsControl>();\n    @Output() duplicateControl = new EventEmitter<GpsControl>();\n\n    constructor(\n        public dialog: MatDialog,\n        private googleMapService: GoogleMapService\n    ) {}\n\n    async ngOnInit(): Promise<void> {\n        if (this.control?.latitude && this.control.longitude && !this.control.value) {\n            const searchedAddress = await this.googleMapService.getAddress(Number(this.control?.latitude), Number(this.control.longitude));\n            this.control.value = searchedAddress[0].label;\n        }\n        this.searchedAddress = await this.googleMapService.getNearestAddress();\n        this.filteredAddress = this.searchedAddress;\n    }\n\n    /**\n     * Delete gps control based on control index\n     * @param control gps control items\n     */\n    deleteGpsDialog(control: GpsControl): void {\n        const dialogRef = this.dialog.open(AswConfirmDialog, {\n            width: '350px',\n            data: { name: control.controlType, message: this.constants.messages.waringMessage }\n        });\n        dialogRef.afterClosed().subscribe((result) => {\n            if (result !== undefined) {\n                this.gpsDeleteEvent.emit(control);\n            }\n        });\n    }\n\n    editGpsDialog(control: GpsControl): void {\n        const dialogRef = this.dialog.open(AswGpsDialog, {\n            width: '60%',\n            disableClose: true,\n            data: { control, CSSFramework: this.CSSFramework, propertyPersonalization: this.propertyPersonalization }\n        });\n        dialogRef.afterClosed().subscribe((result) => {\n            if (result !== undefined) {\n                this.gpsUpdateEvent.emit(result);\n            }\n        });\n    }\n\n    async onChange(address: string, control: GpsControl): Promise<void> {\n        const filteredAddress = this.searchedAddress.find((x) => x.label === address);\n        if (filteredAddress) {\n            await this.selectedAddress(filteredAddress);\n        } else {\n            await this.getAddressFromGoogleApi(address);\n        }\n        this.gpsAddressChange.emit(control);\n    }\n\n    private async selectedAddress(filteredAddress: any): Promise<void> {\n        if (!filteredAddress?.latitude && !filteredAddress?.longitude) {\n            filteredAddress = await this.googleMapService.getDetails(filteredAddress);\n        }\n        if (this.control) {\n            this.control.latitude = filteredAddress.latitude;\n            this.control.longitude = filteredAddress.longitude;\n            this.control.value = filteredAddress.label;\n        }\n    }\n\n    async getAddressFromGoogleApi(address: string): Promise<void> {\n        if (address) {\n            this.searchedAddress = await this.googleMapService.getQueryPredictions(address);\n            if (this.searchedAddress.length === 0) {\n                const isValidSearch = this.googleMapService.isLetter(address);\n                if (isValidSearch) {\n                    const lat = address.split(',')[0].trim();\n                    const lng = address.split(',')[1].trim();\n                    this.searchedAddress = await this.googleMapService.getAddress(Number(lat), Number(lng));\n                } else {\n                    this.searchedAddress = [];\n                    this.gpsForm.control.setErrors({ searchAddress: true });\n                }\n            }\n            this.filteredAddress = this.searchedAddress;\n        } else {\n            this.filteredAddress = this.searchedAddress;\n        }\n    }\n\n    duplicateGpsControl(control: GpsControl): void {\n        this.duplicateControl.emit(control);\n    }\n}\n","<ng-container *ngIf=\"control as control\">\r\n    <ng-container *ngIf=\"CSSFramework === 'material'; else bootstrap\">\r\n        <mat-form-field [appearance]=\"control.style\" class=\"asw-width-100 {{control.customClass}}\">\r\n            <mat-label>{{control.label | aswTranslate}}</mat-label>\r\n            <input matInput\r\n                [id]=\"control.id\"\r\n                [placeholder]=\"control.label | aswTranslate\"\r\n                [matAutocomplete]=\"auto\"\r\n                [(ngModel)]=\"control.value\"\r\n                #input=\"ngModel\"\r\n                (ngModelChange)=\"onChange($event, control)\"\r\n                [matTooltip]=\"control.tooltip | aswTranslate\"\r\n                [required]=\"control.isRequired\"\r\n                [disabled]=\"control.isDisabled ? true : false\">\r\n            <mat-autocomplete #auto=\"matAutocomplete\">\r\n                <mat-option *ngFor=\"let address of filteredAddress\" [value]=\"address.label\">\r\n                    <img class=\"example-option-img\" aria-hidden [src]=\"address.icon\" height=\"20\">\r\n                    <span>{{address.alias}}</span> \r\n                    <small> {{address.addressName}}</small>\r\n                </mat-option>\r\n            </mat-autocomplete>\r\n            <mat-error *ngIf=\"input.invalid && (input.dirty || input.touched)\">\r\n                <ng-container *ngIf=\"input?.errors?.required\">\r\n                    {{control.label | aswTranslate}} {{'FormControl.IsRequired' | aswTranslate}}\r\n                </ng-container>\r\n                <ng-container *ngIf=\"input?.errors?.searchAddress\">\r\n                    Sorry, {{control.value}} did not found.\r\n                </ng-container>\r\n            </mat-error>\r\n        </mat-form-field>\r\n    </ng-container>\r\n    <ng-template #bootstrap>\r\n        <div class=\"asw-mb-3\">\r\n            <label for=\"{{control.id}}\" \r\n            class=\"asw-input-label {{(input.invalid && (input.dirty || input.touched)) ? 'asw-red-color' : ''}}\"\r\n            [class.asw-invalid-label]=\"control.isRequired\">{{control.label | aswTranslate}}</label>\r\n            <input\r\n                [id]=\"control.id\"\r\n                [placeholder]=\"control.label | aswTranslate\"\r\n                [matAutocomplete]=\"auto\"\r\n                [(ngModel)]=\"control.value\"\r\n                #input=\"ngModel\"\r\n                (ngModelChange)=\"onChange($event, control)\"\r\n                [matTooltip]=\"control.tooltip | aswTranslate\"\r\n                class=\"asw-input-control {{control.customClass}}\"\r\n                [class.asw-is-invalid]=\"input.invalid && (input.dirty || input.touched)\"\r\n                [required]=\"control.isRequired\"\r\n                [disabled]=\"control.isDisabled ? true : false\">\r\n            <mat-autocomplete #auto=\"matAutocomplete\">\r\n                <mat-option *ngFor=\"let address of filteredAddress\" [value]=\"address.label\">\r\n                    <img class=\"example-option-img\" aria-hidden [src]=\"address.icon\" height=\"20\">\r\n                    <span>{{address.alias}}</span> \r\n                    <small> {{address.addressName}}</small>\r\n                </mat-option>\r\n            </mat-autocomplete>\r\n            <div *ngIf=\"input.invalid && (input.dirty || input.touched)\" class=\"invalid-feedback\">\r\n                <ng-container *ngIf=\"input?.errors?.required\">\r\n                    {{control.label | aswTranslate}} {{'FormControl.IsRequired' | aswTranslate}}\r\n                </ng-container>\r\n                <ng-container *ngIf=\"input?.errors?.searchAddress\">\r\n                    Sorry, {{control.value}} did not found.\r\n                </ng-container>\r\n            </div>\r\n        </div>\r\n    </ng-template>\r\n    <div class=\"asw-row\" *ngIf=\"isPreviewTemplate\">\r\n        <div class=\"asw-col-md-12\" align=\"right\">\r\n            <button mat-icon-button \r\n                    type=\"button\" \r\n                    matTooltip=\"{{'FormControl.Duplicate' | aswTranslate}}\" \r\n                    [matTooltipPosition]=\"'below'\" \r\n                    (click)=\"duplicateGpsControl(control)\">\r\n                <div [innerHTML]=\"icons.contentCopy | aswSafeHtml\"></div>\r\n            </button>\r\n            <button mat-icon-button \r\n                    type=\"button\" \r\n                    matTooltip=\"{{'FormControl.Edit' | aswTranslate}}\" \r\n                    [matTooltipPosition]=\"'below'\" \r\n                    (click)=\"editGpsDialog(control)\">\r\n                <div [innerHTML]=\"icons.edit | aswSafeHtml\"></div>\r\n            </button>\r\n            <button mat-icon-button \r\n                    type=\"button\" \r\n                    matTooltip=\"{{'FormControl.Delete' | aswTranslate}}\" \r\n                    [matTooltipPosition]=\"'below'\" \r\n                    (click)=\"deleteGpsDialog(control)\">\r\n                <div [innerHTML]=\"icons.delete2 | aswSafeHtml\"></div>\r\n            </button>\r\n        </div>\r\n    </div>\r\n</ng-container>","/**\n * @license\n * Copyright ASW (A Software World) All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AswPipeModule, MaterialModule } from '@asoftwareworld/form-builder-pro/common';\nimport { AswTranslateModule } from '@asoftwareworld/form-builder-pro/core';\nimport { AswConfirmDialogModule } from '@asoftwareworld/form-builder-pro/form-control/confirm-dialog';\n\nimport { AswGps } from './gps';\nimport { AswGpsDialog } from './gps-dialog';\n\n@NgModule({\n    imports: [CommonModule, FormsModule, ReactiveFormsModule, MaterialModule, AswConfirmDialogModule, AswTranslateModule, AswPipeModule],\n    declarations: [AswGps, AswGpsDialog],\n    exports: [AswGps, AswGpsDialog]\n})\nexport class AswGpsModule {}\n","/**\n * @license\n * Copyright ASW (A Software World) All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file\n */\n\nexport * from './gps';\nexport * from './gps-dialog';\nexport * from './gps-control';\nexport * from './google-map.service';\nexport * from './gps.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2.GoogleMapService","i3","i4","i10","i11","i12"],"mappings":"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"}