- 관 용도, 관 재질 공통 코드 Store 등록 - I/I 분석 페이지 시도, 시군구 공통 코드 적용 - I/I 분석 페이지 환경청 삭제 - commonStore.ts 삭제 - Store 데이터 호출 로직을 layout.tsx로 이동
137 lines
3.6 KiB
TypeScript
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;
|
|
}; |