UNPKG

@maptimy/platform-formatters

Version:

Formatters for different plaforms e.g. Web, React Native and Android

111 lines 3.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalizedDurationFormatter = LocalizedDurationFormatter; exports.LocalizedDistanceFormatter = LocalizedDistanceFormatter; const getLocale_1 = require("./getLocale"); function LocalizedDurationFormatter() { const units = ["days", "hours", "minutes", "seconds"]; const unitStyle = "short"; function calculate(durationSeconds) { let remainingDuration = durationSeconds; const result = { days: 0, hours: 0, minutes: 0, seconds: 0, }; // Extract the days from the duration if (units.find((u) => u === "days")) { const days = parseInt((remainingDuration / (24 * 60 * 60)).toFixed(0), 10); remainingDuration %= 24 * 60 * 60; result.days = days; } // Extract the hours from the duration if (units.find((u) => u === "hours")) { const hours = parseInt((remainingDuration / (60 * 60)).toFixed(0), 10); remainingDuration %= 60 * 60; result.hours = hours; } // Extract the minutes from the duration if (units.find((u) => u === "minutes")) { const minutes = parseInt((remainingDuration / 60).toFixed(0), 10); remainingDuration %= 60; result.minutes = minutes; } // Extract the seconds from the duration if (units.find((u) => u === "seconds")) { const seconds = parseInt(remainingDuration.toFixed(0), 10); result.seconds = seconds; } return result; } function getUnitString(unit, value) { const plural = value != 1 ? "s" : ""; switch (unitStyle) { case "short": switch (unit) { case "seconds": return "s"; case "minutes": return "m"; case "hours": return "h"; case "days": return "d"; } break; case "long": switch (unit) { case "seconds": return `${value} ${unit}${plural}`; case "minutes": return `${value} ${unit}${plural}`; case "hours": return `${value} ${unit}${plural}`; case "days": return `${value} ${unit}${plural}`; } break; default: return ""; } } function format(input) { const durationRecord = calculate(input); return Object.entries(durationRecord) .filter((it) => it[1] > 0) .flatMap((it) => `${it[1]}${getUnitString(it[0], it[1])}`) .join(" "); } return { format, }; } function LocalizedDistanceFormatter() { const locale = (0, getLocale_1.getLocale)().replace("_", "-"); function format(input) { // We want to the distance in kilometers only if it's greater than 1000 meters const distanceInKilometers = input / 1000; if (distanceInKilometers > 1) { return new Intl.NumberFormat(locale, { style: "unit", unit: "kilometer", unitDisplay: "short", maximumFractionDigits: 0, }).format(distanceInKilometers); } else { return new Intl.NumberFormat(locale, { style: "unit", unit: "meter", unitDisplay: "short", maximumFractionDigits: 0, }).format(input); } } format.unit = "m"; return { format, }; } //# sourceMappingURL=index.js.map