Skip to content

Commit

Permalink
✨ feat: 유학생 시간제근로허가서 작성 시 유효성 검사 강화 #127
Browse files Browse the repository at this point in the history
  • Loading branch information
MrMirror21 committed Jan 21, 2025
1 parent 1320f06 commit 80d5ca7
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 8 deletions.
9 changes: 6 additions & 3 deletions src/components/WriteDocuments/PartTimePermitWriteForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { phone } from '@/constants/information';
import EmployerInfoSection from '@/components/Document/write/EmployerInfoSection';
import BottomButtonPanel from '@/components/Common/BottomButtonPanel';
import Button from '@/components/Common/Button';
import { isNotEmpty } from '@/utils/document';
import { validatePartTimePermit } from '@/utils/document';
import { formatPhoneNumber, parsePhoneNumber } from '@/utils/information';
import {
usePostPartTimeEmployPermit,
Expand Down Expand Up @@ -265,8 +265,11 @@ const PartTimePermitWriteForm = ({
</div>

<BottomButtonPanel>
{/* 입력된 정보 중 빈 칸이 없다면 활성화 */}
{isNotEmpty(newDocumentData) && isNotEmpty(phoneNum) ? (
{/* 입력된 정보의 유효성 검사 통과 시 활성화 */}
{validatePartTimePermit({
...newDocumentData,
phone_number: formatPhoneNumber(phoneNum),
}) ? (
<Button
type="large"
bgColor="bg-[#fef387]"
Expand Down
56 changes: 51 additions & 5 deletions src/utils/document.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ import {
Insurance,
IntegratedApplicationData,
LaborContractEmployerInfo,
PartTimePermitFormRequest,
WorkDayTime,
} from '@/types/api/document';
import { Address } from '@/types/api/users';
import { extractNumbersAsNumber } from './post';
import { InsuranceInfo } from '@/constants/documents';
import { isValidPhoneNumber, parsePhoneNumber } from './information';
import { parsePhoneNumber } from './information';

export const MINIMUM_HOURLY_RATE = 10030;

Expand All @@ -31,6 +32,51 @@ export const isNotEmpty = (obj: Record<string, any>): boolean => {
});
};

// string data의 공백 여부를 확인하는 함수
const hasStringValue = (value: string): boolean => {
return value.trim().length > 0;
};

// 이메일 유효성 검사 함수
const isEmailValid = (email: string): boolean => {
const emailRegex = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;
return emailRegex.test(email);
};

// 전화번호 유효성 검사 함수
const isValidPhoneNumber = (phone: string) => {
const phoneNum = parsePhoneNumber(phone);
return (
phoneNum.start !== '' &&
/^[0-9]{4}$/.test(phoneNum.middle) &&
/^[0-9]{4}$/.test(phoneNum.end)
);
};

// 이수학기 유효성 검사 함수
const isValidTermOfCompletion = (term: number): boolean => {
return !isNaN(term) && term > 0;
};

// (유학생) 시간제 근로 허가서 유효성 검사 함수
export const validatePartTimePermit = (
data: PartTimePermitFormRequest,
): boolean => {
// 필수 입력 항목 체크(이름, 성, 전화번호, 이메일, 이수학기, 전화번호)
if (
hasStringValue(data.first_name) &&
hasStringValue(data.last_name) &&
hasStringValue(data.phone_number) &&
isEmailValid(data.email) &&
isValidPhoneNumber(data.phone_number) &&
isValidTermOfCompletion(data.term_of_completion)
) {
return true;
}

return false;
};

export const workDayTimeToString = (workDayTimes: WorkDayTime[]): string => {
// 요일만 추출하여 배열로 만들기
const daysOfWeek = workDayTimes.map((wdt) => wdt.day_of_week);
Expand Down Expand Up @@ -239,10 +285,10 @@ export const validateIntegratedApplication = (

// 전화번호 필드들 검사
const isPhoneValid =
isValidPhoneNumber(parsePhoneNumber(data.tele_phone_number)) &&
isValidPhoneNumber(parsePhoneNumber(data.cell_phone_number)) &&
isValidPhoneNumber(parsePhoneNumber(data.school_phone_number)) &&
isValidPhoneNumber(parsePhoneNumber(data.new_work_place_phone_number));
isValidPhoneNumber(data.tele_phone_number) &&
isValidPhoneNumber(data.cell_phone_number) &&
isValidPhoneNumber(data.school_phone_number) &&
isValidPhoneNumber(data.new_work_place_phone_number);
// 나머지 필드 검사
const otherFieldsValid = Object.entries(data).every(([key, value]) => {
// 앞서 검사한 필드들은 스킵
Expand Down

0 comments on commit 80d5ca7

Please sign in to comment.