UNPKG

@talend/react-forms

Version:

React forms library based on json schema form.

69 lines (67 loc) 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTimezones = getTimezones; var _utils = require("@talend/utils"); var _lodash = require("lodash"); /** * Get the sorted list of timezones in a given language. * Sort is done by UTC offset first, then by timezone name. * @param {String} lang * @returns {Array} */ function getTimezones(lang, cldrTimezones) { const timezonesKey = lang in cldrTimezones ? lang : 'en'; if (!(timezonesKey in cldrTimezones)) { throw new Error(`No cldr translation provided for language "${timezonesKey}"`); } const zones = cldrTimezones[timezonesKey].main[timezonesKey].dates.timeZoneNames.zone; /** * Build timezone info object * @param {String} timezone * @returns {Object} */ const getTimezoneInfo = (timezone, translatedName) => { const timezoneName = translatedName || (0, _lodash.get)(zones, `${timezone.replaceAll('/', '.')}.exemplarCity`, timezone); const offset = _utils.date.getUTCOffset(timezone); const name = `(UTC ${_utils.date.formatReadableUTCOffset(offset)}) ${timezoneName}`; return { name, timezoneName, offset, value: timezone }; }; return Object.keys(zones).reduce((collectedTimezones, region) => { const newTimezones = []; if (region === 'Etc') { // Only keep "Etc/UTC" for "Etc" region newTimezones.push(getTimezoneInfo('Etc/UTC', zones.Etc.UTC.long.standard)); } else { Object.keys(zones[region]).forEach(city => { if ('exemplarCity' in zones[region][city] || city === 'Honolulu' // Honolulu contains sub-keys but they are deprecated in IANA references ("HST"/"HDT") ) { // Ex: Europe/Paris, Asia/Yerevan ... const timezone = `${region}/${city}`; newTimezones.push(getTimezoneInfo(timezone)); } else { // Ex: America/Argentina/Buenos_Aires ... Object.keys(zones[region][city]).forEach(city2 => { let timezone = `${region}/${city}`; if (city2 !== 'long') { timezone = `${region}/${city}/${city2}`; } newTimezones.push(getTimezoneInfo(timezone)); }); } }); } return [...collectedTimezones, ...newTimezones]; }, []) // Sort by UTC offset, then by name .sort((a, b) => { return a.offset !== b.offset ? a.offset - b.offset : a.timezoneName.localeCompare(b.timezoneName); }); } //# sourceMappingURL=TimezoneList.utils.js.map