Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 모집공고 작성 임시저장 기능 구현 #166

Merged
merged 181 commits into from
May 7, 2024
Merged
Show file tree
Hide file tree
Changes from 164 commits
Commits
Show all changes
181 commits
Select commit Hold shift + click to select a range
bc72ac2
chore: fill-opacity camelCase로 수정 (브라우저 warning 해결)
hyosin-Jang Apr 10, 2024
44d6dff
feat: 모집공고 마감 날짜 react-hook-forms로 값 관리 (#152)
hyosin-Jang Apr 10, 2024
51fd671
feat: 연락 url react-hook-forms로 값 관리 (#152)
hyosin-Jang Apr 10, 2024
5cc1ecc
feat: 지원자 수 react-hook-forms로 값 관리 (WIP) (#152)
hyosin-Jang Apr 10, 2024
fac075d
feat: 포지션 react-hook-forms로 값 관리 (WIP) (#152)
hyosin-Jang Apr 10, 2024
b84089e
feat: 기술 스택 react-hook-forms로 값 관리 (#152)
hyosin-Jang Apr 10, 2024
0e1f027
feat: 연락 방법 react-hook-forms로 값 관리 (#152)
hyosin-Jang Apr 10, 2024
ae14146
style: 셀렉트 박스 기본 화살표 스타일 제거
hyosin-Jang Apr 10, 2024
6e5c02f
style: theme color > input negative 색상 추가
hyosin-Jang Apr 10, 2024
57e3250
feat: TitleArea react-hook-forms로 값 관리 (#152)
hyosin-Jang Apr 10, 2024
fa5a5b6
style: 스터디 모집 공고 Select 공통 스타일 분리
hyosin-Jang Apr 10, 2024
2a1bd39
style: 캘린더 버튼 스타일 수정
hyosin-Jang Apr 10, 2024
6811ee9
feat: Heading 컴포넌트 추가 (WIP)
hyosin-Jang Apr 10, 2024
141e372
feat: Spacing 컴포넌트 추가
hyosin-Jang Apr 10, 2024
6d8a7f7
feat: SelectBox의 기본값 추가
abiriadev Apr 11, 2024
4c9983d
refactor: `forwardRef` 타입 재정의
abiriadev Apr 16, 2024
c3ec341
refactor: `currentLength` prop을 외부 상태에서 수집
abiriadev Apr 16, 2024
ad5dfab
feat: `currentLength` 렌더링 로직 추가
abiriadev Apr 16, 2024
8521fa9
refactor: `maxLength`를 prop으로 받을 수 있도록 개선
abiriadev Apr 16, 2024
5b7d4db
feat: 마감날짜 받아올 때 rhf controller로 수정
hyosin-Jang Apr 16, 2024
df73382
fix: 스터디 모집공고 페이지 범용 SelectBox 적용중 (WIP)
hyosin-Jang Apr 16, 2024
4277304
fix: 버튼 컴포넌트 props 타입 수정
hyosin-Jang Apr 16, 2024
15748fc
chore: 모집공고 생성폼 타입 추가
hyosin-Jang Apr 16, 2024
fed94cc
feat: 셀렉트박스별 에러 메시지 추가
hyosin-Jang Apr 16, 2024
3ee0d14
feat: TextArea 구조 및 스타일 수정 (Mainarea -> TextArea로 교체)
hyosin-Jang Apr 16, 2024
57491c8
feat: 마감날짜 에러메시지 추가
hyosin-Jang Apr 16, 2024
e50f4cf
chore: 에러메시지 constants로 이동
hyosin-Jang Apr 16, 2024
d7c078c
feat: React-Select 이용한 CustomSelect 추가 (#161)
hyosin-Jang Apr 17, 2024
2f57307
feat: 범용 셀렉트 React-select로 수정 (WIP) (#161)
hyosin-Jang Apr 17, 2024
e43397e
chore: <CustomSelect> values 타입에 맞게 Option 타입 수정
hyosin-Jang Apr 17, 2024
9a2c0fb
chore: 불필요한 콘솔 출력 제거
hyosin-Jang Apr 17, 2024
de04add
chore: React-select 설치 (#151)
hyosin-Jang Apr 18, 2024
aac0bab
fix: <CustomSelect> padding 및 color 수정
hyosin-Jang Apr 18, 2024
371ec50
style: <CalendarButton> 스타일 수정
hyosin-Jang Apr 18, 2024
155d905
style: <InputText> 폰트 사이트 small로 수정
hyosin-Jang Apr 18, 2024
9dbcfbb
fix: <InputText> autoComplete 제거
hyosin-Jang Apr 18, 2024
3ade48d
style: <Heading>, <EndDate> 스타일 수정
hyosin-Jang Apr 18, 2024
0f03b4d
chore: <Stack> 적용 및 <Divider> 재사용
hyosin-Jang Apr 18, 2024
aa7fc97
chore: 한국 시간으로 locale 설정
hyosin-Jang Apr 18, 2024
8b5dfd8
feat: 모집마감날짜 ISO 형식에 맞게 파싱
hyosin-Jang Apr 18, 2024
9919772
fix: ISO string 계산 시, 한국 offset 추가
hyosin-Jang Apr 18, 2024
76cf588
feat: 스터디 모집공고 생성 api 연결 (WIP)
hyosin-Jang Apr 18, 2024
162c484
chore: 스터디 모집공고 api endpoint wrapper 함수 추가
hyosin-Jang Apr 18, 2024
9e22a8c
fix: <EndDate> 초기값 placeholder로 수정
hyosin-Jang Apr 18, 2024
0d884b3
chore: <CustomSelect> 하드코딩한 색상 theme으로 교체
hyosin-Jang Apr 18, 2024
ee522c9
chore: fill-opacity camelCase로 수정 (브라우저 warning 해결)
hyosin-Jang Apr 10, 2024
76806e0
feat: 모집공고 마감 날짜 react-hook-forms로 값 관리 (#152)
hyosin-Jang Apr 10, 2024
eb755c9
feat: 연락 url react-hook-forms로 값 관리 (#152)
hyosin-Jang Apr 10, 2024
20d1a4a
feat: 지원자 수 react-hook-forms로 값 관리 (WIP) (#152)
hyosin-Jang Apr 10, 2024
b972352
feat: 포지션 react-hook-forms로 값 관리 (WIP) (#152)
hyosin-Jang Apr 10, 2024
5927857
feat: 기술 스택 react-hook-forms로 값 관리 (#152)
hyosin-Jang Apr 10, 2024
78ca531
feat: 연락 방법 react-hook-forms로 값 관리 (#152)
hyosin-Jang Apr 10, 2024
3bdc2a7
style: 셀렉트 박스 기본 화살표 스타일 제거
hyosin-Jang Apr 10, 2024
08fe823
style: theme color > input negative 색상 추가
hyosin-Jang Apr 10, 2024
1ca5ca2
feat: TitleArea react-hook-forms로 값 관리 (#152)
hyosin-Jang Apr 10, 2024
67ef897
style: 스터디 모집 공고 Select 공통 스타일 분리
hyosin-Jang Apr 10, 2024
2157bed
style: 캘린더 버튼 스타일 수정
hyosin-Jang Apr 10, 2024
7b037f3
feat: Heading 컴포넌트 추가 (WIP)
hyosin-Jang Apr 10, 2024
0b97ca6
feat: Spacing 컴포넌트 추가
hyosin-Jang Apr 10, 2024
c7e00ff
feat: SelectBox의 기본값 추가
abiriadev Apr 11, 2024
2458dbe
refactor: `forwardRef` 타입 재정의
abiriadev Apr 16, 2024
92b1ab9
refactor: `currentLength` prop을 외부 상태에서 수집
abiriadev Apr 16, 2024
1800f65
feat: `currentLength` 렌더링 로직 추가
abiriadev Apr 16, 2024
26a9344
refactor: `maxLength`를 prop으로 받을 수 있도록 개선
abiriadev Apr 16, 2024
457dc9f
feat: 마감날짜 받아올 때 rhf controller로 수정
hyosin-Jang Apr 16, 2024
aafbfeb
fix: 스터디 모집공고 페이지 범용 SelectBox 적용중 (WIP)
hyosin-Jang Apr 16, 2024
601f30c
fix: 버튼 컴포넌트 props 타입 수정
hyosin-Jang Apr 16, 2024
6795a10
chore: 모집공고 생성폼 타입 추가
hyosin-Jang Apr 16, 2024
d6b8668
feat: 셀렉트박스별 에러 메시지 추가
hyosin-Jang Apr 16, 2024
96f6534
feat: TextArea 구조 및 스타일 수정 (Mainarea -> TextArea로 교체)
hyosin-Jang Apr 16, 2024
56138c4
feat: 마감날짜 에러메시지 추가
hyosin-Jang Apr 16, 2024
0384e82
chore: 에러메시지 constants로 이동
hyosin-Jang Apr 16, 2024
e94f54a
feat: React-Select 이용한 CustomSelect 추가 (#161)
hyosin-Jang Apr 17, 2024
bc1786f
feat: 범용 셀렉트 React-select로 수정 (WIP) (#161)
hyosin-Jang Apr 17, 2024
022e95b
chore: <CustomSelect> values 타입에 맞게 Option 타입 수정
hyosin-Jang Apr 17, 2024
3b1aa9f
chore: 불필요한 콘솔 출력 제거
hyosin-Jang Apr 17, 2024
0f76968
chore: React-select 설치 (#151)
hyosin-Jang Apr 18, 2024
9c8f4e4
fix: <CustomSelect> padding 및 color 수정
hyosin-Jang Apr 18, 2024
00ba70f
style: <CalendarButton> 스타일 수정
hyosin-Jang Apr 18, 2024
bf5081e
style: <InputText> 폰트 사이트 small로 수정
hyosin-Jang Apr 18, 2024
6553238
fix: <InputText> autoComplete 제거
hyosin-Jang Apr 18, 2024
fb1f0f2
style: <Heading>, <EndDate> 스타일 수정
hyosin-Jang Apr 18, 2024
3e38408
chore: <Stack> 적용 및 <Divider> 재사용
hyosin-Jang Apr 18, 2024
a2c2d44
chore: 한국 시간으로 locale 설정
hyosin-Jang Apr 18, 2024
8593744
feat: 모집마감날짜 ISO 형식에 맞게 파싱
hyosin-Jang Apr 18, 2024
8016c8a
fix: ISO string 계산 시, 한국 offset 추가
hyosin-Jang Apr 18, 2024
c780751
feat: 스터디 모집공고 생성 api 연결 (WIP)
hyosin-Jang Apr 18, 2024
cca9863
chore: 스터디 모집공고 api endpoint wrapper 함수 추가
hyosin-Jang Apr 18, 2024
d15ba5e
fix: <EndDate> 초기값 placeholder로 수정
hyosin-Jang Apr 18, 2024
3911ab6
chore: <CustomSelect> 하드코딩한 색상 theme으로 교체
hyosin-Jang Apr 18, 2024
af26e78
chore: StrictMode 제거
hyosin-Jang Apr 20, 2024
eaf2509
style: <Textarea> font-size small로 수정
hyosin-Jang Apr 20, 2024
dfb2326
feat: 임시저장 글 목록 로컬스토리지에서 획득
hyosin-Jang Apr 20, 2024
25ab478
feat: 임시저장 목록에서 클릭된 카드 key 스토어에 저장
hyosin-Jang Apr 20, 2024
f3ecc6e
fix: <EndDate> defaultValue 추가
hyosin-Jang Apr 20, 2024
5b52443
feat: 임시저장된 값이 있는 경우, <Select> option 형태로 가공해서 defaultValue로 전달
hyosin-Jang Apr 20, 2024
bba466a
chore: <InputText> defaultValue 추가
hyosin-Jang Apr 20, 2024
30a54f5
chore: 불필요한 타입 제거 및 <Select> 옵션 타입 수정
hyosin-Jang Apr 20, 2024
c4a3370
chore: uuid 설치
hyosin-Jang Apr 20, 2024
9f0a7b2
feat: 모집공고 생성 쿼리 훅 추가
hyosin-Jang Apr 20, 2024
bf504d7
fix: dev로 rebase 후 origin과 merge conflict 해결
hyosin-Jang Apr 20, 2024
e63d499
chore: 누락된 gitignore 설정 추가
hyosin-Jang Apr 23, 2024
a371cca
fix: 임시저장된 글 제목 없을 경우 "제목 없음" 처리
hyosin-Jang Apr 23, 2024
ea57401
chore: 주석처리된 모집공고 생성, 수정 페이지 복구
hyosin-Jang Apr 23, 2024
38bf459
feat: 임시저장 모달 추가
hyosin-Jang Apr 23, 2024
691f4a1
fix: 임시저장카드 key 추가
hyosin-Jang Apr 23, 2024
f20c457
fix: StudyDetail 타입 key 불일치 에러 수정
hyosin-Jang Apr 23, 2024
6ea5c35
feat: 모집공고 수정 페이지 추가 (WIP)
hyosin-Jang Apr 23, 2024
1da0bc8
fix: 모집공고 내 스터디 조회 api 수정
hyosin-Jang Apr 23, 2024
3101e00
feat: uuid timestamp 기준 최신순으로 정렬
hyosin-Jang Apr 23, 2024
dc3c4d6
feat: uuid timestamp를 사용하기 위해 v4 -> v1으로 변경
hyosin-Jang Apr 23, 2024
818857b
test: 임시저장 삭제 에러 재현 테스트
hyosin-Jang Apr 23, 2024
95a8d01
fix: timestamp 최신순 정렬 오류 해결
hyosin-Jang Apr 23, 2024
305f9a8
fix: 임시저장 삭제 모달 위치 변경
hyosin-Jang Apr 24, 2024
4064826
style: placeholder 색상 적용
hyosin-Jang Apr 23, 2024
b56b82b
fix: 기술스택 모달 초기화 버튼 클릭시 폼 제출 방지
hyosin-Jang Apr 24, 2024
347c963
chore: 불필요한 코드 제거
hyosin-Jang Apr 24, 2024
5e28ac2
chore: RecruitmentForm stackIds 타입 수정
hyosin-Jang Apr 24, 2024
f02287f
chore: getDefVal 함수 훅으로 분리
hyosin-Jang Apr 24, 2024
2b2035b
fix: dev merge conflict 해결
hyosin-Jang Apr 24, 2024
5d58a4a
chore: SelectBox Label 스타일 재사용
hyosin-Jang Apr 24, 2024
548b6c0
fix: <InputText> iindex 오타 수정 반영
hyosin-Jang Apr 24, 2024
1861440
docs: 스토리북 실행 방법 추가
abiriadev Apr 24, 2024
de6fd71
refactor: `saveTemporary` 함수를 컴포넌트에서 분리
abiriadev Apr 24, 2024
304778f
chore: yarn v4로 버전 변경 후 새로 생성한 yarn.lock 추가
hyosin-Jang Apr 24, 2024
920be51
Merge branch 'feat/create-recruitment' of https://github.com/Ludo-SMP…
hyosin-Jang Apr 24, 2024
c1f52cc
fix: saveTemporary 함수에서 누락된 매개변수 studyId 추가
hyosin-Jang Apr 25, 2024
ecf68b5
feat: 이어서 작성하기 선택한 스택 초기값 세팅
hyosin-Jang Apr 25, 2024
ac2358e
chore: packageManager yarn classic으로 버전 지정
hyosin-Jang Apr 25, 2024
9292176
style: <SelectBox> Label 폰트 적용
hyosin-Jang Apr 25, 2024
a8f81a0
style: 불필요한 코드 제거 및 함수 위치 수정
hyosin-Jang Apr 25, 2024
7671b5f
fix: stackIds number[] 타입으로 수정
hyosin-Jang Apr 25, 2024
2f85d09
feat: <CustomSelect> 멀티셀렉트 기능 추가
hyosin-Jang Apr 28, 2024
aa6ffe1
fix: 기존코드 api falsy값 옵셔널 체이닝으로 수정
hyosin-Jang Apr 28, 2024
444867b
refactor: 임시저장 키 관리하는 로직 훅으로 분리
hyosin-Jang Apr 28, 2024
40aa772
feat: 모집공고 수정 api 쿼리 추가
hyosin-Jang Apr 28, 2024
9370009
refactor: 스택모달 로직 훅으로 분리
hyosin-Jang Apr 28, 2024
14190d4
feat: 팀장이 올린 공고인 경우 모집하기 버튼 분기처리
hyosin-Jang Apr 28, 2024
378f330
chore: 모집공고 수정페이지 라우터 modify -> edit으로 이름 통일
hyosin-Jang Apr 28, 2024
4f7663d
fix: positionIds, contact 타입 수정
hyosin-Jang Apr 28, 2024
9747aac
feat: 모집하기 수정 페이지 > 데이터 패칭 로직 fetcher로 분리 (WIP)
hyosin-Jang Apr 28, 2024
4960155
fix: falsy값 내려올 경우 옵셔널 체이닝으로 수정
hyosin-Jang Apr 28, 2024
829a080
chore: <Textarea> label props 추가
hyosin-Jang Apr 28, 2024
2821658
chore: <InputText> label props 추가
hyosin-Jang Apr 28, 2024
96cebe8
feat: 라벨이 부착된 폼 UI <LabelForm> 컴포넌트로 분리
hyosin-Jang Apr 28, 2024
516f48a
fix: 셀렉트 초기값 api 형태에도 대응
hyosin-Jang Apr 30, 2024
1cfb307
chore: 셀렉트 폼 타입 수정
hyosin-Jang Apr 30, 2024
55ed200
fix: 데이터 패칭 시 셀렉트 형태로 가공해서 전달
hyosin-Jang Apr 30, 2024
16d8541
feat: api 전송 형태에 맞게 가공
hyosin-Jang Apr 30, 2024
d7be19a
chore: RecruitFormSelect 타입 수정 반영
hyosin-Jang Apr 30, 2024
c44db9f
fix: participantsLimit -> participantLimit 오타 수정
hyosin-Jang Apr 30, 2024
ad3548b
feat: 모집공고 수정 api 추가
hyosin-Jang Apr 30, 2024
d4c3622
feat: <LabelText> 컴포넌트 및 스토리 추가
hyosin-Jang Apr 30, 2024
aae93da
remove: 불필요한 파일 제거 (파일명 수정)
hyosin-Jang Apr 30, 2024
e9b1621
feat: <FormSection> 컴포넌트 추가
hyosin-Jang Apr 30, 2024
b5a1a6e
chore: yarn.lock 업데이트
hyosin-Jang Apr 30, 2024
4daf130
fix: 모집공고 생성 쿼리 body 타입 수정 (WIP)
hyosin-Jang Apr 30, 2024
a747f29
fix: Date 객체 인자 제거
hyosin-Jang Apr 30, 2024
fffa19d
fix: RHF 범용 FieldValues 타입 추가
hyosin-Jang Apr 30, 2024
109eb87
fix: LabelForm 타입 종속성 제거 > 제네릭으로 수정
hyosin-Jang Apr 30, 2024
f0dbaed
chore: 불필요한 타입 제거
hyosin-Jang Apr 30, 2024
5a8aba4
feat: 이미 지원한 스터디 예외 메시지 출력
hyosin-Jang Apr 30, 2024
f90ebdb
fix: FieldErrors > ReactNode로 타입 일치
hyosin-Jang Apr 30, 2024
8d6a203
chore: ErrorMsg <LabelForm> 컴포넌트로 위치 이동
hyosin-Jang Apr 30, 2024
2c77935
fix: callUrl 누락된 name props 추가
hyosin-Jang Apr 30, 2024
a3ccbc5
fix: 누락된 name props 추가 및 기술 스택 validate 로직 수정
hyosin-Jang Apr 30, 2024
3abfd59
chore: 불필요한 콘솔 출력 제거
hyosin-Jang Apr 30, 2024
faac595
Merge branch 'feat/create-recruitment' of github.com:Ludo-SMP/ludo-fr…
hyosin-Jang Apr 30, 2024
1c9b821
fix: <InputText> width: 100%로 수정
hyosin-Jang May 1, 2024
275e115
fix: 반응형 사이즈 대응하기 위해 <EndDate> width: 100%로 수정
hyosin-Jang May 2, 2024
4999553
style: <Grid>, <Form> 태블릿 사이즈 반응형 대응
hyosin-Jang May 2, 2024
f62f2c7
refactor: 모집공고 생성 styled-components > 수정 페이지 재사용
hyosin-Jang May 2, 2024
5468644
fix: <EndDate> input wrapper width 수정
hyosin-Jang May 2, 2024
3907a8a
feat: <CustomSelect> 폴더로 위치 이동 및 스토리 추가
hyosin-Jang May 2, 2024
d9b1355
Merge branch 'dev' into feat/create-recruitment
hyosin-Jang May 2, 2024
c5d1a45
test: <CustomSelect> defaultValue 렌더링 테스트 추가
hyosin-Jang May 2, 2024
9c9931b
fix: 안쓰는 import문 제거 (test fail 해결)
hyosin-Jang May 2, 2024
4d7ba99
chore: yarn.lock 업데이트
hyosin-Jang May 2, 2024
9c472b2
fix: styled-components custom props로 전달될 경우, transient props로 변경 (isO…
hyosin-Jang May 3, 2024
7820e94
Revert "fix: styled-components custom props로 전달될 경우, transient props로…
hyosin-Jang May 3, 2024
31aa12a
Merge branch 'dev' into feat/create-recruitment
hyosin-Jang May 7, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ dist
dist-ssr
*.local

.yarn/cache/*

# Editor directories and files
.vscode/*
!.vscode/extensions.json
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,11 @@ VITE_BASE_API_URL = Base API Endpoint
yarn start:windows
```

### 5. Storybook 실행

```sh
yarn storybook
````

## 📁 Directory Structure
```
Expand Down
7 changes: 6 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"@types/react-datepicker": "^4.19.5",
"@types/styled-components": "^5.1.34",
"axios": "^1.6.7",
"date-fns": "^3.6.0",
"eslint-config-prettier": "^9.1.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-prettier": "^5.1.2",
Expand All @@ -31,8 +32,10 @@
"react-error-boundary": "^4.0.12",
"react-hook-form": "^7.50.1",
"react-router-dom": "^6.22.0",
"react-select": "^5.8.0",
"styled-components": "^6.1.8",
"styled-reset": "^4.5.2",
"uuid": "^9.0.1",
"vite-plugin-mkcert": "^1.17.3",
"zustand": "^4.5.0"
},
Expand All @@ -51,6 +54,7 @@
"@types/node": "^20.11.10",
"@types/react": "^18.2.43",
"@types/react-dom": "^18.2.17",
"@types/uuid": "^9.0.8",
"@typescript-eslint/eslint-plugin": "^6.14.0",
"@typescript-eslint/parser": "^6.14.0",
"@vitejs/plugin-react": "^4.2.1",
Expand All @@ -71,5 +75,6 @@
"workerDirectory": [
"src/Mocks"
]
}
},
"packageManager": "[email protected]"
}
26 changes: 25 additions & 1 deletion src/Apis/recruitment.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import { httpClient } from '@/utils/axios';
import { PopularRecruitments, Recruitments, FilterOptionParams, RecruitmentDetail } from '@/Types/study';
import {
PopularRecruitments,
Recruitments,
FilterOptionParams,
RecruitmentDetail,
RecruitmentForm,
} from '@/Types/study';
import { API_END_POINT } from '@/Constants/api';
import { getFilterOptions } from '@/utils/filter';

Expand All @@ -21,8 +27,26 @@ export const getRecruitments = (
});
};

// 모집공고 생성
export const createRecruitment = (
studyId: number,
body: RecruitmentForm,
): Promise<{ data: { data: RecruitmentDetail } }> => httpClient.post(API_END_POINT.CREATE_RECRUITMENT(studyId), body);

// TODO: 모집공고 수정 - 추후 data type 변경, location 헤더만 내리는 방식으로 개선 예정
export const editRecruitment = (
studyId: number,
body: RecruitmentForm,
): Promise<{ data: { data: RecruitmentDetail } }> => httpClient.put(API_END_POINT.EDIT_RECRUITMENT(studyId), body);

// 모집공고 조회
export const getRecruitmentDetail = (recruitmentId: number): Promise<{ data: { data: RecruitmentDetail } }> =>
httpClient.get(API_END_POINT.RECRUITMENT(recruitmentId));

// 모집공고 삭제
export const deleteRecruitment = (studyId: number): Promise<{ data: { data: RecruitmentDetail } }> =>
httpClient.get(API_END_POINT.DELETE_RECRUITMENT(studyId));

// ???
export const closeRecruitment = (studyId: number) =>
httpClient.patch(API_END_POINT.CLOSE_RECRUITMENT(studyId), null, { params: { status: 'RECRUITED' } });
2 changes: 1 addition & 1 deletion src/Assets/SearchIcon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export const SearchIcon = () => {
clip-rule="evenodd"
d="M9.68274 16.3656C7.89774 16.3656 6.21954 15.6705 4.95744 14.4084C3.69534 13.1463 3.00024 11.4681 3.00024 9.68311C3.00024 7.89811 3.69534 6.21991 4.95744 4.95781C6.21954 3.69571 7.89774 3.00061 9.68274 3.00061C11.4677 3.00061 13.1459 3.69571 14.408 4.95781C15.6701 6.21991 16.3652 7.89811 16.3652 9.68311C16.3652 11.2665 15.8183 12.7659 14.8138 13.9653L15.5256 14.6772L15.8504 14.3523C16.3103 13.8924 17.0585 13.8924 17.5181 14.3523L17.9774 14.8116L17.9773 14.8118L18.0974 14.9319C18.32 15.1545 18.4427 15.4509 18.4427 15.7659C18.4427 15.8803 18.4266 15.9921 18.3953 16.0989C19.5324 17.2361 20.1883 17.9037 20.5202 18.2619C20.8355 18.6021 20.9999 18.7938 20.9999 19.0968C20.9999 19.3506 20.9012 19.5888 20.7218 19.7682L20.2448 20.2452V20.2449L19.7679 20.7219C19.5885 20.9013 19.35 21 19.0965 21C18.8427 21 18.6045 20.9013 18.4251 20.7219L16.0984 18.3953C15.9915 18.4266 15.8794 18.4428 15.7649 18.4428H15.7655C15.4505 18.4428 15.1544 18.3201 14.9315 18.0975L14.8115 17.9775L14.4722 17.6382L14.3522 17.5182C13.8923 17.0583 13.8923 16.3101 14.3522 15.8505L14.6771 15.5257L13.9653 14.8139C12.7658 15.8186 11.2663 16.3656 9.68274 16.3656ZM15.3206 16.7895L15.3207 16.7894L15.7655 17.2342L16.4996 16.5L17.348 17.3484L17.0482 17.6482L19.0965 19.6965L19.3964 19.3965L19.3965 19.3965L19.6766 19.1163C19.2969 18.7038 18.4377 17.8386 17.6485 17.0489L17.3483 17.349V17.3484L16.4999 16.5L17.2343 15.7656L16.7897 15.321L16.7899 15.3209L16.6844 15.2154L15.95 15.9498H15.9497L15.2153 16.6842L15.3206 16.7895ZM9.68274 4.20001C6.65964 4.20001 4.19994 6.65971 4.19994 9.68281C4.19994 12.7059 6.65964 15.1656 9.68274 15.1656C12.7058 15.1656 15.1655 12.7062 15.1655 9.68281C15.1655 6.65941 12.7061 4.20001 9.68274 4.20001Z"
fill="black"
fill-opacity="0.45"
fillOpacity="0.45"
/>
</g>
</g>
Expand Down
2 changes: 1 addition & 1 deletion src/Assets/SelectArrow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export const SelectArrow = () => {
id="Vector"
d="M20.9999 7.92031C20.9999 8.07391 20.9414 8.22751 20.8241 8.34451L12.8339 16.335C12.374 16.7949 11.6258 16.7949 11.1662 16.335L3.17572 8.34451C2.94142 8.11021 2.94142 7.73041 3.17572 7.49611C3.41002 7.26181 3.78982 7.26181 4.02412 7.49611L11.9999 15.4719L19.9757 7.49611C20.21 7.26181 20.5898 7.26181 20.8241 7.49611C20.9414 7.61341 20.9999 7.76671 20.9999 7.92031Z"
fill="black"
fill-opacity="0.45"
fillOpacity="0.45"
/>
</svg>
);
Expand Down
91 changes: 49 additions & 42 deletions src/Components/Calendar/EndDate.tsx
Original file line number Diff line number Diff line change
@@ -1,54 +1,61 @@
// react-datepicker를 사용해서 마감날짜 구현 328px, 44px, ex) 24.01.23
import DatePicker from 'react-datepicker';
import { useState } from 'react';
import React, { useState } from 'react';
import { ControllerRenderProps } from 'react-hook-form';

// date-picker
import DatePicker, { ReactDatePicker } from 'react-datepicker';
import { registerLocale } from 'react-datepicker';
import ko from 'date-fns/locale/ko';
import 'react-datepicker/dist/react-datepicker.css';
import { parseISOString } from '@/utils/date';
import styled from 'styled-components';
import { OptionalCreates } from '@/Pages/Studies/CreateRecruitment';
import { Creates } from '@/Types/studies';

export type Props = {
onClick?: () => void;
children?: React.ReactNode;
// onChange?: (event: string) => void;
setForm: (any: OptionalCreates) => void;
useForm: Creates;
value?: string;
type?: string;
name?: string;
maxlength?: number;
id?: string;
formData?: number | string;
ref?: string;
};

export const EndDate = ({ useForm }: Props) => {
const [startDateTime, setForms] = useState(new Date());

return (
<DateContainer
value={(useForm.recruitmentEndDateTime = startDateTime.toISOString().slice(0, -5))}
selected={startDateTime}
dateFormat="yy.MM.dd"
onChange={(date: Date) => setForms(date)}
placeholderText="ex)24.01.07"
isClearable={true}
/>
);
};

registerLocale('ko', ko);

interface IFormValues {
recruitmentEndDateTime: string;
}

interface Props {
defaultValue?: string;
}

export const EndDate = React.forwardRef<ReactDatePicker<string, boolean>, ControllerRenderProps<IFormValues> & Props>(
({ onChange, name, defaultValue }, ref) => {
const today = new Date();
const [startDate, setStartDate] = useState<Date>(defaultValue && new Date(defaultValue));

return (
<DateContainer
name={name}
locale="ko"
selected={startDate}
dateFormat="yy.MM.dd"
minDate={today}
onChange={(date) => {
onChange(parseISOString(date));
if (date instanceof Array) setStartDate(date[1]);
else setStartDate(date);
}}
placeholderText="ex)24.01.07"
isClearable={false}
ref={ref}
shouldCloseOnSelect // 날짜를 선택하면 자동으로 닫힌다
autoComplete="off"
/>
);
},
);

const DateContainer = styled(DatePicker)`
width: 328px;
height: 24px;
background-color: ${(props) => props.theme.color.gray3};
align-items: center;
align-self: stretch;
border: 1px solid #cbcdd1;
border-width: 0;
background: ${(props) => props.theme.color.gray1};
resize: none;
flex: 1 0 0;
margin-top: 10px;
padding-bottom: 10px;
padding-right: 16px;
padding-left: 16px;

&::placeholder {
color: ${(props) => props.theme.color.black2};
}
`;
19 changes: 9 additions & 10 deletions src/Components/Common/Button/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { MouseEventHandler } from 'react';
import { ComponentProps, MouseEventHandler } from 'react';
import styled from 'styled-components';

export type ButtonProps = {
Expand Down Expand Up @@ -29,16 +29,15 @@ const Button = ({
children,
className,
size = 'normal',
}: ButtonProps) => (
<ButtonContainer {...{ onClick, type, scheme, disabled, className, size }}>
<>{children}</>
</ButtonContainer>
);
}: ButtonProps) => {
return (
<ButtonContainer {...{ onClick, type, scheme, disabled, className, size }}>
<>{children}</>
</ButtonContainer>
);
};

const ButtonContainer = styled.button<{
scheme: 'primary' | 'secondary' | 'third' | 'normal';
size: 'normal' | 'fullWidth';
}>`
const ButtonContainer = styled.button<ButtonProps>`
display: inline-flex;
justify-content: center;
align-items: center;
Expand Down
34 changes: 34 additions & 0 deletions src/Components/Common/FormSection/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import Heading from '@/Components/Heading';
import React from 'react';
import styled from 'styled-components';

export interface FormSectionProps {
icon?: any;
title?: string;
children: React.ReactNode;
}
export const FormSection = ({ icon, title, children }: FormSectionProps) => {
return (
<FormSectionWrap>
<Heading type={'Title'} component={'Page'}>
{icon && <AssetContainer>{icon}</AssetContainer>}
{title}
</Heading>
{children}
</FormSectionWrap>
);
};

const AssetContainer = styled.image`
padding-right: 12px;
`;

const FormSectionWrap = styled.section`
display: flex;
flex-direction: column;
margin: 24px 0;

& ~ & {
margin-top: 20px;
}
`;
7 changes: 7 additions & 0 deletions src/Components/Common/InputText/InputText.stories.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,10 @@ export const Member: Story = {
placeholder: '멤버를 입력하세요',
},
};

export const Label: Story = {
args: {
label: '포지션',
placeholder: '포지션을 입력하세요',
},
};
69 changes: 62 additions & 7 deletions src/Components/Common/InputText/index.tsx
Original file line number Diff line number Diff line change
@@ -1,34 +1,89 @@
import React, { ForwardedRef } from 'react';
import { ComponentProps, ForwardedRef, forwardRef, useState } from 'react';
import styled from 'styled-components';

interface InputTextProps extends React.InputHTMLAttributes<HTMLInputElement> {
placeholder?: string;
inputType?: 'text' | 'email' | 'password' | 'member';
defaultValue?: string;
currentLength?: number;
maxLength?: number;
label?: string;
}

const InputText = React.forwardRef(
({ placeholder, inputType, onChange, ...props }: InputTextProps, ref: ForwardedRef<HTMLInputElement>) => {
return <InputWrapper placeholder={placeholder} ref={ref} type={inputType} onChange={onChange} {...props} />;
const InputText = forwardRef<HTMLInputElement, ComponentProps<'input'> & InputTextProps>(
(
{ name, placeholder, defaultValue, inputType, onChange, maxLength, currentLength, label, ...props }: InputTextProps,
ref: ForwardedRef<HTMLInputElement>,
) => {
return (
<Box>
{label && <Label>{label}</Label>}
<InputWrapper
placeholder={placeholder}
defaultValue={defaultValue}
name={name}
ref={ref}
type={inputType ?? 'text'}
onChange={onChange}
autoComplete="off"
{...props}
/>
{maxLength && (
<LengthIndicator>
{currentLength} / {maxLength}
</LengthIndicator>
)}
</Box>
);
},
);

export const Label = styled.div`
font-size: 18px;
line-height: 24px;
color: #000000f2;
margin-bottom: 12px;
`;

const InputWrapper = styled.input`
width: 100%;
padding: 10px 16px;
border: 1px solid ${({ theme }) => theme.color.black1};
border-radius: ${({ theme }) => theme.borderRadius.small};
font-size: ${({ theme }) => theme.font.medium};
font-size: ${({ theme }) => theme.font.small};
line-height: 1.5;
color: ${({ theme }) => theme.color.black};
text-overflow: ellipsis;
display: block;
white-space: nowrap;
overflow: hidden;
width: 80%;

::placeholder {
&::placeholder {
color: ${({ theme }) => theme.color.black2};
font-family: 'Pretendard400';
font-size: ${({ theme }) => theme.font.medium};
font-size: ${({ theme }) => theme.font.small};
font-style: normal;
font-weight: 400;
line-height: 28px;
}
`;

const Box = styled.div`
position: relative;
display: flex;
flex-direction: column;
`;

const LengthIndicator = styled.div`
position: absolute;
bottom: 13px;
right: 16px;
color: #00000073;
font-family: Pretendard400;
font-weight: 400;
font-size: 14px;
line-height: 20px;
`;

export default InputText;
Loading