Audit Log + dashboard feed used legacy keys (invoices_invoice, offers_quotation, trips, vehicles) that never matched the server's entity_type (invoice, quotation, trip, vehicle, ...) and omitted all warehouse_* entities, so many audit rows showed raw English. Single source of truth in lib/entityTypeLabels.ts, keyed to the actual EntityType values, with Czech labels for every type the server writes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
100 lines
2.5 KiB
TypeScript
100 lines
2.5 KiB
TypeScript
export const LEAVE_TYPE_LABELS: Record<string, string> = {
|
|
vacation: "Dovolená",
|
|
sick: "Nemoc",
|
|
unpaid: "Neplacené volno",
|
|
};
|
|
|
|
export const STATUS_DOT_CLASS: Record<string, string> = {
|
|
in: "dash-status-in",
|
|
away: "dash-status-away",
|
|
out: "dash-status-out",
|
|
leave: "dash-status-leave",
|
|
};
|
|
|
|
export const STATUS_LABELS: Record<string, string> = {
|
|
in: "Přítomen",
|
|
away: "Přestávka",
|
|
out: "Nepřihlášen",
|
|
leave: "Nepřítomen",
|
|
};
|
|
|
|
// Re-exported from the single source of truth so the dashboard activity feed
|
|
// and the Audit Log page can't drift apart. See ../lib/entityTypeLabels.
|
|
export { ENTITY_TYPE_LABELS } from "../lib/entityTypeLabels";
|
|
|
|
export const ACTION_LABELS: Record<string, string> = {
|
|
create: "Vytvořil",
|
|
update: "Upravil",
|
|
delete: "Smazal",
|
|
login: "Přihlášení",
|
|
};
|
|
|
|
export function getCzechDate(): string {
|
|
const now = new Date();
|
|
const days = [
|
|
"Neděle",
|
|
"Pondělí",
|
|
"Úterý",
|
|
"Středa",
|
|
"Čtvrtek",
|
|
"Pátek",
|
|
"Sobota",
|
|
];
|
|
const months = [
|
|
"ledna",
|
|
"února",
|
|
"března",
|
|
"dubna",
|
|
"května",
|
|
"června",
|
|
"července",
|
|
"srpna",
|
|
"září",
|
|
"října",
|
|
"listopadu",
|
|
"prosince",
|
|
];
|
|
const day = days[now.getDay()];
|
|
const oneJan = new Date(now.getFullYear(), 0, 1);
|
|
const week = Math.ceil(
|
|
((now.getTime() - oneJan.getTime()) / 86400000 + oneJan.getDay() + 1) / 7,
|
|
);
|
|
return `${day}, ${now.getDate()}. ${months[now.getMonth()]} ${now.getFullYear()} · Týden ${week}`;
|
|
}
|
|
|
|
export function getActivityIconClass(action: string): string {
|
|
const map: Record<string, string> = {
|
|
create: "success",
|
|
update: "info",
|
|
delete: "danger",
|
|
login: "accent",
|
|
};
|
|
return map[action] || "muted";
|
|
}
|
|
|
|
export function formatActivityTime(dateString: string): string {
|
|
const date = new Date(dateString);
|
|
const now = new Date();
|
|
const diff = now.getTime() - date.getTime();
|
|
if (diff < 60000) return "Právě teď";
|
|
if (diff < 3600000) return `${Math.floor(diff / 60000)} min`;
|
|
if (date.toDateString() === now.toDateString()) {
|
|
return date.toLocaleTimeString("cs-CZ", {
|
|
hour: "2-digit",
|
|
minute: "2-digit",
|
|
});
|
|
}
|
|
return date.toLocaleDateString("cs-CZ", { day: "2-digit", month: "2-digit" });
|
|
}
|
|
|
|
export function formatSessionDate(dateString: string): string {
|
|
const date = new Date(dateString);
|
|
return date.toLocaleDateString("cs-CZ", {
|
|
day: "2-digit",
|
|
month: "2-digit",
|
|
year: "numeric",
|
|
hour: "2-digit",
|
|
minute: "2-digit",
|
|
});
|
|
}
|