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

[온보딩페이지] STEP01 이름 입력 컴포넌트 뷰 구현 & 나머지 단계 타이틀만 구현 #50

Merged
merged 30 commits into from
Jan 9, 2024

Conversation

ExceptAnyone
Copy link
Member

이슈 넘버

구현 사항

  • STEP01 이름 입력 컴포넌트 뷰 구현
  • & 나머지 단계 타이틀만 구현
  • 추후 useFunnel 훅을 위한 상수 작성

Need Review

  • ~ 부분 이렇게 구현했어요, 피드백 부탁해요!

온보딩 페이지에서 타이틀 부분은 공통으로 쓰이는 폰트 크기와 색깔이 있어서 따로 빼두었습니다.

import styled from 'styled-components';
import theme from '../../style/theme';

export const TitleWrapper = styled.div`
  margin-left: 2rem;
  margin-right: 2rem;
`;

export const Title = styled.p`
  color: ${theme.colors.B_01};
  ${theme.fonts.heading_01};
`;

export const SubTitle = styled.p`
  color: ${theme.colors.G_10};
  ${theme.fonts.caption_02};
`;

그리고 아래와 같은 방식으로 구현하였습니다.

import * as S from './Onboarding.style';

const SetTournamentSchedule = () => {
  return (
    <S.TitleWrapper>
      <S.Title>선물 토너먼트</S.Title>
      <S.Title>시작 일정을 설정해주세요</S.Title>
      <S.SubTitle>토너먼트 시작 전까지 선물을 등록할  있어요.</S.SubTitle>
    </S.TitleWrapper>
  );
};

export default SetTournamentSchedule;

다만, STEP01은 인풋창까지 구현하였습니다.

현재 크롬 업데이트를 하지 않으면 한글을 입력했을 시 10글자 제한일 경우에 11글자까지 입력이 된다고 합니다. 크롬을 업데이트하면 해결이 된다고 하지만, 정규표현식으로 제한하여 구현하였습니다.

const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
    const inputValue = e.target.value;
    const unicodeChars = [...inputValue].filter((char) => /[\ud800-\udfff]/.test(char)).length;

    inputValue.length + unicodeChars <= 10 ? setText(inputValue) : e.preventDefault();
  };

또한 placeholder 의 색상과 폰트를 변경하는 것도 구버전의 크롬 등에선 작동이 안된다고 하여 추가 로직 구현하였습니다.

input::placeholder {
    color: ${theme.colors.G_07};
    ${theme.fonts.body_06}
  }
  &::-webkit-input-placeholder {
    color: ${theme.colors.G_07};
    ${theme.fonts.body_06}
  }

  &:-ms-input-placeholder {
    color: ${theme.colors.G_07};
    ${theme.fonts.body_06}
  }

또한 추후 useFunnel 훅을 위한 상수처리 할 값이 필요해서 core 폴더 안에 작성해놓았습니다.

export const ONBOARDING_FORM_STEP = [
  'NAME',
  'THUMBNAIL',
  'PRESENT',
  'TOURNAMENT_SCHEDULE_REGISTRATION',
  'TOURNAMENT_PROCEEDING',
] as const;

📸 스크린샷

2024-01-09.3.59.32.mov

Reference

지민이를 위한 인풋값에 따른 색 변경 로직

<Input
            type='text'
            onChange={onChange}
            maxLength={10}
            placeholder='이름을 입력해주세요'
            hasContent={text.length > 0}
            maxLengthReached={text.length === 10}
          />
const Input = styled.input<{ hasContent: boolean; maxLengthReached: boolean }>`
  width: 100%;
  border: none;
  display: flex;
  justify-content: center;
  align-items: flex-start;
  gap: 0.8rem;
  outline: none;
  border-bottom: 0.1rem solid ${theme.colors.G_02};

  ${(props) =>
    props.hasContent &&
    css`
      border-bottom: 0.1rem solid ${theme.colors.P_06};
    `}

  ${(props) =>
    props.maxLengthReached &&
    css`
      border-bottom: 0.1rem solid ${theme.colors.G_02};
    `}

    input::placeholder {
    color: ${theme.colors.G_07};
    ${theme.fonts.body_06}
  }

  &::-webkit-input-placeholder {
    color: ${theme.colors.G_07};
    ${theme.fonts.body_06}
  }

  &:-ms-input-placeholder {
    color: ${theme.colors.G_07};
    ${theme.fonts.body_06}
  }
`;

@ExceptAnyone ExceptAnyone added feat💡 기능 구현 style🎨 작은 사항 수정 및 style 코드 작성 labels Jan 9, 2024
@ExceptAnyone ExceptAnyone self-assigned this Jan 9, 2024
Copy link

github-actions bot commented Jan 9, 2024

PR Preview Action v1.4.6
🚀 Deployed preview to https://SWEET-DEVELOPERS.github.io/sweet-client/pr-preview/pr-50/
on branch gh-pages at 2024-01-09 12:06 UTC

Copy link
Contributor

@urjimyu urjimyu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

공통으로 분리해주신 거랑 텍스트필드 코드 너무 감사해요!! 코멘트 남긴 자잘한 부분만 수정하면 될 것 같습니다! 고생하셨습니다!!!🙌

Comment on lines 7 to 9
const SubTitle = (subTitleProps: SubTitleProps) => {
return <S.SubTitle>{subTitleProps.subTitle}</S.SubTitle>;
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

구조 분해 할당을 사용하면 subTitleProps를 통해서 가져올 필요 없이 바로 변수 불러올 수 있을 것 같습니다~!
SubTitle = ({subTitle}: SubTitleProps)로 불러오면 <S.SubTitle>{subTitle}</S.SubTitle>;로 쓸 수 있을 것 같습니다!

@@ -0,0 +1,12 @@
import styled from 'styled-components';
import theme from '../../../style/theme';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 스니펫 익스텐션 써서 scpt 써서 리팩토링 하면 theme import 필요 없어질 것 같아요!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 계속 자동완성이 안되는 이슈로... 나중에 바꾸겠슴다 ㅎㅎ

Comment on lines 5 to 13
width: 100%;
border: none;
display: flex;
justify-content: center;
align-items: flex-start;
margin-top: 7.2rem;
gap: 0.8rem;
outline: none;
border-bottom: 0.1rem solid ${theme.colors.G_02};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기 스타일 코드들 개행 해주면 나중에 찾아볼 때 더 편리할 것 같아요~!
분류기준에 참고하기 좋은 레퍼런스
자잘하게 쪼개면 오히려 번거로울 수도 있긴 해서 참고로 보고 정안님이 편리한 정도로만 구분하면 좋을 것 같아요!

<>
<Title title='선물 토너먼트' />
<Title title='시작 일정을 설정해주세요' />
<SubTitle subTitle='너먼트 시작 전까지 선물을 등록할 수 있어요.' />
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'토'가 누락된 것 같습니다~!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수정하였습니다!!

Copy link
Member

@imeureka imeureka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 :)

Comment on lines 52 to 54
display: inline-flex;
flex-direction: column;
align-items: flex-start;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 저희 theme에서 mixin inlineFlexBox 사용해보면 될 것 같아용!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

습관이 참 무섭네요 ㅠ ㅋㅋㅋ mixin 바로 적용하겠슴다

Comment on lines +3 to +5
interface SubTitleProps {
subTitle: string;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

공통 컴포넌트 너무 좋아요! 고마워요!૮⑅ᐡ•ﻌ•ᐡა

Comment on lines +5 to +6
color: ${theme.colors.B_01};
${theme.fonts.heading_01};
Copy link
Member

@imeureka imeureka Jan 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

theme import 말고
${({ theme }) => theme.fonts.Title};
이용해주시면 좋을 것 같아요! 왜냐묜 theme도 글로벌처럼 쓰이니까 import 하면 모호해질 것 같아요:)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지금 자동완성이 안되는 이슈로... ㅎㅎ 추후 고치겠슴다!!

Comment on lines +7 to +9
display: flex;
justify-content: center;
align-items: flex-start;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mixin flexbox! 요기 활용할 수 있을 것 같아요!

Comment on lines +17 to +18
<Title title='선물 받을 분의' />
<Title title='이름, 혹은 닉네임을 알려주세요' />
Copy link
Member

@imeureka imeureka Jan 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오옹! 중복되는 부분으로 공통 스타일을 뺀거군요! 너무 좋아요! 다만 걱정되는 부분은 title이 그저 span의 역할인거같은데 title이 적용돼서 가독성과 일관성이 떨어져 보이지 않을까? 하는 고민이 있습니다!
아니면 <br/> 이용해보는 것도 다른 방법일 것 같습니다!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

엇 무엇을 이용하면 된다는 말씀이실까용??

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

음 이 부분이 고민이 많이 되네요. 이걸 공통으로 뺐을때 과연 이게 최선일지는 ㅠㅠ 하지만 기능 구현에 우선순위를 두고 추후 리펙토리이 하는 방법도 있을 거 같아요

Comment on lines +17 to +18
<Title title='선물 받을 분의' />
<Title title='이름, 혹은 닉네임을 알려주세요' />
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

음 이 부분이 고민이 많이 되네요. 이걸 공통으로 뺐을때 과연 이게 최선일지는 ㅠㅠ 하지만 기능 구현에 우선순위를 두고 추후 리펙토리이 하는 방법도 있을 거 같아요

@ExceptAnyone ExceptAnyone merged commit 1f05bea into develop Jan 9, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat💡 기능 구현 style🎨 작은 사항 수정 및 style 코드 작성
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[온보딩페이지] step1 선물방 생성_이름 입력
4 participants