🏡 index : quine-global/quine-anaconda-webui.git

/*
 * Copyright (C) 2025 Red Hat, Inc.
 * SPDX-License-Identifier: LGPL-2.1-or-later
 */

/** Detects if the locale uses 24h clock. */
export const is24HourLocale = (locale) => {
    try {
        const format = new Intl.DateTimeFormat(locale, { hour: "numeric" });
        const opts = format.resolvedOptions();
        return opts.hourCycle === "h23" || opts.hourCycle === "h24" || opts.hour12 === false;
    } catch {
        return true;
    }
};

/**
 * Returns local time as string ("HH:mm" or "hh:mm a") for displaying in picker.
 * @param {DateTime} dateTime - Luxon DateTime (from backend/state)
 * @param {boolean} is24Hour - Should display as 24h (true) or 12h (false)
 * @returns {string}
 */
export const getLocalTimeForPicker = (dateTime, is24Hour = true) => {
    if (!dateTime || !dateTime.isValid) return "";
    return dateTime.toFormat(is24Hour ? "HH:mm" : "hh:mm a");
};

/** Returns true if argument is a valid JS Date */
export const isValidDate = (val) =>
    val instanceof Date && !isNaN(val.getTime());

/** Formats a Luxon DateTime as 'YYYY-MM-DD' (for DatePicker input). */
export const formatDateInput = (dt) => {
    if (typeof dt?.toISO !== "function" || !dt?.isValid) return "";
    return dt.toISODate();
};

export const getUserLocale = () =>
    navigator.languages?.length
        ? navigator.languages[0]
        : navigator.language || "en-US";

/**
 * True when **timezoneId** is a non-empty Region/City id present in the module catalog.
 * @param {string} [timezoneId]
 * @param {object} [allValidTimezones] - Object of form { region: [city1, city2, ...], ... }
 */
export const isValidTimezone = (timezoneId, allValidTimezones) => {
    if (!timezoneId) {
        return false;
    }
    if (!timezoneId.includes("/")) {
        return false;
    }
    const [region, ...cityParts] = timezoneId.split("/");
    const city = cityParts.join("/");
    const cities = allValidTimezones?.[region];
    return Array.isArray(cities) && cities.includes(city);
};