|
| 1 | +import { CheckAllOffIcon, CheckAllOnIcon, CheckOffIcon, CheckOnIcon, ModalCloseIcon } from 'public/assets/images'; |
| 2 | +import { Button, Modal } from 'components/atoms'; |
| 3 | +import React, { useEffect, useState } from 'react'; |
| 4 | +import { IUserDataType } from 'types/user.type'; |
| 5 | +import { |
| 6 | + BiggerCheckBox, |
| 7 | + BiggerLabel, |
| 8 | + CheckAllImg, |
| 9 | + CheckImg, |
| 10 | + CloseImage, |
| 11 | + Content, |
| 12 | + FlexContainer, |
| 13 | + Label, |
| 14 | + Line, |
| 15 | + ModalContainer, |
| 16 | + MoreBtn, |
| 17 | + PolicyCheck, |
| 18 | + SmallerCheckBox, |
| 19 | + Titie, |
| 20 | + Wrapper, |
| 21 | +} from './style'; |
| 22 | + |
| 23 | +export interface IProps { |
| 24 | + className?: string; |
| 25 | + setUserData: (value: IUserDataType) => void; |
| 26 | + userData: IUserDataType; |
| 27 | +} |
| 28 | + |
| 29 | +function JoinCheck({ setUserData, userData }: IProps): React.ReactElement { |
| 30 | + const [checkAll, setCheckAll] = useState(false); |
| 31 | + const [isChecked, setIsChecked] = useState({ |
| 32 | + check1: false, |
| 33 | + check2: false, |
| 34 | + check3: false, |
| 35 | + }); |
| 36 | + const [isPolicyOpen, setIsPolicyOpen] = useState(false); |
| 37 | + const handleCheckAll = (): void => { |
| 38 | + if (!checkAll) { |
| 39 | + setCheckAll(true); |
| 40 | + setIsChecked({ |
| 41 | + check1: true, |
| 42 | + check2: true, |
| 43 | + check3: true, |
| 44 | + }); |
| 45 | + } |
| 46 | + if (checkAll) { |
| 47 | + setCheckAll(false); |
| 48 | + setIsChecked({ |
| 49 | + check1: false, |
| 50 | + check2: false, |
| 51 | + check3: false, |
| 52 | + }); |
| 53 | + } |
| 54 | + }; |
| 55 | + const handleCheck = (e: React.ChangeEvent<HTMLInputElement>): void => { |
| 56 | + switch (e.target.name) { |
| 57 | + case 'policy1': |
| 58 | + setIsChecked({ |
| 59 | + ...isChecked, |
| 60 | + check1: !isChecked.check1, |
| 61 | + }); |
| 62 | + break; |
| 63 | + case 'policy2': |
| 64 | + setIsChecked({ |
| 65 | + ...isChecked, |
| 66 | + check2: !isChecked.check2, |
| 67 | + }); |
| 68 | + break; |
| 69 | + case 'policy3': |
| 70 | + setIsChecked({ |
| 71 | + ...isChecked, |
| 72 | + check3: !isChecked.check3, |
| 73 | + }); |
| 74 | + break; |
| 75 | + } |
| 76 | + }; |
| 77 | + const modalHandler = (): void => { |
| 78 | + setIsPolicyOpen(!isPolicyOpen); |
| 79 | + }; |
| 80 | + |
| 81 | + useEffect(() => { |
| 82 | + setUserData({ ...userData, marpolicy: isChecked.check3 }); |
| 83 | + }, [isChecked.check3]); |
| 84 | + useEffect(() => { |
| 85 | + if (isChecked.check1 && isChecked.check2) { |
| 86 | + setUserData({ ...userData, policyMust: true }); |
| 87 | + } else { |
| 88 | + setUserData({ ...userData, policyMust: false }); |
| 89 | + } |
| 90 | + }, [isChecked.check1, isChecked.check2]); |
| 91 | + useEffect(() => { |
| 92 | + if (isChecked.check1 && isChecked.check2 && isChecked.check3) setCheckAll(true); |
| 93 | + else setCheckAll(false); |
| 94 | + }, [isChecked.check1, isChecked.check2, isChecked.check3]); |
| 95 | + |
| 96 | + interface Policy { |
| 97 | + title: string; |
| 98 | + content: string; |
| 99 | + } |
| 100 | + |
| 101 | + const policyList: Policy[] = [ |
| 102 | + { |
| 103 | + //리스트 인덱스에 따라 내용다르게, |
| 104 | + //content 꾸미는건 내용 확정돼서 나오면 그때 수정할 것 |
| 105 | + title: '서비스 이용약관', |
| 106 | + content: `*제1조(목적) |
| 107 | +
|
| 108 | + 본 약관은 디긴 투자정보서비스 (이하 회사라고 합니다)가 제공하는 인터넷 기반의 모바일 어플리케이션 디긴(DIGIN) 서비스의 이용과 관련하여 회원과 회사 간에 필요한 사항을 규정하기 위함을 목적으로 합니다. |
| 109 | + |
| 110 | + *제2조(용어의 정의) |
| 111 | + |
| 112 | + ① 본 약관에서 사용하는 용어의 정의는 다음과 같습니다. |
| 113 | + 1. “서비스”라 함은 회사가 개발하여 인터넷을 통하여 서비스하고 있는 서비스 및 기타 서비스 일체를 의미합니다. |
| 114 | + 2. “회원”이라 함은 회사가 운영하는 사이트에 접속하여 본 약관에 동의하고 회원 가입을 한 자로서, 회사와 서비스 이용 계약을 체결하고 서비스 이용 아이디와 비밀번호를 부여 받아 서비스를 이용하는 고객을 말합니다. |
| 115 | + 3. "아이디"라 함은 회원의 식별과 회원의 서비스 이용을 위하여 "회원"이 가입 시 사용한 이메일 주소를 말한다. |
| 116 | + ② 본 약관에서 사용하는 용어의 정의에 대하여 본 조 제1항에서 정하는 것을 제외하고는 관계법령 및 서비스별 정책에서 정하는 바에 의하며, 관계법령과 서비스별 정책에서 정하지 아니한 것은 일반적인 상관례에 의합니다. |
| 117 | + |
| 118 | + *제3조(약관의 게시와 개정) |
| 119 | + |
| 120 | + ① 회사는 본 약관의 내용을 회원이 쉽게 확인할 수 있도록 서비스 내 또는 연결화면을 통하여 게시합니다. |
| 121 | + ① 회사는 본 약관의 내용을 회원이 쉽게 확인할 수 있도록 서비스 내 또는 연결화면을 통하여 게시합니다. |
| 122 | + ① 회사는 본 약관의 내용을 회원이 쉽게 확인할 수 있도록 서비스 내 또는 연결화면을 통하여 게시합니다. |
| 123 | + `, |
| 124 | + }, |
| 125 | + ]; |
| 126 | + |
| 127 | + return ( |
| 128 | + <Wrapper> |
| 129 | + <div> |
| 130 | + <FlexContainer> |
| 131 | + <BiggerCheckBox checked={checkAll} onChange={handleCheckAll} id="policyAll" /> |
| 132 | + <BiggerLabel htmlFor="policyAll"> |
| 133 | + <CheckAllImg src={checkAll ? CheckAllOnIcon : CheckAllOffIcon} /> |
| 134 | + 전체 동의 (선택 정보 포함) |
| 135 | + </BiggerLabel> |
| 136 | + </FlexContainer> |
| 137 | + <Line /> |
| 138 | + <PolicyCheck> |
| 139 | + <FlexContainer> |
| 140 | + <SmallerCheckBox checked={isChecked.check1} name="policy1" onChange={handleCheck} id="policy1" /> |
| 141 | + <Label htmlFor="policy1"> |
| 142 | + <CheckImg src={isChecked.check1 ? CheckOnIcon : CheckOffIcon} /> |
| 143 | + (필수) 서비스 이용약관 동의 |
| 144 | + </Label> |
| 145 | + </FlexContainer> |
| 146 | + <MoreBtn onClick={modalHandler}>보기</MoreBtn> |
| 147 | + </PolicyCheck> |
| 148 | + <PolicyCheck> |
| 149 | + <FlexContainer> |
| 150 | + <SmallerCheckBox checked={isChecked.check2} name="policy2" onChange={handleCheck} id="policy2" /> |
| 151 | + <Label htmlFor="policy2"> |
| 152 | + <CheckImg src={isChecked.check2 ? CheckOnIcon : CheckOffIcon} /> |
| 153 | + (필수) 개인정보 수집 이용 동의 |
| 154 | + </Label> |
| 155 | + </FlexContainer> |
| 156 | + <MoreBtn onClick={modalHandler}>보기</MoreBtn> |
| 157 | + </PolicyCheck> |
| 158 | + <PolicyCheck> |
| 159 | + <FlexContainer> |
| 160 | + <SmallerCheckBox checked={isChecked.check3} name="policy3" onChange={handleCheck} id="policy3" /> |
| 161 | + <Label htmlFor="policy3"> |
| 162 | + <CheckImg src={isChecked.check3 ? CheckOnIcon : CheckOffIcon} /> |
| 163 | + (선택) 광고성 정보 수신 및 마케팅 활용 동의 |
| 164 | + </Label> |
| 165 | + </FlexContainer> |
| 166 | + <MoreBtn onClick={modalHandler}>보기</MoreBtn> |
| 167 | + </PolicyCheck> |
| 168 | + </div> |
| 169 | + <Modal isOpen={isPolicyOpen} setIsOpen={setIsPolicyOpen} isBlur={true}> |
| 170 | + <ModalContainer> |
| 171 | + <Button onClick={modalHandler}> |
| 172 | + <CloseImage src={ModalCloseIcon}></CloseImage> |
| 173 | + </Button> |
| 174 | + <Titie>{policyList[0].title}</Titie> |
| 175 | + <Content>{policyList[0].content}</Content> |
| 176 | + </ModalContainer> |
| 177 | + </Modal> |
| 178 | + </Wrapper> |
| 179 | + ); |
| 180 | +} |
| 181 | + |
| 182 | +export default JoinCheck; |
0 commit comments