Refactoring variable names, and control flow.

This commit is contained in:
Vivek Pandey 2024-10-19 23:40:43 +05:30
parent b000c1d532
commit f6342b84a1
4 changed files with 26 additions and 38 deletions

View file

@ -1,5 +1,5 @@
import { currentLocale } from "../i18n"; import { currentLocale } from "../i18n";
import { setPageLocale, rtf } from "../util-frontend"; import { setPageLocale, relativeTimeFormatter } from "../util-frontend";
const langModules = import.meta.glob("../lang/*.json"); const langModules = import.meta.glob("../lang/*.json");
export default { export default {
@ -34,7 +34,7 @@ export default {
this.$i18n.locale = lang; this.$i18n.locale = lang;
localStorage.locale = lang; localStorage.locale = lang;
setPageLocale(); setPageLocale();
rtf.updateLocale(lang); relativeTimeFormatter.updateLocale(lang);
}, },
}, },
}; };

View file

@ -285,7 +285,7 @@ import Tag from "../components/Tag.vue";
import CertificateInfo from "../components/CertificateInfo.vue"; import CertificateInfo from "../components/CertificateInfo.vue";
import { getMonitorRelativeURL } from "../util.ts"; import { getMonitorRelativeURL } from "../util.ts";
import { URL } from "whatwg-url"; import { URL } from "whatwg-url";
import { getResBaseURL, rtf } from "../util-frontend"; import { getResBaseURL, relativeTimeFormatter } from "../util-frontend";
import { highlight, languages } from "prismjs/components/prism-core"; import { highlight, languages } from "prismjs/components/prism-core";
import "prismjs/components/prism-clike"; import "prismjs/components/prism-clike";
import "prismjs/components/prism-javascript"; import "prismjs/components/prism-javascript";
@ -659,7 +659,7 @@ export default {
}, },
secondsToHumanReadableFormat(seconds) { secondsToHumanReadableFormat(seconds) {
return rtf.secondsToHumanReadableFormat(seconds); return relativeTimeFormatter.secondsToHumanReadableFormat(seconds);
} }
}, },

View file

@ -1076,7 +1076,7 @@ import RemoteBrowserDialog from "../components/RemoteBrowserDialog.vue";
import ProxyDialog from "../components/ProxyDialog.vue"; import ProxyDialog from "../components/ProxyDialog.vue";
import TagsManager from "../components/TagsManager.vue"; import TagsManager from "../components/TagsManager.vue";
import { genSecret, isDev, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND, sleep } from "../util.ts"; import { genSecret, isDev, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND, sleep } from "../util.ts";
import { hostNameRegexPattern, rtf } from "../util-frontend"; import { hostNameRegexPattern, relativeTimeFormatter } from "../util-frontend";
import HiddenInput from "../components/HiddenInput.vue"; import HiddenInput from "../components/HiddenInput.vue";
import EditMonitorConditions from "../components/EditMonitorConditions.vue"; import EditMonitorConditions from "../components/EditMonitorConditions.vue";
import { version } from "../../package.json"; import { version } from "../../package.json";
@ -1093,7 +1093,7 @@ const monitorDefaults = {
url: "https://", url: "https://",
method: "GET", method: "GET",
interval: 60, interval: 60,
humanReadableInterval: rtf.secondsToHumanReadableFormat(60), humanReadableInterval: relativeTimeFormatter.secondsToHumanReadableFormat(60),
retryInterval: 60, retryInterval: 60,
resendInterval: 0, resendInterval: 0,
maxretries: 0, maxretries: 0,
@ -1477,7 +1477,7 @@ message HealthCheckResponse {
this.monitor.retryInterval = value; this.monitor.retryInterval = value;
} }
// Converting monitor.interval to human readable format. // Converting monitor.interval to human readable format.
this.monitor.humanReadableInterval = rtf.secondsToHumanReadableFormat(value); this.monitor.humanReadableInterval = relativeTimeFormatter.secondsToHumanReadableFormat(value);
}, },
"monitor.timeout"(value, oldValue) { "monitor.timeout"(value, oldValue) {

View file

@ -219,17 +219,8 @@ class RelativeTimeFormatter {
* Default locale and options for Relative Time Formatter * Default locale and options for Relative Time Formatter
*/ */
constructor() { constructor() {
this.locale = currentLocale();
this.options = { numeric: "auto" }; this.options = { numeric: "auto" };
this.rtf = new Intl.RelativeTimeFormat(this.locale, this.options); this.instance = new Intl.RelativeTimeFormat(currentLocale(), this.options);
}
/**
* Method to get the singleton instance
* @returns {object} Intl.RelativeTimeFormat instance
*/
getInstance() {
return this.rtf;
} }
/** /**
@ -238,8 +229,7 @@ class RelativeTimeFormatter {
* @returns {void} No return value. * @returns {void} No return value.
*/ */
updateLocale(locale) { updateLocale(locale) {
this.locale = locale; this.instance = new Intl.RelativeTimeFormat(locale, this.options);
this.rtf = new Intl.RelativeTimeFormat(this.locale, this.options);
} }
/** /**
@ -255,24 +245,24 @@ class RelativeTimeFormatter {
const parts = []; const parts = [];
/** /**
* Build the formatted string from parts * Build the formatted string from parts
* 1. Get the relative time formatted parts from the instance.
* 2. Filter out the relevant parts literal (unit of time) or integer (value).
* 3. Map out the required values.
* @param {number} value Receives value in seconds. * @param {number} value Receives value in seconds.
* @param {string} unitOfTime Expected unit of time after conversion. * @param {string} unitOfTime Expected unit of time after conversion.
* @returns {void} * @returns {void}
*/ */
const toFormattedPart = (value, unitOfTime) => { const toFormattedPart = (value, unitOfTime) => {
const res = this.getInstance().formatToParts(value, unitOfTime); const partsArray = this.instance.formatToParts(value, unitOfTime);
let formattedString = res const filteredParts = partsArray
.map((part, _idx) => { .filter(
if ( (part, index) =>
(part.type === "literal" || part.type === "integer") && (part.type === "literal" || part.type === "integer") &&
_idx > 0 index > 0
) { )
return part.value; .map((part) => part.value);
}
return ""; const formattedString = filteredParts.join("").trim();
})
.join("");
formattedString = formattedString.trim();
parts.push(formattedString); parts.push(formattedString);
}; };
@ -289,14 +279,12 @@ class RelativeTimeFormatter {
toFormattedPart(secs, "second"); toFormattedPart(secs, "second");
} }
const result = if (parts.length > 0) {
parts.length > 0 return `${parts.join(" ")}`;
? `${parts.join(" ")}` }
: this.getInstance().format(0, "second"); // Handle case for 0 seconds return this.instance.format(0, "second"); // Handle case for 0 seconds
return result;
} }
} }
export const rtf = new RelativeTimeFormatter(); export const relativeTimeFormatter = new RelativeTimeFormatter();