From 94af408d8e311fbefe006bf4b2825406e446d66b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Thu, 29 Apr 2021 15:47:03 +0100 Subject: [PATCH] feat: timezone locales field --- new-lamassu-admin/src/pages/Locales/helper.js | 74 ++++++++++++++++++- package-lock.json | 5 ++ package.json | 1 + 3 files changed, 76 insertions(+), 4 deletions(-) diff --git a/new-lamassu-admin/src/pages/Locales/helper.js b/new-lamassu-admin/src/pages/Locales/helper.js index 1357df0b..c2523578 100644 --- a/new-lamassu-admin/src/pages/Locales/helper.js +++ b/new-lamassu-admin/src/pages/Locales/helper.js @@ -1,3 +1,4 @@ +import * as ct from 'countries-and-timezones' import * as R from 'ramda' import * as Yup from 'yup' @@ -36,6 +37,55 @@ const allFields = (getData, onChange, auxElements = []) => { const currencyData = getData(['currencies']) const languageData = getData(['languages']) const cryptoData = getData(['cryptoCurrencies']) + const timezonesData = R.values(ct.getAllTimezones()) + + const possibleUTCDSTPairs = R.map( + it => ({ + utcOffset: it.utcOffset, + dstOffset: it.dstOffset, + utcOffsetStr: it.utcOffsetStr, + dstOffsetStr: it.dstOffsetStr + }), + R.uniqBy( + it => [it.utcOffset, it.dstOffset, it.utcOffsetStr, it.dstOffsetStr], + timezonesData + ) + ) + + const finalTimezones = R.sort( + R.ascend(R.prop('utcOffset')), + R.map( + it => ({ + utcOffset: it.utcOffset, + dstOffset: it.dstOffset, + utcOffsetStr: it.utcOffsetStr, + dstOffsetStr: it.dstOffsetStr, + cities: R.map( + ite => ite.name, + R.filter( + itx => + R.eqProps('utcOffset', it, itx) && + R.eqProps('dstOffset', it, itx), + timezonesData + ) + ) + }), + possibleUTCDSTPairs + ) + ) + + const buildLabel = tz => { + return `UTC ${tz.utcOffsetStr}${ + tz.utcOffset !== tz.dstOffset ? ' (Daylight Saving Time)' : '' + }` + } + + const tzLabels = R.map( + it => ({ label: buildLabel(it), code: it }), + finalTimezones + ) + + console.log(tzLabels) const findSuggestion = it => { const machine = R.find(R.propEq('deviceId', it.machine))(machineData) @@ -95,7 +145,7 @@ const allFields = (getData, onChange, auxElements = []) => { }, { name: 'cryptoCurrencies', - width: 290, + width: 220, size: 'sm', view: displayCodeArray(cryptoData), input: Autocomplete, @@ -107,6 +157,18 @@ const allFields = (getData, onChange, auxElements = []) => { optionsLimit: null, onChange } + }, + { + name: 'timezone', + width: 220, + size: 'sm', + view: getView(tzLabels, 'label'), + input: Autocomplete, + inputProps: { + options: tzLabels, + valueProp: 'code', + labelProp: 'label' + } } ] } @@ -116,7 +178,7 @@ const mainFields = (auxData, configureCoin) => { return getFields( getData, - ['country', 'fiatCurrency', 'languages', 'cryptoCurrencies'], + ['country', 'fiatCurrency', 'languages', 'cryptoCurrencies', 'timezone'], configureCoin ) } @@ -147,7 +209,10 @@ const LocaleSchema = Yup.object().shape({ cryptoCurrencies: Yup.array() .label('Crypto Currencies') .required() - .min(1) + .min(1), + timezone: Yup.object() + .label('Timezone') + .required() }) const OverridesSchema = Yup.object().shape({ @@ -171,7 +236,8 @@ const localeDefaults = { country: '', fiatCurrency: '', languages: [], - cryptoCurrencies: [] + cryptoCurrencies: [], + timezone: '' } const overridesDefaults = { diff --git a/package-lock.json b/package-lock.json index 4e68a158..aec2b2e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6115,6 +6115,11 @@ "vary": "^1" } }, + "countries-and-timezones": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/countries-and-timezones/-/countries-and-timezones-2.4.0.tgz", + "integrity": "sha512-h6k9zgw99k8fjon5cO94k8Aslyj0fM+S4hfTyJ6sbSjyOO9lu5/wcOXLrhc1cGUoHCrnx56WYSNEasSKqSGlJw==" + }, "crc": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz", diff --git a/package.json b/package.json index 92b0afaa..e05355b9 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "console-log-level": "^1.4.0", "cookie-parser": "^1.4.3", "cors": "^2.8.5", + "countries-and-timezones": "^2.4.0", "dataloader": "^2.0.0", "ed25519": "git+https://github.com/lamassu/ed25519#3140c985fee9828ce6707202f9f7d55cb1f0b46d", "ethereumjs-tx": "^1.3.3",