-
Notifications
You must be signed in to change notification settings - Fork 4
[Feat] 이용약관 및 개인정보처리방침 모달, 페이지 구현 #162
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
Changes from 21 commits
d7e19f3
2b90d5a
235820f
4a403e8
2a2fb47
405f84b
7ba628d
4ad1dda
4e6ad76
aa3002f
3eb508f
421908a
dd9b4f9
2ff1fc6
06667ad
0f6e5dd
4658aea
6919883
b246e98
6649060
7b0c65a
ad92565
7d20951
c563804
9a94bbd
e50c4b5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -3,8 +3,9 @@ import { useEffect, useState } from "react"; | |||||
| import { useNavigate } from "react-router-dom"; | ||||||
|
|
||||||
| import { ROUTES } from "@/app/routes/paths"; | ||||||
| import { IconPen } from "@/shared/assets/icons"; | ||||||
| import { modalStore } from "@/shared/model/store"; | ||||||
| import { Button, Modal } from "@/shared/ui"; | ||||||
| import { Modal, ModalBasic } from "@/shared/ui"; | ||||||
| import { | ||||||
| useGetExperience, | ||||||
| useGetCompanyList, | ||||||
|
|
@@ -36,23 +37,21 @@ export const SelectCompany = ({ onClick }: { onClick: () => void }) => { | |||||
| useEffect(() => { | ||||||
| if (data?.totalElements === 0) { | ||||||
| modalStore.open( | ||||||
| <> | ||||||
| <Modal.Content> | ||||||
| <Modal.Title>아직 등록된 경험이 없습니다</Modal.Title> | ||||||
| <Modal.SubTitle>지금 바로 경험을 등록하러 가볼까요?</Modal.SubTitle> | ||||||
| </Modal.Content> | ||||||
| <Modal.Buttons> | ||||||
| <Button variant="secondary" onClick={() => navigate(ROUTES.HOME)}> | ||||||
| 나가기 | ||||||
| </Button> | ||||||
| <Button | ||||||
| variant="primary" | ||||||
| onClick={() => navigate(ROUTES.EXPERIENCE_CREATE)} | ||||||
| > | ||||||
| 이동하기 | ||||||
| </Button> | ||||||
| </Modal.Buttons> | ||||||
| </>, | ||||||
| <ModalBasic | ||||||
| onClose={() => { | ||||||
| modalStore.close("NO-EXPERIENCE"); | ||||||
| navigate(ROUTES.HOME); | ||||||
| }} | ||||||
| onConfirm={() => { | ||||||
| modalStore.close("NO-EXPERIENCE"); | ||||||
| navigate(ROUTES.EXPERIENCE_CREATE); | ||||||
| }} | ||||||
| icon={<IconPen width={48} height={48} />} | ||||||
| title="아직 등록된 경험이 없어요" | ||||||
| subTitle="경험을 등록하고 AI매칭을 시작해보세요" | ||||||
| closeText="나중에할게요" | ||||||
|
||||||
| closeText="나중에할게요" | |
| closeText="나중에 할게요" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저 초등학교 때 받아쓰기를 못했습니다 .... 우리 팀에도 맞춤법 선생님이 있어 다행이다.. ((수정완완
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,154 @@ | ||
| import { style } from "@vanilla-extract/css"; | ||
| import { recipe } from "@vanilla-extract/recipes"; | ||
|
|
||
| import { themeVars } from "@/app/styles"; | ||
|
|
||
| export const wrapper = style({ | ||
| width: "40rem", | ||
| paddingBottom: "1.6rem", | ||
| }); | ||
|
|
||
| export const modalHeader = style({ | ||
| width: "100%", | ||
| position: "relative", | ||
| display: "flex", | ||
| justifyContent: "center", | ||
| alignItems: "center", | ||
| padding: "1.6rem", | ||
| borderBottom: `1px solid ${themeVars.color.normal}`, | ||
| ...themeVars.fontStyles.hline_b_18, | ||
| }); | ||
|
|
||
| export const buttonWrapper = style({ | ||
| position: "absolute", | ||
| right: "1.6rem", | ||
| width: "2.4rem", | ||
| height: "2.4rem", | ||
| }); | ||
|
|
||
| export const modalContent = style({ | ||
| display: "flex", | ||
| flexDirection: "column", | ||
| gap: "2.4rem", | ||
| textAlign: "left", | ||
| height: "28rem", | ||
| padding: "2rem 3rem", | ||
| marginBottom: "2rem", | ||
| overflowY: "auto", | ||
|
|
||
| selectors: { | ||
| "&::-webkit-scrollbar": { | ||
| width: "1.2rem", | ||
| }, | ||
| "&::-webkit-scrollbar-thumb": { | ||
| backgroundColor: themeVars.color.gray300, | ||
| height: "5rem", | ||
| borderRadius: "100px", | ||
| backgroundClip: "padding-box", | ||
| border: `4px solid transparent`, | ||
| }, | ||
| "&::-webkit-scrollbar-track": { | ||
| backgroundColor: "transparent", | ||
| margin: "0.8rem 1.2rem", | ||
| }, | ||
| }, | ||
| }); | ||
|
|
||
| export const title = style({ | ||
| color: themeVars.color.gray800, | ||
| ...themeVars.fontStyles.body_b_14, | ||
| fontWeight: 600, | ||
| marginBottom: "0.8rem", | ||
| }); | ||
|
|
||
| export const subTitle = style({ | ||
| color: themeVars.color.gray800, | ||
| ...themeVars.fontStyles.cap_m_12, | ||
| fontWeight: 500, | ||
| }); | ||
|
|
||
| export const content = style({ | ||
| display: "flex", | ||
| flexDirection: "column", | ||
| color: themeVars.color.gray500, | ||
| ...themeVars.fontStyles.cap_m_12, | ||
| fontWeight: 500, | ||
| whiteSpace: "pre-wrap", | ||
| }); | ||
|
Comment on lines
+57
to
+77
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion | 🟠 Major fontStyles와 개별
As per coding guidelines " Also applies to: 79-101, 152-154 🤖 Prompt for AI Agents |
||
|
|
||
| export const textStyle = recipe({ | ||
| base: { | ||
| color: themeVars.color.gray800, | ||
| }, | ||
| variants: { | ||
| type: { | ||
| title1: { | ||
| ...themeVars.fontStyles.body_b_16, | ||
| fontWeight: 700, | ||
| }, | ||
| title2: { | ||
| ...themeVars.fontStyles.body_b_14, | ||
| }, | ||
| title3: { | ||
| ...themeVars.fontStyles.body_r_14, | ||
| fontWeight: 400, | ||
| }, | ||
| }, | ||
| }, | ||
| defaultVariants: { | ||
| type: "title1", | ||
| }, | ||
| }); | ||
|
|
||
| export const flexColumn = recipe({ | ||
| base: { | ||
| display: "flex", | ||
| flexDirection: "column", | ||
| }, | ||
| variants: { | ||
| gap: { | ||
| 8: { gap: "0.8rem" }, | ||
| 16: { gap: "1.6rem" }, | ||
| 24: { gap: "2.4rem" }, | ||
| }, | ||
| }, | ||
| }); | ||
|
|
||
| export const tableWrapper = style({ | ||
| width: "100%", | ||
| overflowX: "auto", | ||
| selectors: { | ||
| "&::-webkit-scrollbar": { | ||
| display: "none", | ||
| }, | ||
| }, | ||
| }); | ||
|
|
||
| export const table = style({ | ||
| width: "max-content", | ||
| minWidth: "100%", | ||
| borderCollapse: "collapse", | ||
| }); | ||
|
|
||
| export const tCell = style({ | ||
| minWidth: "10rem", | ||
| maxWidth: "25rem", | ||
| padding: "0.8rem", | ||
| border: `1px solid ${themeVars.color.gray200}`, | ||
| fontWeight: 400, | ||
| verticalAlign: "top", | ||
| wordBreak: "keep-all", | ||
| }); | ||
|
|
||
| export const thead = style({ | ||
| backgroundColor: themeVars.color.gray100, | ||
| }); | ||
|
|
||
| export const th = style({ | ||
| whiteSpace: "nowrap", | ||
| padding: "1rem 0.8rem", | ||
| }); | ||
|
|
||
| export const tableText = style({ | ||
| fontWeight: 400, | ||
| }); | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
모달 버튼 의미와 XButton 동작 간 불일치 가능성이 있어요.
onClose에confirmLeave(나가기)를,onConfirm에cancelLeave(계속 작성)를 매핑한 것은 버튼 라벨과 일치하지만,Modal.XButton클릭 시 동작이 예상과 다를 수 있어요.modal-provider.tsx에서Modal의onClose는modalStore.close(modal.id)만 호출해요. 이 경우:blocker.state가 여전히"blocked"상태useEffect가 다시 트리거되어 모달이 재오픈됨기능적으로는 작동하지만, 사용자가 XButton으로 모달을 닫으려 할 때 즉시 다시 열리는 UX가 혼란스러울 수 있어요. XButton을 숨기거나, 명시적으로 "계속 작성하기" 동작과 연결하는 것을 고려해 보세요.
🤖 Prompt for AI Agents