Files
doktainer-upstream/src/app/users/components/user-utils.ts
T
2026-06-02 00:17:50 +07:00

60 lines
1.6 KiB
TypeScript

import type { UserRole } from "@/lib/api";
export function getInitials(name: string) {
return name
.split(" ")
.map((part) => part[0]?.toUpperCase())
.filter(Boolean)
.slice(0, 2)
.join("");
}
export function formatRelativeDate(value: string | null) {
if (!value) return "Never";
const date = new Date(value);
if (Number.isNaN(date.getTime())) return "Never";
const diffSeconds = Math.max(
0,
Math.floor((Date.now() - date.getTime()) / 1000),
);
if (diffSeconds < 60) return `${diffSeconds}s ago`;
if (diffSeconds < 3600) return `${Math.floor(diffSeconds / 60)}m ago`;
if (diffSeconds < 86400) return `${Math.floor(diffSeconds / 3600)}h ago`;
if (diffSeconds < 604800) return `${Math.floor(diffSeconds / 86400)}d ago`;
return date.toLocaleString();
}
export function getServerAccessSummary(input: {
role: UserRole;
allServersAccess: boolean;
names: string[];
}) {
if (input.role === "SUPER_ADMIN" || input.allServersAccess) {
return {
label: "All servers",
color: "#10b981",
tone: "rgba(16,185,129,0.1)",
border: "rgba(16,185,129,0.25)",
};
}
if (input.names.length === 0) {
return {
label: "No servers assigned",
color: "#f59e0b",
tone: "rgba(245,158,11,0.1)",
border: "rgba(245,158,11,0.25)",
};
}
return {
label: input.names.join(", "),
color: "#3b82f6",
tone: "rgba(59,130,246,0.08)",
border: "rgba(59,130,246,0.2)",
};
}
export function copyText(value: string) {
return navigator.clipboard.writeText(value).catch(() => undefined);
}