UNPKG

ngx-timezones

Version:

An Angular module for timezones (based on moment.js)

832 lines (825 loc) 29.8 kB
import { EventEmitter, Component, ChangeDetectorRef, Output, Input, NgModule } from '@angular/core'; import { FormControl, ReactiveFormsModule, FormsModule } from '@angular/forms'; import { tz } from 'moment-timezone'; import { startWith, map } from 'rxjs/operators'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { NgxMatSelectSearchModule } from 'ngx-mat-select-search'; import { MatSelectModule } from '@angular/material/select'; import { MatFormFieldModule } from '@angular/material/form-field'; const countryZones = { AD: { name: 'Andorra', zones: ['Europe/Andorra'] }, AE: { name: 'United Arab Emirates', zones: ['Asia/Dubai'] }, AF: { name: 'Afghanistan', zones: ['Asia/Kabul'] }, AG: { name: 'Antigua & Barbuda', zones: ['America/Antigua'], }, AI: { name: 'Anguilla', zones: ['America/Anguilla'], }, AL: { name: 'Albania', zones: ['Europe/Tirane'] }, AM: { name: 'Armenia', zones: ['Asia/Yerevan'] }, AO: { name: 'Angola', zones: ['Africa/Lagos', 'Africa/Luanda'] }, AQ: { name: 'Antarctica', zones: [ 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Mawson', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Pacific/Auckland', 'Antarctica/McMurdo', ], }, AR: { name: 'Argentina', zones: [ 'America/Argentina/Buenos_Aires', 'America/Argentina/Cordoba', 'America/Argentina/Salta', 'America/Argentina/Jujuy', 'America/Argentina/Tucuman', 'America/Argentina/Catamarca', 'America/Argentina/La_Rioja', 'America/Argentina/San_Juan', 'America/Argentina/Mendoza', 'America/Argentina/San_Luis', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Ushuaia', ], }, AS: { name: 'Samoa (American)', zones: ['Pacific/Pago_Pago'] }, AT: { name: 'Austria', zones: ['Europe/Vienna'] }, AU: { name: 'Australia', zones: [ 'Australia/Lord_Howe', 'Antarctica/Macquarie', 'Australia/Hobart', 'Australia/Currie', 'Australia/Melbourne', 'Australia/Sydney', 'Australia/Broken_Hill', 'Australia/Brisbane', 'Australia/Lindeman', 'Australia/Adelaide', 'Australia/Darwin', 'Australia/Perth', 'Australia/Eucla', ], }, AW: { name: 'Aruba', zones: ['America/Curacao', 'America/Aruba'] }, AX: { name: 'Åland Islands', zones: ['Europe/Helsinki', 'Europe/Mariehamn'], }, AZ: { name: 'Azerbaijan', zones: ['Asia/Baku'] }, BA: { name: 'Bosnia & Herzegovina', zones: ['Europe/Belgrade', 'Europe/Sarajevo'], }, BB: { name: 'Barbados', zones: ['America/Barbados'] }, BD: { name: 'Bangladesh', zones: ['Asia/Dhaka'] }, BE: { name: 'Belgium', zones: ['Europe/Brussels'] }, BF: { name: 'Burkina Faso', zones: ['Africa/Abidjan', 'Africa/Ouagadougou'], }, BG: { name: 'Bulgaria', zones: ['Europe/Sofia'] }, BH: { name: 'Bahrain', zones: ['Asia/Qatar', 'Asia/Bahrain'] }, BI: { name: 'Burundi', zones: ['Africa/Maputo', 'Africa/Bujumbura'] }, BJ: { name: 'Benin', zones: ['Africa/Lagos', 'Africa/Porto-Novo'] }, BL: { name: 'St Barthelemy', zones: ['America/St_Barthelemy'], }, BM: { name: 'Bermuda', zones: ['Atlantic/Bermuda'] }, BN: { name: 'Brunei', zones: ['Asia/Brunei'] }, BO: { name: 'Bolivia', zones: ['America/La_Paz'] }, BQ: { name: 'Caribbean NL', zones: ['America/Curacao', 'America/Kralendijk'], }, BR: { name: 'Brazil', zones: [ 'America/Noronha', 'America/Belem', 'America/Fortaleza', 'America/Recife', 'America/Araguaina', 'America/Maceio', 'America/Bahia', 'America/Sao_Paulo', 'America/Campo_Grande', 'America/Cuiaba', 'America/Santarem', 'America/Porto_Velho', 'America/Boa_Vista', 'America/Manaus', 'America/Eirunepe', 'America/Rio_Branco', ], }, BS: { name: 'Bahamas', zones: ['America/Nassau'] }, BT: { name: 'Bhutan', zones: ['Asia/Thimphu'] }, BW: { name: 'Botswana', zones: ['Africa/Maputo', 'Africa/Gaborone'] }, BY: { name: 'Belarus', zones: ['Europe/Minsk'] }, BZ: { name: 'Belize', zones: ['America/Belize'] }, CA: { name: 'Canada', zones: [ 'America/St_Johns', 'America/Halifax', 'America/Glace_Bay', 'America/Moncton', 'America/Goose_Bay', 'America/Blanc-Sablon', 'America/Toronto', 'America/Nipigon', 'America/Thunder_Bay', 'America/Iqaluit', 'America/Pangnirtung', 'America/Atikokan', 'America/Winnipeg', 'America/Rainy_River', 'America/Resolute', 'America/Rankin_Inlet', 'America/Regina', 'America/Swift_Current', 'America/Edmonton', 'America/Cambridge_Bay', 'America/Yellowknife', 'America/Inuvik', 'America/Creston', 'America/Dawson_Creek', 'America/Fort_Nelson', 'America/Vancouver', 'America/Whitehorse', 'America/Dawson', ], }, CC: { name: 'Cocos (Keeling) Islands', zones: ['Indian/Cocos'] }, CD: { name: 'Congo (Dem. Rep.)', zones: [ 'Africa/Maputo', 'Africa/Lagos', 'Africa/Kinshasa', 'Africa/Lubumbashi', ], }, CF: { name: 'Central African Rep.', zones: ['Africa/Lagos', 'Africa/Bangui'], }, CG: { name: 'Congo (Rep.)', zones: ['Africa/Lagos', 'Africa/Brazzaville'], }, CH: { name: 'Switzerland', zones: ['Europe/Zurich'] }, CI: { name: "Côte d'Ivoire", zones: ['Africa/Abidjan'] }, CK: { name: 'Cook Islands', zones: ['Pacific/Rarotonga'] }, CL: { name: 'Chile', zones: ['America/Santiago', 'America/Punta_Arenas', 'Pacific/Easter'], }, CM: { name: 'Cameroon', zones: ['Africa/Lagos', 'Africa/Douala'] }, CN: { name: 'China', zones: ['Asia/Shanghai', 'Asia/Urumqi'] }, CO: { name: 'Colombia', zones: ['America/Bogota'] }, CR: { name: 'Costa Rica', zones: ['America/Costa_Rica'] }, CU: { name: 'Cuba', zones: ['America/Havana'] }, CV: { name: 'Cape Verde', zones: ['Atlantic/Cape_Verde'] }, CW: { name: 'Curaçao', zones: ['America/Curacao'] }, CX: { name: 'Christmas Island', zones: ['Indian/Christmas'] }, CY: { name: 'Cyprus', zones: ['Asia/Nicosia', 'Asia/Famagusta'] }, CZ: { name: 'Czech Republic', zones: ['Europe/Prague'] }, DE: { name: 'Germany', zones: ['Europe/Zurich', 'Europe/Berlin', 'Europe/Busingen'], }, DJ: { name: 'Djibouti', zones: ['Africa/Nairobi', 'Africa/Djibouti'] }, DK: { name: 'Denmark', zones: ['Europe/Copenhagen'] }, DM: { name: 'Dominica', zones: ['America/Dominica'], }, DO: { name: 'Dominican Republic', zones: ['America/Santo_Domingo'] }, DZ: { name: 'Algeria', zones: ['Africa/Algiers'] }, EC: { name: 'Ecuador', zones: ['America/Guayaquil', 'Pacific/Galapagos'], }, EE: { name: 'Estonia', zones: ['Europe/Tallinn'] }, EG: { name: 'Egypt', zones: ['Africa/Cairo'] }, EH: { name: 'Western Sahara', zones: ['Africa/El_Aaiun'] }, ER: { name: 'Eritrea', zones: ['Africa/Nairobi', 'Africa/Asmara'] }, ES: { name: 'Spain', zones: ['Europe/Madrid', 'Africa/Ceuta', 'Atlantic/Canary'], }, ET: { name: 'Ethiopia', zones: ['Africa/Nairobi', 'Africa/Addis_Ababa'], }, FI: { name: 'Finland', zones: ['Europe/Helsinki'] }, FJ: { name: 'Fiji', zones: ['Pacific/Fiji'] }, FK: { name: 'Falkland Islands', zones: ['Atlantic/Stanley'] }, FM: { name: 'Micronesia', zones: ['Pacific/Chuuk', 'Pacific/Pohnpei', 'Pacific/Kosrae'], }, FO: { name: 'Faroe Islands', zones: ['Atlantic/Faroe'] }, FR: { name: 'France', zones: ['Europe/Paris'] }, GA: { name: 'Gabon', zones: ['Africa/Lagos', 'Africa/Libreville'] }, GB: { name: 'Britain (UK)', zones: ['Europe/London'] }, GD: { name: 'Grenada', zones: ['America/Grenada'], }, GE: { name: 'Georgia', zones: ['Asia/Tbilisi'] }, GF: { name: 'French Guiana', zones: ['America/Cayenne'] }, GG: { name: 'Guernsey', zones: ['Europe/London', 'Europe/Guernsey'] }, GH: { name: 'Ghana', zones: ['Africa/Accra'] }, GI: { name: 'Gibraltar', zones: ['Europe/Gibraltar'] }, GL: { name: 'Greenland', zones: [ 'America/Nuuk', 'America/Danmarkshavn', 'America/Scoresbysund', 'America/Thule', ], }, GM: { name: 'Gambia', zones: ['Africa/Abidjan', 'Africa/Banjul'] }, GN: { name: 'Guinea', zones: ['Africa/Abidjan', 'Africa/Conakry'] }, GP: { name: 'Guadeloupe', zones: ['America/Guadeloupe'], }, GQ: { name: 'Equatorial Guinea', zones: ['Africa/Lagos', 'Africa/Malabo'], }, GR: { name: 'Greece', zones: ['Europe/Athens'] }, GS: { name: 'South Georgia & the South Sandwich Islands', zones: ['Atlantic/South_Georgia'], }, GT: { name: 'Guatemala', zones: ['America/Guatemala'] }, GU: { name: 'Guam', zones: ['Pacific/Guam'] }, GW: { name: 'Guinea-Bissau', zones: ['Africa/Bissau'] }, GY: { name: 'Guyana', zones: ['America/Guyana'] }, HK: { name: 'Hong Kong', zones: ['Asia/Hong_Kong'] }, HN: { name: 'Honduras', zones: ['America/Tegucigalpa'] }, HR: { name: 'Croatia', zones: ['Europe/Belgrade', 'Europe/Zagreb'] }, HT: { name: 'Haiti', zones: ['America/Port-au-Prince'] }, HU: { name: 'Hungary', zones: ['Europe/Budapest'] }, ID: { name: 'Indonesia', zones: ['Asia/Jakarta', 'Asia/Pontianak', 'Asia/Makassar', 'Asia/Jayapura'], }, IE: { name: 'Ireland', zones: ['Europe/Dublin'] }, IL: { name: 'Israel', zones: ['Asia/Jerusalem'] }, IM: { name: 'Isle of Man', zones: ['Europe/London', 'Europe/Isle_of_Man'], }, IN: { name: 'India', zones: ['Asia/Kolkata'] }, IO: { name: 'British Indian Ocean Territory', zones: ['Indian/Chagos'], }, IQ: { name: 'Iraq', zones: ['Asia/Baghdad'] }, IR: { name: 'Iran', zones: ['Asia/Tehran'] }, IS: { name: 'Iceland', zones: ['Atlantic/Reykjavik'] }, IT: { name: 'Italy', zones: ['Europe/Rome'] }, JE: { name: 'Jersey', zones: ['Europe/London', 'Europe/Jersey'] }, JM: { name: 'Jamaica', zones: ['America/Jamaica'] }, JO: { name: 'Jordan', zones: ['Asia/Amman'] }, JP: { name: 'Japan', zones: ['Asia/Tokyo'] }, KE: { name: 'Kenya', zones: ['Africa/Nairobi'] }, KG: { name: 'Kyrgyzstan', zones: ['Asia/Bishkek'] }, KH: { name: 'Cambodia', zones: ['Asia/Bangkok', 'Asia/Phnom_Penh'] }, KI: { name: 'Kiribati', zones: ['Pacific/Tarawa', 'Pacific/Enderbury', 'Pacific/Kiritimati'], }, KM: { name: 'Comoros', zones: ['Africa/Nairobi', 'Indian/Comoro'] }, KN: { name: 'St Kitts & Nevis', zones: ['America/St_Kitts'], }, KP: { name: 'Korea (North)', zones: ['Asia/Pyongyang'] }, KR: { name: 'Korea (South)', zones: ['Asia/Seoul'] }, KW: { name: 'Kuwait', zones: ['Asia/Riyadh', 'Asia/Kuwait'] }, KY: { name: 'Cayman Islands', zones: ['America/Panama', 'America/Cayman'], }, KZ: { name: 'Kazakhstan', zones: [ 'Asia/Almaty', 'Asia/Qyzylorda', 'Asia/Qostanay', 'Asia/Aqtobe', 'Asia/Aqtau', 'Asia/Atyrau', 'Asia/Oral', ], }, LA: { name: 'Laos', zones: ['Asia/Bangkok', 'Asia/Vientiane'] }, LB: { name: 'Lebanon', zones: ['Asia/Beirut'] }, LC: { name: 'St Lucia', zones: ['America/St_Lucia'], }, LI: { name: 'Liechtenstein', zones: ['Europe/Zurich', 'Europe/Vaduz'], }, LK: { name: 'Sri Lanka', zones: ['Asia/Colombo'] }, LR: { name: 'Liberia', zones: ['Africa/Monrovia'] }, LS: { name: 'Lesotho', zones: ['Africa/Johannesburg', 'Africa/Maseru'], }, LT: { name: 'Lithuania', zones: ['Europe/Vilnius'] }, LU: { name: 'Luxembourg', zones: ['Europe/Luxembourg'] }, LV: { name: 'Latvia', zones: ['Europe/Riga'] }, LY: { name: 'Libya', zones: ['Africa/Tripoli'] }, MA: { name: 'Morocco', zones: ['Africa/Casablanca'] }, MC: { name: 'Monaco', zones: ['Europe/Monaco'] }, MD: { name: 'Moldova', zones: ['Europe/Chisinau'] }, ME: { name: 'Montenegro', zones: ['Europe/Belgrade', 'Europe/Podgorica'], }, MF: { name: 'St Martin (French)', zones: ['America/Marigot'], }, MG: { name: 'Madagascar', zones: ['Africa/Nairobi', 'Indian/Antananarivo'], }, MH: { name: 'Marshall Islands', zones: ['Pacific/Majuro', 'Pacific/Kwajalein'], }, MK: { name: 'North Macedonia', zones: ['Europe/Belgrade', 'Europe/Skopje'], }, ML: { name: 'Mali', zones: ['Africa/Abidjan', 'Africa/Bamako'] }, MM: { name: 'Myanmar (Burma)', zones: ['Asia/Yangon'] }, MN: { name: 'Mongolia', zones: ['Asia/Ulaanbaatar', 'Asia/Hovd', 'Asia/Choibalsan'], }, MO: { name: 'Macau', zones: ['Asia/Macau'] }, MP: { name: 'Northern Mariana Islands', zones: ['Pacific/Guam', 'Pacific/Saipan'], }, MQ: { name: 'Martinique', zones: ['America/Martinique'] }, MR: { name: 'Mauritania', zones: ['Africa/Abidjan', 'Africa/Nouakchott'], }, MS: { name: 'Montserrat', zones: ['America/Montserrat'], }, MT: { name: 'Malta', zones: ['Europe/Malta'] }, MU: { name: 'Mauritius', zones: ['Indian/Mauritius'] }, MV: { name: 'Maldives', zones: ['Indian/Maldives'] }, MW: { name: 'Malawi', zones: ['Africa/Maputo', 'Africa/Blantyre'] }, MX: { name: 'Mexico', zones: [ 'America/Mexico_City', 'America/Cancun', 'America/Merida', 'America/Monterrey', 'America/Matamoros', 'America/Mazatlan', 'America/Chihuahua', 'America/Ojinaga', 'America/Hermosillo', 'America/Tijuana', 'America/Bahia_Banderas', ], }, MY: { name: 'Malaysia', zones: ['Asia/Kuala_Lumpur', 'Asia/Kuching'] }, MZ: { name: 'Mozambique', zones: ['Africa/Maputo'] }, NA: { name: 'Namibia', zones: ['Africa/Windhoek'] }, NC: { name: 'New Caledonia', zones: ['Pacific/Noumea'] }, NE: { name: 'Niger', zones: ['Africa/Lagos', 'Africa/Niamey'] }, NF: { name: 'Norfolk Island', zones: ['Pacific/Norfolk'] }, NG: { name: 'Nigeria', zones: ['Africa/Lagos'] }, NI: { name: 'Nicaragua', zones: ['America/Managua'] }, NL: { name: 'Netherlands', zones: ['Europe/Amsterdam'] }, NO: { name: 'Norway', zones: ['Europe/Oslo'] }, NP: { name: 'Nepal', zones: ['Asia/Kathmandu'] }, NR: { name: 'Nauru', zones: ['Pacific/Nauru'] }, NU: { name: 'Niue', zones: ['Pacific/Niue'] }, NZ: { name: 'New Zealand', zones: ['Pacific/Auckland', 'Pacific/Chatham'], }, OM: { name: 'Oman', zones: ['Asia/Dubai', 'Asia/Muscat'] }, PA: { name: 'Panama', zones: ['America/Panama'] }, PE: { name: 'Peru', zones: ['America/Lima'] }, PF: { name: 'French Polynesia', zones: ['Pacific/Tahiti', 'Pacific/Marquesas', 'Pacific/Gambier'], }, PG: { name: 'Papua New Guinea', zones: ['Pacific/Port_Moresby', 'Pacific/Bougainville'], }, PH: { name: 'Philippines', zones: ['Asia/Manila'] }, PK: { name: 'Pakistan', zones: ['Asia/Karachi'] }, PL: { name: 'Poland', zones: ['Europe/Warsaw'] }, PM: { name: 'St Pierre & Miquelon', zones: ['America/Miquelon'] }, PN: { name: 'Pitcairn', zones: ['Pacific/Pitcairn'] }, PR: { name: 'Puerto Rico', zones: ['America/Puerto_Rico'] }, PS: { name: 'Palestine', zones: ['Asia/Gaza', 'Asia/Hebron'] }, PT: { name: 'Portugal', zones: ['Europe/Lisbon', 'Atlantic/Madeira', 'Atlantic/Azores'], }, PW: { name: 'Palau', zones: ['Pacific/Palau'] }, PY: { name: 'Paraguay', zones: ['America/Asuncion'] }, QA: { name: 'Qatar', zones: ['Asia/Qatar'] }, RE: { name: 'Réunion', zones: ['Indian/Reunion'] }, RO: { name: 'Romania', zones: ['Europe/Bucharest'] }, RS: { name: 'Serbia', zones: ['Europe/Belgrade'] }, RU: { name: 'Russia', zones: [ 'Europe/Kaliningrad', 'Europe/Moscow', 'Europe/Simferopol', 'Europe/Kirov', 'Europe/Astrakhan', 'Europe/Volgograd', 'Europe/Saratov', 'Europe/Ulyanovsk', 'Europe/Samara', 'Asia/Yekaterinburg', 'Asia/Omsk', 'Asia/Novosibirsk', 'Asia/Barnaul', 'Asia/Tomsk', 'Asia/Novokuznetsk', 'Asia/Krasnoyarsk', 'Asia/Irkutsk', 'Asia/Chita', 'Asia/Yakutsk', 'Asia/Khandyga', 'Asia/Vladivostok', 'Asia/Ust-Nera', 'Asia/Magadan', 'Asia/Sakhalin', 'Asia/Srednekolymsk', 'Asia/Kamchatka', 'Asia/Anadyr', ], }, RW: { name: 'Rwanda', zones: ['Africa/Maputo', 'Africa/Kigali'] }, SA: { name: 'Saudi Arabia', zones: ['Asia/Riyadh'] }, SB: { name: 'Solomon Islands', zones: ['Pacific/Guadalcanal'] }, SC: { name: 'Seychelles', zones: ['Indian/Mahe'] }, SD: { name: 'Sudan', zones: ['Africa/Khartoum'] }, SE: { name: 'Sweden', zones: ['Europe/Stockholm'] }, SG: { name: 'Singapore', zones: ['Asia/Singapore'] }, SH: { name: 'St Helena', zones: ['Africa/Abidjan', 'Atlantic/St_Helena'], }, SI: { name: 'Slovenia', zones: ['Europe/Belgrade', 'Europe/Ljubljana'], }, SJ: { name: 'Svalbard & Jan Mayen', zones: ['Europe/Oslo', 'Arctic/Longyearbyen'], }, SK: { name: 'Slovakia', zones: ['Europe/Prague', 'Europe/Bratislava'], }, SL: { name: 'Sierra Leone', zones: ['Africa/Abidjan', 'Africa/Freetown'], }, SM: { name: 'San Marino', zones: ['Europe/Rome', 'Europe/San_Marino'], }, SN: { name: 'Senegal', zones: ['Africa/Abidjan', 'Africa/Dakar'] }, SO: { name: 'Somalia', zones: ['Africa/Nairobi', 'Africa/Mogadishu'] }, SR: { name: 'Suriname', zones: ['America/Paramaribo'] }, SS: { name: 'South Sudan', zones: ['Africa/Juba'] }, ST: { name: 'Sao Tome & Principe', zones: ['Africa/Sao_Tome'] }, SV: { name: 'El Salvador', zones: ['America/El_Salvador'] }, SX: { name: 'St Maarten (Dutch)', zones: ['America/Curacao', 'America/Lower_Princes'], }, SY: { name: 'Syria', zones: ['Asia/Damascus'] }, SZ: { name: 'Eswatini (Swaziland)', zones: ['Africa/Johannesburg', 'Africa/Mbabane'], }, TC: { name: 'Turks & Caicos Is', zones: ['America/Grand_Turk'] }, TD: { name: 'Chad', zones: ['Africa/Ndjamena'] }, TF: { name: 'French Southern & Antarctic Lands', zones: ['Indian/Reunion', 'Indian/Kerguelen'], }, TG: { name: 'Togo', zones: ['Africa/Abidjan', 'Africa/Lome'] }, TH: { name: 'Thailand', zones: ['Asia/Bangkok'] }, TJ: { name: 'Tajikistan', zones: ['Asia/Dushanbe'] }, TK: { name: 'Tokelau', zones: ['Pacific/Fakaofo'] }, TL: { name: 'East Timor', zones: ['Asia/Dili'] }, TM: { name: 'Turkmenistan', zones: ['Asia/Ashgabat'] }, TN: { name: 'Tunisia', zones: ['Africa/Tunis'] }, TO: { name: 'Tonga', zones: ['Pacific/Tongatapu'] }, TR: { name: 'Turkey', zones: ['Europe/Istanbul'] }, TT: { name: 'Trinidad & Tobago', zones: ['America/Port_of_Spain'] }, TV: { name: 'Tuvalu', zones: ['Pacific/Funafuti'] }, TW: { name: 'Taiwan', zones: ['Asia/Taipei'] }, TZ: { name: 'Tanzania', zones: ['Africa/Nairobi', 'Africa/Dar_es_Salaam'], }, UA: { name: 'Ukraine', zones: [ 'Europe/Simferopol', 'Europe/Kiev', 'Europe/Uzhgorod', 'Europe/Zaporozhye', ], }, UG: { name: 'Uganda', zones: ['Africa/Nairobi', 'Africa/Kampala'] }, UM: { name: 'US minor outlying islands', zones: [ 'Pacific/Pago_Pago', 'Pacific/Wake', 'Pacific/Honolulu', 'Pacific/Midway', ], }, US: { name: 'United States of America (USA)', zones: [ 'America/New_York', 'America/Detroit', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Indiana/Indianapolis', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Vevay', 'America/Chicago', 'America/Indiana/Tell_City', 'America/Indiana/Knox', 'America/Menominee', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/North_Dakota/Beulah', 'America/Denver', 'America/Boise', 'America/Phoenix', 'America/Los_Angeles', 'America/Anchorage', 'America/Juneau', 'America/Sitka', 'America/Metlakatla', 'America/Yakutat', 'America/Nome', 'America/Adak', 'Pacific/Honolulu', ], }, UY: { name: 'Uruguay', zones: ['America/Montevideo'] }, UZ: { name: 'Uzbekistan', zones: ['Asia/Samarkand', 'Asia/Tashkent'] }, VA: { name: 'Vatican City', zones: ['Europe/Rome', 'Europe/Vatican'] }, VC: { name: 'St Vincent', zones: ['America/St_Vincent'], }, VE: { name: 'Venezuela', zones: ['America/Caracas'] }, VG: { name: 'Virgin Islands (UK)', zones: ['America/Tortola'], }, VI: { name: 'Virgin Islands (US)', zones: ['America/St_Thomas'], }, VN: { name: 'Vietnam', zones: ['Asia/Bangkok', 'Asia/Ho_Chi_Minh'] }, VU: { name: 'Vanuatu', zones: ['Pacific/Efate'] }, WF: { name: 'Wallis & Futuna', zones: ['Pacific/Wallis'] }, WS: { name: 'Samoa (western)', zones: ['Pacific/Apia'] }, YE: { name: 'Yemen', zones: ['Asia/Riyadh', 'Asia/Aden'] }, YT: { name: 'Mayotte', zones: ['Africa/Nairobi', 'Indian/Mayotte'] }, ZA: { name: 'South Africa', zones: ['Africa/Johannesburg'] }, ZM: { name: 'Zambia', zones: ['Africa/Maputo', 'Africa/Lusaka'] }, ZW: { name: 'Zimbabwe', zones: ['Africa/Maputo', 'Africa/Harare'] }, }; class NgxTimezonesComponent { constructor(cdRef) { this.cdRef = cdRef; this.timezoneCtrl = new FormControl(); this.searchControl = new FormControl(); this.timezoneChange = new EventEmitter(); this.guess = false; this.showOffset = false; this.placeholder = 'Select timezone'; this.searchPlaceholder = 'Search'; this.noResultsLabel = 'No results'; this.offsetName = 'UTC'; } set timezone(timezone) { this.timezoneCtrl.setValue(timezone); } set disabled(value) { if (value) { this.timezoneCtrl.disable(); } else { this.timezoneCtrl.enable(); } } ngOnInit() { this.initData(); this.timezoneGroupsOptions = this.searchControl.valueChanges.pipe(startWith(''), map((query) => (query ? this.filter(query) : this.timezoneGroups.slice()))); this.timezoneCtrl.valueChanges.subscribe((value) => { this.emitTimezone(value); }); if (!this.timezoneCtrl.value && this.guess) { this.guessedTimezone(); this.cdRef.detectChanges(); } } guessedTimezone() { const zone = tz.guess(); this.timezone = zone; this.emitTimezone(zone); } emitTimezone(zone) { this.timezoneChange.emit(zone); } initData() { this.timezoneGroups = Object.keys(countryZones).map((iso) => { const val = countryZones[iso]; const hasMultiple = val.zones.length > 1; const zones = val.zones.map((x) => { return hasMultiple ? { zone: x, name: `${this.formatTimezoneString(x)}`, offset: this.offsetOfTimezone(x), } : { zone: x, name: val.name, offset: this.offsetOfTimezone(x), }; }); return { iso, country: val.name, zones }; }); } filter(query) { const result = []; for (const z of this.timezoneGroups) { if (z.country && z.country.toLowerCase().includes(query.toLowerCase())) { result.push(z); } else { const results = z.zones.filter((x) => x.name.toLowerCase().includes(query.toLowerCase())); if (results.length > 0) { z.zones = results; z.showGroup = z.zones.length > 1; result.push(z); } } } return result; } formatTimezoneString(zone) { const arr = zone.split('/'); return arr[arr.length - 1].split('_').join(' '); } offsetOfTimezone(zone) { let offset = tz(zone).utcOffset(); const neg = offset < 0; if (neg) { offset = -1 * offset; } const hours = Math.floor(offset / 60); const minutes = (offset / 60 - hours) * 60; return `${neg ? '-' : '+'}${this.rjust(hours.toString(), 2)}:${this.rjust(minutes.toString(), 2)}`; } formatOffset(offset) { return `(${this.offsetName}${offset})`; } rjust(value, width, padding = '0') { padding = padding || ' '; padding = padding.substr(0, 1); if (value.length < width) { return padding.repeat(width - value.length) + value; } else { return value; } } } NgxTimezonesComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-timezones', template: ` <mat-form-field style="width: 100%" ><mat-select [formControl]="timezoneCtrl" [placeholder]="placeholder"> <mat-option> <ngx-mat-select-search [formControl]="searchControl" [placeholderLabel]="searchPlaceholder" [noEntriesFoundLabel]="noResultsLabel" ></ngx-mat-select-search> </mat-option> <ng-template let-option ngFor [ngForOf]="timezoneGroupsOptions | async"> <mat-optgroup *ngIf="option.showGroup || option.zones.length > 1; else singleOption" [label]="option.country + ' (' + option.zones.length + ')'" > <mat-option *ngFor="let zone of option.zones" [value]="zone.zone"> {{ zone.name }} <span>{{ showOffset ? formatOffset(zone.offset) : '' }}</span> </mat-option> </mat-optgroup> <ng-template #singleOption> <mat-option [value]="option.zones[0].zone"> {{ option.zones[0].name }} <span>{{ showOffset ? formatOffset(option.zones[0].offset) : '' }}</span> </mat-option> </ng-template> </ng-template> </mat-select> </mat-form-field>` },] } ]; NgxTimezonesComponent.ctorParameters = () => [ { type: ChangeDetectorRef } ]; NgxTimezonesComponent.propDecorators = { timezoneChange: [{ type: Output }], timezone: [{ type: Input }], disabled: [{ type: Input }], guess: [{ type: Input }], showOffset: [{ type: Input }], placeholder: [{ type: Input }], searchPlaceholder: [{ type: Input }], noResultsLabel: [{ type: Input }], offsetName: [{ type: Input }] }; class NgxTimezonesModule { } NgxTimezonesModule.decorators = [ { type: NgModule, args: [{ declarations: [NgxTimezonesComponent], imports: [ ReactiveFormsModule, BrowserAnimationsModule, MatSelectModule, FormsModule, MatFormFieldModule, NgxMatSelectSearchModule, ], exports: [NgxTimezonesComponent], },] } ]; /* * Public API Surface of ngx-timezones */ /** * Generated bundle index. Do not edit. */ export { NgxTimezonesComponent, NgxTimezonesModule }; //# sourceMappingURL=ngx-timezones.js.map