fix: timezone options
This commit is contained in:
parent
973040f409
commit
b0a031bd97
3 changed files with 128 additions and 20 deletions
|
|
@ -158,8 +158,6 @@ const Locales = ({ name: SCREEN_KEY }) => {
|
||||||
setValue(curr)
|
setValue(curr)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('config', config)
|
|
||||||
|
|
||||||
const onEditingDefault = (it, editing) => setEditingDefault(editing)
|
const onEditingDefault = (it, editing) => setEditingDefault(editing)
|
||||||
const onEditingOverrides = (it, editing) => setEditingOverrides(editing)
|
const onEditingOverrides = (it, editing) => setEditingOverrides(editing)
|
||||||
|
|
||||||
|
|
@ -189,7 +187,7 @@ const Locales = ({ name: SCREEN_KEY }) => {
|
||||||
save={handleSave}
|
save={handleSave}
|
||||||
validationSchema={LocaleSchema}
|
validationSchema={LocaleSchema}
|
||||||
data={R.of(locale)}
|
data={R.of(locale)}
|
||||||
elements={mainFields(data, onChangeCoin, R.of(locale))}
|
elements={mainFields(data, onChangeCoin)}
|
||||||
setEditing={onEditingDefault}
|
setEditing={onEditingDefault}
|
||||||
forceDisable={isEditingOverrides}
|
forceDisable={isEditingOverrides}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,17 @@
|
||||||
import * as ct from 'countries-and-timezones'
|
|
||||||
// import { useFormikContext } from 'formik'
|
|
||||||
import * as R from 'ramda'
|
import * as R from 'ramda'
|
||||||
import * as Yup from 'yup'
|
import * as Yup from 'yup'
|
||||||
|
|
||||||
import Autocomplete from 'src/components/inputs/formik/Autocomplete.js'
|
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(
|
return R.filter(
|
||||||
it => R.includes(it.name, names),
|
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 => {
|
const getView = (data, code, compare) => it => {
|
||||||
if (!data) return ''
|
if (!data) return ''
|
||||||
|
|
||||||
|
|
@ -34,19 +32,12 @@ const allFields = (getData, onChange, auxElements = [], locale) => {
|
||||||
const suggestionFilter = it =>
|
const suggestionFilter = it =>
|
||||||
R.differenceWith((x, y) => x.deviceId === y, it, overridenMachines)
|
R.differenceWith((x, y) => x.deviceId === y, it, overridenMachines)
|
||||||
|
|
||||||
const localeData = (locale && locale[0]) || {}
|
|
||||||
|
|
||||||
const machineData = getData(['machines'])
|
const machineData = getData(['machines'])
|
||||||
const countryData = getData(['countries'])
|
const countryData = getData(['countries'])
|
||||||
const currencyData = getData(['currencies'])
|
const currencyData = getData(['currencies'])
|
||||||
const languageData = getData(['languages'])
|
const languageData = getData(['languages'])
|
||||||
const cryptoData = getData(['cryptoCurrencies'])
|
const cryptoData = getData(['cryptoCurrencies'])
|
||||||
|
const timezonesData = timezoneList
|
||||||
const countryTimezones = ct.getTimezonesForCountry(localeData?.country) ?? []
|
|
||||||
const timezonesData =
|
|
||||||
R.values(
|
|
||||||
countryTimezones.map(it => ({ label: it.name, code: it.name })) ?? []
|
|
||||||
) ?? []
|
|
||||||
|
|
||||||
const findSuggestion = it => {
|
const findSuggestion = it => {
|
||||||
const machine = R.find(R.propEq('deviceId', it.machine))(machineData)
|
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)
|
const getData = R.path(R.__, auxData)
|
||||||
|
|
||||||
return getFields(
|
return getFields(
|
||||||
getData,
|
getData,
|
||||||
['country', 'fiatCurrency', 'languages', 'cryptoCurrencies', 'timezone'],
|
['country', 'fiatCurrency', 'languages', 'cryptoCurrencies', 'timezone'],
|
||||||
configureCoin,
|
configureCoin,
|
||||||
undefined,
|
undefined
|
||||||
locale
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
120
new-lamassu-admin/src/utils/timezone-list.js
Normal file
120
new-lamassu-admin/src/utils/timezone-list.js
Normal file
|
|
@ -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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue