Files
edr-platform/apps/edr-freight-web/backoffice/src/components/ruleEngine/ruleEngineCardMeta.ts

77 lines
2.0 KiB
TypeScript

import type {
ResourceColumn,
RuleEngineResourceConfig,
} from "@/pages/ruleEngine/config/resources";
const TITLE_KEY_PRIORITY = [
"cargoTypeName",
"serviceName",
"name",
"label",
"actionLabel",
"rateType",
"containerTypeId",
"requiredRole",
] as const;
const SUBTITLE_KEY_PRIORITY = [
"code",
"stepOrder",
"currency",
"tradeDirection",
"requiredRole",
] as const;
export interface RuleEngineCardPresentation {
titleKey: string;
subtitleKey?: string;
codeKey?: string;
statusKey?: string;
detailColumns: ResourceColumn[];
}
export const resolveCardPresentation = (
config: RuleEngineResourceConfig,
): RuleEngineCardPresentation => {
const titleKey =
config.cardTitleKey ??
TITLE_KEY_PRIORITY.find((key) =>
config.columns.some((col) => col.accessorKey === key),
) ??
config.columns.find((col) => col.format !== "code" && col.accessorKey !== "isActive")
?.accessorKey ??
"id";
const codeKey =
config.cardCodeKey ??
config.columns.find((col) => col.format === "code")?.accessorKey;
const statusKey = config.columns.find((col) => col.format === "activeBadge")?.accessorKey;
const subtitleKey =
config.cardSubtitleKey ??
SUBTITLE_KEY_PRIORITY.find(
(key) =>
key !== titleKey &&
key !== codeKey &&
config.columns.some((col) => col.accessorKey === key),
);
const detailColumns = config.columns.filter((col) => {
if (col.accessorKey === titleKey) return false;
if (codeKey && col.accessorKey === codeKey) return false;
if (subtitleKey && col.accessorKey === subtitleKey) return false;
if (statusKey && col.accessorKey === statusKey) return false;
return true;
});
return { titleKey, subtitleKey, codeKey, statusKey, detailColumns };
};
export const cardInitials = (title: string): string => {
const words = title.trim().split(/\s+/).filter(Boolean);
if (words.length === 0) return "?";
if (words.length === 1) return words[0].slice(0, 2).toUpperCase();
return `${words[0][0] ?? ""}${words[1][0] ?? ""}`.toUpperCase();
};