Files
frontend/apps/sn/app/(with-base-layout)/selectionValidation.tsx
T
swcho 723eabea41 feat, remove:
- 관 용도, 관 재질 공통 코드 Store 등록
- I/I 분석 페이지 시도, 시군구 공통 코드 적용
- I/I 분석 페이지 환경청 삭제
- commonStore.ts 삭제
- Store 데이터 호출 로직을 layout.tsx로 이동
2025-07-31 15:48:38 +09:00

137 lines
3.6 KiB
TypeScript

/**
* 선택 항목 검증 유틸리티
*/
export interface ApiSelectOption {
text: string;
val: string;
}
// 선택 항목 검증 설정 타입
export interface SelectionValidationConfig {
value: string | number | ApiSelectOption;
description: string;
required: boolean;
}
// 선택 항목 검증 결과 타입
export interface SelectionValidationResult {
isValid: boolean;
errorMessage?: string;
}
/**
* 단일 선택 항목이 유효한지 검증하는 함수
* @param value 검증할 값
* @param isRequired 필수 선택 여부
* @returns 유효한지 여부
*/
export const isValidSelection = (
value: string | number | ApiSelectOption,
isRequired: boolean = true
): boolean => {
if (!isRequired) return true;
if (typeof value === 'object' && value !== null) {
// ApiSelectOption 객체인 경우
return value.val !== '0' && value.val !== '' && value.val !== null && value.val !== undefined;
}
// 문자열 또는 숫자인 경우
return value !== '0' && value !== 0 && value !== '' && value !== null && value !== undefined;
};
/**
* 여러 선택 항목을 한 번에 검증하는 함수
* @param validationConfigs 검증할 선택 항목들의 설정 배열
* @returns 검증 결과. 실패 시 첫 번째 에러 메시지 반환
*/
export const validateMultipleSelections = (
validationConfigs: SelectionValidationConfig[]
): SelectionValidationResult => {
for (const config of validationConfigs) {
if (!isValidSelection(config.value, config.required)) {
return {
isValid: false,
errorMessage: `${config.description}을(를) 선택해주세요.`
};
}
}
return { isValid: true };
};
/**
* 여러 선택 항목을 한 번에 검증하고 alert 표시하는 함수
* @param validationConfigs 검증할 선택 항목들의 설정 배열
* @returns 검증 결과
*/
export const validateMultipleSelectionsWithAlert = (
validationConfigs: SelectionValidationConfig[]
): boolean => {
const result = validateMultipleSelections(validationConfigs);
if (!result.isValid && result.errorMessage) {
alert(result.errorMessage);
return false;
}
return true;
};
/**
* 기본 선택 항목들 검증 (환경청, 시도, 시군구, 하수처리장)
* @param select1 환경청코드
* @param select2 시도코드
* @param select3 시군구 객체
* @param select4 하수처리장코드
* @param options 각 항목의 필수 여부 설정
* @returns 검증 결과
*/
export const validateBasicSelections = (
select1: string | number,
options: {
requireEnv?: boolean;
requireSido?: boolean;
requireSigungu?: boolean;
requireTreatmentPlant?: boolean;
} = {}
): SelectionValidationResult => {
const {
requireEnv = true,
requireSido = true,
requireSigungu = true,
requireTreatmentPlant = true
} = options;
const validationConfigs: SelectionValidationConfig[] = [
{
value: select1,
description: '하수처리장',
required: requireTreatmentPlant
}
];
return validateMultipleSelections(validationConfigs);
};
/**
* 기본 선택 항목들 검증 및 alert 표시
* @param select1 하수처리장코드
* @param options 각 항목의 필수 여부 설정
* @returns 검증 결과
*/
export const validateBasicSelectionsWithAlert = (
select1: string | number,
options: {
requireEnv?: boolean;
requireSido?: boolean;
requireSigungu?: boolean;
requireTreatmentPlant?: boolean;
} = {}
): boolean => {
const result = validateBasicSelections(select1, options);
if (!result.isValid && result.errorMessage) {
alert(result.errorMessage);
return false;
}
return true;
};