panels-origin/web-panel/composables/useUi.ts
2026-08-21 16:55:01 -05:00

157 lines
3.4 KiB
TypeScript

export function pipelineSeverity(status: string) {
switch (status) {
case "activo":
return "success";
case "listo_gafete":
return "info";
case "impreso":
return "warn";
case "baja":
return "danger";
default:
return "secondary";
}
}
export function riskLevel(code: string): "alto" | "medio" | "bajo" {
switch (code) {
case "rojo":
case "negro":
case "naranja":
case "alto":
return "alto";
case "amarillo":
case "medio":
return "medio";
default:
return "bajo";
}
}
export function riskLevelLabel(code: string) {
const labels = { alto: "Alto", medio: "Medio", bajo: "Bajo" };
return labels[riskLevel(code)];
}
export function riskLevelSeverity(code: string) {
switch (riskLevel(code)) {
case "alto":
return "danger";
case "medio":
return "warn";
default:
return "success";
}
}
export function hireSeverity(hire: string) {
const h = (hire || "").toUpperCase();
if (h === "FISICA") return "contrast";
if (h === "ARCOTEC") return "warn";
if (h === "ARCTEC" || h.startsWith("ARCT")) return "info";
return "secondary";
}
export function riskSeverity(code: string) {
switch (code) {
case "rojo":
return "danger";
case "amarillo":
case "naranja":
return "warn";
case "verde":
return "success";
case "azul":
return "info";
default:
return "secondary";
}
}
export function pipelineLabel(status: string) {
const labels: Record<string, string> = {
incompleto: "Falta expediente",
listo_gafete: "Listo gafete",
impreso: "Gafete impreso",
activo: "Activo en proyecto",
baja: "Baja",
};
return labels[status] || status;
}
export function gafeteLabel(status: string) {
switch (status) {
case "incompleto":
return "Sin gafete";
case "listo_gafete":
return "Por imprimir";
case "impreso":
case "activo":
return "Impreso";
default:
return "—";
}
}
export function gafeteSeverity(status: string) {
switch (status) {
case "incompleto":
return "danger";
case "listo_gafete":
return "warn";
case "impreso":
case "activo":
return "success";
default:
return "secondary";
}
}
export function projectStatusSeverity(status: string) {
switch (status) {
case "activo":
return "success";
case "pausado":
return "warn";
case "concluido":
return "info";
case "cancelado":
return "danger";
default:
return "secondary";
}
}
export function projectStatusLabel(status: string) {
const labels: Record<string, string> = {
activo: "Activo",
pausado: "Pausado",
concluido: "Concluido",
cancelado: "Cancelado",
};
return labels[status] || status;
}
export function initials(first?: string, last?: string) {
if (last) return `${first?.[0] ?? ""}${last?.[0] ?? ""}`.toUpperCase() || "?";
const parts = (first || "").trim().split(/\s+/).filter(Boolean);
if (parts.length >= 2) return `${parts[0][0]}${parts[1][0]}`.toUpperCase();
return (first || "?").slice(0, 2).toUpperCase();
}
export function useUi() {
return {
pipelineSeverity,
riskSeverity,
riskLevel,
riskLevelLabel,
riskLevelSeverity,
hireSeverity,
pipelineLabel,
gafeteLabel,
gafeteSeverity,
projectStatusSeverity,
projectStatusLabel,
initials,
};
}