Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
57c4a87
design: 메인페이지 css 오류 수정
oneny Sep 23, 2023
78cbefd
add Context API for form value
JangAyeon Sep 23, 2023
1430472
Merge pull request #1 from goorm-team-challenge/feat/ayeon
JangAyeon Sep 23, 2023
72c9f46
feat : 기본 모달 컴포넌트 틀 구성
teawon Sep 23, 2023
50112b0
feat: 챌린지 참가자 목록 수정
oneny Sep 23, 2023
aee261e
feat: App 오류 수정
oneny Sep 23, 2023
0f06573
Merge pull request #2 from goorm-team-challenge/feat/mainpage
oneny Sep 23, 2023
632b768
feat: Modal1 기본 입력 및 체크 박스 기능 구현
Yoonkyoungme Sep 23, 2023
42d927e
Merge branch 'develop' into feat/yoonkyoung
Yoonkyoungme Sep 23, 2023
efc1173
feat: 3번 모달 Props수정
teawon Sep 23, 2023
f341a87
Modal 4 컴포넌트 생성
teawon Sep 23, 2023
3a88f7b
add Context API for modal index & form value
JangAyeon Sep 23, 2023
da4f5a7
누락된 파일 반영
teawon Sep 23, 2023
07d5652
remove unused
JangAyeon Sep 23, 2023
d7a43e2
feat: Modal1 다음 버튼 활성화 기능
Yoonkyoungme Sep 23, 2023
9a705b2
test
JangAyeon Sep 23, 2023
9e89b7a
remove
JangAyeon Sep 23, 2023
8c1f96d
Merge branch 'develop' into feat/ayeon
JangAyeon Sep 23, 2023
19d020e
Merge pull request #3 from goorm-team-challenge/feat/ayeon
JangAyeon Sep 23, 2023
26ba3ad
feat: Modal1 전화번호, 이메일 invalid feedback 기능
Yoonkyoungme Sep 23, 2023
79b1fc9
fix: 전화번호, 이메일 invaild feedback을 Storybook의 Form.Feedback 기능으로 수정
Yoonkyoungme Sep 23, 2023
8432ebc
Merge branch 'develop' into feat/yoonkyoung
Yoonkyoungme Sep 23, 2023
6993aa7
add: Form & Modal Index Provider to Each Modal
JangAyeon Sep 23, 2023
2793812
Merge branch 'develop' into feat/ayeon
JangAyeon Sep 23, 2023
0bc4ec9
Merge pull request #4 from goorm-team-challenge/feat/ayeon
JangAyeon Sep 23, 2023
ea3d8f4
feat: 유저설문 정보 노출 기능 구현
oneny Sep 23, 2023
5c1fa1b
Merge branch 'develop' into feat/mainpage
oneny Sep 23, 2023
6e868cc
Merge pull request #5 from goorm-team-challenge/feat/mainpage
oneny Sep 23, 2023
8b9e8eb
fix: Form import
Yoonkyoungme Sep 23, 2023
de8a8b2
Merge branch 'develop' into feat/yoonkyoung
Yoonkyoungme Sep 23, 2023
5afb887
add: useModal Context
JangAyeon Sep 23, 2023
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
40 changes: 33 additions & 7 deletions src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,41 @@
import { EmptyView, Header } from '@/components';
import { createContext, useState } from 'react';

import { EmptyView, Header, ListView } from '@/components';
import useModalContext from '@/components/Context/formProvider';

import styles from './App.module.scss';

export const modalContext = createContext();

function App() {
const { form, updateForm, modalIndex, updateModalIndex, resetForm } =
useModalContext();

const users = localStorage.getItem('goormUsers')
? JSON.parse(localStorage.getItem('goormUsers'))
: [];

return (
<div className={styles.App}>
<Header />
<main className={styles.main}>
<EmptyView />
</main>
</div>
<modalContext.Provider
value={{
form,
updateForm,
modalIndex,
updateModalIndex,
resetForm,
}}
>
<div className={styles.App}>
<Header />
<main className={styles.main}>
{users.length > 0 ? (
<ListView users={users} />
) : (
<EmptyView />
)}
</main>
</div>
</modalContext.Provider>
);
}

Expand Down
74 changes: 74 additions & 0 deletions src/components/Context/formProvider.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { createContext, useEffect, useState } from 'react';

const intialState = {
// 1번
name: '이름',
phone: '01012345678',
email: 'test@email.com',
permissions: {
privacyApproval: false,
marketingApproval: false,
marketingMediaApproval: {
email: false,
sms: false,
},

// 2번

swMajored: true,
groomUsed: true,
groomService: {
edu: false,
level: false,
devth: false,
ide: false,
exp: false,
},
groomWhy: '',

// 3번

expect: -1 /* 0번 ~ 3번 중 택 1 선택 */,

// 4번

freeMessage: '파이팅~~',
},
};

const useModalContext = () => {
const [form, setFormState] = useState(intialState);

const [modalIndex, setModalIndex] = useState(0);

const updateForm = (key, value) => {
setFormState((prev) => {
return {
...prev,
[key]: value,
};
});

console.log('update Form', form);
};

const updateModalIndex = (value) => {
setModalIndex(value);
};

const resetForm = () => {
setFormState(intialState);
};

const api = {
form,
updateForm,
modalIndex,
updateModalIndex,
resetForm,
};

return api;
};

export default useModalContext;
1 change: 1 addition & 0 deletions src/components/EmptyView/EmptyView.jsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { useContext } from 'react';
import cn from 'classnames';

import { Card } from '@/components';
Expand Down
2 changes: 2 additions & 0 deletions src/components/EmptyView/EmptyView.module.scss
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
.emptyView {
display: flex;
flex-direction: column;
padding-top: 4.5rem /* 72px -> 4.5rem */;
padding-bottom: 4.5rem /* 72px -> 4.5rem */;
gap: .5rem /* 8px -> .5rem */;
Expand Down
30 changes: 29 additions & 1 deletion src/components/Header/Header.jsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,46 @@
import React, { useContext, useState } from 'react';
import cn from 'classnames';

import { Button, Typography } from '@goorm-dev/gds-challenge';

import useModalContext from '../Context/formProvider';
import CustomModal from '../Modal';

import styles from './Header.module.scss';

const Header = () => {
const { form, updateForm, modalIndex, updateModalIndex, resetForm } =
useModalContext();
const [modalOpen, setModalOpen] = useState(false);

const toggle = () => {
setModalOpen((prevModalOpen) => {
return !prevModalOpen;
});
};

const handleCloseModal = () => {
toggle();
resetForm();
};

const handleModalOpen = () => {
updateModalIndex(0);
toggle();
};

return (
<header className={cn(styles.header)}>
<div className={cn(styles.contents)}>
<Typography token="h5">
구름톤 챌린지 참여자 정보 수집
</Typography>
<Button size="lg">설문조사 참여하기</Button>
<Button onClick={handleModalOpen} size="lg">
설문조사 참여하기
</Button>
</div>

<CustomModal isOpen={modalOpen} onClose={handleCloseModal} />
</header>
);
};
Expand Down
24 changes: 24 additions & 0 deletions src/components/ListView/ListView.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import UserDetails from '../UserDetail/UserDetails';
import { Typography } from '@goorm-dev/gds-challenge';

import { Card } from '@/components';
import React from 'react';

const ListView = ({ users }) => {

return (
<>
<Card title='title' flat='bottom'>
<Typography>응답한 참여자</Typography>{" "}
<Typography color='primary'>{users.length}</Typography>
</Card>
{users.map((user, idx) => (
<React.Fragment key={user.name}>
<UserDetails user={user} idx={idx} total={users.length} />
</React.Fragment>
))}
</>
)
};

export default ListView;
Loading