From b0a031bd9781ce2c68bc9eca308c1920967c423c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Tue, 23 Nov 2021 17:38:08 +0000 Subject: [PATCH] fix: timezone options --- .../src/pages/Locales/Locales.js | 4 +- new-lamassu-admin/src/pages/Locales/helper.js | 24 +--- new-lamassu-admin/src/utils/timezone-list.js | 120 ++++++++++++++++++ 3 files changed, 128 insertions(+), 20 deletions(-) create mode 100644 new-lamassu-admin/src/utils/timezone-list.js diff --git a/new-lamassu-admin/src/pages/Locales/Locales.js b/new-lamassu-admin/src/pages/Locales/Locales.js index a209e753..a91459e5 100644 --- a/new-lamassu-admin/src/pages/Locales/Locales.js +++ b/new-lamassu-admin/src/pages/Locales/Locales.js @@ -158,8 +158,6 @@ const Locales = ({ name: SCREEN_KEY }) => { setValue(curr) } - console.log('config', config) - const onEditingDefault = (it, editing) => setEditingDefault(editing) const onEditingOverrides = (it, editing) => setEditingOverrides(editing) @@ -189,7 +187,7 @@ const Locales = ({ name: SCREEN_KEY }) => { save={handleSave} validationSchema={LocaleSchema} data={R.of(locale)} - elements={mainFields(data, onChangeCoin, R.of(locale))} + elements={mainFields(data, onChangeCoin)} setEditing={onEditingDefault} forceDisable={isEditingOverrides} /> diff --git a/new-lamassu-admin/src/pages/Locales/helper.js b/new-lamassu-admin/src/pages/Locales/helper.js index 9ea8e8dc..3158402e 100644 --- a/new-lamassu-admin/src/pages/Locales/helper.js +++ b/new-lamassu-admin/src/pages/Locales/helper.js @@ -1,19 +1,17 @@ -import * as ct from 'countries-and-timezones' -// import { useFormikContext } from 'formik' import * as R from 'ramda' import * as Yup from 'yup' import Autocomplete from 'src/components/inputs/formik/Autocomplete.js' -// import { getTzLabels } from 'src/utils/timezones' +import timezoneList from 'src/utils/timezone-list' -const getFields = (getData, names, onChange, auxElements = [], locale) => { +const getFields = (getData, names, onChange, auxElements = []) => { return R.filter( it => R.includes(it.name, names), - allFields(getData, onChange, auxElements, locale) + allFields(getData, onChange, auxElements) ) } -const allFields = (getData, onChange, auxElements = [], locale) => { +const allFields = (getData, onChange, auxElements = []) => { const getView = (data, code, compare) => it => { if (!data) return '' @@ -34,19 +32,12 @@ const allFields = (getData, onChange, auxElements = [], locale) => { const suggestionFilter = it => R.differenceWith((x, y) => x.deviceId === y, it, overridenMachines) - const localeData = (locale && locale[0]) || {} - const machineData = getData(['machines']) const countryData = getData(['countries']) const currencyData = getData(['currencies']) const languageData = getData(['languages']) const cryptoData = getData(['cryptoCurrencies']) - - const countryTimezones = ct.getTimezonesForCountry(localeData?.country) ?? [] - const timezonesData = - R.values( - countryTimezones.map(it => ({ label: it.name, code: it.name })) ?? [] - ) ?? [] + const timezonesData = timezoneList const findSuggestion = it => { const machine = R.find(R.propEq('deviceId', it.machine))(machineData) @@ -134,15 +125,14 @@ const allFields = (getData, onChange, auxElements = [], locale) => { ] } -const mainFields = (auxData, configureCoin, locale) => { +const mainFields = (auxData, configureCoin) => { const getData = R.path(R.__, auxData) return getFields( getData, ['country', 'fiatCurrency', 'languages', 'cryptoCurrencies', 'timezone'], configureCoin, - undefined, - locale + undefined ) } diff --git a/new-lamassu-admin/src/utils/timezone-list.js b/new-lamassu-admin/src/utils/timezone-list.js new file mode 100644 index 00000000..848cea87 --- /dev/null +++ b/new-lamassu-admin/src/utils/timezone-list.js @@ -0,0 +1,120 @@ +import { intervalToDuration } from 'date-fns' +import { getTimezoneOffset } from 'date-fns-tz' +import * as R from 'ramda' + +const timezones = { + 'Pacific/Midway': 'Midway Island, Samoa', + 'Pacific/Honolulu': 'Hawaii', + 'America/Juneau': 'Alaska', + 'America/Boise': 'Mountain Time', + 'America/Dawson': 'Dawson, Yukon', + 'America/Chihuahua': 'Chihuahua, La Paz, Mazatlan', + 'America/Phoenix': 'Arizona', + 'America/Chicago': 'Central Time', + 'America/Regina': 'Saskatchewan', + 'America/Mexico_City': 'Guadalajara, Mexico City, Monterrey', + 'America/Belize': 'Central America', + 'America/Detroit': 'Eastern Time', + 'America/Bogota': 'Bogota, Lima, Quito', + 'America/Caracas': 'Caracas, La Paz', + 'America/Santiago': 'Santiago', + 'America/St_Johns': 'Newfoundland and Labrador', + 'America/Sao_Paulo': 'Brasilia', + 'America/Tijuana': 'Tijuana', + 'America/Montevideo': 'Montevideo', + 'America/Argentina/Buenos_Aires': 'Buenos Aires, Georgetown', + 'America/Godthab': 'Greenland', + 'America/Los_Angeles': 'Pacific Time', + 'Atlantic/Azores': 'Azores', + 'Atlantic/Cape_Verde': 'Cape Verde Islands', + GMT: 'UTC', + 'Europe/London': 'Edinburgh, London', + 'Europe/Dublin': 'Dublin', + 'Europe/Lisbon': 'Lisbon', + 'Africa/Casablanca': 'Casablanca, Monrovia', + 'Atlantic/Canary': 'Canary Islands', + 'Europe/Belgrade': 'Belgrade, Bratislava, Budapest, Ljubljana, Prague', + 'Europe/Sarajevo': 'Sarajevo, Skopje, Warsaw, Zagreb', + 'Europe/Brussels': 'Brussels, Copenhagen, Madrid, Paris', + 'Europe/Amsterdam': 'Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna', + 'Africa/Algiers': 'West Central Africa', + 'Europe/Bucharest': 'Bucharest', + 'Africa/Cairo': 'Cairo', + 'Europe/Helsinki': 'Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius', + 'Europe/Athens': 'Athens, Istanbul, Minsk', + 'Asia/Jerusalem': 'Jerusalem', + 'Africa/Harare': 'Harare, Pretoria', + 'Europe/Moscow': 'Moscow, St. Petersburg, Volgograd', + 'Asia/Kuwait': 'Kuwait, Riyadh', + 'Africa/Nairobi': 'Nairobi', + 'Asia/Baghdad': 'Baghdad', + 'Asia/Tehran': 'Tehran', + 'Asia/Dubai': 'Abu Dhabi, Muscat', + 'Asia/Baku': 'Baku, Tbilisi, Yerevan', + 'Asia/Kabul': 'Kabul', + 'Asia/Yekaterinburg': 'Ekaterinburg', + 'Asia/Karachi': 'Islamabad, Karachi, Tashkent', + 'Asia/Kolkata': 'Chennai, Kolkata, Mumbai, New Delhi', + 'Asia/Kathmandu': 'Kathmandu', + 'Asia/Dhaka': 'Astana, Dhaka', + 'Asia/Colombo': 'Sri Jayawardenepura', + 'Asia/Almaty': 'Almaty, Novosibirsk', + 'Asia/Rangoon': 'Yangon Rangoon', + 'Asia/Bangkok': 'Bangkok, Hanoi, Jakarta', + 'Asia/Krasnoyarsk': 'Krasnoyarsk', + 'Asia/Shanghai': 'Beijing, Chongqing, Hong Kong SAR, Urumqi', + 'Asia/Kuala_Lumpur': 'Kuala Lumpur, Singapore', + 'Asia/Taipei': 'Taipei', + 'Australia/Perth': 'Perth', + 'Asia/Irkutsk': 'Irkutsk, Ulaanbaatar', + 'Asia/Seoul': 'Seoul', + 'Asia/Tokyo': 'Osaka, Sapporo, Tokyo', + 'Asia/Yakutsk': 'Yakutsk', + 'Australia/Darwin': 'Darwin', + 'Australia/Adelaide': 'Adelaide', + 'Australia/Sydney': 'Canberra, Melbourne, Sydney', + 'Australia/Brisbane': 'Brisbane', + 'Australia/Hobart': 'Hobart', + 'Asia/Vladivostok': 'Vladivostok', + 'Pacific/Guam': 'Guam, Port Moresby', + 'Asia/Magadan': 'Magadan, Solomon Islands, New Caledonia', + 'Asia/Kamchatka': 'Kamchatka, Marshall Islands', + 'Pacific/Fiji': 'Fiji Islands', + 'Pacific/Auckland': 'Auckland, Wellington', + 'Pacific/Tongatapu': "Nuku'alofa" +} + +const buildTzLabels = timezoneList => { + const pairs = R.toPairs(timezoneList) + return R.reduce( + (acc, value) => { + const isNegative = getTimezoneOffset(value[0]) < 0 + const duration = intervalToDuration({ + start: 0, + end: Math.abs(getTimezoneOffset(value[0])) + }) + + const hours = duration.hours.toLocaleString('en-US', { + minimumIntegerDigits: 2, + useGrouping: false + }) + const minutes = duration.minutes.toLocaleString('en-US', { + minimumIntegerDigits: 2, + useGrouping: false + }) + + const prefix = `(GMT${isNegative ? `-` : `+`}${hours}:${minutes})` + + acc.push({ + label: `${prefix} - ${value[1]}`, + code: value[0] + }) + + return acc + }, + [], + pairs + ) +} + +export default buildTzLabels(timezones)