Files
frontend/apps/st/src/components/util/input/verification-result-display.ts
T

66 lines
2.2 KiB
TypeScript

/** 셀/푸터 검증 오류 한 건 (입력 조회 verificationResult 항목) */
export type VerificationResultLikeItem = {
vrfcCd: string;
rsnExpln: string;
nowCn?: string;
cmprCn?: string;
nowVlCn?: string;
compVlCn?: string;
};
export type VerificationResultLikeMap = Record<
string,
VerificationResultLikeItem[]
>;
/** 검증 오류 배열 → RealGrid styleName */
export function getVerificationStyleName(
errors: VerificationResultLikeItem[] | null | undefined,
): string | undefined {
if (!Array.isArray(errors) || errors.length === 0) return undefined;
const hasImr = errors.some(
(e) => e.vrfcCd === "IMR" || e.vrfcCd === "HB",
);
return hasImr ? "rg-cell-verify-error-imr" : "rg-cell-verify-error";
}
/** 검증 오류 배열 → 툴팁/메시지 문구 */
export function formatVerificationTooltip(
errors: VerificationResultLikeItem[] | null | undefined,
): string | undefined {
if (!Array.isArray(errors) || errors.length === 0) return undefined;
const text = errors
.map((e) => {
const prefix =
e.vrfcCd === "IMR"
? "시계열 검증 - "
: e.vrfcCd === "NV"
? "일반검증 - "
: "모집단 검증 - ";
const comp = e.cmprCn ?? e.compVlCn ?? "";
const now = e.nowCn ?? e.nowVlCn ?? "";
return `${prefix}${e.rsnExpln}\n(검증 기준값: ${comp} / 현재 입력값: ${now})`;
})
.filter(Boolean)
.join("\n");
return text.length > 0 ? text : undefined;
}
/** fieldName 및 alias 중 첫 매칭 오류 배열 */
export function getVerificationErrorsForField(
result: VerificationResultLikeMap | null | undefined,
fieldName: string,
aliases?: readonly string[],
): VerificationResultLikeItem[] | undefined {
if (!result) return undefined;
const direct = result[fieldName];
if (Array.isArray(direct) && direct.length > 0) return direct;
if (aliases) {
for (const alias of aliases) {
const found = result[alias];
if (Array.isArray(found) && found.length > 0) return found;
}
}
return undefined;
}