/** * πŸ“„ Selection Validation Utility * 선택 ν•­λͺ© 검증 μœ ν‹Έλ¦¬ν‹° * * - 선택 ν•­λͺ© 검증 ν•¨μˆ˜ (단일 및 닀쀑 선택 지원) * - 검증 κ²°κ³Ό νƒ€μž… μ •μ˜ 및 μ—λŸ¬ λ©”μ‹œμ§€ 생성 * - 자주 μ‚¬μš©λ˜λŠ” 선택 ν•­λͺ© μƒμˆ˜ 제곡 * - 선택 ν•­λͺ© 검증 μ „ 둜직 κ΅¬ν˜„ * - μ‚¬μš©μž μΉœν™”μ μΈ μ—λŸ¬ λ©”μ‹œμ§€ 좜λ ₯ * - λ‹€μ–‘ν•œ 선택 νƒ€μž… 지원 (ν™˜κ²½μ²­, μ‹œλ„, μ‹œκ΅°κ΅¬ λ“±) */ 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; };