import dayjs from "dayjs"; import customParseFormat from "dayjs/plugin/customParseFormat"; import weekday from "dayjs/plugin/weekday"; dayjs.extend(weekday); dayjs.extend(customParseFormat); import { DATE_FORMAT, LANGUAGE } from "../constants"; export function classNames(...classes: (false | null | undefined | string)[]) { return classes.filter(Boolean).join(" "); } export function getTextColorByPrimaryColor(color: string) { switch (color) { case "blue": return "c-text-blue-500"; case "orange": return "c-text-orange-500"; case "yellow": return "c-text-yellow-500"; case "red": return "c-text-red-500"; case "purple": return "c-text-purple-500"; case "amber": return "c-text-amber-500"; case "lime": return "c-text-lime-500"; case "green": return "c-text-green-500"; case "emerald": return "c-text-emerald-500"; case "teal": return "c-text-teal-500"; case "cyan": return "c-text-cyan-500"; case "sky": return "c-text-sky-500"; case "indigo": return "c-text-indigo-500"; case "violet": return "c-text-violet-500"; case "fuchsia": return "c-text-fuchsia-500"; case "pink": return "c-text-pink-500"; case "rose": return "c-text-rose-500"; default: return ""; } } export function generateArrayNumber(start = 0, end = 0) { const array = []; for (let i = start; i <= end; i++) { array.push(i); } return array; } export function shortString(value: string, limit = 3) { return value.slice(0, limit); } export function ucFirst(value: string) { return `${value[0].toUpperCase()}${value.slice(1, value.length)}`; } export function formatDate(date: dayjs.Dayjs, format = DATE_FORMAT) { return date.format(format); } export function parseFormattedDate(date: string, format = DATE_FORMAT) { return dayjs(date, format); } export function getFirstDayInMonth(date: string | dayjs.Dayjs) { return { ddd: formatDate(dayjs(date).startOf("month"), "ddd"), basic: formatDate(dayjs(date).startOf("month")), object: dayjs(date).startOf("month"), }; } export function getLastDayInMonth(date: string) { return { ddd: formatDate(dayjs(date).endOf("month"), "ddd"), basic: formatDate(dayjs(date).endOf("month")), object: dayjs(date).endOf("month"), }; } export function getDaysInMonth(date: string | dayjs.Dayjs) { if (!isNaN(dayjs(date).daysInMonth())) { return [...generateArrayNumber(1, dayjs(date).daysInMonth())]; } return []; } export function nextMonth(date: dayjs.Dayjs) { return date .date(1) .hour(0) .minute(0) .second(0) .month(date.month() + 1); } export function previousMonth(date: dayjs.Dayjs) { return date .date(1) .hour(0) .minute(0) .second(0) .month(date.month() - 1); } export function getFirstElementsInArray(array: number[] = [], size = 0) { return array.slice(0, size); } export function getLastElementsInArray(array: number[] = [], size = 0) { const result: number[] = []; if (Array.isArray(array) && size > 0) { if (size >= array.length) { return array; } let y = array.length - 1; for (let i = 0; i < size; i++) { result.push(array[y]); y--; } } return result.reverse(); } export function getNumberOfDay( dayString: string, startWeekOn?: string | null | undefined ): number { let number = 0; let startDateModifier = 0; if (startWeekOn) { switch (startWeekOn) { case "mon": startDateModifier = 6; break; case "tue": startDateModifier = 5; break; case "wed": startDateModifier = 4; break; case "thu": startDateModifier = 3; break; case "fri": startDateModifier = 2; break; case "sat": startDateModifier = 1; break; case "sun": startDateModifier = 0; break; default: break; } } isMobile ? [ "S", "M", "T", "W", "T", "F", "S", ]: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", ].forEach((item, index) => { if (item.includes(dayString)) { number = (index + startDateModifier) % 7; } }); return number; } export function getLastDaysInMonth(date: dayjs.Dayjs | string, size = 0) { return getLastElementsInArray(getDaysInMonth(date), size); } export function getFirstDaysInMonth(date: string | dayjs.Dayjs, size = 0) { return getFirstElementsInArray(getDaysInMonth(date), size); } export function loadLanguageModule(language = LANGUAGE) { switch (language) { case "af": import("dayjs/locale/af"); break; case "am": import("dayjs/locale/am"); break; case "ar-dz": import("dayjs/locale/ar-dz"); break; case "ar-iq": import("dayjs/locale/ar-iq"); break; case "ar-kw": import("dayjs/locale/ar-kw"); break; case "ar-ly": import("dayjs/locale/ar-ly"); break; case "ar-ma": import("dayjs/locale/ar-ma"); break; case "ar-sa": import("dayjs/locale/ar-sa"); break; case "ar-tn": import("dayjs/locale/ar-tn"); break; case "ar": import("dayjs/locale/ar"); break; case "az": import("dayjs/locale/az"); break; case "bg": import("dayjs/locale/bg"); break; case "bi": import("dayjs/locale/bi"); break; case "bm": import("dayjs/locale/bm"); break; case "bn-bd": import("dayjs/locale/bn-bd"); break; case "bn": import("dayjs/locale/bn"); break; case "bo": import("dayjs/locale/bo"); break; case "br": import("dayjs/locale/br"); break; case "ca": import("dayjs/locale/ca"); break; case "cs": import("dayjs/locale/cs"); break; case "cv": import("dayjs/locale/cv"); break; case "cy": import("dayjs/locale/cy"); break; case "da": import("dayjs/locale/da"); break; case "de-at": import("dayjs/locale/de-at"); break; case "de-ch": import("dayjs/locale/de-ch"); break; case "de": import("dayjs/locale/de"); break; case "dv": import("dayjs/locale/dv"); break; case "el": import("dayjs/locale/el"); break; case "en-au": import("dayjs/locale/en-au"); break; case "en-gb": import("dayjs/locale/en-gb"); break; case "en-ie": import("dayjs/locale/en-ie"); break; case "en-il": import("dayjs/locale/en-il"); break; case "en-in": import("dayjs/locale/en-in"); break; case "en-nz": import("dayjs/locale/en-nz"); break; case "en-sg": import("dayjs/locale/en-sg"); break; case "en-tt": import("dayjs/locale/en-tt"); break; case "en": import("dayjs/locale/en"); break; case "eo": import("dayjs/locale/eo"); break; case "es-do": import("dayjs/locale/es-do"); break; case "es-mx": import("dayjs/locale/es-mx"); break; case "es-pr": import("dayjs/locale/es-pr"); break; case "es-us": import("dayjs/locale/es-us"); break; case "es": import("dayjs/locale/es"); break; case "et": import("dayjs/locale/et"); break; case "eu": import("dayjs/locale/eu"); break; case "fa": import("dayjs/locale/fa"); break; case "fi": import("dayjs/locale/fi"); break; case "fo": import("dayjs/locale/fo"); break; case "fr-ch": import("dayjs/locale/fr-ch"); break; case "fr": import("dayjs/locale/fr"); break; case "fy": import("dayjs/locale/fy"); break; case "ga": import("dayjs/locale/ga"); break; case "gd": import("dayjs/locale/gd"); break; case "gl": import("dayjs/locale/gl"); break; case "gom-latn": import("dayjs/locale/gom-latn"); break; case "gu": import("dayjs/locale/gu"); break; case "he": import("dayjs/locale/he"); break; case "hi": import("dayjs/locale/hi"); break; case "hr": import("dayjs/locale/hr"); break; case "ht": import("dayjs/locale/ht"); break; case "hu": import("dayjs/locale/hu"); break; case "hy-am": import("dayjs/locale/hy-am"); break; case "id": import("dayjs/locale/id"); break; case "is": import("dayjs/locale/is"); break; case "it-ch": import("dayjs/locale/it-ch"); break; case "it": import("dayjs/locale/it"); break; case "ja": import("dayjs/locale/ja"); break; case "jv": import("dayjs/locale/jv"); break; case "ka": import("dayjs/locale/ka"); break; case "kk": import("dayjs/locale/kk"); break; case "ko": import("dayjs/locale/ko"); break; case "ku": import("dayjs/locale/ku"); break; case "ky": import("dayjs/locale/ky"); break; case "lb": import("dayjs/locale/lb"); break; case "lo": import("dayjs/locale/lo"); break; case "lt": import("dayjs/locale/lt"); break; case "lv": import("dayjs/locale/lv"); break; case "me": import("dayjs/locale/me"); break; case "mi": import("dayjs/locale/mi"); break; case "mk": import("dayjs/locale/mk"); break; case "ml": import("dayjs/locale/ml"); break; case "mn": import("dayjs/locale/mn"); break; case "ms-my": import("dayjs/locale/ms-my"); break; case "ms": import("dayjs/locale/ms"); break; case "mt": import("dayjs/locale/mt"); break; case "my": import("dayjs/locale/my"); break; case "nb": import("dayjs/locale/nb"); break; case "ne": import("dayjs/locale/ne"); break; case "nl-be": import("dayjs/locale/nl-be"); break; case "nl": import("dayjs/locale/nl"); break; case "nn": import("dayjs/locale/nn"); break; case "oc-lnc": import("dayjs/locale/oc-lnc"); break; case "pa-in": import("dayjs/locale/pa-in"); break; case "pl": import("dayjs/locale/pl"); break; case "pt-br": import("dayjs/locale/pt-br"); break; case "pt": import("dayjs/locale/pt"); break; case "rn": import("dayjs/locale/rn"); break; case "ro": import("dayjs/locale/ro"); break; case "ru": import("dayjs/locale/ru"); break; case "rw": import("dayjs/locale/rw"); break; case "sd": import("dayjs/locale/sd"); break; case "se": import("dayjs/locale/se"); break; case "si": import("dayjs/locale/si"); break; case "sk": import("dayjs/locale/sk"); break; case "sl": import("dayjs/locale/sl"); break; case "sq": import("dayjs/locale/sq"); break; case "sr": import("dayjs/locale/sr"); break; case "sr-cyrl": import("dayjs/locale/sr-cyrl"); break; case "ss": import("dayjs/locale/ss"); break; case "sv-fi": import("dayjs/locale/sv-fi"); break; case "sv": import("dayjs/locale/sv"); break; case "sw": import("dayjs/locale/sw"); break; case "ta": import("dayjs/locale/ta"); break; case "te": import("dayjs/locale/te"); break; case "tg": import("dayjs/locale/tg"); break; case "th": import("dayjs/locale/th"); break; case "tk": import("dayjs/locale/tk"); break; case "tl-ph": import("dayjs/locale/tl-ph"); break; case "tlh": import("dayjs/locale/tlh"); break; case "tr": import("dayjs/locale/tr"); break; case "tzl": import("dayjs/locale/tzl"); break; case "tzm-latn": import("dayjs/locale/tzm-latn"); break; case "tzm": import("dayjs/locale/tzm"); break; case "ug-cn": import("dayjs/locale/ug-cn"); break; case "uk": import("dayjs/locale/uk"); break; case "ur": import("dayjs/locale/ur"); break; case "uz-latn": import("dayjs/locale/uz-latn"); break; case "uz": import("dayjs/locale/uz"); break; case "vi": import("dayjs/locale/vi"); break; case "x-pseudo": import("dayjs/locale/x-pseudo"); break; case "yo": import("dayjs/locale/yo"); break; case "zh-cn": import("dayjs/locale/zh-cn"); break; case "zh-hk": import("dayjs/locale/zh-hk"); break; case "zh-tw": import("dayjs/locale/zh-tw"); break; case "zh": import("dayjs/locale/zh"); break; default: import("dayjs/locale/en"); break; } } export function dateIsValid(date: Date | number) { return date instanceof Date && !isNaN(date.getTime()); }