react-web-native-sketch
Version:
[TODO: We need an overview of how this can be used via npm vs as a local package]
144 lines • 5.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var moment = require("moment-timezone");
var enums_1 = require("./enums");
function formatDate(format, date) {
return moment(date).format(format);
}
exports.formatDate = formatDate;
function isDateValid(locale, format, dateString) {
if (!dateString || typeof dateString !== "string") {
return null;
}
if (format === enums_1.DATE_FORMATS.yyyymmdd) {
return !!dateString.match(/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/);
}
if (locale === enums_1.LOCALES.en_US) {
switch (format) {
case enums_1.DATE_FORMATS.ddmmyyyy:
return !!dateString.match(/^(0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])[\/\-]\d{4}$/);
}
}
else {
switch (format) {
case enums_1.DATE_FORMATS.ddmmyyyy:
return !!dateString.match(/^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/);
}
}
return null;
}
exports.isDateValid = isDateValid;
function profileInputFormat(locale) {
switch (locale) {
case enums_1.LOCALES.en_US:
return enums_1.DATE_FORMATS.MM_DD_YYYY;
default:
return enums_1.DATE_FORMATS.DD_MM_YYYY;
}
}
exports.profileInputFormat = profileInputFormat;
function parseFormattedDate(timezone, locale, format, datestr) {
if (format === enums_1.DATE_FORMATS.yyyymmdd) {
return tsFromFormattedDate(timezone, moment(datestr, enums_1.DATE_FORMATS.YYYY_MM_DD, true).toDate());
}
if (locale === enums_1.LOCALES.en_US) {
switch (format) {
case enums_1.DATE_FORMATS.ddmmyyyy:
return tsFromFormattedDate(timezone, moment(datestr, enums_1.DATE_FORMATS.MM_DD_YYYY, true).toDate());
}
}
else {
switch (format) {
case enums_1.DATE_FORMATS.ddmmyyyy:
return tsFromFormattedDate(timezone, moment(datestr, enums_1.DATE_FORMATS.DD_MM_YYYY, true).toDate());
}
}
return null;
}
exports.parseFormattedDate = parseFormattedDate;
function formatTs(timezone, locale, format, timestamp) {
var date = toFormattedDate(timezone, timestamp);
if (!date) {
return '';
}
return formatDate(format, date);
}
exports.formatTs = formatTs;
function formatDateInterval(timezone, locale, dateStart, dateEnd) {
if (!dateStart || !dateEnd) {
return undefined;
}
var dateStartFormat = formatTs(timezone, locale, enums_1.MOMENT_FORMAT.l, dateStart), dateEndFormat = formatTs(timezone, locale, enums_1.MOMENT_FORMAT.l, dateEnd);
if (dateStartFormat === dateEndFormat) {
var startMoment = moment(dateStart * 1000), dateFormat = dateStartFormat;
if (startMoment.year() == new Date().getUTCFullYear()) {
dateFormat = dateStartFormat.replace('/' + startMoment.year().toString(), '');
}
return dateFormat + " " + formatTs(timezone, locale, enums_1.MOMENT_FORMAT.LT, dateStart) + " - " + formatTs(timezone, locale, enums_1.MOMENT_FORMAT.LT, dateEnd);
}
return formatTs(timezone, locale, enums_1.MOMENT_FORMAT.l_LT, dateStart) + " - " + formatTs(timezone, locale, enums_1.MOMENT_FORMAT.l_LT, dateEnd);
}
exports.formatDateInterval = formatDateInterval;
// // TODO: refactor this in a more redux way
// let translations: any = {};
//
// export function setTranslations(newTranslations: Object): void {
// translations = newTranslations || {};
// }
// export function _t(stringId: string | null | undefined, args: any = {}): string {
// if (!stringId) {
// return '';
// }
// let locale = getNativeLocale(),
// localeLanguage: string = locale ? locale.slice(0, 2) : 'en',
// unformattedString: string =
// (!!translations && translations[localeLanguage] && translations[localeLanguage][stringId]) || '';
// if (!unformattedString) {
// switch (localeLanguage) {
// case "ro":
// unformattedString = ro[stringId] || en[stringId];
// break;
// case "cs":
// unformattedString = cs[stringId] || en[stringId];
// break;
// case "es":
// unformattedString = es[stringId] || en[stringId];
// break;
// case "zh":
// unformattedString = zh[stringId] || en[stringId];
// break;
// default:
// unformattedString = en[stringId];
// }
// }
// if (!unformattedString) {
// unformattedString = stringId;
// }
// return unformattedString ?
// unformattedString.replace(/%\w+%/g, all => {
// let replacement = args[all.slice(1, -1)];
// return replacement === null ? '' : replacement;
// }) :
// unformattedString;
// }
function localOffsetMins(tz, date) {
if (!tz || !date || !moment(date).tz(tz)) {
return 0;
}
return moment(date).tz(tz).utcOffset() + date.getTimezoneOffset();
}
exports.localOffsetMins = localOffsetMins;
function utcOffset(tz, ts) {
return moment(new Date(ts * 1000)).tz(tz).utcOffset() * 60;
}
exports.utcOffset = utcOffset;
function tsFromFormattedDate(tz, date) {
return date && (Math.floor(date.getTime() / 1000) - localOffsetMins(tz, date) * 60);
}
exports.tsFromFormattedDate = tsFromFormattedDate;
function toFormattedDate(tz, ts) {
var offsetSecs = localOffsetMins(tz, new Date(ts * 1000)) * 60;
return new Date((ts + offsetSecs) * 1000);
}
exports.toFormattedDate = toFormattedDate;
//# sourceMappingURL=i18n.js.map