@maptimy/platform-formatters
Version:
Formatters for different plaforms e.g. Web, React Native and Android
111 lines • 3.9 kB
JavaScript
;
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