2019-08-12 19:34:23 +03:00
|
|
|
///
|
2024-01-09 10:46:16 +02:00
|
|
|
/// Copyright © 2016-2024 The Thingsboard Authors
|
2019-08-12 19:34:23 +03:00
|
|
|
///
|
|
|
|
|
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
/// you may not use this file except in compliance with the License.
|
|
|
|
|
/// You may obtain a copy of the License at
|
|
|
|
|
///
|
|
|
|
|
/// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
///
|
|
|
|
|
/// Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
/// See the License for the specific language governing permissions and
|
|
|
|
|
/// limitations under the License.
|
|
|
|
|
///
|
|
|
|
|
|
2024-02-29 16:15:26 +01:00
|
|
|
import { Component, Input, OnInit, ViewChild } from '@angular/core';
|
2023-02-02 15:55:06 +02:00
|
|
|
import { UntypedFormGroup } from '@angular/forms';
|
2024-02-29 16:15:26 +01:00
|
|
|
import { Country, CountryData } from '../models/country.models';
|
|
|
|
|
import { Observable, map, startWith } from 'rxjs';
|
|
|
|
|
import { PhoneInputComponent } from './phone-input.component';
|
|
|
|
|
import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
|
2019-08-12 19:34:23 +03:00
|
|
|
@Component({
|
|
|
|
|
selector: 'tb-contact',
|
2024-02-22 18:10:06 +01:00
|
|
|
templateUrl: './contact.component.html',
|
|
|
|
|
providers: [
|
|
|
|
|
CountryData
|
|
|
|
|
]
|
2019-08-12 19:34:23 +03:00
|
|
|
})
|
2024-02-29 16:15:26 +01:00
|
|
|
export class ContactComponent implements OnInit {
|
2019-08-12 19:34:23 +03:00
|
|
|
|
|
|
|
|
@Input()
|
2023-02-02 15:55:06 +02:00
|
|
|
parentForm: UntypedFormGroup;
|
2019-08-12 19:34:23 +03:00
|
|
|
|
|
|
|
|
@Input() isEdit: boolean;
|
2024-02-29 16:15:26 +01:00
|
|
|
@Input() phoneInputDefaultCountry = 'US';
|
|
|
|
|
|
|
|
|
|
@ViewChild('phoneInput') phoneInput: PhoneInputComponent | undefined;
|
2019-08-12 19:34:23 +03:00
|
|
|
|
2024-02-22 18:10:06 +01:00
|
|
|
countries = this.countryData.allCountries;
|
2024-02-29 16:15:26 +01:00
|
|
|
countriesFiltered: Observable<Country[]>;
|
|
|
|
|
|
|
|
|
|
constructor(private countryData: CountryData) {
|
|
|
|
|
this.displayCountryWithFlag = this.displayCountryWithFlag.bind(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ngOnInit() {
|
|
|
|
|
this.countriesFiltered = this.parentForm.get('country').valueChanges
|
|
|
|
|
.pipe(
|
|
|
|
|
startWith(''),
|
|
|
|
|
map((countryName: string) => this._filterCountries(countryName))
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private _filterCountries(countryName: string): Country[] {
|
|
|
|
|
const filterValue = countryName.toLowerCase();
|
|
|
|
|
return this.countries.filter(country => this.displayCountryWithFlag(country.name).toLowerCase().includes(filterValue));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
displayCountryWithFlag(countryName: string): string {
|
|
|
|
|
const country = this.countries.find(c => c.name === countryName);
|
|
|
|
|
if (!country) {
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
return country ? `${country.flag} ${country.name}` : '';
|
|
|
|
|
}
|
2019-08-12 19:34:23 +03:00
|
|
|
|
2024-02-29 16:15:26 +01:00
|
|
|
onCountryChange(select: MatAutocompleteSelectedEvent) {
|
|
|
|
|
// Get the selected country and check if the phone number is empty
|
|
|
|
|
// If it is, set the country code to the selected country
|
|
|
|
|
const countryName = select.option.value;
|
|
|
|
|
const country = this.countries.find(c => c.name === countryName);
|
|
|
|
|
if (country && this.phoneInput) {
|
|
|
|
|
if (!this.phoneInput.phoneFormGroup.get('phoneNumber').value) {
|
|
|
|
|
this.phoneInput.phoneFormGroup.get('country').setValue(country.iso2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-08-12 19:34:23 +03:00
|
|
|
}
|