Projeto bot pontos
This commit is contained in:
86
web/lib/format.ts
Normal file
86
web/lib/format.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
// Formatação para exibição (pt-BR, fuso de Belo Horizonte).
|
||||
|
||||
const TZ = "America/Sao_Paulo";
|
||||
|
||||
const dateTime = new Intl.DateTimeFormat("pt-BR", {
|
||||
timeZone: TZ,
|
||||
day: "2-digit",
|
||||
month: "2-digit",
|
||||
year: "numeric",
|
||||
hour: "2-digit",
|
||||
minute: "2-digit",
|
||||
});
|
||||
|
||||
const clock = new Intl.DateTimeFormat("pt-BR", { timeZone: TZ, hour: "2-digit", minute: "2-digit" });
|
||||
|
||||
export function fmtDateTime(value: string | null | undefined): string {
|
||||
return value ? dateTime.format(new Date(value)) : "—";
|
||||
}
|
||||
|
||||
export function fmtClock(value: string | null | undefined, timeZone = TZ): string {
|
||||
if (!value) return "—";
|
||||
return timeZone === TZ
|
||||
? clock.format(new Date(value))
|
||||
: new Intl.DateTimeFormat("pt-BR", { timeZone, hour: "2-digit", minute: "2-digit" }).format(new Date(value));
|
||||
}
|
||||
|
||||
export function fmtDay(day: string): string {
|
||||
const [y, m, d] = day.split("-");
|
||||
return `${d}/${m}/${y}`;
|
||||
}
|
||||
|
||||
export function fmtMinutes(minutes: number): string {
|
||||
return `${Math.floor(minutes / 60)}h${String(minutes % 60).padStart(2, "0")}`;
|
||||
}
|
||||
|
||||
export const userStatusLabel: Record<string, string> = {
|
||||
pending: "aguardando aprovação",
|
||||
active: "ativo",
|
||||
disabled: "desativado",
|
||||
};
|
||||
|
||||
export const notificationStatusLabel: Record<string, string> = {
|
||||
scheduled: "agendado",
|
||||
sending: "enviando",
|
||||
sent: "enviado",
|
||||
failed: "falhou",
|
||||
cancelled: "cancelado",
|
||||
expired: "expirado",
|
||||
};
|
||||
|
||||
export const dayStatusLabel: Record<string, string> = {
|
||||
awaiting: "aguardando primeira consulta",
|
||||
no_points: "sem pontos (reverificando)",
|
||||
working: "acompanhando",
|
||||
not_working: "sem pontos (encerrado)",
|
||||
finished: "jornada encerrada",
|
||||
};
|
||||
|
||||
export const pauseReasonLabel: Record<string, string> = {
|
||||
manual: "pausado pelo usuário",
|
||||
api_failures: "pausado após falhas na PontoMais",
|
||||
admin: "pausado pelo painel",
|
||||
user_disabled: "usuário desativado",
|
||||
};
|
||||
|
||||
export function badgeClass(status: string): string {
|
||||
switch (status) {
|
||||
case "active":
|
||||
case "sent":
|
||||
case "finished":
|
||||
case "working":
|
||||
return "badge ok";
|
||||
case "failed":
|
||||
case "disabled":
|
||||
case "expired":
|
||||
case "not_working":
|
||||
return "badge error";
|
||||
case "pending":
|
||||
case "scheduled":
|
||||
case "sending":
|
||||
case "no_points":
|
||||
return "badge warn";
|
||||
default:
|
||||
return "badge";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user