mediahub-fe/utils/globals.tsx

148 lines
4.3 KiB
TypeScript
Raw Normal View History

2024-12-09 16:09:42 +00:00
import { format } from "date-fns";
import { id, tr } from "date-fns/locale";
2024-12-04 14:12:10 +00:00
export const generateLocalizedPath = (href: string, locale: string): string => {
if (href.startsWith(`/${locale}`)) {
return href;
}
return `/${locale}${href}`;
};
export function textEllipsis(
str: string,
maxLength: number,
{ side = "end", ellipsis = "..." } = {}
) {
2024-12-04 14:12:10 +00:00
if (str !== undefined && str?.length > maxLength) {
switch (side) {
case "start":
return ellipsis + str.slice(-(maxLength - ellipsis.length));
case "end":
default:
return str.slice(0, maxLength - ellipsis.length) + ellipsis;
}
}
return str;
}
2024-12-09 16:09:42 +00:00
export function formatDateToIndonesian(d: Date) {
try {
const dateString = format(d, "d MMMM yyyy HH:mm", { locale: id });
return dateString;
} catch (error) {
return "";
}
2024-12-04 14:12:10 +00:00
}
export function htmlToString(str: string) {
if (str == undefined || str == null) {
return "";
}
return (
str
.replaceAll(/<style[^>]*>.*<\/style>/gm, "")
// Remove script tags and content
.replaceAll(/<script[^>]*>.*<\/script>/gm, "")
// Replace &nbsp,&ndash
.replaceAll("&nbsp;", "")
.replaceAll("&ndash;", "-")
// Replace quotation mark
.replaceAll("&ldquo;", '"')
.replaceAll("&rdquo;", '"')
// Remove all opening, closing and orphan HTML tags
.replaceAll(/<[^>]+>/gm, "")
// Remove leading spaces and repeated CR/LF
.replaceAll(/([\n\r]+ +)+/gm, "")
);
}
export function getOnlyDate(date: Date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
return `${year}-${month}-${day}`;
}
2024-12-26 15:03:45 +00:00
export function getOnlyMonthAndYear(d: Date) {
const pad = (n: any, s = 2) => `${new Array(s).fill(0)}${n}`.slice(-s);
return `${pad(d.getMonth() + 1)}/${pad(d.getFullYear(), 4)}`;
}
2024-12-31 08:25:40 +00:00
export function getPublicLocaleTimestamp(d: any) {
const pad = (n: any, s = 2) => `${new Array(s).fill(0)}${n}`.slice(-s);
return `${pad(d.getDate())}/${pad(d.getMonth() + 1)}/${pad(
d.getFullYear(),
4
)} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
2024-12-31 08:25:40 +00:00
}
export function capitalize(s: any) {
// return s[0].toUpperCase() + s.slice(1);
const splitStr = s.toLowerCase().split(" ");
for (let i = 0; i < splitStr.length; i++) {
splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].slice(1);
}
return splitStr.join(" ");
}
export function getLocaleTimestamp(d: Date): string {
const pad = (n: number, s: number = 2): string =>
`${new Array(s).fill(0)}${n}`.slice(-s);
return `${pad(d.getDate())}-${pad(d.getMonth() + 1)}-${pad(
d.getFullYear(),
4
)} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
}
export function getLocaleTime(d: Date) {
const pad = (n: number, s = 2) => `${new Array(s).fill(0)}${n}`.slice(-s);
return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
}
2025-01-10 11:29:00 +00:00
export function getTimestamp(d: Date) {
const pad = (n: any, s = 2) => `${new Array(s).fill(0)}${n}`.slice(-s);
return `${pad(d.getFullYear(), 4)}-${pad(d.getMonth() + 1)}-${pad(
d.getDate()
)} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
}
2025-01-15 15:59:19 +00:00
export function secondToTimes(sec: number) {
if (sec) {
const date = new Date(0);
date.setSeconds(sec); // specify value for SECONDS here
return date?.toISOString().slice(11, 19);
}
return "00:00:00";
}
2025-01-16 16:55:04 +00:00
export function checkMaliciousText(str: any) {
try {
const urlPattern = new RegExp(
"(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,}|https?:\\/\\/[^\\s]+|\\b(?:https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*)",
"gi"
);
const isContainUrl = urlPattern.test(str);
if (isContainUrl) {
return "Message mengandung URL yang tidak diizinkan";
}
const emailPattern = /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/i;
const isContainEmail = emailPattern.test(str);
if (isContainEmail) {
return "Message mengandung Email yang tidak diizinkan";
}
const phonePattern = /\b(?!\+?62|62|082[0-9])[2-9][0-9]{7,11}\b/g;
const isContainPhone = phonePattern.test(str);
if (isContainPhone) {
return "Message mengandung Nomor HP yang tidak diizinkan";
}
return "";
} catch (error) {
console.log(error);
return "";
}
}