mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-04-19 13:40:41 -05:00
57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
import { differenceInDays } from "date-fns";
|
|
import type { ChatMessage } from "./chat-types";
|
|
|
|
const STAFF_EXTRA_DAYS = 7;
|
|
|
|
export function chatAccessible(args: {
|
|
isStaff: boolean;
|
|
expiresAfterDays: number;
|
|
comparedTo: Date;
|
|
}): boolean {
|
|
const extraDays = args.isStaff ? STAFF_EXTRA_DAYS : 0;
|
|
return (
|
|
differenceInDays(new Date(), args.comparedTo) <=
|
|
args.expiresAfterDays + extraDays
|
|
);
|
|
}
|
|
|
|
const DATE_PLACEHOLDER_PATTERN = /\{\{date:(\d+)\}\}/g;
|
|
|
|
export function datePlaceholder(date: Date): string {
|
|
return `{{date:${date.getTime()}}}`;
|
|
}
|
|
|
|
export function resolveDatePlaceholders(
|
|
text: string,
|
|
formatDateTime: (date: Date) => string,
|
|
): string {
|
|
return text.replace(DATE_PLACEHOLDER_PATTERN, (_match, ts) =>
|
|
formatDateTime(new Date(Number(ts))),
|
|
);
|
|
}
|
|
|
|
export function messageTypeToSound(type: ChatMessage["type"]) {
|
|
if (type === "LIKE_RECEIVED") return "sq_like";
|
|
if (type === "MATCH_STARTED") return "sq_match";
|
|
if (type === "NEW_GROUP") return "sq_new-group";
|
|
|
|
return null;
|
|
}
|
|
|
|
export function soundCodeToLocalStorageKey(soundCode: string) {
|
|
return `settings__sound-enabled__${soundCode}`;
|
|
}
|
|
|
|
export function soundEnabled(soundCode: string) {
|
|
const localStorageKey = soundCodeToLocalStorageKey(soundCode);
|
|
const soundEnabled = localStorage.getItem(localStorageKey);
|
|
|
|
return !soundEnabled || soundEnabled === "true";
|
|
}
|
|
|
|
export function soundVolume() {
|
|
const volume = localStorage.getItem("settings__sound-volume");
|
|
|
|
return volume ? Number.parseFloat(volume) : 100;
|
|
}
|