From f4340de5792a1a808c59056533fa85b37c3d88f5 Mon Sep 17 00:00:00 2001 From: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Date: Fri, 15 Mar 2024 11:31:46 +0900 Subject: [PATCH 01/10] =?UTF-8?q?Develop=EC=97=90=EC=84=9C=20main=20merge?= =?UTF-8?q?=20/=20=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EA=B8=B0=EB=8A=A5=20+=20tag=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EB=B0=98=EC=98=81=20(#502)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * feat: 타이머 컴포넌트 분리 * feat: Step02에서 이미지 파일 자체를 저장 * feat: 타이머 부분 컴포넌트로 분리 * feat: 이미지 파일 formData로 저장 후 PUT * feat: 상위 컴포넌트에서 imageFile props 전달 * feat: POST presigned URL 타입 변경 * feat: 참여자 뷰 타이틀을 받아온 데이터 기반으로 출력 * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * feat: step02 이미지 네임 방식 변경 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * style: 캘린더 가운데 배치 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * feat: 파일이름 파싱 방식 변경 * style: 타이머 위치 조정(수정 필요!!!!!) * feat: 타이머 컴포넌트 인풋 위치 수정 * feat: 중복되는 https를 파싱 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * feat: 파일 이름 파싱 방식 변경 * feat: 참여자 뷰에서 로그인 클릭 시 로그인 수행 * chore: 필요없는 콘솔 제거 * style: 라디오 버튼 width 수정 * style: 안쓰는 코드 제거 * style: step06 이미지 기본값으로 설정 * fix : PUT 403 에러 해결 * fix: refresh token post 수정 * feat: 라디오 버튼 조건문 추가 * style: 스타일 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * chore: 필요없는 코드 제거 * feat: 링크복사를 배포주소로 변경 * feat: step03에 props 전달하여 출력 --------- Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun * fix: 카카오 공유하기 링크 수정 (#231) * [QA] (#234) * feat: 미니 타이머 고치기 * feat: 사진 뜨도록 수정 * feat: 내가 등록한 선물 조건 걸어주기 * feat: 업로드 가능한 이미지 형식 제한 * feat: 완료 버튼 활성화 조건 추가 * feat: 미리보기 수정 * feat: 더미데이터 추가 * chore: 주석처리 * fix: 빌드 에러 해결 * fix: 토너먼트 파람 변경 (#236) * fix: profile image url 수정 * [온보딩] qa 중 (#239) * feat: 카카오 공유하기 시 초대코드로 이동 * feat: imageUrl 빈 문자열로 변경해서 POST * chore: 빌드에러 해결 * fix: router merge 시 수정 된거 복귀 * fix:토너먼트 라우터 수정 (#244) * [QA] 아웃링크 추가 구현, 타이머 수정 (#246) * chore: 불필요한 주석 삭제 * feat: 불필요한 조건문 * feat: 타이머 수정 테스트 * feat: 아이템 아웃링크 구현 * chore: 불필요한 주석 제거 * feat: 아웃링크 연결 * feat: 라우터 연결 * [온보딩] 모바일 폰트 적용 및 색상 적용 (#248) * feat: 라디오 버튼 모바일에서 활성화(왕호은왕천재) * style: 폰트 적용 및 색상 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: 기프트 홈 파람 변경 (#250) * [토너먼트] 아이템 0개이면 0개 화면 예외처리 (#254) * fix: 기프트 홈 파람 변경 * fix: 토너먼트 예외처리 * [온보딩] 지웠던 POST 및 카카오 공유 & 입장 클릭 시 roomId 받아서 navigate 이동 (#257) * feat: 카카오 공유에 props로 넘겨받은 이름 출력 * feat: 실수로 지운 POST 다시 작성 * feat: roomId 상태로 저장 * feat: step05에서 지웠던 post 에서 룸 id 저장 후 다음 스텝 넘기기 * feat: navigate로 roomId 받아서 선물 홈으로 넘김 * [토너먼트] get user roomid 프롭 전달 (#262) * fix: tournament fix * fix: 안쓰는 파일 주석 처리 * feat: 뒤로가기 수정중 * feat: 라우팅 수정 * feat: 빌드 에러 해결 * 초대 & 카카오공유 & 2차 qa (#267) * 깃 충돌 후 폴더 복사 후 새 브랜치 첫 푸쉬 * chore:빌드 에러 해결 * feat: 라우팅 수정 마무리 * feat: 서버통신 수정중 * fix: 빌드 에러 해결중 * feat: presigned url 제거 * fix: QA 적용중 * feat: 스타일 수정 * feat: 버튼 수정 * feat: 기능 수정 * [QA] 토너먼트 스타일 QA 1차 피드백 반영 (#273) * fix: 카카오 공유하기 링크 수정 * feat: 링크복사 baseUrl 수정 * style: 스타일 변경 토너먼트 뷰 * style: app wrapper 변경 및 헤더 * style: 모달창 가격 * fix: 토너먼트 라우터 구조 변경 * feat: 빌드 에러 해결 * feat: 이미지 수정 시 null로 POST * feat: navigate 수정 * feat: 간격 조정 * feat: 빌드 에러 수정 * feat: 디자인 수정 * feat: 디자인 수정 * feat: 초대 링크 수정 * fix: 충돌 해결 후 머지중 * feat: 초대 구현 * Home/Mypage 디자인 qa 진행 완료 (#272) * refactor: type icon 수정 * refactor: footer 수정 * refactor: icon 적용 * refactor: detail view 수정 * refactor: 선물방 뷰 수정 * refactor: 시작 페이지 수정 * refactor: 마이페이지 * refactor: 로딩과 애니메이션 수정 * refactor: gift Room 수정 * fix: build에러 해결 --------- Co-authored-by: Wang HoEun * feat: 이미지 조건 변경 * [온보딩] 스타일 속성 변경 (#278) * feat: 뒤로가기 버튼 제거 * style: qa 반영 오전 5시 18분 * style: 카카오 링크 zindex 추가 * style: 온보딩 스텝 스타일 * fix: 빌드 오류 해결 --------- Co-authored-by: 장정안 * [토너먼트] gifted 속성 받아오기 (#281) * feat:api 업데이트 get User * feat: 라우터 기프티 받아오기 * feat: 뒤로가기 수정 * [온보딩] 온보딩 파이널 뷰 스타일 수정 (#285) * style: 온보딩 파이널 햄버거 추가 & 글자 위치 수정 * style: 투명도 제거 * feat: 스타트 페이지 원래대로 복귀 * [큐에이] 토너먼트 시작 화면 (#287) * chore: 이미지 추가 * style: 토너먼트 카드 스타일 2차 * style: 토너먼트 랭킹 헤더 * style: start 화면 배경 삽입 * fix: 빌드 에러 해결 * 움직이는거 수정 (#289) * refactor: type icon 수정 * refactor: footer 수정 * refactor: icon 적용 * refactor: detail view 수정 * refactor: 선물방 뷰 수정 * refactor: 시작 페이지 수정 * refactor: 마이페이지 * refactor: 로딩과 애니메이션 수정 * refactor: gift Room 수정 * fix: build에러 해결 * refactor: header 수정, 마이페이지 위치 값 수정 * fix: 모바일 움직임 수정 --------- Co-authored-by: Wang HoEun * feat: 네비게이션 수정 * style: 초대 받은 사람 뷰 스타일 수정 * fix: 오타 수정 * fix: 배경 이미지 교체 * fix: 로그인 에러 해결 * fix: 문구 삭제 * fix: 리턴 값 부여 * [리프레쉬 토큰] 리프레쉬 토큰 만료 시 재로그인 (#314) * [Fix] 불필요한 div 삭제 (#294) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun … * [리프레쉬 토큰] reponse data 형식 변경 (#318) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 --------- Co-authored-by: Wang HoEun * [accessToken] api response 형태 관련 수정 (#320) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 --------- Co-authored-by: Wang HoEun * [Token] accessToken 요청 후 refreshToken 재 확인 (#322) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 --------- Co-authored-by: Wang HoEun * [Token] 리프레쉬 토큰 response message 형태 변동 (#324) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 --------- Co-authored-by: Wang HoEun * [refreshToken] 401 status도 조건부에 추가 (#326) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 --------- Co-authored-by: Wang HoEun * [refreshToken] error 메세지로 구분하기 때문에 error. 붙여서 형식 수정 (#328) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 --------- Co-authored-by: Wang HoEun * [refreshToken] axios 에러 일경우 로컬 비우고 재 요청 (#330) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. --------- Co-authored-by: Wang HoEun * [interceptor] 코드 정리 및 / config 형태 변동 (#332) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. * fix: 코드 중복 제거 및 정리 , 메세지에 따른 에러 경우도 분리 * fix: 코드 정리 및 config 형태 변동 --------- Co-authored-by: Wang HoEun * refactor: local 내부 svg 파일 확인 후 삭제 (#335) Co-authored-by: Wang HoEun * [로그인 유지 + refreshToken 재발급] 코드리뷰를 위한 pr (#334) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. * fix: 코드 중복 제거 및 정리 , 메세지에 따른 에러 경우도 분리 * fix: 코드 정리 및 config 형태 변동 * fix: 코드 정리 및 config 형태 변동 * feat: 일단 token 없이 url 이동 시 무조건 start로 가게 해둠. 추후 error 페이지 도출 예정 --------- Co-authored-by: Wang HoEun * [로컬로그인] production 모드와 development 모드 구분 하여 로그인 가능하도록 (#341) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 --------- Co-authored-by: Wang HoEun * [시작페이지] fixed view (#336) * fix: max width 값 지정하여 움직이지 않도록 함. svg 때문에 width100%가 안 먹고 있었다. * refactor: style 코드가 아닌, svg 파일 자체의 width 값 지정 (고정값) --------- Co-authored-by: Wang HoEun * [토너먼트 인트로] 토너먼트 전체 네이밍 및 인트로 예외처리 (#340) * fix: TournamentNew 폴더 -> Tournament 이름 변경 * style: mixin 대입 * fix : 토너먼트 컨데이너 -> 토너먼트 인트로 컨테이너 이름 변경 * feat: 토너먼트 선물 0개 일 때 예외 처리 * fix: 페이지/Tournament 폴더 생성 * chore: tournamentOngoing 파일 안쓰는거 제거 * style: mixin 추가 * [시작페이지] 코드 관심사의 분리 (#338) * refactor: scroll 애니메이션 코드 분리 및 애니메이션 폴더 생성 * refactor: 첫번째 선물 애니메이션 코드 분리 및 start style 페이지 정리 * refactor: footer position Footer의 고정값으로 수정 * refactor: 시작페이지 고정 버튼 코드분리 * style: start button 주석 삭제 * style: start button 컴포넌트 명 변경 * fix: 글로벌 스타일에서 margin 0 없앰 --------- Co-authored-by: Wang HoEun * [상태관리] recoil 삭제 (#346) * fix: recoil 폴더 삭제 및 recoil root 삭제 * refactor: recoil 패키지 의존성 제거 --------- Co-authored-by: Wang HoEun * [로컬 로그인] 기존 닫힌 review를 위한 pr (링크 확인 부탁 드립니다.) (#345) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 * style: 주석 지우기 * fix: 마이페이지 get 요청 도중 token 인식 실패문제 해결 * fix: 로그아웃 시 alert 창 뜨는거 수정 --------- Co-authored-by: Wang HoEun * [로컬 로그인] local redirect uri 숨기기 (#351) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 * style: 주석 지우기 * fix: 마이페이지 get 요청 도중 token 인식 실패문제 해결 * fix: 로그아웃 시 alert 창 뜨는거 수정 * fix: local redirect uri 수정 --------- Co-authored-by: Wang HoEun * [선물 등록, 선물방 편집] 리액트 쿼리 관련 데이터 실시간 업데이트 문제 해결 (#339) * refactor: 불필요한 주석 제거 및 푸터 컴포넌트 내 onSuccess 제거 * refactor: 불필요한 props 제거 * feat: 임시로 광고 숨김 * fix: invalidated queries to refetch fresh data * fix: 멤버 삭제 기능 수정 * fix: 파라미터 수정 * refactor: 에러 메시지 출력되도록 수정 * fix: 개설자 프로필 이미지 뜨도록 수정 * fix: 개설자 이미지 뜨도록 이름 수정 * fix: roomId 가져오는 방식 수정 * chore: 안 쓰는 import 주석 처리 * refactor: 주석 삭제 * refactor: 화살표 함수로 복구 * refactor: useQueryData로 변경 * [로그인] 로그인 에러 페이지 (#349) * feat: 카카오 로그인 에러 시 페이지 이동 * fix: 지민언니 addgiftfooter 부분 filename 삭제 --------- Co-authored-by: Wang HoEun * [시작페이지+header] 애니메이션 수정 및 header + layout (#353) * style: 안 쓰이는 mypage header 삭제 * refactor: start 페이지와 mypage header가 들어간 layout 생성 및 적용 * feat: header icon 변경 및 style 코드 정리 * refactor: mypage header 수정 및 start header 분리 + router 속 layout 수정 * style: start 페이지 속 tournament json 파일 추가 * refactor: 채팅 animation 각자 개별로 떨어트려두기로 수정 * fix: 새로 추가된 svg icon mypage와 home2 안쓰는 import문 삭제 후 빌드에러 해결 * fix: 안쓰는 import 문 삭제 * fix: 지민 언니 부분 안쓰는 filename 변수 삭제 * feat: 로그인 에러페이지 header layout적용 --------- Co-authored-by: Wang HoEun * [선물 등록] PresignedUrl로 선물 등록되도록 수정 & 커스텀 훅 분리 (#347) * feat: 이미지 주소를 파일로 변환하는 커스텀 훅 생성 * feat: 폼 데이터 형식을 put 하는 커스텀 훅 * refactor: 폼데이터 전송으로 수정 * refactor: presignedUrl 관련 코드 다시 추가 * feat: 이미지 put 커스텀훅 * refactor: 사용하지 않는 요소들 삭제 * fix: presignedUrl에 보낼 이미지 주소 파싱 방식 수정 * fix: binary 형식으로 put 하도록 수정 * fix: 오픈그래프 이미지가 아니어도 잘 등록되도록 수정 * chore: 콘솔 삭제 * fix: 일반 이미지 불러지지 않는 버그 해결 * refactor: 선물 등록 서버 통신 코드 커스텀 훅으로 분리 * refactor: 선물 이미지 업로드 커스텀 훅 분리 * refactor: 파일명 파싱 함수 커스텀 훅 분리 * fix: s3 이미지링크 비동기 문제 해결 * fix: 오픈그래프 이미지 사용시 파일명 없는 문제 해결 * fix: invalidateQueries 복구 * refactor: 링크가 없는 경우 presignedUrl 적용 * chore: 사용하지 않는 import 삭제 * chore: 빌드 에러 해결 및 함수형으로 수정 * chore: 빌드 에러 해결 * fix: 온보딩 커스텀 훅 복구 * 온보딩 구조 context API로 변경 & 관심사 분리 & 공통 Title 변경 (#343) * refactor: step01 다음 버튼 텍스트 스타일 공통으로 분리 * refactor: 모든 스텝 버튼 텍스트 스타일 공통으로 분리 * style: 라디오 버튼 onClick 제거 (이미 속성에 정의되어 있음) * feat: 공통 Title 속성 변경 기존에 저희끼리 이야기 나누었던 부분인 띄어쓰기 때문에 Title을 두 번씩 가져다 쓰는게 맞냐는 부분에대해 고민 후 Title의 속성을 PropsWithChildren으로 변경하여 사용하는 곳에서 br태그 사용 가능하도록 변경 * feat: 타이머 인풋창 가려지게 설정 & 아이콘 클릭 시 더이상 인풋창 출력되지 않고 바로 타이머 나오도록 설정 useRef 속성에 showPicker를 알게되어 사용. 그리고 투명도를 0으로 주어 타이머를 가렸습니다 * refactor: Step01 인라인 스타일 제거 * refactor: 온보딩 버튼 구조 수정 버튼 어디에나 공통으로 쓰이는 mixin이 있어 이를 함께 컴포넌트 안으로 묶어주었습니다 * chore: 안쓰는 step01 코드 삭제 * chore: step02 안쓰는 코드/주석제거 * style: 안쓰는 코드 제거 & 스타일 코드 수정 * refactor: step01 타입 Pick으로 변경 * feat: Onboarding context 작성 및 라우터에 Provider 추가 * feat: context에 imageUrl 빈값으로 추가 * feat: step01 인풋 입력 로직 커스텀 훅으로 분리 * feat: OnboardingInfo 타입 지정 * style: 온보딩 버튼 내 '$' 추가 * feat: step01 관심사 분리 완료 * feat: 미리보기 공통 커스텀 훅 작성 * feat: step02 관심사 분리 * refactor: interface 수정 * style: IconWrapper 추가 * feat: step03 관심사 분리 * style : step04 width값 삭제 * style: step04 인라인 스타일 제거를 위한 스타일 코드 추가 * feat: 캘린더 & 타이머 커스텀 훅 추가 * feat: step04 관심사 분리 및 추상화 수준 맞추기 * chore: 쓸모없는 타입 제거 * feat: step04 캘린더 & 타이머 아이콘 클릭의 추상화 정도 일치시키기 * feat: step05 로직 커스텀 훅 분리 * feat: step05 내 시간 선택하는 부분 컴포넌트 분리 * feat: 시간 계산 유틸 함수 작성 후 분리 * style: radio 버튼 '$'추가 * feat: step05 컴포넌트 및 관심사 분리 * chore: 온보딩 최상위 컴포넌트 필요없는 코드 제거 * style: 참여자 뷰에서 햄버거 메뉴 바 선택 시 글자 겹쳐 보이는 현상 수정 * feat: 전체 온보딩 정보를 요약한 정보 속 날짜 계산 로직을 커스텀 훅으로 분리 * refactor: 참여자 뷰 로직 분리 및 Title 구조 수정 * feat: step06 커스텀 훅으로 분리및 step06 필요없는 타입 & props 정리 * refactor: 온보딩 최상위 컴포넌트 상태와 props 정리 * refactor: step01 다른 스텝과 추상화 정도 맞추기 * style: 인라인 스타일 -> styled components로 변경 * chore: 설명주석 추가 & 필요없는 코드 제거 * style: 참여자 뷰 인라인 스타일 코드 -> styled Components로 변경 * chore: 파일명에 공백 제거 * fix: 라우터 속 import 파일명 공백 제거 * chore: 공통 타이틀 주석 제거 * fix: 메뉴바 클릭시 글자 겹쳐 보이는 현상 수정 * chore: 주석 제거 * chore: 필요없는 props type 제거 * style: Wrapper 컨벤션 맞추기 * feat: Content-Type': 'binary'로 변경 * feat: filename & file자체 저장 useState 추가 * feat: binary 파일 형식으로 바꿔주고 PUT하는 커스텀 훅 추가 * refactor: presignedUrl을 받아오는 POST 함수 수정 * feat: presignedUrl 로직 추가 POST로 받아온 presignedUrl, binary형식으로 파일 자체를 담아서 PUT * style: step06일 때는 다른 display 적용 * style: step06 일때 온보딩 버튼 위치 수정 * style: margin-bottom값 변경 * feat: step02 presignedUrl 값 context에 저장 * chore: 필요없는 조건문 및 주석 제거 * feat: 참여자 뷰 GET으로 받아온 값으로 구현 (추후 겹치는 로직 분리) * chore: TODO 주석추가 * style: 온보딩 이미지와 참여자 뷰 이미지 그라데이션 수치 일치화 * chore: 주석 추가 및 todo 추가 * feat: 참여자뷰에서 get받을 때 일반 axios사용으로 변경 * feat: 참여자 뷰 GET response를 data.data 로 변경 * style: 이미지 미리보기 등록 시 수정 아이콘 삽입 * chore: 사용하지 않는 코드 제거 및 todo 추가 * feat: input accept 형식 변경 * feat: 급하게 커스텀 훅 추가(충돌 해결을 위한) * [선물 등록] ContextApi 적용 (#350) * feat: 선물등록 임시저장 위한 context 적용중 * feat: 뒤로가기 시 정보 임시저장을 위한 context 생성 * feat: 뒤로 가기 혹은 다음 버튼 누르면 context 업데이트 * feat: 선물 등록 클릭 시 임시저장 데이터 초기화 * feat: 링크 입력 화면 context 적용 * chore: 머지하면서 사라진 부분 복구 * fix: 오타 수정 * chore: 빌드 에러 해결중 * chore: 빌드 에러 해결 * [토너먼트] 중복자 예외처리 + 토너먼트 로직 분리 (#354) * feat: 랜덤 함수 커스텀 훅 분리 * feat: 토너먼트 로직과 ui 분리 * fix: useGetItem 이름 변경 * fix: useGetItem 에러 임시 처리 * feat: 토너먼트 중복자 예외처리 * chore: 안쓰는 state 제거 * feat: 선물 0 개일 때 조건문 변경 * feat: 개설자 여부에 따라 버튼 출력 * 마이페이지 두번 누르는 이슈 해결 (#358) * feat: 카카오 로그인 에러 시 페이지 이동 * fix: 지민언니 addgiftfooter 부분 filename 삭제 * fix: 마이페이지 안 들어가는 이슈 확인 --------- Co-authored-by: Wang HoEun * fix: 에러페이지 도출 경우 에러 수정 * feat: 라우터 giftee -> gifteeName변경 (#362) * fix: logout instance 생성 후 interceptor 안 걸리게 함 * fix: 안쓰는 post instance import 삭제 * [마이페이지] 코드 리펙토링 (#370) * style: console 삭제 * refactor: logout 버튼 logic 코드 이동 * style: 마이페이지 data 순서 정리 * style: 마이페이지 header 코드 가독성 높이기 * refactor: progressgiftview 코드 정리 * refactor: donegiftview 코드 정리 * style: console 창 삭제 * style: 기존으로 다시 원상복귀.. * fix: logout instance 수정 * fix: loggout 시 스토리지 clear로 변경 * refactor: giftroomview 코드 클린하게 변동 * refactor: detail room 코드 정리 * refactor: mypage view 코드 분리 * style: 안 쓰는 interface 삭제 * refactor: 반복되는 컴포넌트 새로운 const로 생성 * refactor: view 코드 component 분리 map을 더 간단하고 가독성 있게 * style: props 변수 명 수정 및 옵셔널로 반영 * style: 좀 더 정확한 data 네이밍 수정 * style: data 옵셔널이 아닌, undefined로 예외처리 코드로 작성하기 수정 * refactor: React.FC 삭제 --------- Co-authored-by: Wang HoEun * [favicon/og] 파비콘과 오픈그래프 (#368) * feat: og tag 적용하여 썸네일과 설명 적용 * feat: 파비콘 설정 및 apple 아이콘 임의로 설정 --------- Co-authored-by: Wang HoEun * fix: 리프레시 토큰 재요청 경우 모든 에러 케이스 추가 * feat: 모바일에서 카카오 로그인 버튼 안보이는 현상 로직 수정 (#381) useEffect로 isToken을 boolean으로 주고 그에 따른 삼항 연산자로 뷰를 보여주는 로직으로 수정하였습니다. * isToken 기본 값 언디파인드로 변경 (#384) * feat: 모바일에서 카카오 로그인 버튼 안보이는 현상 로직 수정 useEffect로 isToken을 boolean으로 주고 그에 따른 삼항 연산자로 뷰를 보여주는 로직으로 수정하였습니다. * feat: isToken 기본 값을 false에서 undefiend로 변경 * feat: isToken 값 기본으로 false 설정을 제거 (#389) * [온보딩] useEffect 안 조건문 제거(02:36) (#390) * feat: isToken 값 기본으로 false 설정을 제거 * feat: useEffect 안 조건 문 제거 * [호은 1.5차 qa] edit 페이지 뒤로가기 header 추가 / 로그인 시 카카오 프로필 header에 나타남 (#375) * refactor: edit room code 정리 * feat: edit room 에 뒤로 가기 헤더 추가 * feat: 뒤로가기 헤더 layout 생성 후 공통으로 쓸 수 있도록 router 수정 * feat: login 했을때 profile 이미지 localstorage에 저장하고 header 속 프로필 바뀌게 하기 --------- Co-authored-by: Wang HoEun * [1.5차 QA : 토너먼트] 토너먼트 방 종료 버튼 구현 및 중복 참여자 ui 개선 (#378) * feat: 종료하기 기능 구현 * chore: React.FC 지양 * fix: 토너먼트 중복 참여자일 경우 ux 변경 * chore: 안쓰는 import 삭제 * chore: 코드 정리 * fix: 모달창 확인 버튼 마이페이지 이동 * fix: 화살표 함수 지정 * [1.5차 QA] 선물 등록 완료 버튼 관련 버그 수정(기본 이미지 문제, 로딩 뷰 처리) (#393) * fix: 링크 없이 등록 시 모달 안 뜨도록 수정 * fix: 기본 링크 설정에 쉼표 오타 제거 * refactor: 이미지 링크 빈 값 들어가는 에러 해결 * fix: CORS 에러 나면 바로 직접 입력으로 전환 * refactor: onSuccess 중복 제거 * feat: 선물 등록 시 지연 생길 때 로딩뷰 추가 * fix: 로딩 완료 후 바로 선물등록 홈으로 이동되도록 수정 * fix: svg 막고 핸드폰 사진 허용 * [1.5차] 선물등록 스타일 QA (#403) * fix: 미니타이머 아이콘 크기 고정 * fix: input 포커싱 때만 색상 주기 * fix: input 글자색 수정 * fix: 버튼 위치 수정 * fix: UX 라이팅 수정 * fix: 이미지 안 잘리도록 수정 * [1.5차 QA] 선물홈 스타일 QA 반영, 선물등록 모달창 추가 (#401) * fix: 중앙정렬 * fix: 잘리는 글자 해결 * fix: 내가 등록한 선물 스타일 적용 * feat: 삭제 모달 추가 * [시작페이지] style qa 진행 (#376) * refactor: 바뀐start 페이지 속 svg 수정 이후, header 속 svg 수정 * fix: logo header속 아이콘 도 수정 * style: home 아이콘 크기 수정 * fix: 새롭게 바뀐 svg 적용 + 애니메이션 적용을 위한 배경으로 변동 * style: step svg 파일 추가 후 tsx로 변환완료 * feat: 새로운 애니메이션 적용 및, 변경 된 svg 새롭게 적용 scroll animation 모든 부분 * feat: 새로운 tournament animation lottie 적용 * style: header 색상 하얀색으로 변경 * style: navigate 중앙정렬 및 색상 변경 + globalstyle margin 0 auto 추가 * style: 로고 헤더 wrapper 생성 후 중앙정렬 * fix: 화면 밀리는 문제 해결 start page + 애니메이션 속도 조절 * feat: downIcon에도 애니메이션 적용 start page * style: 시작 페이지 사진 width 값 100%으로 수정 첫번째 사진 제외하고 * style: 기존 width 37.5rem 로 변경 시작 첫번째 이미지 * fix: svg 파일 import 문 삭제 * fix: icon 바꾼거 네이밍 변경 적용 merge 시 바뀌게 된 듯 함 * refactor: 변경 된 start 첫번째 사진 svg에서 tsx 생성 * refactor: start 페이지 첫번째 이미지 수정 반영 margin 없음 * refactor: 수정 된 버튼 그라데이션 svg 반영 * feat: 수정한 버튼 그라데이션 코드에 적용 --------- Co-authored-by: Wang HoEun * [마이페이지] style qa를 위한 변경 사항 (#399) * style: 마이페이지 가로 스크롤 안 생기게 수정 및, userbox 중앙정렬 * refactor: mypage 이미지 svg로 변경 * fix: 선물방 마이페이지 사진 크기 가로세로 일정하게 수정 * feat: 선물방 카드 속 이름 길이에 따라 보여지는 style 다르게 하는 코드 작업중 중간 로직 코드 작성 (수정 필요) * fix: 선물방 카드 giftee 님을 위한 선물방 글자수에 맞게 보여지는게 다르게 수정 * feat: user name 색상 pink 6번 으로 수정 * refactor: header 배경 색 맨 위에 있을땐, 투명이었다가, 내릴때부터 하얀색으로 되게 수정 * refactor: 이미지 위치 수정 후, user wrapper 위치도 수정 * fix: UserName 부분 width 100% 빼기 * refactor: edit page 속 명수 색상 변동 적용 * fix: 안쓰는 import 문 svg 속에 있는거 삭제 * fix: mypage header 부분 icon 크기 변동과 gap 삭제 * fix: merge 하며 없어진 style header 속 코드 다시 반영 --------- Co-authored-by: Wang HoEun * [온보딩] 뒤로가기 기능 (#379) * feat: 뒤로가기 아이콘 추가 및 로직 추가 * chore: funnel 훅 폴더 정리 * feat: 온보딩 헤더 뒤로가기 로직 변경 * feat: 미리보기 이미지 전역으로 변경? 뒤로가기 시 미리보기 이미지가 보여지고 있음에도 불구하고 '다음'버튼이 활성화가 되지 않는 현상이 있습니다. 이를 콘솔로그를 통해 살펴보니 미리보기 이미지가 뒤로가기 시에 업로드 되어있지 않다는 판정이 되는 것 같아요 ㅠ 추후 수정하겠습니다 * feat: react.memo로 step02 감싸서 렌더링 방지 * feat: 미리보기 이미지 상태 다시 일반 state로 복귀 * feat: step03 뒤로가기 구현 * feat: step02 미리보기 전역 상태를 일반 state로 복귀 * feat: previewImage 커스텀 훅 안쓰는 코드 정리 * feat: step04 시간 선택 반영 잘되게 수정 * feat: 토너먼트 스케줄 캘린더 담당 커스텀 훅 작성 * feat: 뒤로 가기 시 캘린더 정보 저장(시간은 저장x) * feat: 토너먼트 시작 시간이 없을 시를 대비한 삼항 연산자 사용 * chore: 필요없는 코드 제거 * chore: 필요없는 useEffect 제거 * chore: 필요없는 코드 제거 * fix: 빌드에러 수정 * [온보딩] 썸네일 미리보기 이미지 짤리는 현상 (#395) * feat: svg 확장자는 전부 이미지 업로드 불가하여 accept에서 제거 * feat: 이미지의 크기가 매우 작은 경우를 대비하여 height 100% 설정 * fix: 썸네일 부분 height값 삭제 * feat: 이미지 특정 height 값 이하일 때 미리보기 안되게 구현 * feat: 이미지 최소 height 변경 (추후 논의 필요) * feat: image accept에 heic 추가 * [온보딩]16시 54분 기준 카카오 로그인 강제로 보이게 하여 svg의 문제인지 확인하는 작업 (#413) * feat: 카카오 로그인 조건부처리 없이 강제로 보이는지 확인 * feat: 새로운 도메인으로 변경 * feat: develop 브랜치에서 카카오 로그인 png로 변경 * [토너먼트 랭킹] 공유하기 기본 ui 기능 구현 (#416) * feat: 아이콘 추가 * style: 토너먼트 이미지 가운데 정렬 * chore: 불필요한 console 제거 * feat: 라우터 변경 공통 헤더 사용 * style: 메달 아이콘 변경 * style: 메달 구 아이콘 제거 신 버전 아이콘 업데이트 * style: 랭킹 메달 업데이트 및 랭킹 글자 가운데 정렬 * style: 토너먼트 랭킹 스타일 1.5차 QA * fix: 공유하기 일단 카카오톡 공유하기로 임시 대체 * fix: 빌드 에러 해결 * style: 토너먼트 헤더 반영 * feat: web share API 기능 구현 * [1.5차 QA] 선물 홈 - 토스트 메시지 추가, 헤더 변경, 카운트다운에 따른 네비게이션 (#397) * fix: 타이머 0이 되면 토너먼트 뷰로 이동하기 * fix: 미니 타이머 시간 만료되면 토너먼트로 이동 * fix: 클립보드 복사할 때 / 중복 제거 * refactor: 헤더 변경 * feat: 링크 복사 토스트 메시지 추가 * refactor: 미니타이머 prop 반영 * fix: invalid hook calls 해결 * refactor: 서버 명세 수정 반영 * refactor: 선물등록에 gifteeName 반영 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * [1.5차 QA] 중복 모달 추가 및 스크롤 생기는 이슈 해결 (#421) * feat: 모달 생성 * refactor: gifteeName 적용 * feat: 중복 모달 처리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: state 업데이트 수정 * chore: 빌드 에러 해결 * fix: 직접 입력의 경우에도 중복 모달 작동하도록 수정 * [온보딩] 새롭게 바뀐 step06 (OnboardingFinal) 구현 (#400) * chore: svg 파일 추가 * feat: 시간 포맷팅 유틸함수 수정 * feat: onboardingFinal 컴포넌트 Footer 설정 * feat: 새로운 step06에 적용될 스타일 코드 추가 * feat: 새로운 step06 구현 * refactor: step06 코드 일부 정리 더 깔끔한 코드 분리는 조금만 자고 일어나서 하겠습니다... * fix: 빌드에러 수정 * style: btnRadio에 $ 추가 * feat: 코드리뷰 반영 * [온보딩] 스타일 qa 반영 24.02.23 16:14 기준 (#412) * style: step01 터치영역 늘림 * style: 터치 영역 늘리기 & 인풋창 focus 방지 * fix: 빌드에러 해결 * [온보딩] 새로운 참여자 뷰와 로직 작성 & 온보딩 파이널 전용 헤더 생성 & 토큰 여부에 따른 카카오로그인 버튼 (#418) * feat: 카카오 로그인 버튼 png로 변경하고 조건부 처리하여 올바르게 구현 * feat: svg 파일 추가 * feat: 396브랜치에 있는 onboarding footer 가져오기 * feat: 라우터 상수처리 * feat: 396브랜치에 있는 step06 가져오기 * feat: 날짜 포맷팅 유틸 함수 수정 * feat: 참여자 뷰 새로운 구조로 전체 변경 * style: 온보딩 파이널 & 참여자 뷰 전용 헤더 생성 * style: 참여자 뷰에만 적용될 gifterNumber 관련 스타일 코드 작성 * style: Onboarding Final Footer에 margin-top 추가 * fix: 빌드에러 수정 * feat: 아이폰 공유하기 공용 커스텀 훅 작성 * feat: 올바른 url로 복사를 위한 env 파일 변경 및 '/'추가 (#425) * [시작페이지] 2차 qa 내용 반영입니다 ! (#434) * style: 카카오 로그인 버튼 사이즈 수정 * refactor: 아래아이콘 스크롤에 따라서 애니메이션 적용 * style: 로고 중앙정렬 + header height 100% 로 * style: width 100%로 ! * style: footer 아이콘 간격 수정 * style: header 속 profileImage 모양과 크기 변동 * style: 토너먼트 애니메이션 위치 수정 --------- Co-authored-by: Wang HoEun * fix: 입장하기 버튼 클릭 시 아무 작동없는 문제 해결 (#428) * 공토 컴포넌트 공유를 위한 임시 PR입니다 (#445) * refactor: Delete Modal 공통 컴포넌트화 * feat: 플로팅 버튼에 따라 토스트 위치 변경 * [온보딩] 뒤로가기 시 이미지 미리보기 안보이는 현상 & 유저가 시간먼저 선택 시 발생하는 문제 수정 (#435) * style: step02 미리보기 이미지 위치 수정 * feat: 이미지 파싱 방법 변경 * feat: previewImageInfo 타입 추가 * feat: PreviewImageContext 새롭게 작성 * feat: 기존 OnboardingContext에서 previewImage 관련 로직 삭제 * feat: previewImageInfo Context 적용 * feat: 토스트 메세지 Object.freeze로 분리 * feat: 날짜 먼저 선택하라는 토스트 메세지 추가 * feat: 해당 토스트 메세지 적용 * feat: 뒤로가기 시 선택시간 유지를 위한 context 추가 * feat: 뒤로가기 시 이미 선택되어있는 시간이 존재할 때 날짜 선택 시 현재 시간으로 반영되는 문제 해결 * style: img 태그 styled Components로 분리 * feat: 반복되는 코드 정리(객체형태로 작성) * chore: 토스트 메세지 관리하는 파일 명 변경 * [토너먼트] 2차 QA 스타일 변경사항 (#446) * style: 사이 간격 넓히기 * style: ‘공유하기’ 글씨는 가운데 정렬 높이 변경 * style: 등록된 선물 문구 변경 * style: 상품명 3~5줄 말 줄임표 사용 * chore: 주석제거 * style: 이미지 비율 1:1 * style: 라인두께 2px 변경 * style: 중복 헤더 제거 * [선물 등록] 선물 등록 완료 버튼 활성화 기능 수정 (#450) * fix: 나가면 폼 정보 삭제 * fix: 첫 단계에서만 뒤로가기 시 초기화 * fix: 버튼 활성화 수정 * fix: 뒤로 갔다가 돌아와도 잘 정보 보존되도록 수정 * fix: 이름 잘 반영되도록 수정 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: 아이템 개수에 따라 헤더 구성 변경 (#452) * [온보딩] 2차 스타일 qa & 공유하기 안드로이드 & pc 예외처리 (#447) * feat: 공유 링크 공용 커스텀 훅 수정 * chore: 안쓰는 코드 정리 * style: 수정된 타이틀 라이팅으로 변경 * style: step06 컨테이너 순서 변경 * style: 수정된 라이팅으로 변경 & 조건문 로직 삭제 * chore: 필요없는 코드 제거 * feat: 시간 선택 중 input 색상 P-06으로 변경 & 바깥 클릭 시 or 시간 선택 시 원래대로 * style: x 아이콘 조금 더 오른쪽으로 이동 * chore: 주석제거 * style: margin-top 위치 값 변경 * feat: 특정 step에서 인풋창 클릭 시 가상 키보드 올라오지 않게 구현 * fix: env 파일 수정으로 인한 '/' 제거 * feat: share API를 지원하지 않는 경우에 대한 예외처리(링크복사) * chore: stroke 포함된 empty thumbnail svg 파일 추가 * style: 썸네일 엠티 뷰 svg 변경 * [선물방 메인] 2차 QA 스타일 수정 (#449) * fix: 상하 스크롤 제거 * fix: 문법 수정 * fix: 스크롤바 숨기기 * fix: 간격 조정 * fix: 스타일 수정 * fix: 스타일 수정 * style: gap 통일 반영 * style: 햄버거 바 제거 * style: 스타일 수정 * chore: 빌드 에러 해결중 * chore: 빌드에러 해결중 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * [선물등록] 2차 QA 스타일 수정 적용 (#453) * fix: 이미지 비율 조정 방식 변경 * fix: margin 추가 * fix: 버튼 클릭 시 색상 제거 및 스타일 수정 * fix: object fit cover * [온보딩] 사파리에서 날짜 형식 NaN, undefined 뜨는 현상 수정 (#451) * feat: 사파리 undefined 해결을 위한 TEST 컨테이너 작성 * feat: 안드로이드/pc 공유하기 예외처리 다른 브랜치에서 복붙 * feat: 토스트 메세지 추가 * feat: 사파리 날짜계산 undefined 해결 * chore: 필요없는 코드 제거 * fix: 병합 해결 * fix: 가로 세로 길이 5000px로 변경 * fix: 토너먼트 로직 롤백 (#456) * fix: 링크 입력 이름 추가 (#457) * fix: 이미지 세로길이 최소값 변경 (300px) * [토너먼트] 스타일 수정 (#462) * style : 배경 svg 추가 * style: svg 컴포넌트 배경 적용 * style: 다음 버튼 fixed로 변경 * style: none 트로피 높이 지정 * style: 다음버튼 색상 변경 * style: 이미지 비율 및 border 색상 * chore: 이미지 애러 제거 * chore: 이미지 최적화를 위한 라이브러리 설치 (#468) * style: 사파리 100vh 이슈 * fix: 사파리 100dvh 적용 * style: 토너먼트 결과 vh -> dvh 변경 및 주석 제거 * [선물등록, 선물 홈] 최종 QA 스타일 수정 (#467) * style: 화살표 PC에서도 안 보이도록 수정 * style: 버튼 정렬 * style: 상품 이미지 가로 세로 높이 고정 * style: 뒤로가기 아이콘 업데이트 * fix: svg export 복구 * refactor: warning 해결 * style: 선물홈 배경 이미지 교체 * refactor: 배경이미지를 위해 구조 수정 * chore: 빌드 에러 해결 * [온보딩] 최종qa 스타일 & step04 날짜 연속 수정 시 오류 해결 & 아이폰 공유하기 시 텍스트 같이 복사 해결 (#465) * style: step02 이미지 미리보기 위치 변경 * feat: step02 썸네일 엠티 뷰 위치 변경 * feat: step04 인풋 value 추상화 수준 일치화 * refactor: step04 날짜 연속 변경 시 발생하는 에러 해결 & 조건문 형식 변경 * fix: 공유하기 클릭 시 텍스트도 같이 복사되는 문제해결(아이폰) * fix: 빌드에러 해결 * [선물 등록] 이미지 url 파일 변환 실패 시 선물 등록 사항 초기화되도록 수정 (#480) * fix: 직접 입력 진입 시 무조건 이미지 초기화 * chore: 주석 삭제 * chore: 주석 이동 * [선물홈, 선물등록] 이미지 최적화 진행 (#481) * refactor: 선물 등록시 이미지 용량 압축 * chore: 파일명 변경 * chore: 이미지 교체 * feat: 파일 이름 설정 * chore: 주석 제거 * refactor: 화질 설정 수정 * refactor: skeleton ui 임의 추가 * refactor: 스타일 명시 * [마이페이지,시작페이지] 최종 QA 반영입니다 ! (#471) * refactor: done detail room empty view 중앙정렬 * style: count user gap 적용 * style: margin 조금 더 적용 * feat: 토너먼트 애니메이션 직접 구현 위해 폴더 및 파일 생성 * feat: tournament svg 추가 * feat: touranment 애니메이션 직접 구현 후 적용 X view에 안 보이는 이슈 * fix: 안쓰는 svg import문 삭제 --------- Co-authored-by: Wang HoEun * [토너먼트] 결과 이미지 높이 지정 스타일 (#484) * style: 카드 결과 이미지 높이 지정 * feat: 카카오 공유하기 * [온보딩] 시간 선택 스크롤 바 라이브러리로 교체 & 파일 용량 압축 라이브러리 사용 (#478) * feat: 브랜치 459의 useTournamentScheduleCalendar훅 복붙 * chore: MUI DigitalClock 라이브러리 설치 * chore: 필요없는 콘솔로그 제거 * chore: 타입확인을 위한 콘솔로그 추가 * feat: 시간 선택 스크롤 창 MUI 라이브러리로 변경 * feat: 시간 선택 창 am/pm 제거 * chore: 시간 선택 라이브러리 설치를 위한 react-is@^18.2.0 설치 * feat: 이미지네임 파싱 방법 변경 * feat: image-file-resizer를 위한 타입 수정 * feat: image-file-resizer 사용 시 필요한 타입위해 binary로 변환시켜주는 커스텀 훅 타입 변환 * feat: image-file-resizer 적용 * chore: todo 추가 (추후 타입 지정) * chore: 필요없는 코드 제거 * feat: image/webp 추가 * feat: resizedFile 함수 분리 및 확장자 강제 WEBP로 변경 * fix: resizedFile 함수 안 이미지 최대 길이 값 및 화질 수정 * fix: develop 브랜치와 step02 스타일이 달라서 일치화 * [온보딩] step02 -> step03 넘어갈 때 스켈레톤 ui 적용 (#483) * feat: 이미지 HEIGHT 최대값 10000으로 변경 * feat: Loading 상태 추가 후 일단 스피너로 추가 * chore: 필요없는 주석 및 코드 제거 * feat: step05 로딩 스피너 추가 * fix: 이미지 최대 세로 값 5000px로 변경 * feat: 온보딩 전용 스켈레톤 ui 컴포넌트 구현 * feat: 온보딩 전용 스켈레톤 ui Step02에 적용 * style: 온보딩 스켈레톤 스타일 코드 분리 * [마이페이지] 로그아웃 버튼 클릭 시 모달 나타내기 (#474) * fix: delete modal 확인 버튼 시 clickedItem에 따른 옵서녈 실행 수정 * refactor: 넘겨받는 확인 버튼 멘트 props로 바꾸기 * feat: 로그아웃 모달 추가하기 * fix: 안쓰는 import 문 삭제 * fix: suspense 재 적용 --------- Co-authored-by: Wang HoEun * fix: step04 시간 선택 인풋창 클릭 시 키보드 안올라오게 * fix: step03 인풋창도 키보드 안올라오게 * feat: webp로 이미지 교체 * [온보딩] step01에서 특수문자 입력 안되게 유효성 체크 (#487) * feat: 일반 특수문자 & 아이폰 특수문자 입력 안되게 유효성 체크 * feat: 아이폰 이모티콘도 입력안되게 유효성 체크 추가 * fix: 아이폰 특수문자는 토너먼트 진행 url에 문제없으므로 유효성검사에서 제거 * feat: 토스트 메세지에 특수문자 유효성 검사 추가 * fix: 특수문자 토스트 메세지 자동 닫힘 시간 변경 * [시작페이지] 이미지 최적화 (webP로 형식 변환) (#489) * refactor: webP 변환 부분 적용 / 하지만 하얀색 화면 이슈 수정 필요 * fix: webp 파일 재 변환 후 새롭게 적용 * fix: webp 파일 main02와 main04 png로 수정 후 재 변환. 깨지는 문제 해결 * style: 안쓰는 import 문 삭제 및 주석 삭제 * fix: main03 새롭게 파일 변환 후, 각 파일 height 적절하게 변동 --------- Co-authored-by: Wang HoEun * fix: main 03 이미지 webp 변환 후 적용 (#494) Co-authored-by: Wang HoEun * refactor: heic 변환 처리 추가 (#492) * [온보딩] step05 라디오 버튼 테두리 짤려 보이는 현상 수정 (#495) * feat: step03 인풋 클릭 시 키보드 안올라오게 설정 * style: 라디오 버튼 svg 파일 위치 값 수치 조정 * [온보딩] step02 썸네일 등록 시 아이폰 이미지 확장자(heic) 업로드 안되는 현상 수정 (#497) * chore: heic 변환 라이브러리 설치 * feat: heic 확장자 input으로 받도록 추가 * refactor: 함수 분리 & 고용량 이미지 이슈 예외처리 이미지 업로드가 되는 것을 진행해놓은 상태에서 다시 고용량 이미지를 추가하면 이미지 업로드가 되는 현상이 있어 이를 수정하였습니다. * feat: heic 확장자 업로드 가능하도록 수정 * fix: step02 파일 인풋 대소문자 구분x로 인해 확장자 하나 삭제 * chore: 콘솔로그 제거 * [마이페이지] 선물방으로 이동 버튼 기능 추가 (#501) * feat: 선물방 생성으로 이동 navigate 추가 * fix: empty view 공통 컴포넌트화 * fix: 안쓰는 import 문 삭제. 공통컴포넌트화 하며 생겼다. --------- Co-authored-by: Wang HoEun --------- Co-authored-by: Wang HoEun Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: 장정안 Co-authored-by: imeureka --- src/assets/svg/IcCircle.tsx | 2 +- src/assets/svg/IcCirclePink.tsx | 4 +- src/components/CardRoom/DoneCardRoom.tsx | 4 +- src/components/CardRoom/EditCardRoom.tsx | 4 +- src/components/CardRoom/ProgressCardRoom.tsx | 4 +- .../OnBoardingSteps/Step02/Step02.tsx | 4 +- .../OnBoardingSteps/Step03/Step03.tsx | 1 + .../common/Button/Radio/BtnRadio.tsx | 2 +- src/context/Onboarding/OnboardingContext.tsx | 8 - src/hooks/common/usePreviewImage.tsx | 145 +++++++++++------- src/hooks/onboarding/useFormatDate.tsx | 1 - .../DetailDoneRoom/DetailDoneRoom.style.ts | 12 -- .../Detail/DetailDoneRoom/DetailDoneRoom.tsx | 9 +- .../DetailProgress.style.ts | 13 -- .../DetailProgressRoom/DetailProgressRoom.tsx | 9 +- .../Detail/EmptyView/EmptyView.style.ts | 6 +- .../MyPage/Detail/EmptyView/EmptyView.tsx | 13 +- 17 files changed, 119 insertions(+), 122 deletions(-) diff --git a/src/assets/svg/IcCircle.tsx b/src/assets/svg/IcCircle.tsx index f5945dd7..e09e9caa 100644 --- a/src/assets/svg/IcCircle.tsx +++ b/src/assets/svg/IcCircle.tsx @@ -1,6 +1,6 @@ import type { SVGProps } from 'react'; const SvgIcCircle = (props: SVGProps) => ( - + ); diff --git a/src/assets/svg/IcCirclePink.tsx b/src/assets/svg/IcCirclePink.tsx index e230d56a..438ba6f0 100644 --- a/src/assets/svg/IcCirclePink.tsx +++ b/src/assets/svg/IcCirclePink.tsx @@ -1,8 +1,8 @@ import type { SVGProps } from 'react'; const SvgIcCirclePink = (props: SVGProps) => ( - - + + ); export default SvgIcCirclePink; diff --git a/src/components/CardRoom/DoneCardRoom.tsx b/src/components/CardRoom/DoneCardRoom.tsx index 4f81f356..d81f06b8 100644 --- a/src/components/CardRoom/DoneCardRoom.tsx +++ b/src/components/CardRoom/DoneCardRoom.tsx @@ -13,7 +13,7 @@ const DoneCardRoom = ({ user, srcImage, userCount, onClick }: DoneCardRoomType) const multiline = user.length > 3 || (/[a-zA-Z]/.test(user) && user.length > 5); return ( -
+ <> {multiline ? ( @@ -28,7 +28,7 @@ const DoneCardRoom = ({ user, srcImage, userCount, onClick }: DoneCardRoomType) {userCount} -
+ diff --git a/src/components/CardRoom/EditCardRoom.tsx b/src/components/CardRoom/EditCardRoom.tsx index 5979fcec..fdf25303 100644 --- a/src/components/CardRoom/EditCardRoom.tsx +++ b/src/components/CardRoom/EditCardRoom.tsx @@ -25,7 +25,7 @@ const EditCardRoom = ({ user, srcImage, userCount, roomId, date, onClick }: Edit return ( -
+ <> {multiline ? ( @@ -48,7 +48,7 @@ const EditCardRoom = ({ user, srcImage, userCount, roomId, date, onClick }: Edit /> {userCount} -
+ {!isFuture ? : } diff --git a/src/components/CardRoom/ProgressCardRoom.tsx b/src/components/CardRoom/ProgressCardRoom.tsx index 2be6d97d..82fb5f08 100644 --- a/src/components/CardRoom/ProgressCardRoom.tsx +++ b/src/components/CardRoom/ProgressCardRoom.tsx @@ -18,7 +18,7 @@ const ProgressCardRoom = ({ user, srcImage, userCount, date, onClick }: Progress return ( -
+ <> {multiline ? ( @@ -41,7 +41,7 @@ const ProgressCardRoom = ({ user, srcImage, userCount, date, onClick }: Progress /> {userCount} -
+ {!isFuture ? : } diff --git a/src/components/OnBoardingSteps/Step02/Step02.tsx b/src/components/OnBoardingSteps/Step02/Step02.tsx index 73fe3669..bdb73e55 100644 --- a/src/components/OnBoardingSteps/Step02/Step02.tsx +++ b/src/components/OnBoardingSteps/Step02/Step02.tsx @@ -32,8 +32,6 @@ const ThumbnailInput = React.memo((props: ThumbnailInputProps) => { /** @todo 파일네임 파싱하는 함수 유틸로 처리 */ setIsLoading(true); const presignedUrl = data.presignedUrl.split('?')[0]; - console.log('data.presignedUrl', data.presignedUrl); - console.log('parsingpresignedUrl', presignedUrl); updateOnboardingInfo({ imageUrl: presignedUrl }); if (previewImageInfo.file) { await binarizeAndPutImage({ presignedUrl, file: previewImageInfo.file }); @@ -57,7 +55,7 @@ const ThumbnailInput = React.memo((props: ThumbnailInputProps) => { { onboardingInfo.deliveryDate ? format(onboardingInfo.deliveryDate, 'y년 M월 d일') : '' } onChange={(e) => e.preventDefault()} + inputMode='none' /> diff --git a/src/components/common/Button/Radio/BtnRadio.tsx b/src/components/common/Button/Radio/BtnRadio.tsx index f5e58171..99d271f2 100644 --- a/src/components/common/Button/Radio/BtnRadio.tsx +++ b/src/components/common/Button/Radio/BtnRadio.tsx @@ -1,7 +1,7 @@ import { ButtonHTMLAttributes } from 'react'; import * as S from './BtnRadio.style'; import { IcCircle, IcCirclePink } from '../../../../assets/svg'; -// import { Period } from '../../../OnBoardingSteps/Step05/Step05.style'; + type BtnRadioProps = ButtonHTMLAttributes & { disabled?: boolean; time: string; diff --git a/src/context/Onboarding/OnboardingContext.tsx b/src/context/Onboarding/OnboardingContext.tsx index 8aaa7556..248d0f29 100644 --- a/src/context/Onboarding/OnboardingContext.tsx +++ b/src/context/Onboarding/OnboardingContext.tsx @@ -3,7 +3,6 @@ import { SetStateAction, createContext, useContext, - useEffect, useMemo, useState, } from 'react'; @@ -41,13 +40,6 @@ export const OnboardingProvider = ({ children }: PropsWithChildren) => { setOnboardingInfo((prev) => ({ ...prev, ...newInfo })); }; - /**@todo 전체 값 확인용 useEffect */ - useEffect(() => { - console.log('전체 값 확인:', onboardingInfo); - console.log('context 속 selectedTime', selectedTime); - console.log('context 속 typeof selectedTime', typeof selectedTime); - }, [onboardingInfo, selectedTime]); - const OnboardingInfoContextValue = useMemo( () => ({ onboardingInfo, diff --git a/src/hooks/common/usePreviewImage.tsx b/src/hooks/common/usePreviewImage.tsx index 1990b3e0..ac91d9d5 100644 --- a/src/hooks/common/usePreviewImage.tsx +++ b/src/hooks/common/usePreviewImage.tsx @@ -2,72 +2,103 @@ import { toast } from 'react-toastify'; import { usePreviewImageContext } from '../../context/Onboarding/PreviewImageContext'; import { IMAGE_HEIGHT, MESSAGE } from '../../core/toast-messages'; import Resizer from 'react-image-file-resizer'; +import heic2any from 'heic2any'; const usePreviewImage = () => { const { previewImageInfo, updatePreviewImageInfo } = usePreviewImageContext(); - const handleImageUpload = (event: React.ChangeEvent) => { - const { files } = event.target; + const uploadFalse = () => { + updatePreviewImageInfo({ + isImageUploaded: false, + file: null, + previewImage: null, + imageName: '', + }); + }; - const uploadFalse = () => { - updatePreviewImageInfo({ - isImageUploaded: false, - file: null, - previewImage: null, - imageName: '', - }); - }; + const resizedFile = (file: File, previewImage: string) => { + new Promise((resolve) => { + Resizer.imageFileResizer( + file, + 480, + 480, + 'WEBP', + 75, + 0, + (uri) => { + updatePreviewImageInfo({ + isImageUploaded: true, + imageName: (uri as File).name, + file: uri as File, + previewImage: previewImage, + }); + resolve(uri); + }, + 'file', + ); + }); + }; - const resizedFile = (file: File, previewImage: string) => { - new Promise((resolve) => { - Resizer.imageFileResizer( - file, - 480, - 480, - 'WEBP', - 75, - 0, - (uri) => { - updatePreviewImageInfo({ - isImageUploaded: true, - imageName: (uri as File).name, - file: uri as File, - previewImage: previewImage, - }); - resolve(uri); - console.log('됐다?'); - }, - 'file', - ); - }); + const isFailUploadImageToast = (selectedFile: Blob | MediaSource) => { + const img = new Image(); + + img.onload = function () { + if (img.height <= IMAGE_HEIGHT.MIN) { + // 이미지 너비가 어느 수준 이하일 때 업로드 x + toast(MESSAGE.HEIGHT_SMALL); + uploadFalse(); + } else if (img.height > IMAGE_HEIGHT.MAX) { + toast(MESSAGE.HEIGHT_BIG); + uploadFalse(); + } }; - if (files && files.length > 0) { - const selectedFiles = files as FileList; - /**@see 추후 유니크한 이미지 네임 필요할 수 있으니 일단 주석처리 */ - // const imageName = files[0].name.trim(); - - /**@todo 파싱 유틸 함수 공용으로 따로 작성 */ - // const uploadTime = new Date().toISOString(); - - // const uniqueName = `${uploadTime}${imageName}`; - // const finalImageName = uniqueName - // .replace(/\//g, '') // 폴더링 방지를 위해 '/' 제거 - // .replace(/\s/g, ''); // 공백 제거 - resizedFile(selectedFiles[0], URL.createObjectURL(selectedFiles[0])); - - const img = new Image(); - img.onload = function () { - if (img.height <= IMAGE_HEIGHT.MIN) { - // 이미지 너비가 어느 수준 이하일 때 업로드 x - toast(MESSAGE.HEIGHT_SMALL); - uploadFalse(); - } else if (img.height > IMAGE_HEIGHT.MAX) { - toast(MESSAGE.HEIGHT_BIG); - uploadFalse(); + img.src = URL.createObjectURL(selectedFile); + }; + + const handleImageUpload = async (event: React.ChangeEvent) => { + const { files } = event.target; + + try { + if (files && files.length > 0) { + const selectedFiles = files as FileList; + + let convertedFile = selectedFiles[0]; + + if (selectedFiles[0].type === 'image/heic' || selectedFiles[0].type === 'image/HEIC') { + let blob = selectedFiles[0]; + console.log('blob', blob); + const resultBlob = await heic2any({ blob, toType: 'image/webp' }); + convertedFile = new File( + [resultBlob as Blob], + selectedFiles[0].name.split('.')[0] + '.webp', + { type: 'image/webp', lastModified: new Date().getTime() }, + ); + updatePreviewImageInfo({ + isImageUploaded: true, + imageName: convertedFile.name, + file: convertedFile, + previewImage: URL.createObjectURL(selectedFiles[0]), + }); } - }; - img.src = URL.createObjectURL(selectedFiles[0]); + + /**@see 추후 유니크한 이미지 네임 필요할 수 있으니 일단 주석처리 */ + // const imageName = files[0].name.trim(); + + /**@todo 파싱 유틸 함수 공용으로 따로 작성 */ + // const uploadTime = new Date().toISOString(); + + // const uniqueName = `${uploadTime}${imageName}`; + // const finalImageName = uniqueName + // .replace(/\//g, '') // 폴더링 방지를 위해 '/' 제거 + // .replace(/\s/g, ''); // 공백 제거 + + isFailUploadImageToast(selectedFiles[0]); + + resizedFile(selectedFiles[0], URL.createObjectURL(selectedFiles[0])); + } + } catch (err) { + console.log('error:', err); } }; diff --git a/src/hooks/onboarding/useFormatDate.tsx b/src/hooks/onboarding/useFormatDate.tsx index 10bc067f..725592c3 100644 --- a/src/hooks/onboarding/useFormatDate.tsx +++ b/src/hooks/onboarding/useFormatDate.tsx @@ -9,7 +9,6 @@ const useFormatDate = () => { const month = date.getMonth() + 1; const day = date.getDate(); const hours = date.getHours(); - // const minutes = date.getMinutes(); if (includeTime) { return `${year}.${month}.${day}(${getDayOfWeek(date)}) ${hours}시`; diff --git a/src/pages/MyPage/Detail/DetailDoneRoom/DetailDoneRoom.style.ts b/src/pages/MyPage/Detail/DetailDoneRoom/DetailDoneRoom.style.ts index bf8a240b..60ec82bc 100644 --- a/src/pages/MyPage/Detail/DetailDoneRoom/DetailDoneRoom.style.ts +++ b/src/pages/MyPage/Detail/DetailDoneRoom/DetailDoneRoom.style.ts @@ -17,15 +17,3 @@ export const RoomWrapper = styled.div` gap: 1.5rem; padding: 1.6rem 0; `; - -export const EmptyWrapper = styled.div` - ${({ theme: { mixin } }) => mixin.flexCenter({})}; - height: 100%; - gap: 1.2rem; - margin: 0 2rem; -`; - -export const EmptyText = styled.div` - ${({ theme: { fonts } }) => fonts.body_10}; - color: ${({ theme: { colors } }) => colors.G_07}; -`; diff --git a/src/pages/MyPage/Detail/DetailDoneRoom/DetailDoneRoom.tsx b/src/pages/MyPage/Detail/DetailDoneRoom/DetailDoneRoom.tsx index a4d6968a..b3682920 100644 --- a/src/pages/MyPage/Detail/DetailDoneRoom/DetailDoneRoom.tsx +++ b/src/pages/MyPage/Detail/DetailDoneRoom/DetailDoneRoom.tsx @@ -1,11 +1,10 @@ import { useNavigate } from 'react-router-dom'; -import { IcLogoEmpty } from '../../../../assets/svg'; import DoneCardRoom from '../../../../components/CardRoom/DoneCardRoom'; -import BtnSmallStroke from '../../../../components/common/Button/Cta/SmallStroke/BtnSmallStroke'; import useGetDoneRoom from '../../../../hooks/queries/member/useGetClosedRoom'; import { ClosedRoomArrayType } from '../../../../types/member'; import * as S from './DetailDoneRoom.style'; import LeftIconHeader from '../../../../components/LeftIconHeader/LeftIconHeader'; +import EmptyView from '../EmptyView/EmptyView'; const DetailDoneRoom = () => { const navigate = useNavigate(); @@ -30,11 +29,7 @@ const DetailDoneRoom = () => { {data.map((item, index) => renderDoneRoomCard(item, index))} ) : ( - - - 준비했던 선물이 없어요 - 새로운 선물 준비하기 - + )} diff --git a/src/pages/MyPage/Detail/DetailProgressRoom/DetailProgress.style.ts b/src/pages/MyPage/Detail/DetailProgressRoom/DetailProgress.style.ts index d63acf19..4d403db1 100644 --- a/src/pages/MyPage/Detail/DetailProgressRoom/DetailProgress.style.ts +++ b/src/pages/MyPage/Detail/DetailProgressRoom/DetailProgress.style.ts @@ -17,16 +17,3 @@ export const RoomWrapper = styled.div` gap: 1.5rem; padding: 1.6rem 0; `; - -export const EmptyWrapper = styled.div` - ${({ theme: { mixin } }) => mixin.flexCenter({})}; - height: 100%; - gap: 1.2rem; - margin: 0 2rem; -`; - -export const EmptyText = styled.div` - ${({ theme: { mixin } }) => mixin.flexCenter({})}; - ${({ theme: { fonts } }) => fonts.body_10}; - color: ${({ theme: { colors } }) => colors.G_07}; -`; diff --git a/src/pages/MyPage/Detail/DetailProgressRoom/DetailProgressRoom.tsx b/src/pages/MyPage/Detail/DetailProgressRoom/DetailProgressRoom.tsx index 479f58fa..ae58e424 100644 --- a/src/pages/MyPage/Detail/DetailProgressRoom/DetailProgressRoom.tsx +++ b/src/pages/MyPage/Detail/DetailProgressRoom/DetailProgressRoom.tsx @@ -1,13 +1,12 @@ import { useNavigate } from 'react-router-dom'; -import { IcLogoEmpty } from '../../../../assets/svg'; import EditCardRoom from '../../../../components/CardRoom/EditCardRoom'; import ProgressCardRoom from '../../../../components/CardRoom/ProgressCardRoom'; -import BtnSmallStroke from '../../../../components/common/Button/Cta/SmallStroke/BtnSmallStroke'; import useGetActiveRoom from '../../../../hooks/queries/member/useGetActiveRoom'; import DateCheck from '../../../../components/DateCheck/DateCheck'; import { ActiveRoomArrayType } from '../../../../types/member'; import * as S from './DetailProgress.style'; import LeftIconHeader from '../../../../components/LeftIconHeader/LeftIconHeader'; +import EmptyView from '../EmptyView/EmptyView'; const DetailProgressRoom = () => { const navigate = useNavigate(); @@ -40,11 +39,7 @@ const DetailProgressRoom = () => { {Array.isArray(data) && data.length > 0 ? ( {data.map((item, index) => renderRoomCard(item, index))} ) : ( - - - 준비했던 선물이 없어요 - 새로운 선물 준비하기 - + )} diff --git a/src/pages/MyPage/Detail/EmptyView/EmptyView.style.ts b/src/pages/MyPage/Detail/EmptyView/EmptyView.style.ts index e636f308..8110247e 100644 --- a/src/pages/MyPage/Detail/EmptyView/EmptyView.style.ts +++ b/src/pages/MyPage/Detail/EmptyView/EmptyView.style.ts @@ -2,9 +2,13 @@ import styled from 'styled-components'; export const EmptyViewWrapper = styled.div` ${({ theme: { mixin } }) => mixin.flexCenter({})}; + height: 100%; + gap: 1.2rem; + margin: 0 2rem; `; -export const Text = styled.div` +export const EmptyText = styled.div` + ${({ theme: { mixin } }) => mixin.flexCenter({})}; ${({ theme: { fonts } }) => fonts.body_10}; color: ${({ theme: { colors } }) => colors.G_07}; `; diff --git a/src/pages/MyPage/Detail/EmptyView/EmptyView.tsx b/src/pages/MyPage/Detail/EmptyView/EmptyView.tsx index 4ab88262..b6ae329b 100644 --- a/src/pages/MyPage/Detail/EmptyView/EmptyView.tsx +++ b/src/pages/MyPage/Detail/EmptyView/EmptyView.tsx @@ -1,3 +1,4 @@ +import { useNavigate } from 'react-router-dom'; import { IcLogoEmpty } from '../../../../assets/svg'; import BtnSmallStroke from '../../../../components/common/Button/Cta/SmallStroke/BtnSmallStroke'; import DetailHeader from '../../../../components/LeftIconHeader/LeftIconHeader'; @@ -8,12 +9,18 @@ interface EmptyViewType { } const EmptyView = ({ title }: EmptyViewType) => { + const navigate = useNavigate(); + const handleClickButton = () => { + navigate('/onboarding'); + }; return ( - - 준비했던 선물이 없어요 - 새로운 선물 준바하기 + + 준비했던 선물이 없어요 + + 새로운 선물 준바하기 + ); }; From 0719deb222ac3cd803207e134dfb4577e1d032fa Mon Sep 17 00:00:00 2001 From: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Date: Fri, 15 Mar 2024 14:29:04 +0900 Subject: [PATCH 02/10] =?UTF-8?q?Develop=EC=97=90=EC=84=9C=20main=20?= =?UTF-8?q?=EB=A8=B8=EC=A7=80=20=3D>=20=EC=8B=9C=EC=9E=91=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=ED=99=94?= =?UTF-8?q?=EC=A7=88=20=EA=B0=9C=EC=84=A0=20(#505)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * feat: 타이머 컴포넌트 분리 * feat: Step02에서 이미지 파일 자체를 저장 * feat: 타이머 부분 컴포넌트로 분리 * feat: 이미지 파일 formData로 저장 후 PUT * feat: 상위 컴포넌트에서 imageFile props 전달 * feat: POST presigned URL 타입 변경 * feat: 참여자 뷰 타이틀을 받아온 데이터 기반으로 출력 * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * feat: step02 이미지 네임 방식 변경 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * style: 캘린더 가운데 배치 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * feat: 파일이름 파싱 방식 변경 * style: 타이머 위치 조정(수정 필요!!!!!) * feat: 타이머 컴포넌트 인풋 위치 수정 * feat: 중복되는 https를 파싱 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * feat: 파일 이름 파싱 방식 변경 * feat: 참여자 뷰에서 로그인 클릭 시 로그인 수행 * chore: 필요없는 콘솔 제거 * style: 라디오 버튼 width 수정 * style: 안쓰는 코드 제거 * style: step06 이미지 기본값으로 설정 * fix : PUT 403 에러 해결 * fix: refresh token post 수정 * feat: 라디오 버튼 조건문 추가 * style: 스타일 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * chore: 필요없는 코드 제거 * feat: 링크복사를 배포주소로 변경 * feat: step03에 props 전달하여 출력 --------- Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun * fix: 카카오 공유하기 링크 수정 (#231) * [QA] (#234) * feat: 미니 타이머 고치기 * feat: 사진 뜨도록 수정 * feat: 내가 등록한 선물 조건 걸어주기 * feat: 업로드 가능한 이미지 형식 제한 * feat: 완료 버튼 활성화 조건 추가 * feat: 미리보기 수정 * feat: 더미데이터 추가 * chore: 주석처리 * fix: 빌드 에러 해결 * fix: 토너먼트 파람 변경 (#236) * fix: profile image url 수정 * [온보딩] qa 중 (#239) * feat: 카카오 공유하기 시 초대코드로 이동 * feat: imageUrl 빈 문자열로 변경해서 POST * chore: 빌드에러 해결 * fix: router merge 시 수정 된거 복귀 * fix:토너먼트 라우터 수정 (#244) * [QA] 아웃링크 추가 구현, 타이머 수정 (#246) * chore: 불필요한 주석 삭제 * feat: 불필요한 조건문 * feat: 타이머 수정 테스트 * feat: 아이템 아웃링크 구현 * chore: 불필요한 주석 제거 * feat: 아웃링크 연결 * feat: 라우터 연결 * [온보딩] 모바일 폰트 적용 및 색상 적용 (#248) * feat: 라디오 버튼 모바일에서 활성화(왕호은왕천재) * style: 폰트 적용 및 색상 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: 기프트 홈 파람 변경 (#250) * [토너먼트] 아이템 0개이면 0개 화면 예외처리 (#254) * fix: 기프트 홈 파람 변경 * fix: 토너먼트 예외처리 * [온보딩] 지웠던 POST 및 카카오 공유 & 입장 클릭 시 roomId 받아서 navigate 이동 (#257) * feat: 카카오 공유에 props로 넘겨받은 이름 출력 * feat: 실수로 지운 POST 다시 작성 * feat: roomId 상태로 저장 * feat: step05에서 지웠던 post 에서 룸 id 저장 후 다음 스텝 넘기기 * feat: navigate로 roomId 받아서 선물 홈으로 넘김 * [토너먼트] get user roomid 프롭 전달 (#262) * fix: tournament fix * fix: 안쓰는 파일 주석 처리 * feat: 뒤로가기 수정중 * feat: 라우팅 수정 * feat: 빌드 에러 해결 * 초대 & 카카오공유 & 2차 qa (#267) * 깃 충돌 후 폴더 복사 후 새 브랜치 첫 푸쉬 * chore:빌드 에러 해결 * feat: 라우팅 수정 마무리 * feat: 서버통신 수정중 * fix: 빌드 에러 해결중 * feat: presigned url 제거 * fix: QA 적용중 * feat: 스타일 수정 * feat: 버튼 수정 * feat: 기능 수정 * [QA] 토너먼트 스타일 QA 1차 피드백 반영 (#273) * fix: 카카오 공유하기 링크 수정 * feat: 링크복사 baseUrl 수정 * style: 스타일 변경 토너먼트 뷰 * style: app wrapper 변경 및 헤더 * style: 모달창 가격 * fix: 토너먼트 라우터 구조 변경 * feat: 빌드 에러 해결 * feat: 이미지 수정 시 null로 POST * feat: navigate 수정 * feat: 간격 조정 * feat: 빌드 에러 수정 * feat: 디자인 수정 * feat: 디자인 수정 * feat: 초대 링크 수정 * fix: 충돌 해결 후 머지중 * feat: 초대 구현 * Home/Mypage 디자인 qa 진행 완료 (#272) * refactor: type icon 수정 * refactor: footer 수정 * refactor: icon 적용 * refactor: detail view 수정 * refactor: 선물방 뷰 수정 * refactor: 시작 페이지 수정 * refactor: 마이페이지 * refactor: 로딩과 애니메이션 수정 * refactor: gift Room 수정 * fix: build에러 해결 --------- Co-authored-by: Wang HoEun * feat: 이미지 조건 변경 * [온보딩] 스타일 속성 변경 (#278) * feat: 뒤로가기 버튼 제거 * style: qa 반영 오전 5시 18분 * style: 카카오 링크 zindex 추가 * style: 온보딩 스텝 스타일 * fix: 빌드 오류 해결 --------- Co-authored-by: 장정안 * [토너먼트] gifted 속성 받아오기 (#281) * feat:api 업데이트 get User * feat: 라우터 기프티 받아오기 * feat: 뒤로가기 수정 * [온보딩] 온보딩 파이널 뷰 스타일 수정 (#285) * style: 온보딩 파이널 햄버거 추가 & 글자 위치 수정 * style: 투명도 제거 * feat: 스타트 페이지 원래대로 복귀 * [큐에이] 토너먼트 시작 화면 (#287) * chore: 이미지 추가 * style: 토너먼트 카드 스타일 2차 * style: 토너먼트 랭킹 헤더 * style: start 화면 배경 삽입 * fix: 빌드 에러 해결 * 움직이는거 수정 (#289) * refactor: type icon 수정 * refactor: footer 수정 * refactor: icon 적용 * refactor: detail view 수정 * refactor: 선물방 뷰 수정 * refactor: 시작 페이지 수정 * refactor: 마이페이지 * refactor: 로딩과 애니메이션 수정 * refactor: gift Room 수정 * fix: build에러 해결 * refactor: header 수정, 마이페이지 위치 값 수정 * fix: 모바일 움직임 수정 --------- Co-authored-by: Wang HoEun * feat: 네비게이션 수정 * style: 초대 받은 사람 뷰 스타일 수정 * fix: 오타 수정 * fix: 배경 이미지 교체 * fix: 로그인 에러 해결 * fix: 문구 삭제 * fix: 리턴 값 부여 * [리프레쉬 토큰] 리프레쉬 토큰 만료 시 재로그인 (#314) * [Fix] 불필요한 div 삭제 (#294) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun … * [리프레쉬 토큰] reponse data 형식 변경 (#318) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 --------- Co-authored-by: Wang HoEun * [accessToken] api response 형태 관련 수정 (#320) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 --------- Co-authored-by: Wang HoEun * [Token] accessToken 요청 후 refreshToken 재 확인 (#322) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 --------- Co-authored-by: Wang HoEun * [Token] 리프레쉬 토큰 response message 형태 변동 (#324) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 --------- Co-authored-by: Wang HoEun * [refreshToken] 401 status도 조건부에 추가 (#326) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 --------- Co-authored-by: Wang HoEun * [refreshToken] error 메세지로 구분하기 때문에 error. 붙여서 형식 수정 (#328) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 --------- Co-authored-by: Wang HoEun * [refreshToken] axios 에러 일경우 로컬 비우고 재 요청 (#330) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. --------- Co-authored-by: Wang HoEun * [interceptor] 코드 정리 및 / config 형태 변동 (#332) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. * fix: 코드 중복 제거 및 정리 , 메세지에 따른 에러 경우도 분리 * fix: 코드 정리 및 config 형태 변동 --------- Co-authored-by: Wang HoEun * refactor: local 내부 svg 파일 확인 후 삭제 (#335) Co-authored-by: Wang HoEun * [로그인 유지 + refreshToken 재발급] 코드리뷰를 위한 pr (#334) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. * fix: 코드 중복 제거 및 정리 , 메세지에 따른 에러 경우도 분리 * fix: 코드 정리 및 config 형태 변동 * fix: 코드 정리 및 config 형태 변동 * feat: 일단 token 없이 url 이동 시 무조건 start로 가게 해둠. 추후 error 페이지 도출 예정 --------- Co-authored-by: Wang HoEun * [로컬로그인] production 모드와 development 모드 구분 하여 로그인 가능하도록 (#341) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 --------- Co-authored-by: Wang HoEun * [시작페이지] fixed view (#336) * fix: max width 값 지정하여 움직이지 않도록 함. svg 때문에 width100%가 안 먹고 있었다. * refactor: style 코드가 아닌, svg 파일 자체의 width 값 지정 (고정값) --------- Co-authored-by: Wang HoEun * [토너먼트 인트로] 토너먼트 전체 네이밍 및 인트로 예외처리 (#340) * fix: TournamentNew 폴더 -> Tournament 이름 변경 * style: mixin 대입 * fix : 토너먼트 컨데이너 -> 토너먼트 인트로 컨테이너 이름 변경 * feat: 토너먼트 선물 0개 일 때 예외 처리 * fix: 페이지/Tournament 폴더 생성 * chore: tournamentOngoing 파일 안쓰는거 제거 * style: mixin 추가 * [시작페이지] 코드 관심사의 분리 (#338) * refactor: scroll 애니메이션 코드 분리 및 애니메이션 폴더 생성 * refactor: 첫번째 선물 애니메이션 코드 분리 및 start style 페이지 정리 * refactor: footer position Footer의 고정값으로 수정 * refactor: 시작페이지 고정 버튼 코드분리 * style: start button 주석 삭제 * style: start button 컴포넌트 명 변경 * fix: 글로벌 스타일에서 margin 0 없앰 --------- Co-authored-by: Wang HoEun * [상태관리] recoil 삭제 (#346) * fix: recoil 폴더 삭제 및 recoil root 삭제 * refactor: recoil 패키지 의존성 제거 --------- Co-authored-by: Wang HoEun * [로컬 로그인] 기존 닫힌 review를 위한 pr (링크 확인 부탁 드립니다.) (#345) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 * style: 주석 지우기 * fix: 마이페이지 get 요청 도중 token 인식 실패문제 해결 * fix: 로그아웃 시 alert 창 뜨는거 수정 --------- Co-authored-by: Wang HoEun * [로컬 로그인] local redirect uri 숨기기 (#351) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 * style: 주석 지우기 * fix: 마이페이지 get 요청 도중 token 인식 실패문제 해결 * fix: 로그아웃 시 alert 창 뜨는거 수정 * fix: local redirect uri 수정 --------- Co-authored-by: Wang HoEun * [선물 등록, 선물방 편집] 리액트 쿼리 관련 데이터 실시간 업데이트 문제 해결 (#339) * refactor: 불필요한 주석 제거 및 푸터 컴포넌트 내 onSuccess 제거 * refactor: 불필요한 props 제거 * feat: 임시로 광고 숨김 * fix: invalidated queries to refetch fresh data * fix: 멤버 삭제 기능 수정 * fix: 파라미터 수정 * refactor: 에러 메시지 출력되도록 수정 * fix: 개설자 프로필 이미지 뜨도록 수정 * fix: 개설자 이미지 뜨도록 이름 수정 * fix: roomId 가져오는 방식 수정 * chore: 안 쓰는 import 주석 처리 * refactor: 주석 삭제 * refactor: 화살표 함수로 복구 * refactor: useQueryData로 변경 * [로그인] 로그인 에러 페이지 (#349) * feat: 카카오 로그인 에러 시 페이지 이동 * fix: 지민언니 addgiftfooter 부분 filename 삭제 --------- Co-authored-by: Wang HoEun * [시작페이지+header] 애니메이션 수정 및 header + layout (#353) * style: 안 쓰이는 mypage header 삭제 * refactor: start 페이지와 mypage header가 들어간 layout 생성 및 적용 * feat: header icon 변경 및 style 코드 정리 * refactor: mypage header 수정 및 start header 분리 + router 속 layout 수정 * style: start 페이지 속 tournament json 파일 추가 * refactor: 채팅 animation 각자 개별로 떨어트려두기로 수정 * fix: 새로 추가된 svg icon mypage와 home2 안쓰는 import문 삭제 후 빌드에러 해결 * fix: 안쓰는 import 문 삭제 * fix: 지민 언니 부분 안쓰는 filename 변수 삭제 * feat: 로그인 에러페이지 header layout적용 --------- Co-authored-by: Wang HoEun * [선물 등록] PresignedUrl로 선물 등록되도록 수정 & 커스텀 훅 분리 (#347) * feat: 이미지 주소를 파일로 변환하는 커스텀 훅 생성 * feat: 폼 데이터 형식을 put 하는 커스텀 훅 * refactor: 폼데이터 전송으로 수정 * refactor: presignedUrl 관련 코드 다시 추가 * feat: 이미지 put 커스텀훅 * refactor: 사용하지 않는 요소들 삭제 * fix: presignedUrl에 보낼 이미지 주소 파싱 방식 수정 * fix: binary 형식으로 put 하도록 수정 * fix: 오픈그래프 이미지가 아니어도 잘 등록되도록 수정 * chore: 콘솔 삭제 * fix: 일반 이미지 불러지지 않는 버그 해결 * refactor: 선물 등록 서버 통신 코드 커스텀 훅으로 분리 * refactor: 선물 이미지 업로드 커스텀 훅 분리 * refactor: 파일명 파싱 함수 커스텀 훅 분리 * fix: s3 이미지링크 비동기 문제 해결 * fix: 오픈그래프 이미지 사용시 파일명 없는 문제 해결 * fix: invalidateQueries 복구 * refactor: 링크가 없는 경우 presignedUrl 적용 * chore: 사용하지 않는 import 삭제 * chore: 빌드 에러 해결 및 함수형으로 수정 * chore: 빌드 에러 해결 * fix: 온보딩 커스텀 훅 복구 * 온보딩 구조 context API로 변경 & 관심사 분리 & 공통 Title 변경 (#343) * refactor: step01 다음 버튼 텍스트 스타일 공통으로 분리 * refactor: 모든 스텝 버튼 텍스트 스타일 공통으로 분리 * style: 라디오 버튼 onClick 제거 (이미 속성에 정의되어 있음) * feat: 공통 Title 속성 변경 기존에 저희끼리 이야기 나누었던 부분인 띄어쓰기 때문에 Title을 두 번씩 가져다 쓰는게 맞냐는 부분에대해 고민 후 Title의 속성을 PropsWithChildren으로 변경하여 사용하는 곳에서 br태그 사용 가능하도록 변경 * feat: 타이머 인풋창 가려지게 설정 & 아이콘 클릭 시 더이상 인풋창 출력되지 않고 바로 타이머 나오도록 설정 useRef 속성에 showPicker를 알게되어 사용. 그리고 투명도를 0으로 주어 타이머를 가렸습니다 * refactor: Step01 인라인 스타일 제거 * refactor: 온보딩 버튼 구조 수정 버튼 어디에나 공통으로 쓰이는 mixin이 있어 이를 함께 컴포넌트 안으로 묶어주었습니다 * chore: 안쓰는 step01 코드 삭제 * chore: step02 안쓰는 코드/주석제거 * style: 안쓰는 코드 제거 & 스타일 코드 수정 * refactor: step01 타입 Pick으로 변경 * feat: Onboarding context 작성 및 라우터에 Provider 추가 * feat: context에 imageUrl 빈값으로 추가 * feat: step01 인풋 입력 로직 커스텀 훅으로 분리 * feat: OnboardingInfo 타입 지정 * style: 온보딩 버튼 내 '$' 추가 * feat: step01 관심사 분리 완료 * feat: 미리보기 공통 커스텀 훅 작성 * feat: step02 관심사 분리 * refactor: interface 수정 * style: IconWrapper 추가 * feat: step03 관심사 분리 * style : step04 width값 삭제 * style: step04 인라인 스타일 제거를 위한 스타일 코드 추가 * feat: 캘린더 & 타이머 커스텀 훅 추가 * feat: step04 관심사 분리 및 추상화 수준 맞추기 * chore: 쓸모없는 타입 제거 * feat: step04 캘린더 & 타이머 아이콘 클릭의 추상화 정도 일치시키기 * feat: step05 로직 커스텀 훅 분리 * feat: step05 내 시간 선택하는 부분 컴포넌트 분리 * feat: 시간 계산 유틸 함수 작성 후 분리 * style: radio 버튼 '$'추가 * feat: step05 컴포넌트 및 관심사 분리 * chore: 온보딩 최상위 컴포넌트 필요없는 코드 제거 * style: 참여자 뷰에서 햄버거 메뉴 바 선택 시 글자 겹쳐 보이는 현상 수정 * feat: 전체 온보딩 정보를 요약한 정보 속 날짜 계산 로직을 커스텀 훅으로 분리 * refactor: 참여자 뷰 로직 분리 및 Title 구조 수정 * feat: step06 커스텀 훅으로 분리및 step06 필요없는 타입 & props 정리 * refactor: 온보딩 최상위 컴포넌트 상태와 props 정리 * refactor: step01 다른 스텝과 추상화 정도 맞추기 * style: 인라인 스타일 -> styled components로 변경 * chore: 설명주석 추가 & 필요없는 코드 제거 * style: 참여자 뷰 인라인 스타일 코드 -> styled Components로 변경 * chore: 파일명에 공백 제거 * fix: 라우터 속 import 파일명 공백 제거 * chore: 공통 타이틀 주석 제거 * fix: 메뉴바 클릭시 글자 겹쳐 보이는 현상 수정 * chore: 주석 제거 * chore: 필요없는 props type 제거 * style: Wrapper 컨벤션 맞추기 * feat: Content-Type': 'binary'로 변경 * feat: filename & file자체 저장 useState 추가 * feat: binary 파일 형식으로 바꿔주고 PUT하는 커스텀 훅 추가 * refactor: presignedUrl을 받아오는 POST 함수 수정 * feat: presignedUrl 로직 추가 POST로 받아온 presignedUrl, binary형식으로 파일 자체를 담아서 PUT * style: step06일 때는 다른 display 적용 * style: step06 일때 온보딩 버튼 위치 수정 * style: margin-bottom값 변경 * feat: step02 presignedUrl 값 context에 저장 * chore: 필요없는 조건문 및 주석 제거 * feat: 참여자 뷰 GET으로 받아온 값으로 구현 (추후 겹치는 로직 분리) * chore: TODO 주석추가 * style: 온보딩 이미지와 참여자 뷰 이미지 그라데이션 수치 일치화 * chore: 주석 추가 및 todo 추가 * feat: 참여자뷰에서 get받을 때 일반 axios사용으로 변경 * feat: 참여자 뷰 GET response를 data.data 로 변경 * style: 이미지 미리보기 등록 시 수정 아이콘 삽입 * chore: 사용하지 않는 코드 제거 및 todo 추가 * feat: input accept 형식 변경 * feat: 급하게 커스텀 훅 추가(충돌 해결을 위한) * [선물 등록] ContextApi 적용 (#350) * feat: 선물등록 임시저장 위한 context 적용중 * feat: 뒤로가기 시 정보 임시저장을 위한 context 생성 * feat: 뒤로 가기 혹은 다음 버튼 누르면 context 업데이트 * feat: 선물 등록 클릭 시 임시저장 데이터 초기화 * feat: 링크 입력 화면 context 적용 * chore: 머지하면서 사라진 부분 복구 * fix: 오타 수정 * chore: 빌드 에러 해결중 * chore: 빌드 에러 해결 * [토너먼트] 중복자 예외처리 + 토너먼트 로직 분리 (#354) * feat: 랜덤 함수 커스텀 훅 분리 * feat: 토너먼트 로직과 ui 분리 * fix: useGetItem 이름 변경 * fix: useGetItem 에러 임시 처리 * feat: 토너먼트 중복자 예외처리 * chore: 안쓰는 state 제거 * feat: 선물 0 개일 때 조건문 변경 * feat: 개설자 여부에 따라 버튼 출력 * 마이페이지 두번 누르는 이슈 해결 (#358) * feat: 카카오 로그인 에러 시 페이지 이동 * fix: 지민언니 addgiftfooter 부분 filename 삭제 * fix: 마이페이지 안 들어가는 이슈 확인 --------- Co-authored-by: Wang HoEun * fix: 에러페이지 도출 경우 에러 수정 * feat: 라우터 giftee -> gifteeName변경 (#362) * fix: logout instance 생성 후 interceptor 안 걸리게 함 * fix: 안쓰는 post instance import 삭제 * [마이페이지] 코드 리펙토링 (#370) * style: console 삭제 * refactor: logout 버튼 logic 코드 이동 * style: 마이페이지 data 순서 정리 * style: 마이페이지 header 코드 가독성 높이기 * refactor: progressgiftview 코드 정리 * refactor: donegiftview 코드 정리 * style: console 창 삭제 * style: 기존으로 다시 원상복귀.. * fix: logout instance 수정 * fix: loggout 시 스토리지 clear로 변경 * refactor: giftroomview 코드 클린하게 변동 * refactor: detail room 코드 정리 * refactor: mypage view 코드 분리 * style: 안 쓰는 interface 삭제 * refactor: 반복되는 컴포넌트 새로운 const로 생성 * refactor: view 코드 component 분리 map을 더 간단하고 가독성 있게 * style: props 변수 명 수정 및 옵셔널로 반영 * style: 좀 더 정확한 data 네이밍 수정 * style: data 옵셔널이 아닌, undefined로 예외처리 코드로 작성하기 수정 * refactor: React.FC 삭제 --------- Co-authored-by: Wang HoEun * [favicon/og] 파비콘과 오픈그래프 (#368) * feat: og tag 적용하여 썸네일과 설명 적용 * feat: 파비콘 설정 및 apple 아이콘 임의로 설정 --------- Co-authored-by: Wang HoEun * fix: 리프레시 토큰 재요청 경우 모든 에러 케이스 추가 * feat: 모바일에서 카카오 로그인 버튼 안보이는 현상 로직 수정 (#381) useEffect로 isToken을 boolean으로 주고 그에 따른 삼항 연산자로 뷰를 보여주는 로직으로 수정하였습니다. * isToken 기본 값 언디파인드로 변경 (#384) * feat: 모바일에서 카카오 로그인 버튼 안보이는 현상 로직 수정 useEffect로 isToken을 boolean으로 주고 그에 따른 삼항 연산자로 뷰를 보여주는 로직으로 수정하였습니다. * feat: isToken 기본 값을 false에서 undefiend로 변경 * feat: isToken 값 기본으로 false 설정을 제거 (#389) * [온보딩] useEffect 안 조건문 제거(02:36) (#390) * feat: isToken 값 기본으로 false 설정을 제거 * feat: useEffect 안 조건 문 제거 * [호은 1.5차 qa] edit 페이지 뒤로가기 header 추가 / 로그인 시 카카오 프로필 header에 나타남 (#375) * refactor: edit room code 정리 * feat: edit room 에 뒤로 가기 헤더 추가 * feat: 뒤로가기 헤더 layout 생성 후 공통으로 쓸 수 있도록 router 수정 * feat: login 했을때 profile 이미지 localstorage에 저장하고 header 속 프로필 바뀌게 하기 --------- Co-authored-by: Wang HoEun * [1.5차 QA : 토너먼트] 토너먼트 방 종료 버튼 구현 및 중복 참여자 ui 개선 (#378) * feat: 종료하기 기능 구현 * chore: React.FC 지양 * fix: 토너먼트 중복 참여자일 경우 ux 변경 * chore: 안쓰는 import 삭제 * chore: 코드 정리 * fix: 모달창 확인 버튼 마이페이지 이동 * fix: 화살표 함수 지정 * [1.5차 QA] 선물 등록 완료 버튼 관련 버그 수정(기본 이미지 문제, 로딩 뷰 처리) (#393) * fix: 링크 없이 등록 시 모달 안 뜨도록 수정 * fix: 기본 링크 설정에 쉼표 오타 제거 * refactor: 이미지 링크 빈 값 들어가는 에러 해결 * fix: CORS 에러 나면 바로 직접 입력으로 전환 * refactor: onSuccess 중복 제거 * feat: 선물 등록 시 지연 생길 때 로딩뷰 추가 * fix: 로딩 완료 후 바로 선물등록 홈으로 이동되도록 수정 * fix: svg 막고 핸드폰 사진 허용 * [1.5차] 선물등록 스타일 QA (#403) * fix: 미니타이머 아이콘 크기 고정 * fix: input 포커싱 때만 색상 주기 * fix: input 글자색 수정 * fix: 버튼 위치 수정 * fix: UX 라이팅 수정 * fix: 이미지 안 잘리도록 수정 * [1.5차 QA] 선물홈 스타일 QA 반영, 선물등록 모달창 추가 (#401) * fix: 중앙정렬 * fix: 잘리는 글자 해결 * fix: 내가 등록한 선물 스타일 적용 * feat: 삭제 모달 추가 * [시작페이지] style qa 진행 (#376) * refactor: 바뀐start 페이지 속 svg 수정 이후, header 속 svg 수정 * fix: logo header속 아이콘 도 수정 * style: home 아이콘 크기 수정 * fix: 새롭게 바뀐 svg 적용 + 애니메이션 적용을 위한 배경으로 변동 * style: step svg 파일 추가 후 tsx로 변환완료 * feat: 새로운 애니메이션 적용 및, 변경 된 svg 새롭게 적용 scroll animation 모든 부분 * feat: 새로운 tournament animation lottie 적용 * style: header 색상 하얀색으로 변경 * style: navigate 중앙정렬 및 색상 변경 + globalstyle margin 0 auto 추가 * style: 로고 헤더 wrapper 생성 후 중앙정렬 * fix: 화면 밀리는 문제 해결 start page + 애니메이션 속도 조절 * feat: downIcon에도 애니메이션 적용 start page * style: 시작 페이지 사진 width 값 100%으로 수정 첫번째 사진 제외하고 * style: 기존 width 37.5rem 로 변경 시작 첫번째 이미지 * fix: svg 파일 import 문 삭제 * fix: icon 바꾼거 네이밍 변경 적용 merge 시 바뀌게 된 듯 함 * refactor: 변경 된 start 첫번째 사진 svg에서 tsx 생성 * refactor: start 페이지 첫번째 이미지 수정 반영 margin 없음 * refactor: 수정 된 버튼 그라데이션 svg 반영 * feat: 수정한 버튼 그라데이션 코드에 적용 --------- Co-authored-by: Wang HoEun * [마이페이지] style qa를 위한 변경 사항 (#399) * style: 마이페이지 가로 스크롤 안 생기게 수정 및, userbox 중앙정렬 * refactor: mypage 이미지 svg로 변경 * fix: 선물방 마이페이지 사진 크기 가로세로 일정하게 수정 * feat: 선물방 카드 속 이름 길이에 따라 보여지는 style 다르게 하는 코드 작업중 중간 로직 코드 작성 (수정 필요) * fix: 선물방 카드 giftee 님을 위한 선물방 글자수에 맞게 보여지는게 다르게 수정 * feat: user name 색상 pink 6번 으로 수정 * refactor: header 배경 색 맨 위에 있을땐, 투명이었다가, 내릴때부터 하얀색으로 되게 수정 * refactor: 이미지 위치 수정 후, user wrapper 위치도 수정 * fix: UserName 부분 width 100% 빼기 * refactor: edit page 속 명수 색상 변동 적용 * fix: 안쓰는 import 문 svg 속에 있는거 삭제 * fix: mypage header 부분 icon 크기 변동과 gap 삭제 * fix: merge 하며 없어진 style header 속 코드 다시 반영 --------- Co-authored-by: Wang HoEun * [온보딩] 뒤로가기 기능 (#379) * feat: 뒤로가기 아이콘 추가 및 로직 추가 * chore: funnel 훅 폴더 정리 * feat: 온보딩 헤더 뒤로가기 로직 변경 * feat: 미리보기 이미지 전역으로 변경? 뒤로가기 시 미리보기 이미지가 보여지고 있음에도 불구하고 '다음'버튼이 활성화가 되지 않는 현상이 있습니다. 이를 콘솔로그를 통해 살펴보니 미리보기 이미지가 뒤로가기 시에 업로드 되어있지 않다는 판정이 되는 것 같아요 ㅠ 추후 수정하겠습니다 * feat: react.memo로 step02 감싸서 렌더링 방지 * feat: 미리보기 이미지 상태 다시 일반 state로 복귀 * feat: step03 뒤로가기 구현 * feat: step02 미리보기 전역 상태를 일반 state로 복귀 * feat: previewImage 커스텀 훅 안쓰는 코드 정리 * feat: step04 시간 선택 반영 잘되게 수정 * feat: 토너먼트 스케줄 캘린더 담당 커스텀 훅 작성 * feat: 뒤로 가기 시 캘린더 정보 저장(시간은 저장x) * feat: 토너먼트 시작 시간이 없을 시를 대비한 삼항 연산자 사용 * chore: 필요없는 코드 제거 * chore: 필요없는 useEffect 제거 * chore: 필요없는 코드 제거 * fix: 빌드에러 수정 * [온보딩] 썸네일 미리보기 이미지 짤리는 현상 (#395) * feat: svg 확장자는 전부 이미지 업로드 불가하여 accept에서 제거 * feat: 이미지의 크기가 매우 작은 경우를 대비하여 height 100% 설정 * fix: 썸네일 부분 height값 삭제 * feat: 이미지 특정 height 값 이하일 때 미리보기 안되게 구현 * feat: 이미지 최소 height 변경 (추후 논의 필요) * feat: image accept에 heic 추가 * [온보딩]16시 54분 기준 카카오 로그인 강제로 보이게 하여 svg의 문제인지 확인하는 작업 (#413) * feat: 카카오 로그인 조건부처리 없이 강제로 보이는지 확인 * feat: 새로운 도메인으로 변경 * feat: develop 브랜치에서 카카오 로그인 png로 변경 * [토너먼트 랭킹] 공유하기 기본 ui 기능 구현 (#416) * feat: 아이콘 추가 * style: 토너먼트 이미지 가운데 정렬 * chore: 불필요한 console 제거 * feat: 라우터 변경 공통 헤더 사용 * style: 메달 아이콘 변경 * style: 메달 구 아이콘 제거 신 버전 아이콘 업데이트 * style: 랭킹 메달 업데이트 및 랭킹 글자 가운데 정렬 * style: 토너먼트 랭킹 스타일 1.5차 QA * fix: 공유하기 일단 카카오톡 공유하기로 임시 대체 * fix: 빌드 에러 해결 * style: 토너먼트 헤더 반영 * feat: web share API 기능 구현 * [1.5차 QA] 선물 홈 - 토스트 메시지 추가, 헤더 변경, 카운트다운에 따른 네비게이션 (#397) * fix: 타이머 0이 되면 토너먼트 뷰로 이동하기 * fix: 미니 타이머 시간 만료되면 토너먼트로 이동 * fix: 클립보드 복사할 때 / 중복 제거 * refactor: 헤더 변경 * feat: 링크 복사 토스트 메시지 추가 * refactor: 미니타이머 prop 반영 * fix: invalid hook calls 해결 * refactor: 서버 명세 수정 반영 * refactor: 선물등록에 gifteeName 반영 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * [1.5차 QA] 중복 모달 추가 및 스크롤 생기는 이슈 해결 (#421) * feat: 모달 생성 * refactor: gifteeName 적용 * feat: 중복 모달 처리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: state 업데이트 수정 * chore: 빌드 에러 해결 * fix: 직접 입력의 경우에도 중복 모달 작동하도록 수정 * [온보딩] 새롭게 바뀐 step06 (OnboardingFinal) 구현 (#400) * chore: svg 파일 추가 * feat: 시간 포맷팅 유틸함수 수정 * feat: onboardingFinal 컴포넌트 Footer 설정 * feat: 새로운 step06에 적용될 스타일 코드 추가 * feat: 새로운 step06 구현 * refactor: step06 코드 일부 정리 더 깔끔한 코드 분리는 조금만 자고 일어나서 하겠습니다... * fix: 빌드에러 수정 * style: btnRadio에 $ 추가 * feat: 코드리뷰 반영 * [온보딩] 스타일 qa 반영 24.02.23 16:14 기준 (#412) * style: step01 터치영역 늘림 * style: 터치 영역 늘리기 & 인풋창 focus 방지 * fix: 빌드에러 해결 * [온보딩] 새로운 참여자 뷰와 로직 작성 & 온보딩 파이널 전용 헤더 생성 & 토큰 여부에 따른 카카오로그인 버튼 (#418) * feat: 카카오 로그인 버튼 png로 변경하고 조건부 처리하여 올바르게 구현 * feat: svg 파일 추가 * feat: 396브랜치에 있는 onboarding footer 가져오기 * feat: 라우터 상수처리 * feat: 396브랜치에 있는 step06 가져오기 * feat: 날짜 포맷팅 유틸 함수 수정 * feat: 참여자 뷰 새로운 구조로 전체 변경 * style: 온보딩 파이널 & 참여자 뷰 전용 헤더 생성 * style: 참여자 뷰에만 적용될 gifterNumber 관련 스타일 코드 작성 * style: Onboarding Final Footer에 margin-top 추가 * fix: 빌드에러 수정 * feat: 아이폰 공유하기 공용 커스텀 훅 작성 * feat: 올바른 url로 복사를 위한 env 파일 변경 및 '/'추가 (#425) * [시작페이지] 2차 qa 내용 반영입니다 ! (#434) * style: 카카오 로그인 버튼 사이즈 수정 * refactor: 아래아이콘 스크롤에 따라서 애니메이션 적용 * style: 로고 중앙정렬 + header height 100% 로 * style: width 100%로 ! * style: footer 아이콘 간격 수정 * style: header 속 profileImage 모양과 크기 변동 * style: 토너먼트 애니메이션 위치 수정 --------- Co-authored-by: Wang HoEun * fix: 입장하기 버튼 클릭 시 아무 작동없는 문제 해결 (#428) * 공토 컴포넌트 공유를 위한 임시 PR입니다 (#445) * refactor: Delete Modal 공통 컴포넌트화 * feat: 플로팅 버튼에 따라 토스트 위치 변경 * [온보딩] 뒤로가기 시 이미지 미리보기 안보이는 현상 & 유저가 시간먼저 선택 시 발생하는 문제 수정 (#435) * style: step02 미리보기 이미지 위치 수정 * feat: 이미지 파싱 방법 변경 * feat: previewImageInfo 타입 추가 * feat: PreviewImageContext 새롭게 작성 * feat: 기존 OnboardingContext에서 previewImage 관련 로직 삭제 * feat: previewImageInfo Context 적용 * feat: 토스트 메세지 Object.freeze로 분리 * feat: 날짜 먼저 선택하라는 토스트 메세지 추가 * feat: 해당 토스트 메세지 적용 * feat: 뒤로가기 시 선택시간 유지를 위한 context 추가 * feat: 뒤로가기 시 이미 선택되어있는 시간이 존재할 때 날짜 선택 시 현재 시간으로 반영되는 문제 해결 * style: img 태그 styled Components로 분리 * feat: 반복되는 코드 정리(객체형태로 작성) * chore: 토스트 메세지 관리하는 파일 명 변경 * [토너먼트] 2차 QA 스타일 변경사항 (#446) * style: 사이 간격 넓히기 * style: ‘공유하기’ 글씨는 가운데 정렬 높이 변경 * style: 등록된 선물 문구 변경 * style: 상품명 3~5줄 말 줄임표 사용 * chore: 주석제거 * style: 이미지 비율 1:1 * style: 라인두께 2px 변경 * style: 중복 헤더 제거 * [선물 등록] 선물 등록 완료 버튼 활성화 기능 수정 (#450) * fix: 나가면 폼 정보 삭제 * fix: 첫 단계에서만 뒤로가기 시 초기화 * fix: 버튼 활성화 수정 * fix: 뒤로 갔다가 돌아와도 잘 정보 보존되도록 수정 * fix: 이름 잘 반영되도록 수정 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: 아이템 개수에 따라 헤더 구성 변경 (#452) * [온보딩] 2차 스타일 qa & 공유하기 안드로이드 & pc 예외처리 (#447) * feat: 공유 링크 공용 커스텀 훅 수정 * chore: 안쓰는 코드 정리 * style: 수정된 타이틀 라이팅으로 변경 * style: step06 컨테이너 순서 변경 * style: 수정된 라이팅으로 변경 & 조건문 로직 삭제 * chore: 필요없는 코드 제거 * feat: 시간 선택 중 input 색상 P-06으로 변경 & 바깥 클릭 시 or 시간 선택 시 원래대로 * style: x 아이콘 조금 더 오른쪽으로 이동 * chore: 주석제거 * style: margin-top 위치 값 변경 * feat: 특정 step에서 인풋창 클릭 시 가상 키보드 올라오지 않게 구현 * fix: env 파일 수정으로 인한 '/' 제거 * feat: share API를 지원하지 않는 경우에 대한 예외처리(링크복사) * chore: stroke 포함된 empty thumbnail svg 파일 추가 * style: 썸네일 엠티 뷰 svg 변경 * [선물방 메인] 2차 QA 스타일 수정 (#449) * fix: 상하 스크롤 제거 * fix: 문법 수정 * fix: 스크롤바 숨기기 * fix: 간격 조정 * fix: 스타일 수정 * fix: 스타일 수정 * style: gap 통일 반영 * style: 햄버거 바 제거 * style: 스타일 수정 * chore: 빌드 에러 해결중 * chore: 빌드에러 해결중 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * [선물등록] 2차 QA 스타일 수정 적용 (#453) * fix: 이미지 비율 조정 방식 변경 * fix: margin 추가 * fix: 버튼 클릭 시 색상 제거 및 스타일 수정 * fix: object fit cover * [온보딩] 사파리에서 날짜 형식 NaN, undefined 뜨는 현상 수정 (#451) * feat: 사파리 undefined 해결을 위한 TEST 컨테이너 작성 * feat: 안드로이드/pc 공유하기 예외처리 다른 브랜치에서 복붙 * feat: 토스트 메세지 추가 * feat: 사파리 날짜계산 undefined 해결 * chore: 필요없는 코드 제거 * fix: 병합 해결 * fix: 가로 세로 길이 5000px로 변경 * fix: 토너먼트 로직 롤백 (#456) * fix: 링크 입력 이름 추가 (#457) * fix: 이미지 세로길이 최소값 변경 (300px) * [토너먼트] 스타일 수정 (#462) * style : 배경 svg 추가 * style: svg 컴포넌트 배경 적용 * style: 다음 버튼 fixed로 변경 * style: none 트로피 높이 지정 * style: 다음버튼 색상 변경 * style: 이미지 비율 및 border 색상 * chore: 이미지 애러 제거 * chore: 이미지 최적화를 위한 라이브러리 설치 (#468) * style: 사파리 100vh 이슈 * fix: 사파리 100dvh 적용 * style: 토너먼트 결과 vh -> dvh 변경 및 주석 제거 * [선물등록, 선물 홈] 최종 QA 스타일 수정 (#467) * style: 화살표 PC에서도 안 보이도록 수정 * style: 버튼 정렬 * style: 상품 이미지 가로 세로 높이 고정 * style: 뒤로가기 아이콘 업데이트 * fix: svg export 복구 * refactor: warning 해결 * style: 선물홈 배경 이미지 교체 * refactor: 배경이미지를 위해 구조 수정 * chore: 빌드 에러 해결 * [온보딩] 최종qa 스타일 & step04 날짜 연속 수정 시 오류 해결 & 아이폰 공유하기 시 텍스트 같이 복사 해결 (#465) * style: step02 이미지 미리보기 위치 변경 * feat: step02 썸네일 엠티 뷰 위치 변경 * feat: step04 인풋 value 추상화 수준 일치화 * refactor: step04 날짜 연속 변경 시 발생하는 에러 해결 & 조건문 형식 변경 * fix: 공유하기 클릭 시 텍스트도 같이 복사되는 문제해결(아이폰) * fix: 빌드에러 해결 * [선물 등록] 이미지 url 파일 변환 실패 시 선물 등록 사항 초기화되도록 수정 (#480) * fix: 직접 입력 진입 시 무조건 이미지 초기화 * chore: 주석 삭제 * chore: 주석 이동 * [선물홈, 선물등록] 이미지 최적화 진행 (#481) * refactor: 선물 등록시 이미지 용량 압축 * chore: 파일명 변경 * chore: 이미지 교체 * feat: 파일 이름 설정 * chore: 주석 제거 * refactor: 화질 설정 수정 * refactor: skeleton ui 임의 추가 * refactor: 스타일 명시 * [마이페이지,시작페이지] 최종 QA 반영입니다 ! (#471) * refactor: done detail room empty view 중앙정렬 * style: count user gap 적용 * style: margin 조금 더 적용 * feat: 토너먼트 애니메이션 직접 구현 위해 폴더 및 파일 생성 * feat: tournament svg 추가 * feat: touranment 애니메이션 직접 구현 후 적용 X view에 안 보이는 이슈 * fix: 안쓰는 svg import문 삭제 --------- Co-authored-by: Wang HoEun * [토너먼트] 결과 이미지 높이 지정 스타일 (#484) * style: 카드 결과 이미지 높이 지정 * feat: 카카오 공유하기 * [온보딩] 시간 선택 스크롤 바 라이브러리로 교체 & 파일 용량 압축 라이브러리 사용 (#478) * feat: 브랜치 459의 useTournamentScheduleCalendar훅 복붙 * chore: MUI DigitalClock 라이브러리 설치 * chore: 필요없는 콘솔로그 제거 * chore: 타입확인을 위한 콘솔로그 추가 * feat: 시간 선택 스크롤 창 MUI 라이브러리로 변경 * feat: 시간 선택 창 am/pm 제거 * chore: 시간 선택 라이브러리 설치를 위한 react-is@^18.2.0 설치 * feat: 이미지네임 파싱 방법 변경 * feat: image-file-resizer를 위한 타입 수정 * feat: image-file-resizer 사용 시 필요한 타입위해 binary로 변환시켜주는 커스텀 훅 타입 변환 * feat: image-file-resizer 적용 * chore: todo 추가 (추후 타입 지정) * chore: 필요없는 코드 제거 * feat: image/webp 추가 * feat: resizedFile 함수 분리 및 확장자 강제 WEBP로 변경 * fix: resizedFile 함수 안 이미지 최대 길이 값 및 화질 수정 * fix: develop 브랜치와 step02 스타일이 달라서 일치화 * [온보딩] step02 -> step03 넘어갈 때 스켈레톤 ui 적용 (#483) * feat: 이미지 HEIGHT 최대값 10000으로 변경 * feat: Loading 상태 추가 후 일단 스피너로 추가 * chore: 필요없는 주석 및 코드 제거 * feat: step05 로딩 스피너 추가 * fix: 이미지 최대 세로 값 5000px로 변경 * feat: 온보딩 전용 스켈레톤 ui 컴포넌트 구현 * feat: 온보딩 전용 스켈레톤 ui Step02에 적용 * style: 온보딩 스켈레톤 스타일 코드 분리 * [마이페이지] 로그아웃 버튼 클릭 시 모달 나타내기 (#474) * fix: delete modal 확인 버튼 시 clickedItem에 따른 옵서녈 실행 수정 * refactor: 넘겨받는 확인 버튼 멘트 props로 바꾸기 * feat: 로그아웃 모달 추가하기 * fix: 안쓰는 import 문 삭제 * fix: suspense 재 적용 --------- Co-authored-by: Wang HoEun * fix: step04 시간 선택 인풋창 클릭 시 키보드 안올라오게 * fix: step03 인풋창도 키보드 안올라오게 * feat: webp로 이미지 교체 * [온보딩] step01에서 특수문자 입력 안되게 유효성 체크 (#487) * feat: 일반 특수문자 & 아이폰 특수문자 입력 안되게 유효성 체크 * feat: 아이폰 이모티콘도 입력안되게 유효성 체크 추가 * fix: 아이폰 특수문자는 토너먼트 진행 url에 문제없으므로 유효성검사에서 제거 * feat: 토스트 메세지에 특수문자 유효성 검사 추가 * fix: 특수문자 토스트 메세지 자동 닫힘 시간 변경 * [시작페이지] 이미지 최적화 (webP로 형식 변환) (#489) * refactor: webP 변환 부분 적용 / 하지만 하얀색 화면 이슈 수정 필요 * fix: webp 파일 재 변환 후 새롭게 적용 * fix: webp 파일 main02와 main04 png로 수정 후 재 변환. 깨지는 문제 해결 * style: 안쓰는 import 문 삭제 및 주석 삭제 * fix: main03 새롭게 파일 변환 후, 각 파일 height 적절하게 변동 --------- Co-authored-by: Wang HoEun * fix: main 03 이미지 webp 변환 후 적용 (#494) Co-authored-by: Wang HoEun * refactor: heic 변환 처리 추가 (#492) * [온보딩] step05 라디오 버튼 테두리 짤려 보이는 현상 수정 (#495) * feat: step03 인풋 클릭 시 키보드 안올라오게 설정 * style: 라디오 버튼 svg 파일 위치 값 수치 조정 * [온보딩] step02 썸네일 등록 시 아이폰 이미지 확장자(heic) 업로드 안되는 현상 수정 (#497) * chore: heic 변환 라이브러리 설치 * feat: heic 확장자 input으로 받도록 추가 * refactor: 함수 분리 & 고용량 이미지 이슈 예외처리 이미지 업로드가 되는 것을 진행해놓은 상태에서 다시 고용량 이미지를 추가하면 이미지 업로드가 되는 현상이 있어 이를 수정하였습니다. * feat: heic 확장자 업로드 가능하도록 수정 * fix: step02 파일 인풋 대소문자 구분x로 인해 확장자 하나 삭제 * chore: 콘솔로그 제거 * [마이페이지] 선물방으로 이동 버튼 기능 추가 (#501) * feat: 선물방 생성으로 이동 navigate 추가 * fix: empty view 공통 컴포넌트화 * fix: 안쓰는 import 문 삭제. 공통컴포넌트화 하며 생겼다. --------- Co-authored-by: Wang HoEun * [시작페이지] 이미지 화질 수정 (#504) * fix: 파일 webp 변환 다시 해보기. 화질 수정 * fix: 파일 명 수정 --------- Co-authored-by: Wang HoEun --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: 장정안 Co-authored-by: imeureka --- src/assets/img/main02.webp | Bin 91758 -> 828072 bytes src/assets/img/main03.webp | Bin 22454 -> 147894 bytes src/assets/img/main03_no_animation.webp | Bin 23686 -> 0 bytes src/assets/img/main04.webp | Bin 1322 -> 12612 bytes src/pages/Start/Start.style.ts | 2 +- 5 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 src/assets/img/main03_no_animation.webp diff --git a/src/assets/img/main02.webp b/src/assets/img/main02.webp index 0b31735951263665813db7bf20341e9670b751ed..d0826fa1238743c22cc5105f5ab22fd352ac0755 100644 GIT binary patch literal 828072 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 z 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

0r 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%0DfvL@aQuk|!mWn`7T1JGl%u_ZuN1kOI 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

    kB@k{CMW@&N>4W-a2 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ɼ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�rHvmn6@CGw>kOn&wl)pFK|_N2?c&u^HP>o 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
    - -
    +

    + 🍭SWEET

    + +### 모두의 의견을 모아 하나의 선물로, SWEET + +
    @@ -21,14 +25,8 @@


    - -
    -

    모두의 의견을 모아 하나의 선물로, SWEET

    -
    -
    - ### 🔎 많은 사람이 한 사람의 선물을 고르는 과정에서 힘들었던 경험 있으신가요? 셀 수 없이 늘어나는 선물 단톡방, 갯수가 너무 많아 헷갈리는 선물 링크, 선물을 받는 사람(리시버)이 어떤 선물을 좋아하는지도 헷갈립니다. From 89ba88b9b5da04a2575fa5a6b4cf62c8f4a3db94 Mon Sep 17 00:00:00 2001 From: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Date: Thu, 28 Mar 2024 19:54:18 +0900 Subject: [PATCH 04/10] docs: updated service screenshots --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d0e8a805..bab14967 100644 --- a/README.md +++ b/README.md @@ -91,11 +91,12 @@ | 화면 | 기능 | | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| Screenshot 2024-01-02 at 10 07 48 AM | 로그인 기능
    카카오톡 소셜 로그인 | -| Screenshot 2024-01-02 at 10 15 05 AM | 새 선물 준비 정보 입력 기능
    새로운 선물 준비하기를 원하면 토너먼트 기한, 썸네일 등을 입력 -| Screenshot 2024-01-02 at 10 08 56 AM | 선물 토너먼트 링크 공유 기능
    정보 입력 후 생성된 링크를 카카오톡으로 공유 가능 | -| Screenshot 2024-01-02 at 10 15 47 AM | 선물 등록 기능
    선물 링크와 가격 등록 시 토너먼트 아이템으로 추가 | -| Screenshot 2024-01-02 at 10 17 03 AM | 토너먼트 기능
    설정한 기한 동안 토너먼트 진행 후 순위 결과 확인 및 공유 가능 | +| 스윗-소셜로그인-이미지 | 로그인 기능
    카카오톡 소셜 로그인 | +| 스윗-새-선물-준비-이미지 | 새 선물 준비 정보 입력 기능
    새로운 선물 준비하기를 원하면 토너먼트 기한, 썸네일 등을 입력 | +| 스윗-선물방-링크-공유-이미지 | 선물 준비방 링크 공유 기능
    정보 입력 후 생성된 링크를 카카오톡으로 공유 가능 | +| 스윗-선물-등록-이미지 | 선물 등록 기능
    링크 입력 혹은 직접 입력을 통해 토너먼트 선물 아이템 등록 | +| 스윗-선물홈-이미지 | 선물홈 화면
    선물방 관련 정보 확인 가능 | +| 스윗-토너먼트-결과-이미지 | 토너먼트 기능
    설정한 기간 동안 토너먼트 진행 후 순위 결과 확인 및 공유 가능 |

    From 40b4b7118a8055b7d0082726b35e13b8f188e380 Mon Sep 17 00:00:00 2001 From: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Date: Thu, 28 Mar 2024 20:03:36 +0900 Subject: [PATCH 05/10] docs: updated tech stack --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index bab14967..39dc2737 100644 --- a/README.md +++ b/README.md @@ -168,10 +168,9 @@ | Library | ![React](https://img.shields.io/badge/React-61DAFB?style=for-the-badge&logo=React&logoColor=black) ![React Query](https://img.shields.io/badge/-React%20Query-FF4154?style=for-the-badge&logo=react%20query&logoColor=white) ![React Hook Form](https://img.shields.io/badge/React%20Hook%20Form-%23EC5990.svg?style=for-the-badge&logo=reacthookform&logoColor=white) | | Programming Language | ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6.svg?style=for-the-badge&logo=TypeScript&logoColor=white) | | Styling | ![Styled Components](https://img.shields.io/badge/styled--components-DB7093?style=for-the-badge&logo=styled-components&logoColor=white) | -| State Management | ![State Management](https://img.shields.io/badge/recoil-f26b00?style=for-the-badge&logo=Recoil) | | Formatting | ![ESLint](https://img.shields.io/badge/ESLint-4B3263?style=for-the-badge&logo=eslint&logoColor=white) ![Prettier](https://img.shields.io/badge/Prettier-F7B93E?style=for-the-badge&logo=prettier&logoColor=white) | | Version Control | ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white) | -| ETC | ![Mock Service Worker Badge](https://img.shields.io/badge/Mock%20Service%20Worker-FF6A33?logo=mockserviceworker&logoColor=fff&style=flat) +| CI/CD | ![GitHub Actions](https://img.shields.io/badge/github%20actions-%232671E5.svg?style=for-the-badge&logo=githubactions&logoColor=white) | | Deployment | ![Vercel](https://img.shields.io/badge/vercel-%23000000.svg?style=for-the-badge&logo=vercel&logoColor=white)

    From 1d1956676eacd45f941f4b3cba7ea2281f5d6faa Mon Sep 17 00:00:00 2001 From: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Date: Thu, 28 Mar 2024 20:07:55 +0900 Subject: [PATCH 06/10] docs: updated website link --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 39dc2737..8580e838 100644 --- a/README.md +++ b/README.md @@ -177,9 +177,9 @@
    -| 배포 페이지 | 데모 페이지 | 노션 페이지 | -| :---: |:---: | :---: | -| 배포 페이지 | 데모 페이지 | 👉 Notion Project 바로가기 | +| 배포 페이지 | 노션 페이지 | +| :---: | :---: | +| 🍭 SWEET 바로가기 | 👉 Notion Project 바로가기 |

    From 941a10d99eb65077e2116af99d509c973e9172bb Mon Sep 17 00:00:00 2001 From: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Date: Fri, 29 Mar 2024 00:09:04 +0900 Subject: [PATCH 07/10] docs: updated wiki --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8580e838..dc8063b9 100644 --- a/README.md +++ b/README.md @@ -190,8 +190,9 @@
    -| 👀 프로젝트 소개 | 🤝 협업 전략 | 🧯 트러블슈팅 | 🧐 더 나은 개발을 위한 논의 모음 | -| :--------------: | :----------: | :--------------------: | :--------------------: -| | | | +| 👀 프로젝트 소개 | 🤝 협업 전략 | 🧯 트러블슈팅 | 🧐 더 나은 개발을 위한 노력 | 🤔 더 나은 선택을 위한 논의 | +| :--------------: | :----------: | :--------------------: | :--------------------: | :--------------------: +| | | | | +
    From 02c3962c4db337f12eed0496a415dd703ed3a671 Mon Sep 17 00:00:00 2001 From: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Date: Sat, 30 Mar 2024 20:54:32 +0900 Subject: [PATCH 08/10] =?UTF-8?q?main=20=3D>=20develop=20=EB=A8=B8?= =?UTF-8?q?=EC=A7=80=20(#512)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * feat: 타이머 컴포넌트 분리 * feat: Step02에서 이미지 파일 자체를 저장 * feat: 타이머 부분 컴포넌트로 분리 * feat: 이미지 파일 formData로 저장 후 PUT * feat: 상위 컴포넌트에서 imageFile props 전달 * feat: POST presigned URL 타입 변경 * feat: 참여자 뷰 타이틀을 받아온 데이터 기반으로 출력 * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * feat: step02 이미지 네임 방식 변경 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * style: 캘린더 가운데 배치 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * feat: 파일이름 파싱 방식 변경 * style: 타이머 위치 조정(수정 필요!!!!!) * feat: 타이머 컴포넌트 인풋 위치 수정 * feat: 중복되는 https를 파싱 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * feat: 파일 이름 파싱 방식 변경 * feat: 참여자 뷰에서 로그인 클릭 시 로그인 수행 * chore: 필요없는 콘솔 제거 * style: 라디오 버튼 width 수정 * style: 안쓰는 코드 제거 * style: step06 이미지 기본값으로 설정 * fix : PUT 403 에러 해결 * fix: refresh token post 수정 * feat: 라디오 버튼 조건문 추가 * style: 스타일 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * chore: 필요없는 코드 제거 * feat: 링크복사를 배포주소로 변경 * feat: step03에 props 전달하여 출력 --------- Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun * fix: 카카오 공유하기 링크 수정 (#231) * [QA] (#234) * feat: 미니 타이머 고치기 * feat: 사진 뜨도록 수정 * feat: 내가 등록한 선물 조건 걸어주기 * feat: 업로드 가능한 이미지 형식 제한 * feat: 완료 버튼 활성화 조건 추가 * feat: 미리보기 수정 * feat: 더미데이터 추가 * chore: 주석처리 * fix: 빌드 에러 해결 * fix: 토너먼트 파람 변경 (#236) * fix: profile image url 수정 * [온보딩] qa 중 (#239) * feat: 카카오 공유하기 시 초대코드로 이동 * feat: imageUrl 빈 문자열로 변경해서 POST * chore: 빌드에러 해결 * fix: router merge 시 수정 된거 복귀 * fix:토너먼트 라우터 수정 (#244) * [QA] 아웃링크 추가 구현, 타이머 수정 (#246) * chore: 불필요한 주석 삭제 * feat: 불필요한 조건문 * feat: 타이머 수정 테스트 * feat: 아이템 아웃링크 구현 * chore: 불필요한 주석 제거 * feat: 아웃링크 연결 * feat: 라우터 연결 * [온보딩] 모바일 폰트 적용 및 색상 적용 (#248) * feat: 라디오 버튼 모바일에서 활성화(왕호은왕천재) * style: 폰트 적용 및 색상 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: 기프트 홈 파람 변경 (#250) * [토너먼트] 아이템 0개이면 0개 화면 예외처리 (#254) * fix: 기프트 홈 파람 변경 * fix: 토너먼트 예외처리 * [온보딩] 지웠던 POST 및 카카오 공유 & 입장 클릭 시 roomId 받아서 navigate 이동 (#257) * feat: 카카오 공유에 props로 넘겨받은 이름 출력 * feat: 실수로 지운 POST 다시 작성 * feat: roomId 상태로 저장 * feat: step05에서 지웠던 post 에서 룸 id 저장 후 다음 스텝 넘기기 * feat: navigate로 roomId 받아서 선물 홈으로 넘김 * [토너먼트] get user roomid 프롭 전달 (#262) * fix: tournament fix * fix: 안쓰는 파일 주석 처리 * feat: 뒤로가기 수정중 * feat: 라우팅 수정 * feat: 빌드 에러 해결 * 초대 & 카카오공유 & 2차 qa (#267) * 깃 충돌 후 폴더 복사 후 새 브랜치 첫 푸쉬 * chore:빌드 에러 해결 * feat: 라우팅 수정 마무리 * feat: 서버통신 수정중 * fix: 빌드 에러 해결중 * feat: presigned url 제거 * fix: QA 적용중 * feat: 스타일 수정 * feat: 버튼 수정 * feat: 기능 수정 * [QA] 토너먼트 스타일 QA 1차 피드백 반영 (#273) * fix: 카카오 공유하기 링크 수정 * feat: 링크복사 baseUrl 수정 * style: 스타일 변경 토너먼트 뷰 * style: app wrapper 변경 및 헤더 * style: 모달창 가격 * fix: 토너먼트 라우터 구조 변경 * feat: 빌드 에러 해결 * feat: 이미지 수정 시 null로 POST * feat: navigate 수정 * feat: 간격 조정 * feat: 빌드 에러 수정 * feat: 디자인 수정 * feat: 디자인 수정 * feat: 초대 링크 수정 * fix: 충돌 해결 후 머지중 * feat: 초대 구현 * Home/Mypage 디자인 qa 진행 완료 (#272) * refactor: type icon 수정 * refactor: footer 수정 * refactor: icon 적용 * refactor: detail view 수정 * refactor: 선물방 뷰 수정 * refactor: 시작 페이지 수정 * refactor: 마이페이지 * refactor: 로딩과 애니메이션 수정 * refactor: gift Room 수정 * fix: build에러 해결 --------- Co-authored-by: Wang HoEun * feat: 이미지 조건 변경 * [온보딩] 스타일 속성 변경 (#278) * feat: 뒤로가기 버튼 제거 * style: qa 반영 오전 5시 18분 * style: 카카오 링크 zindex 추가 * style: 온보딩 스텝 스타일 * fix: 빌드 오류 해결 --------- Co-authored-by: 장정안 * [토너먼트] gifted 속성 받아오기 (#281) * feat:api 업데이트 get User * feat: 라우터 기프티 받아오기 * feat: 뒤로가기 수정 * [온보딩] 온보딩 파이널 뷰 스타일 수정 (#285) * style: 온보딩 파이널 햄버거 추가 & 글자 위치 수정 * style: 투명도 제거 * feat: 스타트 페이지 원래대로 복귀 * [큐에이] 토너먼트 시작 화면 (#287) * chore: 이미지 추가 * style: 토너먼트 카드 스타일 2차 * style: 토너먼트 랭킹 헤더 * style: start 화면 배경 삽입 * fix: 빌드 에러 해결 * 움직이는거 수정 (#289) * refactor: type icon 수정 * refactor: footer 수정 * refactor: icon 적용 * refactor: detail view 수정 * refactor: 선물방 뷰 수정 * refactor: 시작 페이지 수정 * refactor: 마이페이지 * refactor: 로딩과 애니메이션 수정 * refactor: gift Room 수정 * fix: build에러 해결 * refactor: header 수정, 마이페이지 위치 값 수정 * fix: 모바일 움직임 수정 --------- Co-authored-by: Wang HoEun * feat: 네비게이션 수정 * style: 초대 받은 사람 뷰 스타일 수정 * fix: 오타 수정 * fix: 배경 이미지 교체 * fix: 로그인 에러 해결 * fix: 문구 삭제 * fix: 리턴 값 부여 * [리프레쉬 토큰] 리프레쉬 토큰 만료 시 재로그인 (#314) * [Fix] 불필요한 div 삭제 (#294) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun … * [리프레쉬 토큰] reponse data 형식 변경 (#318) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 --------- Co-authored-by: Wang HoEun * [accessToken] api response 형태 관련 수정 (#320) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 --------- Co-authored-by: Wang HoEun * [Token] accessToken 요청 후 refreshToken 재 확인 (#322) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 --------- Co-authored-by: Wang HoEun * [Token] 리프레쉬 토큰 response message 형태 변동 (#324) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 --------- Co-authored-by: Wang HoEun * [refreshToken] 401 status도 조건부에 추가 (#326) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 --------- Co-authored-by: Wang HoEun * [refreshToken] error 메세지로 구분하기 때문에 error. 붙여서 형식 수정 (#328) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 --------- Co-authored-by: Wang HoEun * [refreshToken] axios 에러 일경우 로컬 비우고 재 요청 (#330) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. --------- Co-authored-by: Wang HoEun * [interceptor] 코드 정리 및 / config 형태 변동 (#332) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. * fix: 코드 중복 제거 및 정리 , 메세지에 따른 에러 경우도 분리 * fix: 코드 정리 및 config 형태 변동 --------- Co-authored-by: Wang HoEun * refactor: local 내부 svg 파일 확인 후 삭제 (#335) Co-authored-by: Wang HoEun * [로그인 유지 + refreshToken 재발급] 코드리뷰를 위한 pr (#334) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. * fix: 코드 중복 제거 및 정리 , 메세지에 따른 에러 경우도 분리 * fix: 코드 정리 및 config 형태 변동 * fix: 코드 정리 및 config 형태 변동 * feat: 일단 token 없이 url 이동 시 무조건 start로 가게 해둠. 추후 error 페이지 도출 예정 --------- Co-authored-by: Wang HoEun * [로컬로그인] production 모드와 development 모드 구분 하여 로그인 가능하도록 (#341) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 --------- Co-authored-by: Wang HoEun * [시작페이지] fixed view (#336) * fix: max width 값 지정하여 움직이지 않도록 함. svg 때문에 width100%가 안 먹고 있었다. * refactor: style 코드가 아닌, svg 파일 자체의 width 값 지정 (고정값) --------- Co-authored-by: Wang HoEun * [토너먼트 인트로] 토너먼트 전체 네이밍 및 인트로 예외처리 (#340) * fix: TournamentNew 폴더 -> Tournament 이름 변경 * style: mixin 대입 * fix : 토너먼트 컨데이너 -> 토너먼트 인트로 컨테이너 이름 변경 * feat: 토너먼트 선물 0개 일 때 예외 처리 * fix: 페이지/Tournament 폴더 생성 * chore: tournamentOngoing 파일 안쓰는거 제거 * style: mixin 추가 * [시작페이지] 코드 관심사의 분리 (#338) * refactor: scroll 애니메이션 코드 분리 및 애니메이션 폴더 생성 * refactor: 첫번째 선물 애니메이션 코드 분리 및 start style 페이지 정리 * refactor: footer position Footer의 고정값으로 수정 * refactor: 시작페이지 고정 버튼 코드분리 * style: start button 주석 삭제 * style: start button 컴포넌트 명 변경 * fix: 글로벌 스타일에서 margin 0 없앰 --------- Co-authored-by: Wang HoEun * [상태관리] recoil 삭제 (#346) * fix: recoil 폴더 삭제 및 recoil root 삭제 * refactor: recoil 패키지 의존성 제거 --------- Co-authored-by: Wang HoEun * [로컬 로그인] 기존 닫힌 review를 위한 pr (링크 확인 부탁 드립니다.) (#345) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 * style: 주석 지우기 * fix: 마이페이지 get 요청 도중 token 인식 실패문제 해결 * fix: 로그아웃 시 alert 창 뜨는거 수정 --------- Co-authored-by: Wang HoEun * [로컬 로그인] local redirect uri 숨기기 (#351) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 * style: 주석 지우기 * fix: 마이페이지 get 요청 도중 token 인식 실패문제 해결 * fix: 로그아웃 시 alert 창 뜨는거 수정 * fix: local redirect uri 수정 --------- Co-authored-by: Wang HoEun * [선물 등록, 선물방 편집] 리액트 쿼리 관련 데이터 실시간 업데이트 문제 해결 (#339) * refactor: 불필요한 주석 제거 및 푸터 컴포넌트 내 onSuccess 제거 * refactor: 불필요한 props 제거 * feat: 임시로 광고 숨김 * fix: invalidated queries to refetch fresh data * fix: 멤버 삭제 기능 수정 * fix: 파라미터 수정 * refactor: 에러 메시지 출력되도록 수정 * fix: 개설자 프로필 이미지 뜨도록 수정 * fix: 개설자 이미지 뜨도록 이름 수정 * fix: roomId 가져오는 방식 수정 * chore: 안 쓰는 import 주석 처리 * refactor: 주석 삭제 * refactor: 화살표 함수로 복구 * refactor: useQueryData로 변경 * [로그인] 로그인 에러 페이지 (#349) * feat: 카카오 로그인 에러 시 페이지 이동 * fix: 지민언니 addgiftfooter 부분 filename 삭제 --------- Co-authored-by: Wang HoEun * [시작페이지+header] 애니메이션 수정 및 header + layout (#353) * style: 안 쓰이는 mypage header 삭제 * refactor: start 페이지와 mypage header가 들어간 layout 생성 및 적용 * feat: header icon 변경 및 style 코드 정리 * refactor: mypage header 수정 및 start header 분리 + router 속 layout 수정 * style: start 페이지 속 tournament json 파일 추가 * refactor: 채팅 animation 각자 개별로 떨어트려두기로 수정 * fix: 새로 추가된 svg icon mypage와 home2 안쓰는 import문 삭제 후 빌드에러 해결 * fix: 안쓰는 import 문 삭제 * fix: 지민 언니 부분 안쓰는 filename 변수 삭제 * feat: 로그인 에러페이지 header layout적용 --------- Co-authored-by: Wang HoEun * [선물 등록] PresignedUrl로 선물 등록되도록 수정 & 커스텀 훅 분리 (#347) * feat: 이미지 주소를 파일로 변환하는 커스텀 훅 생성 * feat: 폼 데이터 형식을 put 하는 커스텀 훅 * refactor: 폼데이터 전송으로 수정 * refactor: presignedUrl 관련 코드 다시 추가 * feat: 이미지 put 커스텀훅 * refactor: 사용하지 않는 요소들 삭제 * fix: presignedUrl에 보낼 이미지 주소 파싱 방식 수정 * fix: binary 형식으로 put 하도록 수정 * fix: 오픈그래프 이미지가 아니어도 잘 등록되도록 수정 * chore: 콘솔 삭제 * fix: 일반 이미지 불러지지 않는 버그 해결 * refactor: 선물 등록 서버 통신 코드 커스텀 훅으로 분리 * refactor: 선물 이미지 업로드 커스텀 훅 분리 * refactor: 파일명 파싱 함수 커스텀 훅 분리 * fix: s3 이미지링크 비동기 문제 해결 * fix: 오픈그래프 이미지 사용시 파일명 없는 문제 해결 * fix: invalidateQueries 복구 * refactor: 링크가 없는 경우 presignedUrl 적용 * chore: 사용하지 않는 import 삭제 * chore: 빌드 에러 해결 및 함수형으로 수정 * chore: 빌드 에러 해결 * fix: 온보딩 커스텀 훅 복구 * 온보딩 구조 context API로 변경 & 관심사 분리 & 공통 Title 변경 (#343) * refactor: step01 다음 버튼 텍스트 스타일 공통으로 분리 * refactor: 모든 스텝 버튼 텍스트 스타일 공통으로 분리 * style: 라디오 버튼 onClick 제거 (이미 속성에 정의되어 있음) * feat: 공통 Title 속성 변경 기존에 저희끼리 이야기 나누었던 부분인 띄어쓰기 때문에 Title을 두 번씩 가져다 쓰는게 맞냐는 부분에대해 고민 후 Title의 속성을 PropsWithChildren으로 변경하여 사용하는 곳에서 br태그 사용 가능하도록 변경 * feat: 타이머 인풋창 가려지게 설정 & 아이콘 클릭 시 더이상 인풋창 출력되지 않고 바로 타이머 나오도록 설정 useRef 속성에 showPicker를 알게되어 사용. 그리고 투명도를 0으로 주어 타이머를 가렸습니다 * refactor: Step01 인라인 스타일 제거 * refactor: 온보딩 버튼 구조 수정 버튼 어디에나 공통으로 쓰이는 mixin이 있어 이를 함께 컴포넌트 안으로 묶어주었습니다 * chore: 안쓰는 step01 코드 삭제 * chore: step02 안쓰는 코드/주석제거 * style: 안쓰는 코드 제거 & 스타일 코드 수정 * refactor: step01 타입 Pick으로 변경 * feat: Onboarding context 작성 및 라우터에 Provider 추가 * feat: context에 imageUrl 빈값으로 추가 * feat: step01 인풋 입력 로직 커스텀 훅으로 분리 * feat: OnboardingInfo 타입 지정 * style: 온보딩 버튼 내 '$' 추가 * feat: step01 관심사 분리 완료 * feat: 미리보기 공통 커스텀 훅 작성 * feat: step02 관심사 분리 * refactor: interface 수정 * style: IconWrapper 추가 * feat: step03 관심사 분리 * style : step04 width값 삭제 * style: step04 인라인 스타일 제거를 위한 스타일 코드 추가 * feat: 캘린더 & 타이머 커스텀 훅 추가 * feat: step04 관심사 분리 및 추상화 수준 맞추기 * chore: 쓸모없는 타입 제거 * feat: step04 캘린더 & 타이머 아이콘 클릭의 추상화 정도 일치시키기 * feat: step05 로직 커스텀 훅 분리 * feat: step05 내 시간 선택하는 부분 컴포넌트 분리 * feat: 시간 계산 유틸 함수 작성 후 분리 * style: radio 버튼 '$'추가 * feat: step05 컴포넌트 및 관심사 분리 * chore: 온보딩 최상위 컴포넌트 필요없는 코드 제거 * style: 참여자 뷰에서 햄버거 메뉴 바 선택 시 글자 겹쳐 보이는 현상 수정 * feat: 전체 온보딩 정보를 요약한 정보 속 날짜 계산 로직을 커스텀 훅으로 분리 * refactor: 참여자 뷰 로직 분리 및 Title 구조 수정 * feat: step06 커스텀 훅으로 분리및 step06 필요없는 타입 & props 정리 * refactor: 온보딩 최상위 컴포넌트 상태와 props 정리 * refactor: step01 다른 스텝과 추상화 정도 맞추기 * style: 인라인 스타일 -> styled components로 변경 * chore: 설명주석 추가 & 필요없는 코드 제거 * style: 참여자 뷰 인라인 스타일 코드 -> styled Components로 변경 * chore: 파일명에 공백 제거 * fix: 라우터 속 import 파일명 공백 제거 * chore: 공통 타이틀 주석 제거 * fix: 메뉴바 클릭시 글자 겹쳐 보이는 현상 수정 * chore: 주석 제거 * chore: 필요없는 props type 제거 * style: Wrapper 컨벤션 맞추기 * feat: Content-Type': 'binary'로 변경 * feat: filename & file자체 저장 useState 추가 * feat: binary 파일 형식으로 바꿔주고 PUT하는 커스텀 훅 추가 * refactor: presignedUrl을 받아오는 POST 함수 수정 * feat: presignedUrl 로직 추가 POST로 받아온 presignedUrl, binary형식으로 파일 자체를 담아서 PUT * style: step06일 때는 다른 display 적용 * style: step06 일때 온보딩 버튼 위치 수정 * style: margin-bottom값 변경 * feat: step02 presignedUrl 값 context에 저장 * chore: 필요없는 조건문 및 주석 제거 * feat: 참여자 뷰 GET으로 받아온 값으로 구현 (추후 겹치는 로직 분리) * chore: TODO 주석추가 * style: 온보딩 이미지와 참여자 뷰 이미지 그라데이션 수치 일치화 * chore: 주석 추가 및 todo 추가 * feat: 참여자뷰에서 get받을 때 일반 axios사용으로 변경 * feat: 참여자 뷰 GET response를 data.data 로 변경 * style: 이미지 미리보기 등록 시 수정 아이콘 삽입 * chore: 사용하지 않는 코드 제거 및 todo 추가 * feat: input accept 형식 변경 * feat: 급하게 커스텀 훅 추가(충돌 해결을 위한) * [선물 등록] ContextApi 적용 (#350) * feat: 선물등록 임시저장 위한 context 적용중 * feat: 뒤로가기 시 정보 임시저장을 위한 context 생성 * feat: 뒤로 가기 혹은 다음 버튼 누르면 context 업데이트 * feat: 선물 등록 클릭 시 임시저장 데이터 초기화 * feat: 링크 입력 화면 context 적용 * chore: 머지하면서 사라진 부분 복구 * fix: 오타 수정 * chore: 빌드 에러 해결중 * chore: 빌드 에러 해결 * [토너먼트] 중복자 예외처리 + 토너먼트 로직 분리 (#354) * feat: 랜덤 함수 커스텀 훅 분리 * feat: 토너먼트 로직과 ui 분리 * fix: useGetItem 이름 변경 * fix: useGetItem 에러 임시 처리 * feat: 토너먼트 중복자 예외처리 * chore: 안쓰는 state 제거 * feat: 선물 0 개일 때 조건문 변경 * feat: 개설자 여부에 따라 버튼 출력 * 마이페이지 두번 누르는 이슈 해결 (#358) * feat: 카카오 로그인 에러 시 페이지 이동 * fix: 지민언니 addgiftfooter 부분 filename 삭제 * fix: 마이페이지 안 들어가는 이슈 확인 --------- Co-authored-by: Wang HoEun * fix: 에러페이지 도출 경우 에러 수정 * feat: 라우터 giftee -> gifteeName변경 (#362) * fix: logout instance 생성 후 interceptor 안 걸리게 함 * fix: 안쓰는 post instance import 삭제 * [마이페이지] 코드 리펙토링 (#370) * style: console 삭제 * refactor: logout 버튼 logic 코드 이동 * style: 마이페이지 data 순서 정리 * style: 마이페이지 header 코드 가독성 높이기 * refactor: progressgiftview 코드 정리 * refactor: donegiftview 코드 정리 * style: console 창 삭제 * style: 기존으로 다시 원상복귀.. * fix: logout instance 수정 * fix: loggout 시 스토리지 clear로 변경 * refactor: giftroomview 코드 클린하게 변동 * refactor: detail room 코드 정리 * refactor: mypage view 코드 분리 * style: 안 쓰는 interface 삭제 * refactor: 반복되는 컴포넌트 새로운 const로 생성 * refactor: view 코드 component 분리 map을 더 간단하고 가독성 있게 * style: props 변수 명 수정 및 옵셔널로 반영 * style: 좀 더 정확한 data 네이밍 수정 * style: data 옵셔널이 아닌, undefined로 예외처리 코드로 작성하기 수정 * refactor: React.FC 삭제 --------- Co-authored-by: Wang HoEun * [favicon/og] 파비콘과 오픈그래프 (#368) * feat: og tag 적용하여 썸네일과 설명 적용 * feat: 파비콘 설정 및 apple 아이콘 임의로 설정 --------- Co-authored-by: Wang HoEun * fix: 리프레시 토큰 재요청 경우 모든 에러 케이스 추가 * feat: 모바일에서 카카오 로그인 버튼 안보이는 현상 로직 수정 (#381) useEffect로 isToken을 boolean으로 주고 그에 따른 삼항 연산자로 뷰를 보여주는 로직으로 수정하였습니다. * isToken 기본 값 언디파인드로 변경 (#384) * feat: 모바일에서 카카오 로그인 버튼 안보이는 현상 로직 수정 useEffect로 isToken을 boolean으로 주고 그에 따른 삼항 연산자로 뷰를 보여주는 로직으로 수정하였습니다. * feat: isToken 기본 값을 false에서 undefiend로 변경 * feat: isToken 값 기본으로 false 설정을 제거 (#389) * [온보딩] useEffect 안 조건문 제거(02:36) (#390) * feat: isToken 값 기본으로 false 설정을 제거 * feat: useEffect 안 조건 문 제거 * [호은 1.5차 qa] edit 페이지 뒤로가기 header 추가 / 로그인 시 카카오 프로필 header에 나타남 (#375) * refactor: edit room code 정리 * feat: edit room 에 뒤로 가기 헤더 추가 * feat: 뒤로가기 헤더 layout 생성 후 공통으로 쓸 수 있도록 router 수정 * feat: login 했을때 profile 이미지 localstorage에 저장하고 header 속 프로필 바뀌게 하기 --------- Co-authored-by: Wang HoEun * [1.5차 QA : 토너먼트] 토너먼트 방 종료 버튼 구현 및 중복 참여자 ui 개선 (#378) * feat: 종료하기 기능 구현 * chore: React.FC 지양 * fix: 토너먼트 중복 참여자일 경우 ux 변경 * chore: 안쓰는 import 삭제 * chore: 코드 정리 * fix: 모달창 확인 버튼 마이페이지 이동 * fix: 화살표 함수 지정 * [1.5차 QA] 선물 등록 완료 버튼 관련 버그 수정(기본 이미지 문제, 로딩 뷰 처리) (#393) * fix: 링크 없이 등록 시 모달 안 뜨도록 수정 * fix: 기본 링크 설정에 쉼표 오타 제거 * refactor: 이미지 링크 빈 값 들어가는 에러 해결 * fix: CORS 에러 나면 바로 직접 입력으로 전환 * refactor: onSuccess 중복 제거 * feat: 선물 등록 시 지연 생길 때 로딩뷰 추가 * fix: 로딩 완료 후 바로 선물등록 홈으로 이동되도록 수정 * fix: svg 막고 핸드폰 사진 허용 * [1.5차] 선물등록 스타일 QA (#403) * fix: 미니타이머 아이콘 크기 고정 * fix: input 포커싱 때만 색상 주기 * fix: input 글자색 수정 * fix: 버튼 위치 수정 * fix: UX 라이팅 수정 * fix: 이미지 안 잘리도록 수정 * [1.5차 QA] 선물홈 스타일 QA 반영, 선물등록 모달창 추가 (#401) * fix: 중앙정렬 * fix: 잘리는 글자 해결 * fix: 내가 등록한 선물 스타일 적용 * feat: 삭제 모달 추가 * [시작페이지] style qa 진행 (#376) * refactor: 바뀐start 페이지 속 svg 수정 이후, header 속 svg 수정 * fix: logo header속 아이콘 도 수정 * style: home 아이콘 크기 수정 * fix: 새롭게 바뀐 svg 적용 + 애니메이션 적용을 위한 배경으로 변동 * style: step svg 파일 추가 후 tsx로 변환완료 * feat: 새로운 애니메이션 적용 및, 변경 된 svg 새롭게 적용 scroll animation 모든 부분 * feat: 새로운 tournament animation lottie 적용 * style: header 색상 하얀색으로 변경 * style: navigate 중앙정렬 및 색상 변경 + globalstyle margin 0 auto 추가 * style: 로고 헤더 wrapper 생성 후 중앙정렬 * fix: 화면 밀리는 문제 해결 start page + 애니메이션 속도 조절 * feat: downIcon에도 애니메이션 적용 start page * style: 시작 페이지 사진 width 값 100%으로 수정 첫번째 사진 제외하고 * style: 기존 width 37.5rem 로 변경 시작 첫번째 이미지 * fix: svg 파일 import 문 삭제 * fix: icon 바꾼거 네이밍 변경 적용 merge 시 바뀌게 된 듯 함 * refactor: 변경 된 start 첫번째 사진 svg에서 tsx 생성 * refactor: start 페이지 첫번째 이미지 수정 반영 margin 없음 * refactor: 수정 된 버튼 그라데이션 svg 반영 * feat: 수정한 버튼 그라데이션 코드에 적용 --------- Co-authored-by: Wang HoEun * [마이페이지] style qa를 위한 변경 사항 (#399) * style: 마이페이지 가로 스크롤 안 생기게 수정 및, userbox 중앙정렬 * refactor: mypage 이미지 svg로 변경 * fix: 선물방 마이페이지 사진 크기 가로세로 일정하게 수정 * feat: 선물방 카드 속 이름 길이에 따라 보여지는 style 다르게 하는 코드 작업중 중간 로직 코드 작성 (수정 필요) * fix: 선물방 카드 giftee 님을 위한 선물방 글자수에 맞게 보여지는게 다르게 수정 * feat: user name 색상 pink 6번 으로 수정 * refactor: header 배경 색 맨 위에 있을땐, 투명이었다가, 내릴때부터 하얀색으로 되게 수정 * refactor: 이미지 위치 수정 후, user wrapper 위치도 수정 * fix: UserName 부분 width 100% 빼기 * refactor: edit page 속 명수 색상 변동 적용 * fix: 안쓰는 import 문 svg 속에 있는거 삭제 * fix: mypage header 부분 icon 크기 변동과 gap 삭제 * fix: merge 하며 없어진 style header 속 코드 다시 반영 --------- Co-authored-by: Wang HoEun * [온보딩] 뒤로가기 기능 (#379) * feat: 뒤로가기 아이콘 추가 및 로직 추가 * chore: funnel 훅 폴더 정리 * feat: 온보딩 헤더 뒤로가기 로직 변경 * feat: 미리보기 이미지 전역으로 변경? 뒤로가기 시 미리보기 이미지가 보여지고 있음에도 불구하고 '다음'버튼이 활성화가 되지 않는 현상이 있습니다. 이를 콘솔로그를 통해 살펴보니 미리보기 이미지가 뒤로가기 시에 업로드 되어있지 않다는 판정이 되는 것 같아요 ㅠ 추후 수정하겠습니다 * feat: react.memo로 step02 감싸서 렌더링 방지 * feat: 미리보기 이미지 상태 다시 일반 state로 복귀 * feat: step03 뒤로가기 구현 * feat: step02 미리보기 전역 상태를 일반 state로 복귀 * feat: previewImage 커스텀 훅 안쓰는 코드 정리 * feat: step04 시간 선택 반영 잘되게 수정 * feat: 토너먼트 스케줄 캘린더 담당 커스텀 훅 작성 * feat: 뒤로 가기 시 캘린더 정보 저장(시간은 저장x) * feat: 토너먼트 시작 시간이 없을 시를 대비한 삼항 연산자 사용 * chore: 필요없는 코드 제거 * chore: 필요없는 useEffect 제거 * chore: 필요없는 코드 제거 * fix: 빌드에러 수정 * [온보딩] 썸네일 미리보기 이미지 짤리는 현상 (#395) * feat: svg 확장자는 전부 이미지 업로드 불가하여 accept에서 제거 * feat: 이미지의 크기가 매우 작은 경우를 대비하여 height 100% 설정 * fix: 썸네일 부분 height값 삭제 * feat: 이미지 특정 height 값 이하일 때 미리보기 안되게 구현 * feat: 이미지 최소 height 변경 (추후 논의 필요) * feat: image accept에 heic 추가 * [온보딩]16시 54분 기준 카카오 로그인 강제로 보이게 하여 svg의 문제인지 확인하는 작업 (#413) * feat: 카카오 로그인 조건부처리 없이 강제로 보이는지 확인 * feat: 새로운 도메인으로 변경 * feat: develop 브랜치에서 카카오 로그인 png로 변경 * [토너먼트 랭킹] 공유하기 기본 ui 기능 구현 (#416) * feat: 아이콘 추가 * style: 토너먼트 이미지 가운데 정렬 * chore: 불필요한 console 제거 * feat: 라우터 변경 공통 헤더 사용 * style: 메달 아이콘 변경 * style: 메달 구 아이콘 제거 신 버전 아이콘 업데이트 * style: 랭킹 메달 업데이트 및 랭킹 글자 가운데 정렬 * style: 토너먼트 랭킹 스타일 1.5차 QA * fix: 공유하기 일단 카카오톡 공유하기로 임시 대체 * fix: 빌드 에러 해결 * style: 토너먼트 헤더 반영 * feat: web share API 기능 구현 * [1.5차 QA] 선물 홈 - 토스트 메시지 추가, 헤더 변경, 카운트다운에 따른 네비게이션 (#397) * fix: 타이머 0이 되면 토너먼트 뷰로 이동하기 * fix: 미니 타이머 시간 만료되면 토너먼트로 이동 * fix: 클립보드 복사할 때 / 중복 제거 * refactor: 헤더 변경 * feat: 링크 복사 토스트 메시지 추가 * refactor: 미니타이머 prop 반영 * fix: invalid hook calls 해결 * refactor: 서버 명세 수정 반영 * refactor: 선물등록에 gifteeName 반영 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * [1.5차 QA] 중복 모달 추가 및 스크롤 생기는 이슈 해결 (#421) * feat: 모달 생성 * refactor: gifteeName 적용 * feat: 중복 모달 처리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: state 업데이트 수정 * chore: 빌드 에러 해결 * fix: 직접 입력의 경우에도 중복 모달 작동하도록 수정 * [온보딩] 새롭게 바뀐 step06 (OnboardingFinal) 구현 (#400) * chore: svg 파일 추가 * feat: 시간 포맷팅 유틸함수 수정 * feat: onboardingFinal 컴포넌트 Footer 설정 * feat: 새로운 step06에 적용될 스타일 코드 추가 * feat: 새로운 step06 구현 * refactor: step06 코드 일부 정리 더 깔끔한 코드 분리는 조금만 자고 일어나서 하겠습니다... * fix: 빌드에러 수정 * style: btnRadio에 $ 추가 * feat: 코드리뷰 반영 * [온보딩] 스타일 qa 반영 24.02.23 16:14 기준 (#412) * style: step01 터치영역 늘림 * style: 터치 영역 늘리기 & 인풋창 focus 방지 * fix: 빌드에러 해결 * [온보딩] 새로운 참여자 뷰와 로직 작성 & 온보딩 파이널 전용 헤더 생성 & 토큰 여부에 따른 카카오로그인 버튼 (#418) * feat: 카카오 로그인 버튼 png로 변경하고 조건부 처리하여 올바르게 구현 * feat: svg 파일 추가 * feat: 396브랜치에 있는 onboarding footer 가져오기 * feat: 라우터 상수처리 * feat: 396브랜치에 있는 step06 가져오기 * feat: 날짜 포맷팅 유틸 함수 수정 * feat: 참여자 뷰 새로운 구조로 전체 변경 * style: 온보딩 파이널 & 참여자 뷰 전용 헤더 생성 * style: 참여자 뷰에만 적용될 gifterNumber 관련 스타일 코드 작성 * style: Onboarding Final Footer에 margin-top 추가 * fix: 빌드에러 수정 * feat: 아이폰 공유하기 공용 커스텀 훅 작성 * feat: 올바른 url로 복사를 위한 env 파일 변경 및 '/'추가 (#425) * [시작페이지] 2차 qa 내용 반영입니다 ! (#434) * style: 카카오 로그인 버튼 사이즈 수정 * refactor: 아래아이콘 스크롤에 따라서 애니메이션 적용 * style: 로고 중앙정렬 + header height 100% 로 * style: width 100%로 ! * style: footer 아이콘 간격 수정 * style: header 속 profileImage 모양과 크기 변동 * style: 토너먼트 애니메이션 위치 수정 --------- Co-authored-by: Wang HoEun * fix: 입장하기 버튼 클릭 시 아무 작동없는 문제 해결 (#428) * 공토 컴포넌트 공유를 위한 임시 PR입니다 (#445) * refactor: Delete Modal 공통 컴포넌트화 * feat: 플로팅 버튼에 따라 토스트 위치 변경 * [온보딩] 뒤로가기 시 이미지 미리보기 안보이는 현상 & 유저가 시간먼저 선택 시 발생하는 문제 수정 (#435) * style: step02 미리보기 이미지 위치 수정 * feat: 이미지 파싱 방법 변경 * feat: previewImageInfo 타입 추가 * feat: PreviewImageContext 새롭게 작성 * feat: 기존 OnboardingContext에서 previewImage 관련 로직 삭제 * feat: previewImageInfo Context 적용 * feat: 토스트 메세지 Object.freeze로 분리 * feat: 날짜 먼저 선택하라는 토스트 메세지 추가 * feat: 해당 토스트 메세지 적용 * feat: 뒤로가기 시 선택시간 유지를 위한 context 추가 * feat: 뒤로가기 시 이미 선택되어있는 시간이 존재할 때 날짜 선택 시 현재 시간으로 반영되는 문제 해결 * style: img 태그 styled Components로 분리 * feat: 반복되는 코드 정리(객체형태로 작성) * chore: 토스트 메세지 관리하는 파일 명 변경 * [토너먼트] 2차 QA 스타일 변경사항 (#446) * style: 사이 간격 넓히기 * style: ‘공유하기’ 글씨는 가운데 정렬 높이 변경 * style: 등록된 선물 문구 변경 * style: 상품명 3~5줄 말 줄임표 사용 * chore: 주석제거 * style: 이미지 비율 1:1 * style: 라인두께 2px 변경 * style: 중복 헤더 제거 * [선물 등록] 선물 등록 완료 버튼 활성화 기능 수정 (#450) * fix: 나가면 폼 정보 삭제 * fix: 첫 단계에서만 뒤로가기 시 초기화 * fix: 버튼 활성화 수정 * fix: 뒤로 갔다가 돌아와도 잘 정보 보존되도록 수정 * fix: 이름 잘 반영되도록 수정 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: 아이템 개수에 따라 헤더 구성 변경 (#452) * [온보딩] 2차 스타일 qa & 공유하기 안드로이드 & pc 예외처리 (#447) * feat: 공유 링크 공용 커스텀 훅 수정 * chore: 안쓰는 코드 정리 * style: 수정된 타이틀 라이팅으로 변경 * style: step06 컨테이너 순서 변경 * style: 수정된 라이팅으로 변경 & 조건문 로직 삭제 * chore: 필요없는 코드 제거 * feat: 시간 선택 중 input 색상 P-06으로 변경 & 바깥 클릭 시 or 시간 선택 시 원래대로 * style: x 아이콘 조금 더 오른쪽으로 이동 * chore: 주석제거 * style: margin-top 위치 값 변경 * feat: 특정 step에서 인풋창 클릭 시 가상 키보드 올라오지 않게 구현 * fix: env 파일 수정으로 인한 '/' 제거 * feat: share API를 지원하지 않는 경우에 대한 예외처리(링크복사) * chore: stroke 포함된 empty thumbnail svg 파일 추가 * style: 썸네일 엠티 뷰 svg 변경 * [선물방 메인] 2차 QA 스타일 수정 (#449) * fix: 상하 스크롤 제거 * fix: 문법 수정 * fix: 스크롤바 숨기기 * fix: 간격 조정 * fix: 스타일 수정 * fix: 스타일 수정 * style: gap 통일 반영 * style: 햄버거 바 제거 * style: 스타일 수정 * chore: 빌드 에러 해결중 * chore: 빌드에러 해결중 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * [선물등록] 2차 QA 스타일 수정 적용 (#453) * fix: 이미지 비율 조정 방식 변경 * fix: margin 추가 * fix: 버튼 클릭 시 색상 제거 및 스타일 수정 * fix: object fit cover * [온보딩] 사파리에서 날짜 형식 NaN, undefined 뜨는 현상 수정 (#451) * feat: 사파리 undefined 해결을 위한 TEST 컨테이너 작성 * feat: 안드로이드/pc 공유하기 예외처리 다른 브랜치에서 복붙 * feat: 토스트 메세지 추가 * feat: 사파리 날짜계산 undefined 해결 * chore: 필요없는 코드 제거 * fix: 병합 해결 * fix: 가로 세로 길이 5000px로 변경 * fix: 토너먼트 로직 롤백 (#456) * fix: 링크 입력 이름 추가 (#457) * fix: 이미지 세로길이 최소값 변경 (300px) * [토너먼트] 스타일 수정 (#462) * style : 배경 svg 추가 * style: svg 컴포넌트 배경 적용 * style: 다음 버튼 fixed로 변경 * style: none 트로피 높이 지정 * style: 다음버튼 색상 변경 * style: 이미지 비율 및 border 색상 * chore: 이미지 애러 제거 * chore: 이미지 최적화를 위한 라이브러리 설치 (#468) * style: 사파리 100vh 이슈 * fix: 사파리 100dvh 적용 * style: 토너먼트 결과 vh -> dvh 변경 및 주석 제거 * [선물등록, 선물 홈] 최종 QA 스타일 수정 (#467) * style: 화살표 PC에서도 안 보이도록 수정 * style: 버튼 정렬 * style: 상품 이미지 가로 세로 높이 고정 * style: 뒤로가기 아이콘 업데이트 * fix: svg export 복구 * refactor: warning 해결 * style: 선물홈 배경 이미지 교체 * refactor: 배경이미지를 위해 구조 수정 * chore: 빌드 에러 해결 * [온보딩] 최종qa 스타일 & step04 날짜 연속 수정 시 오류 해결 & 아이폰 공유하기 시 텍스트 같이 복사 해결 (#465) * style: step02 이미지 미리보기 위치 변경 * feat: step02 썸네일 엠티 뷰 위치 변경 * feat: step04 인풋 value 추상화 수준 일치화 * refactor: step04 날짜 연속 변경 시 발생하는 에러 해결 & 조건문 형식 변경 * fix: 공유하기 클릭 시 텍스트도 같이 복사되는 문제해결(아이폰) * fix: 빌드에러 해결 * [선물 등록] 이미지 url 파일 변환 실패 시 선물 등록 사항 초기화되도록 수정 (#480) * fix: 직접 입력 진입 시 무조건 이미지 초기화 * chore: 주석 삭제 * chore: 주석 이동 * [선물홈, 선물등록] 이미지 최적화 진행 (#481) * refactor: 선물 등록시 이미지 용량 압축 * chore: 파일명 변경 * chore: 이미지 교체 * feat: 파일 이름 설정 * chore: 주석 제거 * refactor: 화질 설정 수정 * refactor: skeleton ui 임의 추가 * refactor: 스타일 명시 * [마이페이지,시작페이지] 최종 QA 반영입니다 ! (#471) * refactor: done detail room empty view 중앙정렬 * style: count user gap 적용 * style: margin 조금 더 적용 * feat: 토너먼트 애니메이션 직접 구현 위해 폴더 및 파일 생성 * feat: tournament svg 추가 * feat: touranment 애니메이션 직접 구현 후 적용 X view에 안 보이는 이슈 * fix: 안쓰는 svg import문 삭제 --------- Co-authored-by: Wang HoEun * [토너먼트] 결과 이미지 높이 지정 스타일 (#484) * style: 카드 결과 이미지 높이 지정 * feat: 카카오 공유하기 * [온보딩] 시간 선택 스크롤 바 라이브러리로 교체 & 파일 용량 압축 라이브러리 사용 (#478) * feat: 브랜치 459의 useTournamentScheduleCalendar훅 복붙 * chore: MUI DigitalClock 라이브러리 설치 * chore: 필요없는 콘솔로그 제거 * chore: 타입확인을 위한 콘솔로그 추가 * feat: 시간 선택 스크롤 창 MUI 라이브러리로 변경 * feat: 시간 선택 창 am/pm 제거 * chore: 시간 선택 라이브러리 설치를 위한 react-is@^18.2.0 설치 * feat: 이미지네임 파싱 방법 변경 * feat: image-file-resizer를 위한 타입 수정 * feat: image-file-resizer 사용 시 필요한 타입위해 binary로 변환시켜주는 커스텀 훅 타입 변환 * feat: image-file-resizer 적용 * chore: todo 추가 (추후 타입 지정) * chore: 필요없는 코드 제거 * feat: image/webp 추가 * feat: resizedFile 함수 분리 및 확장자 강제 WEBP로 변경 * fix: resizedFile 함수 안 이미지 최대 길이 값 및 화질 수정 * fix: develop 브랜치와 step02 스타일이 달라서 일치화 * [온보딩] step02 -> step03 넘어갈 때 스켈레톤 ui 적용 (#483) * feat: 이미지 HEIGHT 최대값 10000으로 변경 * feat: Loading 상태 추가 후 일단 스피너로 추가 * chore: 필요없는 주석 및 코드 제거 * feat: step05 로딩 스피너 추가 * fix: 이미지 최대 세로 값 5000px로 변경 * feat: 온보딩 전용 스켈레톤 ui 컴포넌트 구현 * feat: 온보딩 전용 스켈레톤 ui Step02에 적용 * style: 온보딩 스켈레톤 스타일 코드 분리 * [마이페이지] 로그아웃 버튼 클릭 시 모달 나타내기 (#474) * fix: delete modal 확인 버튼 시 clickedItem에 따른 옵서녈 실행 수정 * refactor: 넘겨받는 확인 버튼 멘트 props로 바꾸기 * feat: 로그아웃 모달 추가하기 * fix: 안쓰는 import 문 삭제 * fix: suspense 재 적용 --------- Co-authored-by: Wang HoEun * fix: step04 시간 선택 인풋창 클릭 시 키보드 안올라오게 * fix: step03 인풋창도 키보드 안올라오게 * feat: webp로 이미지 교체 * [온보딩] step01에서 특수문자 입력 안되게 유효성 체크 (#487) * feat: 일반 특수문자 & 아이폰 특수문자 입력 안되게 유효성 체크 * feat: 아이폰 이모티콘도 입력안되게 유효성 체크 추가 * fix: 아이폰 특수문자는 토너먼트 진행 url에 문제없으므로 유효성검사에서 제거 * feat: 토스트 메세지에 특수문자 유효성 검사 추가 * fix: 특수문자 토스트 메세지 자동 닫힘 시간 변경 * [시작페이지] 이미지 최적화 (webP로 형식 변환) (#489) * refactor: webP 변환 부분 적용 / 하지만 하얀색 화면 이슈 수정 필요 * fix: webp 파일 재 변환 후 새롭게 적용 * fix: webp 파일 main02와 main04 png로 수정 후 재 변환. 깨지는 문제 해결 * style: 안쓰는 import 문 삭제 및 주석 삭제 * fix: main03 새롭게 파일 변환 후, 각 파일 height 적절하게 변동 --------- Co-authored-by: Wang HoEun * fix: main 03 이미지 webp 변환 후 적용 (#494) Co-authored-by: Wang HoEun * refactor: heic 변환 처리 추가 (#492) * [온보딩] step05 라디오 버튼 테두리 짤려 보이는 현상 수정 (#495) * feat: step03 인풋 클릭 시 키보드 안올라오게 설정 * style: 라디오 버튼 svg 파일 위치 값 수치 조정 * [온보딩] step02 썸네일 등록 시 아이폰 이미지 확장자(heic) 업로드 안되는 현상 수정 (#497) * chore: heic 변환 라이브러리 설치 * feat: heic 확장자 input으로 받도록 추가 * refactor: 함수 분리 & 고용량 이미지 이슈 예외처리 이미지 업로드가 되는 것을 진행해놓은 상태에서 다시 고용량 이미지를 추가하면 이미지 업로드가 되는 현상이 있어 이를 수정하였습니다. * feat: heic 확장자 업로드 가능하도록 수정 * fix: step02 파일 인풋 대소문자 구분x로 인해 확장자 하나 삭제 * chore: 콘솔로그 제거 * [마이페이지] 선물방으로 이동 버튼 기능 추가 (#501) * feat: 선물방 생성으로 이동 navigate 추가 * fix: empty view 공통 컴포넌트화 * fix: 안쓰는 import 문 삭제. 공통컴포넌트화 하며 생겼다. --------- Co-authored-by: Wang HoEun * [시작페이지] 이미지 화질 수정 (#504) * fix: 파일 webp 변환 다시 해보기. 화질 수정 * fix: 파일 명 수정 --------- Co-authored-by: Wang HoEun * [토너먼트] 강제종료 (#508) * feat: 선물방 강제 종료하기 API * chore: 선물방 아이디 콘솔 출력 * feat: 선물 삭제 api * [공통] vercel analytics, speed-insights 적용 (#511) * chore: installed vercel analytics and speed-insights * chore: import 수정 --------- Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: 장정안 Co-authored-by: imeureka --- package.json | 2 ++ src/App.tsx | 4 +++ .../TournamentDeleteButton.tsx | 12 +++---- .../Intro/TournamentIntroContainer.tsx | 17 ++++++--- .../queries/tournament/useDeleteRoom.tsx | 36 +++++++++++++++++++ yarn.lock | 17 +++++++++ 6 files changed, 78 insertions(+), 10 deletions(-) create mode 100644 src/hooks/queries/tournament/useDeleteRoom.tsx diff --git a/package.json b/package.json index ccbdacb2..65db18af 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,8 @@ "@mui/x-date-pickers": "^6.19.6", "@tanstack/react-query": "^5.17.0", "@types/styled-components": "^5.1.34", + "@vercel/analytics": "^1.2.2", + "@vercel/speed-insights": "^1.0.10", "axios": "^1.6.5", "date-fns": "^3.2.0", "dayjs": "^1.11.10", diff --git a/src/App.tsx b/src/App.tsx index c1a4e0af..273d864f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,6 +8,8 @@ import { ErrorBoundary } from 'react-error-boundary'; import FallbackUI from './pages/FallbackUI/FallbackUI'; import 'react-toastify/dist/ReactToastify.css'; import { StyledToastContainer } from './style/toast.style'; +import { Analytics } from '@vercel/analytics/react'; +import { SpeedInsights } from '@vercel/speed-insights/react'; import * as S from './App.style'; function App() { @@ -21,6 +23,8 @@ function App() { reset()} FallbackComponent={FallbackUI}> }> + + void; +interface TournamentDeleteButtonProps { + onClick: (roomId: number) => void; + roomId: number; // roomId를 props로 받음 } -const TournamentDeleteButton = ({ onClick }: TournamentStartButtonProps) => { +const TournamentDeleteButton = ({ onClick, roomId }: TournamentDeleteButtonProps) => { return ( { backgroundColor: '#FF2176', border: 'none', }} - onClick={onClick} + onClick={() => onClick(roomId)} // props로 받은 roomId를 사용 > 선물방 종료하기 @@ -23,4 +23,4 @@ const TournamentDeleteButton = ({ onClick }: TournamentStartButtonProps) => { ); }; -export default TournamentDeleteButton; \ No newline at end of file +export default TournamentDeleteButton; diff --git a/src/components/Tournament/Intro/TournamentIntroContainer.tsx b/src/components/Tournament/Intro/TournamentIntroContainer.tsx index f92ffe0d..babd4725 100644 --- a/src/components/Tournament/Intro/TournamentIntroContainer.tsx +++ b/src/components/Tournament/Intro/TournamentIntroContainer.tsx @@ -13,20 +13,23 @@ import { GiftData } from '../../../types/tournament'; import TournamentDeleteButton from './TournamentDeleteButton/TournamentDeleteButton'; import { useNavigate } from 'react-router-dom'; import Modal from '../../common/Modal/Modal'; +import useDeleteRoom from '../../../hooks/queries/tournament/useDeleteRoom'; const TournamentIntroContainer = () => { const navigate = useNavigate(); const params = useParams(); const giftee = params.giftee; + const roomIdString = params.roomId || ''; const roomId = parseInt(roomIdString || '', 10); + const memberData = useGetItem({ roomId: Number(roomId) }); let tournamentData: GiftData[] = []; + const { mutation } = useDeleteRoom({ roomId: Number(roomId) }); + const { showTournamentContainer, handleStartClick } = useTournament(); - const handleClearRoom = () => { - navigate(`/mypage`); - }; + const handleClearRoom = () => {}; if (typeof memberData === 'string') { console.log('Error :', memberData); @@ -42,6 +45,12 @@ const TournamentIntroContainer = () => { console.log(tournamentData); } + const handleClickConfirmDeleteBtn = (roomId: number) => { + // console.log('룸디는 : ' + roomId); + mutation.mutate(roomId); + navigate(`/mypage`); + }; + return ( <> {showTournamentContainer ? ( @@ -55,7 +64,7 @@ const TournamentIntroContainer = () => { - + ) : ( <> diff --git a/src/hooks/queries/tournament/useDeleteRoom.tsx b/src/hooks/queries/tournament/useDeleteRoom.tsx new file mode 100644 index 00000000..c48516c4 --- /dev/null +++ b/src/hooks/queries/tournament/useDeleteRoom.tsx @@ -0,0 +1,36 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { post } from '../../../apis/client'; + +export const MY_TOURNAMENT_QUERY_KEY: string[] = ['myRoomData']; + +export async function deleteRoom(roomId: number) { + await post(`/gift/tournament-end/${roomId}`); +} + +// export const deleteRoom = async (roomId: number): Promise => { +// try { +// const response = await post(`/gift/tournament-end/${roomId}`); +// return response; +// } catch (error) { +// return '중복입니다'; +// } +// }; +export const useDeleteRoom = ({ roomId }: { roomId: number }) => { + const queryClient = useQueryClient(); + + const mutation: any = useMutation({ + mutationFn: deleteRoom, + onSuccess() { + console.log('선물 삭제 성공'); + queryClient.invalidateQueries({ queryKey: [MY_TOURNAMENT_QUERY_KEY[0], roomId] }); + }, + onError: (error) => { + console.log('삭제에러:' + roomId); + console.log('선물 삭제 중 에러가 발생했습니다.', error.message); + }, + }); + + return { mutation }; +}; + +export default useDeleteRoom; diff --git a/yarn.lock b/yarn.lock index 01e58e7f..ed98d341 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2020,6 +2020,18 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== +"@vercel/analytics@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vercel/analytics/-/analytics-1.2.2.tgz#715d8f203a170c06ba36b363e03b048c03060d5d" + integrity sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A== + dependencies: + server-only "^0.0.1" + +"@vercel/speed-insights@^1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@vercel/speed-insights/-/speed-insights-1.0.10.tgz#2e2e6a16beff72cbb58fd59ea8deb18f7338a014" + integrity sha512-4uzdKB0RW6Ff2FkzshzjZ+RlJfLPxgm/00i0XXgxfMPhwnnsk92YgtqsxT9OcPLdJUyVU1DqFlSWWjIQMPkh0g== + "@vitejs/plugin-react@^4.2.1": version "4.2.1" resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz#744d8e4fcb120fc3dbaa471dadd3483f5a304bb9" @@ -4781,6 +4793,11 @@ semver@^7.5.4: dependencies: lru-cache "^6.0.0" +server-only@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/server-only/-/server-only-0.0.1.tgz#0f366bb6afb618c37c9255a314535dc412cd1c9e" + integrity sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA== + set-function-length@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" From 0e3f26ae940178f9bf86f6995c176ef323d46e91 Mon Sep 17 00:00:00 2001 From: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Date: Sun, 31 Mar 2024 11:15:39 +0900 Subject: [PATCH 09/10] docs: updated link address --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dc8063b9..575c7f80 100644 --- a/README.md +++ b/README.md @@ -192,7 +192,7 @@ | 👀 프로젝트 소개 | 🤝 협업 전략 | 🧯 트러블슈팅 | 🧐 더 나은 개발을 위한 노력 | 🤔 더 나은 선택을 위한 논의 | | :--------------: | :----------: | :--------------------: | :--------------------: | :--------------------: -| | | | | +| | | | |
    From fd4e6fbe440a266776f504644b287439b029246a Mon Sep 17 00:00:00 2001 From: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Date: Fri, 19 Apr 2024 15:28:22 +0900 Subject: [PATCH 10/10] =?UTF-8?q?Develop=EC=97=90=EC=84=9C=20main=20merge?= =?UTF-8?q?=20(ga=20=EC=8A=A4=EC=9C=97=20=EC=9D=B4=EB=A9=94=EC=9D=BC?= =?UTF-8?q?=EB=A1=9C)=20(#516)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * feat: 타이머 컴포넌트 분리 * feat: Step02에서 이미지 파일 자체를 저장 * feat: 타이머 부분 컴포넌트로 분리 * feat: 이미지 파일 formData로 저장 후 PUT * feat: 상위 컴포넌트에서 imageFile props 전달 * feat: POST presigned URL 타입 변경 * feat: 참여자 뷰 타이틀을 받아온 데이터 기반으로 출력 * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * feat: step02 이미지 네임 방식 변경 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * style: 캘린더 가운데 배치 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * feat: 파일이름 파싱 방식 변경 * style: 타이머 위치 조정(수정 필요!!!!!) * feat: 타이머 컴포넌트 인풋 위치 수정 * feat: 중복되는 https를 파싱 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * feat: 파일 이름 파싱 방식 변경 * feat: 참여자 뷰에서 로그인 클릭 시 로그인 수행 * chore: 필요없는 콘솔 제거 * style: 라디오 버튼 width 수정 * style: 안쓰는 코드 제거 * style: step06 이미지 기본값으로 설정 * fix : PUT 403 에러 해결 * fix: refresh token post 수정 * feat: 라디오 버튼 조건문 추가 * style: 스타일 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * chore: 필요없는 코드 제거 * feat: 링크복사를 배포주소로 변경 * feat: step03에 props 전달하여 출력 --------- Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun * fix: 카카오 공유하기 링크 수정 (#231) * [QA] (#234) * feat: 미니 타이머 고치기 * feat: 사진 뜨도록 수정 * feat: 내가 등록한 선물 조건 걸어주기 * feat: 업로드 가능한 이미지 형식 제한 * feat: 완료 버튼 활성화 조건 추가 * feat: 미리보기 수정 * feat: 더미데이터 추가 * chore: 주석처리 * fix: 빌드 에러 해결 * fix: 토너먼트 파람 변경 (#236) * fix: profile image url 수정 * [온보딩] qa 중 (#239) * feat: 카카오 공유하기 시 초대코드로 이동 * feat: imageUrl 빈 문자열로 변경해서 POST * chore: 빌드에러 해결 * fix: router merge 시 수정 된거 복귀 * fix:토너먼트 라우터 수정 (#244) * [QA] 아웃링크 추가 구현, 타이머 수정 (#246) * chore: 불필요한 주석 삭제 * feat: 불필요한 조건문 * feat: 타이머 수정 테스트 * feat: 아이템 아웃링크 구현 * chore: 불필요한 주석 제거 * feat: 아웃링크 연결 * feat: 라우터 연결 * [온보딩] 모바일 폰트 적용 및 색상 적용 (#248) * feat: 라디오 버튼 모바일에서 활성화(왕호은왕천재) * style: 폰트 적용 및 색상 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: 기프트 홈 파람 변경 (#250) * [토너먼트] 아이템 0개이면 0개 화면 예외처리 (#254) * fix: 기프트 홈 파람 변경 * fix: 토너먼트 예외처리 * [온보딩] 지웠던 POST 및 카카오 공유 & 입장 클릭 시 roomId 받아서 navigate 이동 (#257) * feat: 카카오 공유에 props로 넘겨받은 이름 출력 * feat: 실수로 지운 POST 다시 작성 * feat: roomId 상태로 저장 * feat: step05에서 지웠던 post 에서 룸 id 저장 후 다음 스텝 넘기기 * feat: navigate로 roomId 받아서 선물 홈으로 넘김 * [토너먼트] get user roomid 프롭 전달 (#262) * fix: tournament fix * fix: 안쓰는 파일 주석 처리 * feat: 뒤로가기 수정중 * feat: 라우팅 수정 * feat: 빌드 에러 해결 * 초대 & 카카오공유 & 2차 qa (#267) * 깃 충돌 후 폴더 복사 후 새 브랜치 첫 푸쉬 * chore:빌드 에러 해결 * feat: 라우팅 수정 마무리 * feat: 서버통신 수정중 * fix: 빌드 에러 해결중 * feat: presigned url 제거 * fix: QA 적용중 * feat: 스타일 수정 * feat: 버튼 수정 * feat: 기능 수정 * [QA] 토너먼트 스타일 QA 1차 피드백 반영 (#273) * fix: 카카오 공유하기 링크 수정 * feat: 링크복사 baseUrl 수정 * style: 스타일 변경 토너먼트 뷰 * style: app wrapper 변경 및 헤더 * style: 모달창 가격 * fix: 토너먼트 라우터 구조 변경 * feat: 빌드 에러 해결 * feat: 이미지 수정 시 null로 POST * feat: navigate 수정 * feat: 간격 조정 * feat: 빌드 에러 수정 * feat: 디자인 수정 * feat: 디자인 수정 * feat: 초대 링크 수정 * fix: 충돌 해결 후 머지중 * feat: 초대 구현 * Home/Mypage 디자인 qa 진행 완료 (#272) * refactor: type icon 수정 * refactor: footer 수정 * refactor: icon 적용 * refactor: detail view 수정 * refactor: 선물방 뷰 수정 * refactor: 시작 페이지 수정 * refactor: 마이페이지 * refactor: 로딩과 애니메이션 수정 * refactor: gift Room 수정 * fix: build에러 해결 --------- Co-authored-by: Wang HoEun * feat: 이미지 조건 변경 * [온보딩] 스타일 속성 변경 (#278) * feat: 뒤로가기 버튼 제거 * style: qa 반영 오전 5시 18분 * style: 카카오 링크 zindex 추가 * style: 온보딩 스텝 스타일 * fix: 빌드 오류 해결 --------- Co-authored-by: 장정안 * [토너먼트] gifted 속성 받아오기 (#281) * feat:api 업데이트 get User * feat: 라우터 기프티 받아오기 * feat: 뒤로가기 수정 * [온보딩] 온보딩 파이널 뷰 스타일 수정 (#285) * style: 온보딩 파이널 햄버거 추가 & 글자 위치 수정 * style: 투명도 제거 * feat: 스타트 페이지 원래대로 복귀 * [큐에이] 토너먼트 시작 화면 (#287) * chore: 이미지 추가 * style: 토너먼트 카드 스타일 2차 * style: 토너먼트 랭킹 헤더 * style: start 화면 배경 삽입 * fix: 빌드 에러 해결 * 움직이는거 수정 (#289) * refactor: type icon 수정 * refactor: footer 수정 * refactor: icon 적용 * refactor: detail view 수정 * refactor: 선물방 뷰 수정 * refactor: 시작 페이지 수정 * refactor: 마이페이지 * refactor: 로딩과 애니메이션 수정 * refactor: gift Room 수정 * fix: build에러 해결 * refactor: header 수정, 마이페이지 위치 값 수정 * fix: 모바일 움직임 수정 --------- Co-authored-by: Wang HoEun * feat: 네비게이션 수정 * style: 초대 받은 사람 뷰 스타일 수정 * fix: 오타 수정 * fix: 배경 이미지 교체 * fix: 로그인 에러 해결 * fix: 문구 삭제 * fix: 리턴 값 부여 * [리프레쉬 토큰] 리프레쉬 토큰 만료 시 재로그인 (#314) * [Fix] 불필요한 div 삭제 (#294) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun * [선물 등록] 선물 등록하기 화면 POST api 에러 해결 (#166) * feat: 비동기 처리 고려해서 link 값 전달되도록 수정 * feat: POST 성공 후 navigate 에러 해결 * feat: 광고 더미 수정 * feat: 빌드 에러 해결 * [토너먼트] outlink 보러가기 기능 구현 및 스타일 수정 (#173) * feat: onClick 시 외부 링크 이동 * feat: 더보기 버튼 없으면 링크 보이지 않기 * style: 보러가기 스타일 수정 * [홈페이지, 마이페이지] props drilling main (#175) * feat: 온보딩으로 이동 * feat: navigate date에 따라서 구분 + roomId 넘겨주기 * fix: 로그인 임시 부분 주석 처리 --------- Co-authored-by: Wang HoEun * [토너먼트] 리프레쉬 아이콘 작동 및 스타일 수정 (#178) * feat: 리프레쉬 함수 구현 * feat: 타입 수정 및 onClick 프롭 추가 * style: 리프레쉬 아이콘 스타일 수정 * style: 확인을 위해 type any로 바꾸기 * fix: memberToken 주석 처리 * fix: 원상태로 복귀 * fix: 주석 처리 * feat: local에 저장 * fix: 안쓰는 애들 삭제 * fix: localstorage에 저장 * fix: data 구조 수정 * [토너먼트] 다음버튼 활성화, 타이머 세팅, 다시하기 버튼 구현 (#182) * feat: 버튼 활성화 처리 * feat: 타이머 업데이트 * chore: timer text 변경 * feat: 다시하기 reload() 처리인데, 룸 아이디 잘 들어갈지 모르겠음 * fix: 안쓰는 커스텀 스타일 수정 * [온보딩] step06 퍼널로 복귀 & 로직 완료 & 참여자 뷰 구현 (#184) * chore: svg 파일추가 * chore: svg 파일 추가 * style: 초대 마감 뷰 구현 * feat: 초대 마감 뷰 라우터 처리 * feat: kakao 공유하기 커스텀 훅 작성 * feat: kakao 공유하기 useEffect로 구현 * style: 스타일 코드 props에 $ 추가로 에러 해결 * style: 스타일 코드에 기간 Period 추가 * feat: 선물 전달일 당일 출력 완료 * style: 데드라인 페이지 스타일 코드 분리 * feat: 데드라인 페이지에서 버튼 클릭 시 홈으로 이동 * feat: 온보딩 결과 페이지 라우터 처리 * style: 온보딩 헤더 패딩 삭제 * feat: 기존 step06 다시 퍼널로 복귀 * feat: step05에서 다음 클릭 시 invitationCode 저장후 step06로 연결 * feat: step06에서 result페이지 주소 복사 * feat: 참여자의 뷰 구현 & GET 받아오기 * feat: 카카오 로그인 클릭 시 홈으로 이동 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * feat: 로컬 비우는 버튼 생성 * fix: 토큰 존재 여부 함수 생성 * fix: 로그인 오류 수정 * [선물등록, 선물홈] 타이머 수정, 뒤로 가기 구현 (#190) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * [선물홈]내가 고른 선물 구현 (#191) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * [상세 페이지]delete api (#192) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 --------- Co-authored-by: Wang HoEun * feat: 수정하기 버튼 등장 조건 추가 * feat: 햄버거 바 메뉴 (#194) * [토너먼트] 토너먼트 화면 스타일 리팩토링 (#196) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * [전체]클립보드 복사 및 자잘한 수정 (#200) * feat: 선물 홈 뒤로가기 버튼 * feat: 뒤로가기 구현 * feat: 뒤로가기 구현 * feat: 불필요한 파일 제거 * feat: 링크가 유효하지 않을 때 라우팅 연결 * feat: 입력창 숫자일 때 화살표 안 뜨게 * feat: 선물 상태바 구현 * feat: 미니 타이머 기능 수정 * feat: api 수정 반영 * Feat/#185 copy link (#201) * feat: 링크 복사 구현 * feat: 내가 등록한 선물 구현 * feat: 내가 고른 선물 구현 * fix: 불필요한 코드 삭제 * fix: 빌드에러 해결 * fix: 빌드에러 해결 * feat: 버튼 이벤트 적용 * Refactor/#164 tournament result layout (#202) * feat: header 토너먼트 구현 * feat: header 토너먼트 구현 * chore: 주석 제거 * style: padding 2rem 추가 및 랭킹에 헤더 구현 * style: 토너먼트 배경 및 헤더 재배치 * style: 아이템 info 패딩 값 * feat: 결과 헤더 및 패딩값 조절 * style: 토너먼트 인트로 헤더 조절 * feat: 아이템 총 개수 인트로 화면 표시 * style: 폰트 컬러 변경 * chore: 아이콘 추가 * feat: 아이템 없을 때 예외처리 * chore: 구문 분리 * feat: 라운드 세트 수 로직 추가 * style: 랭킹 아이콘 및 카카오 버튼 구현 * style: 버튼 폰트 컬러 및 색상 * [시작 페이지] start view 오류 해결 (#205) * fix: 로그인 오류 수정 * fix: start 2번째 사진 수정 * fix: start 화면 뷰 다르게 하기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 오류 수정 (#207) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 * fix: api url 수정 * feat: mutation 로직 코드 수정 * fix: component 랜더링 방식 수정 * fix: 로그인 오류 수정 * fix: 안쓰는 것들 정리 * fix: 리프레쉬 토큰 재 설정 * fix: 로그인 부분 main 코드로 변경 * feat: 온보딩으로 이동 --------- Co-authored-by: Wang HoEun * 리프레쉬 토큰 재 수정 (#210) * fix: 로그인 오류 수정 * fix: 토큰 재요청 --------- Co-authored-by: Wang HoEun * Fix/#209 refresh token re (#213) * fix: 로그인 오류 수정 * fix: 토큰 재요청 * fix: param으로 넘기는거로 수정 * fix: start 페이지 수정 --------- Co-authored-by: Wang HoEun * fix: 기호 삭제하기 * fix: editpage도 수정 * fix: 안 쓰는 import 수정 * fix: 리액트 쿼리로 되돌림 get method * fix: param 방법으로 바꾸기 * fix: 안쓰는 import 문 * fix: data 구조 수정 * fix: param으로 다 수정 * fix:giftee 없애기 * fix: type부분 분류 + refresh 토큰 * style: home으로 이동 삭제 * fix: token data 구조 수정 * fix: 리프레쉬 토큰 api 수정 * fix: 리프레쉬 토큰 body 공유 * fix: refresh token post 수정 * [마이페이지] 헤더 구현 (#212) * feat: header 마이페이지 및 홈 구현 * fix : 롤백 * fix: api access token 없이 (#226) * fix: mypage view 수정 * [온보딩] 자잘한 qa들 (미완) (#229) * [공통컴포넌트] 모달창 구현 (#80) * feat: 모달창 구현 * feat: modal 버튼 함수 프롭 전달 * style: 스타일 속성 순서 * style: 단위 변경 * [토너먼트] 토너먼트 플로우 화면 퍼블리싱 (#72) * feat: 토너먼트 공통 버튼 도입 * docs: 토너먼트 컨테이너 폴더변경 * style: 토너먼트 패딩 값 변경 * feat: 공통 컴포넌트 시작하기 버튼 구현 * feat: 시작하기 버튼 후 라운드 시작 로직 구현! * chore: 네이밍 오타 수정 * style: 스타일 코드 분리 * feat: btn_next - border 지우기 * style: theme 토너먼트 폰트 추가 * docs: 폴더 이동 * style: 토너먼트 카드 스타일 분리 * style: 토너먼트 카드 스타일 분리 * style: 스타일 속성 순서 * feat: 토너먼트 footer 컴포넌트 구현 * feat: 토너먼트 title 컴포넌트 구현 * style: 폴더 구조 이동 * chore: 아이콘 이미지 추가 * chore: 아이콘 추가 * feat: 토너먼트 불필요한 div 삭제 * feat: 더보기 아이콘 추가 링크 * style: 이전 버튼 패딩 값 조절 * feat: 새로고침 아이콘 추가 * feat: header 임시 높이 조정 * fix: 빌드 오류 아이콘 수정 * style: 가운데 정렬 * style: rem 폰트 변경 * [기능 구현] kakao login (#85) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * feat: Login 페이지 생성 * style: style코드 mixin으로 변경 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * feat: query key 세팅 및 instance 생성 (type 수정 필요) * chore: axios 설치 * refactor: queryKeys 파일 삭제 * feat: react-query user login api 코드 작성 * feat: Login 로직 코드와 서버 연결 코드 작성 * fix: baseurl import 수정 및 code queryString 으로 구현 * style: 안 쓰는 코드 정리 및 로직 코드 정리 * fix: 안 쓰는 import문 삭제 * fix: 안쓰는 import 문 삭제 * fix: strict mode 지우기 * fix: method 변경 및 console.log 작성 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * fix: strict mode 삭제 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: localstorage에 token 저장 * feat: localstorage 에 token 저장 * fix: console.log로 찍어보기 * fix: data type 구현 * fix: localstorage에 토큰 저장 * fix: 안쓰는 css 파일 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [토너먼트] 토너먼트 결과 화면 퍼블리싱 (#82) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * docs: 폴더명 대문자 변경 * fix: 토너먼트 컨테이너 충동 해결 * fix: 빌드 오류 해결 * [토너먼트] 최종 순위 확인 뷰 퍼블리싱 (#86) * feat: 토너먼트 컴포넌트 폴더 구조 * feat: 토너먼트 결과 화면 카드 컴포넌트 구현 * feat: 토너먼트 타이틀 컴포넌트 * feat: 토너먼트 결과 레이아웃 컴포넌트 * feat: 토너먼트 결과 footer 컴포넌트 * feat: 토너먼트 유저 현황 미니타이머 컴포넌트 구현 * feat: 토너먼트 footer 영역 구현 * feat: 공통 컴포넌트 수정 * style: 공통 버튼 수정 및 footer 색 변경 * chore: 메달아이콘 추가 * feat: 토너먼트 랭킹 화면 타이틀 작업 * feat: 토너먼트 랭킹 순위 아이템 컴포넌트 구현 * feat: 토너먼트 랭킹 페이지 구현 * feat: price 공통 컴포넌트 구현 * style: 공통 priceTag 적용 * fix: 이미지 아이콘 오류 해결 * fix: 안쓰는 아이콘 제거 * fix: 폴더 구조 변경 import * [토너먼트] 대소문자 변경 파일 변경 (#95) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * fix: 토너먼트 대소문자 변경 * fix: 대소문자 파일 변경 Tournament * fix: onBoarding 대소문자 변경 * fix: Onboarding -> OnBoarding 변경 * fix: onboardingSteps 로 변경 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> * [선물 등록 페이지] 내가 등록한 선물 페이지 UI 구현 (#65) * feat: 임시로 선물 등록 테스트 페이지 추가 * feat: 선물 링크 등록 테스트 임시로 기능 구현 * feat: 내가 추가한 선물 페이지 UI 구현중 * feat: 라우터에 페이지 임시 추가 * style: 이미지 어셋 추가 * feat: 내가 추가한 선물 페이지 UI 구현 * feat: 선물 등록하기 뷰 구현 * feat: 내가 등록한 선물 뷰 UI 구현 * chore: 화살표 함수로 수정 * feat: 내가 등록한 선물 컴포넌트 분리 * chore: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: rem 단위로 수정 * [최신화] 기존 브랜치에서 새로운 브랜치로 코드 복붙 (#97) * fix: 디벨롭에서 새로운 브랜치를 파서 step05까지의 코드 복붙 * fix: step06까지 복붙 완료 * [선물홈] 선물홈 UI 구현 (#91) * feat: 선물 홈 라우터 연결 * feat: GiftHome 상단 컴포넌트 구현중 * feat: theme 수정 반영 * feat: 선물홈 상단 애니메이션 제외 UI 구현 * chore: countdown flip animation 라이브러리 설치 * feat: 선물홈 하단 '친구가 등록한 선물' UI 구현 * style: 선물홈 친구, 2030 공통 스타일 생성 * style: 전체 패딩 0으로 설정 * style: 선물홈 2030, 친구 부분 공통 스타일 구현 * feat: 선물홈 2030, 친구 UI 구현 * feat: haeder, footer 제거 * style: 타이머 폰트 추가 * style: svg 파일 추가 * feat: 카운트다운 카드 컴포넌트 분리 * fix: 빌드 에러 해결 * feat: 타이머 컴포넌트 생성 * feat: 아이콘 추가 * feat: 공통 스타일 분리 * feat: 컴포넌트 분리 * feat: 더미 데이터 추가 * fix: 빌드 에러 해결 * [선물 등록하기] 링크 등록 플로우 내가 등록한 선물 제외 UI 구현 완료 (#93) * feat: 높이 설정 추가 * feat: 공통 버튼 테두리 없애기 * feat: 다음 버튼 따로 구현 * feat: 입력창 뷰 구현 * feat: 링크 입력 화면 UI 구현 * feat: 다음 버튼 활성화 수정 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 있을 때 선물 등록 UI 구현 * feat: 링크 없을 때 UI 구현 * feat: header, footer 제거 * feat: 직접 입력 화면 UI 구현 * feat: 링크 없이 입력 버튼 연결 * feat: 첫번째 링크 입력 화면 UI 수정 * feat: 폴더구조 정리 및 공통 컴포넌트 분리 * feat: 상단 선물 바 위치 조건 추가 * feat: 썸네일 컴포넌트 분리 * feat: 가격은 삭제 아이콘 안 뜨도록 수정 * feat: input padding 추가 * feat: 페이지 레이아웃 분리 * fix: 빌드 에러 해결 * [선물 홈, 선물 등록] 전반적인 뷰 수정 및 플로우 연결 (#100) * style: 불필요한 파일 제거 * feat: 선물홈 헤더 추가 * style: 오타 수정 및 커서 포인터 설정 * feat: 플로팅 버튼 구현 * feat: 헤더 및 버튼 구현 * feat: 페이지 연결 * style: 아이콘 추가 * style: 북마크 이미지 추가 * feat: 플로우 연결 * feat: 모달 추가 * chore: 빌드 에러 해결 위해서 불필요한 코드 추가 * feat: 라우터 중복 수정 * fix: 빌드 에러 해결중 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * [마이페이지] 뷰 작업 + Card Component 제작 (#92) * chore: 이슈 템플릿 추가 * chore: 이슈 템플릿 수정 * [초기세팅] 초기세팅 main으로 합치기 (#49) * chore: 이슈 템플릿 추가 * add: 프로젝트 생성 * init: 의존성 모듈 설치 * docs: 풀리퀘 템플릿 추가 * feat: PR 시 임시배포 구현 * feat: 자동 배포 workflow 구현 * chore: 버전 수정 * chore: 오타 수정 * chore: 설명 주석 추가 * [초기세팅] eslint 설정 및 prettier 설정 (#14) * chore: eslint 설정 및 prettier 설정 * fix: node true 추가 * fix: 중복 singleQuote 설정 제거 --------- Co-authored-by: Wang HoEun * [초기세팅] GlobalStyle 작성 (#7) * add: styled-component 설치 * feat: meta 태그 수정 * feat: setScreenSize 유틸 함수 작성 * feat: GlobalStyle 작성 * feat: App.tsx 내 GlobalStyle과 GlobalEvent 구현 * chore: styled-reset 라이브러리 설치 * fix: reset 라이브러리 설치로 GlobalStyle 수정 * feat: vw관련 설정 추가 * [초기세팅] Formatting 파일 구조 및 라우팅 설정 (#8) * feat: 라우팅 대쉬보드 생성 * feat: 라우터 설정 * feat: app 파일 routerProvider 적용 * feat: 폴더구조 세팅 * chore: 라우터 패키지 추가 * chore: 라우터 패키지 추가 * [초기세팅] husky 설정 및 lint staged 설정 (#15) * chore: husky 설정 및 lint staged 설정 * feat: husky commitlint 설정 * merge change --------- Co-authored-by: Wang HoEun * [초기세팅] recoil 설치 및 파일 설정 (#17) * feat: recoil 설치 및 파일 설정 * feat: RecoilRoot 설정 * chore: react-router-dom 선언 인식 문제 위해 재 설치 --------- Co-authored-by: Wang HoEun * feat: react-query 설치 및 세팅 및 key 파일 생성 (#18) Co-authored-by: Wang HoEun * [초기세팅] svgr 설치 / open-graph (#16) * chore: svgr 설치 * chore: open graph 라이브러리 설치 * chore: vite svgr 세팅 및 custom 파일 생성 * style: yarn svgr 치니까 tsx 파일로 변동 완료. --------- Co-authored-by: Wang HoEun * [초기세팅] Github Actions 수정(Vercel 배포 연결, preview 수정) (#25) * [초기세팅] 자주 사용하는 속성들 mixin 설정 (#23) * feat: mixin 설정 공통적으로 많이 쓰일 수 있는 flexBox,inlineFlexBox,flexCenter 를 먼저 설정하였음. 추후에 디자인이 나오면 더 추가시킬 예정입니다(ex.애니메이션) * feat: mixin 불러오기 위한 theme 설정 * feat: Styles 컴포넌트 생성 * feat: App 컴포넌트를 Styles 감싸기 * docs: 리드미 작성 (#24) * 초기세팅/theme 설정 (#37) * feat: theme color 설정 * feat: theme font 설정 * style: colors & fonts에 뎁스 추가 * chore: SUIT font 파일 추가 * feat: font-face 추가 & import 문제 * fix: import 이슈 해결을 위한 중괄호 제거 * fix: 필요하지 않은 파일 및 코드 제거 * [초기세팅] 화면 사이즈 layout 분리 (#28) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * feat: theme fonts, colors 구조 수정 (#43) * [초기세팅] 모바일 리사이징 레이아웃 적용 안되는 이슈 해결 (#45) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * [초기세팅] PR 미리보기 액션 수정 (#39) * feat: 각 PR에 접근할 수 있도록 설정 추가 * feat: 불필요한 설정 제거 * chore: 빌드 에러 해결 * [초기세팅] svgr GUI 아이콘 등록 (#48) * feat: 대쉬보드 레이아웃 변경 및 사이즈 스타일 적용 * feat: app 리사이즈 useEffect 제거 * feat: useEffect 제거 후 스타일 고정 * feat: 레이아웃 커스텀 훅 구현 * feat: 라우터 폴더 구조 변경 * feat: layout 폴더 구조 변경 * fix: 모바일 위드값 적용안되는 이슈 해결 * fix: 함수 호출 변경 * fix: global width값 제거 * docs: setscreensize 파일 삭제 * docs: 아이콘 및 로고 추가 + svgr 변환 * chore: 빌드 에러 처리 --------- Co-authored-by: Wang Hoeun <38005874+hoeun0723@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * fix: strict mode 지우기 * fix: method get으로 수정 * fix: router link 재설정 * fix: 라우터 주소 재 설정 * feat: console 추가 * fix: useEffect 위치 수정 * fix: router 구조 * fix: router browserRouter로 수정 * fix: json vercel 파일 추가 * fix: Router 컴포넌트 수정 * fix: path 수정 * fix: 최신 router로 다시 변경 * fix: 데이터 타입 수정 * fix: local 저장 코드 잠시 주석 * fix: data Type 다시 수정 * fix: 안 쓰는 import 삭제 * feat: 마이페이지 생성 후 배경 이미지 불러오기 * feat: 마이페이지 유저 div 구현 * feat: 선물 방 뷰 없을때 페이지 구현 완료 * feat: 진행 중이지 않은 선물 방 div 태그 생성 * feat: header 라우터 기능 추가 * feat: 컴포넌트 어느정도 구현 완료 하지만 edit 부분 수정 필요 * fix: 버튼 사이즈 merge 후 custom 으로 넘기기 * fix: settings 위치 수정 * refactor: setting icon 위치 수정 * fix: tag 수정 * feat: 색상 변동 된거 적용 * style: type3 수정 및 margin 주기 * feat: 종료된 선물방 컴포넌트 구현 및 수정 페이지 구현 * feat: detail page router 적용 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: Wang HoEun Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> * [선물 등록] 버튼 조건에 맞게 활성화, 광고 삭제 기능 구현 (#106) * feat: 버튼 비활성화 속성 추가 * feat: input 조건에 따른 버튼 활성화 수정 * fix: 스타일 props $ 추가 * feat: 광고 삭제 기능 구현 * feat: 아이콘 교체 * fix: 빌드 에러 해결 * [마이페이지] react-query 데이터 패칭 방식 예시 코드 작성 (#107) * style: Wrapper 컨벤션 맞추기 * feat: mypage 데이터 패칭 react query hooks 작성,아직 테스트 전 * feat: 임시 token 저장 과정 코드 작성 * fix: react-query 받아오는 코드 수정 , 추후 mypage 받아오는 부분 undefined 해결 필요 * feat: react-query api mypage에서 불러오기 * refactor: 폴더명 변경 * refactor: 안쓰는 import 문 삭제 및 navigate 코드 주석 * fix: 안쓰는 import 문 정리 --------- Co-authored-by: Wang HoEun * [토너먼트] 라운딩 로직 및 부전승 처리 (#111) * style: 인트로 시작 버튼 변경 * chore: 이미지 추가 * feat: 목업데이터 설정 * feat: 아이템 카드 적용 * feat: 토너먼트 랜덤 아이템 함수 * feat: 라우터 안쓰는 페이지 제거 * faet: 레이아웃 헤더 삭제 * feat: 데이터 개수 반영 * feat: 1라운드 로직 구현 * feat: 랜덤 세트 형성 로직 구현 + 훅 분리 * feat: 목업데이터 형성 * feat: 다음 버튼 구현 * feat: 불필요한 주석 제거 * feat: 선택되면 일단 선택 체크 성공 * feat: 라우터 변경 * feat: 토너먼트 인트로 컴포넌트 프롭 수정 * feat: 토너먼트 라운딩 로직 구현 * feat: 토너먼트 푸터, 타이틀 프롭 변경 * feat: 결과 제출 프롭 설정 * chore: 배경 이미지 추가 * chore: 배경 추가 * feat: 토너먼트 선택 아이템 저장 후 프롭 전달 * feat: 토너먼트 결과 화면 프롭 전달 받기 * feat: 헤더 삭제 * chore: 배경 이미지 설정 * feat: 토너먼트 부전승 처리 * chore: 토너먼트 플로우 컨테이너 주석처리 * chore: 빌드 오류 해결 * fix: 프롭 전달 삭제 빌드 오류 해결 * chore: 로직 의심 주석 추가 * [선물홈, 선물등록, 세부페이지] api 타입 및 hooks 파일 생성 (#114) * feat: 선물홈 메인 get 연결 * feat: api 관련 파일 생성 * feat: api types 파일 생성 * feat: GET hooks 생성 * feat: 선물홈 api 연결 * feat: api 관련 커스텀 훅 작성 및 타입 작성 * fix: 오타 수정 * chore: 불필요한 주석 삭제 및 로그 메시지 수정 * fix: url 수정 * [온보딩] 온보딩 POST & 카카오 공유하기 (#110) * feat: 최상위 컴포넌트에서 상태 관리 작성 * chore: app.css index.css 삭제 * feat: step01 유저 입력 값 저장 * feat: step03 날짜 값 api명세서 형식에 맞게 상태에 저장 * feat: step02 이미지 url 형식에 맞게 저장 * fix: value가 있을 때 onChange가 없었던 이슈 해결 * chore: 쓰지 않는 router 파일 제거 * style: step05 mixin으로 변경 * style: input 스타일 코드 추가 * chore: TODO 주석 추가 * feat: step05 dateType에 따른 출력 변경 * feat: step04 -05 props 내려 받기 * feat: step04 props 전달 * feat: 날짜 & 시간 선택 시 api명세서 형식에 맞게 출력 및 저장 * feat: 라디오 버튼 온클릭 이벤트 추가 * chore: 쓰지 않는 코드 제거 * feat: step04에서 선택한 날짜와 시간을 step05로 가지고 오기 위한 props 전달 * feat: date-fns 라이브러리 사용하여 선택한 시간 더하기 * feat: 전반적으로 버튼 스타일 props에 $추가 * style: 웹 warning 삭제를 위한 $추가 * feat: step05 시간 업데이트 포매팅 후 저장 * feat: step06 룸 입장 콘솔로그 추가 * feat: 상위 컴포넌트인 온보딩페이지 에서 전체 상태 값 확인 * feat: index.html에 카카오 공유 관련 script 태그 추가 * feat: Window에 Kakao 타입 정의 * feat: 모든 스텝에서 저장한 값들 step6로 props 전달 * feat: 카카오 공유하기 기능 추가 * feat: 헤더 토큰 확인을 위한 client.ts export 추가 * feat: 온보딩 타입 지정 * feat: step05 useMutation post 구현 * feat: 라디오 버튼 props 추가 * feat: 온보딩 post 커스텀 훅으로 분리 * chore: 쓰지 않는 코드 제거 * chore: 빌드 에러 수정 * feat: 이미지 미리보기 구현 시 files[0]의 null값 대비 if문 구현 * chore: 빌드 에러 해결 * chore: 필요없는 주석 제거 * feat: 헤더에 토큰 이슈를 위한 useEffect 주석처리 * feat: timerOpen 삼항연산자로 변경 * [토너먼트] 토너먼트 선물 리스트 조회 API (#117) * feat: useTournament 훅 로직 수정 * feat: giftData 타입 설정 * feat: 토너먼트 선물 리스트 조회 API * feat: 토너먼트 데이터 패칭 * fix: 빌드 오류 TournamentFlowContainer 프롭 추가 * feat: post tournament 10개 로직 * feat: api post 인스턴스 생성 및 타입 설정 * feat: 부전승 결과 처리랑 짝수 결과 처리 나눔 * feat: 타입 변경 * fix: 안쓰는 state 제거 * [선물홈, 선물세부, 선물등록] gifthome detail api (#124) * feat: 선물홈 api 연결 후 값 반영 * feat: 서버통신 훅 수정 * feat: 데이터 타입 수정 * feat: 세부페이지 연결 * feat: 선물 홈 연결 * feat: 내가 등록한 선물 api 연결 * feat: 내가 등록한 선물 api 연결 * feat: 선물 등록 post api 연결 * feat: props 수정 * chore: 에러 해결 * feat: 등록 상품 개수에 따라 다르게 화면 이동 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * feat: 빌드 에러 해결 * [마이페이지] api 연결 후 기능 구현 (#125) * refactor: 호출 코드 변경 * style: 스타일 코드 간편화 * feat: data 존재 여부에 따른 view 전환 * feat: cardRoom에 data 전달 하지만 오류 남. 해결 필요 * feat: 선물방 존재여부에 따른 0번째 1번째 카드 호출 * feat: detail page 데이터 호출 성공 * feat: room member api 연결 코드 작성 * feat: editroom api 기능 구현 완료 삭제 기능 구현 필요 * style: detail view wrap roomId 넘어주기와 폴더명 변경 * feat: done detail room roomwrapper wrap 추가 * fix: delte mutation 코드 수정 * style: delete 코드 정리 오류 나는 거 해결 필요 * feat: 안쓰는 import 문 삭제 + login 토큰 부분 주석 처리 * fix: 안 쓰는 코드 주석 처리 --------- Co-authored-by: Wang HoEun * Refactor/#88 tournament layout (#126) * chore: icon 추가 * feat: 시작하기 버튼 가운데 정렬 * style: text 글자 가운데 정렬 * [로딩 과 에러] 로딩 페이지와 에러 페이지 (#127) * style: 임시 코드 설정 * feat: Loading 페이지 생성 * feat: lottie 설치 후 적용 * refactor: suspensequery로 수정 * feat: errorboundary 설정 * fix: 안 쓰는 import 문 삭제 * fix: 기존 코드 대로 되돌림. token 부분 --------- Co-authored-by: Wang HoEun * [토너먼트] 유저, 시간 그리고 부전승 로직 수정 (#128) * feat: 토너먼트 참여유저 및 종료 시간 받아오기 * feat: 토너먼트 참여유저 및 종료 시간 user 컴포넌트에 전달 * feat: get API 인스턴스 생성 * feat: get member data 받아오기 데이터 수정 * feat: modal 오픈 * style : 모달창 닫고 결과 화면 바꾸기 * feat: 부전승 처리 로직 * feat: 토너먼트 랜덤 로직 추가 * fix: useSuspenseQuery로 변경 빌드 에러 해결 * fix: useQuery 안쓰는 거 제거 * [토너먼트] 토너먼트 최종 결과 조회 API (#130) * style: 최종 순위 확인 화면 스타일 수정 및 이미지 추가 * feat: 토너먼트 랭킹 get API 쿼리 훅 생성 * feat: 토너먼트 useGetRanking api 호출 * feat: 토너먼트 카드 프롭 전달 * feat: 기프트 랭킹 아이템 타입 설정 * [시작페이지] start page 애니메이션 컴포넌트 (#129) * feat: main 이미지 몇개 넣기 * feat: 사진 불러오기 * feat: 애니메이션 component 화 후 적용 * style: login 부분 주석 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#131) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * [토너먼트] 랭킹 화면 API 데이터 패칭 (#140) * chore: 아이콘 추가 * feat: API GET 메달 랭킹에 따라 변경 * feat: 메달 인덱스 추가 * feat: router 설정 * feat: 링크 복사 구현 * feat: 이미지 공유하기 (url png 안됨) * [토너먼트] 다음 버튼 로직 구현 및 이미지 불러오기 (#138) * feat: 다음버튼 활성화 * feat: 다음버튼 구현 * chore: props type convert * feat: select 로직 수정 및 이미지 프롭 추가 * [시작페이지,마이페이지] header, footer (#141) * feat: start header 생성 * feat: 이전 버튼이 들어 있는 detail page 속 header 구현 * refactor: mypage header fixed * feat: footer 구현 * feat: footer link 이동 * feat: sidebar 나오게 * fix: 안쓰는 import 문 삭제 * fix: import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] presigned-url 로 이미지 업로드 후 모든 온보딩 정보를 모아서 POST (#121) * feat: 이슈번호 #99와 동일하게 복붙 * feat: presignedUrl post 커스텀 훅 작성 * feat: OnboardingInfo type 이름 api 명세서에 맞게 변경 * feat: etc 폴더 내에 타입들 지정 * feat: step05 에서 presigned Url post 보내는 로직 일부 구현 * feat: files null값 대비 조건문 작성 * feat: presigned url 확인 위한 콘솔 추가 * feat: step02 props 추가 * feat: 온보딩 최상위 컴포넌트에 presigned url 저장할 수 있는 state 추가 * feat: presigned Url post 작성 * feat: step02 fileName 확인 위한 콘솔 로그 추가 * feat: step05 presigned url 받기 위한 fileName 이름 확인 콘솔 추가 * feat: presignedUrl POST 훅 파라미터 수정 * feat: presignedUrl 쿼리 파라미터 제거 후 추출 * feat: type 추가 & post 주소 url 변경 * feat: presignedUrl 관련 로직 함수 분리 * feat: 온보딩 페이지 step05 props 수정 * feat: PUT 메서드 커스텀 훅 작성 * feat: step05에 모든 온보딩정보 props 전달 * feat: step05에서 다음 버튼 클릭 시 presigned url PUT 함수 호출 * feat: imageUrl에 올바르게 저장되지 않는 현상 수정 * feat: updateOnBoardingInfo 안에 imageUrl 스프레드 문법으로 추가 * chore: 빌드에러 수정 * feat: step06 렌더링 확인 useEffect * feat: Get 커스텀 훅 작성 * feat: POST 함수 내에서 invitationCode 추출 * feat: 초대 코드 저장할 상태 최상위 컴포넌트에 추가 * feat: post 커스텀 훅에 초대 코드 return 받게 수정 * feat: step05에 초대코드 저장 * feat: POST 커스텀 훅 안에 GET 호출하여 순서대로 STEP05에서 진행 * feat: presigned-url 삼항 연산자 사용 * feat: response.data 알맞은 곳에 출력 * feat: presigned Url 엠티뷰 props * feat: presignedUrl로 스타일 태그 수정 * feat: 기본 엠티 뷰 presigned Url (해결 x) * feat: 피그마 형식에 맞게 step06 날짜 출력 * feat: Step06 상위 컴포넌트로 이동 -> 라우터 분리 * feat: step06 상위 컴포넌트로 구조 이동 * feat: 온보딩 버튼 onclick 이벤트 추가 * feat: useNavigate로 props 전달 * feat: filename 존재 여부에 따라 post put 다르게 출력 * feat: step06 에서 마지막 초대코드 POST 커스텀 훅 작성 * feat: POST와 GET을 콜백으로 넘겨줬던 코드를 다시 원래대로 분리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * chore: 빌드에러 해결 * feat: POST 커스텀 훅 안에 invitationCode 추가 * chore:확인용 콘솔로그들 추가 * feat: POST 커스텀 훅 내에 useState 추가 * feat:Step05 내에서 초대코드 상태에 저장 * feat: GET 커스텀 훅 내에 null값일 경우 조건문 추가 * feat: Step06 GET 받아오기 구현 * feat: POST 커스텀 훅 리턴 값 수정 * feat: 입장 버튼 클릭 시 Post 커스텀 훅 구현 * feat: 커스텀 훅을 Step06에서 사용하여 POST * feat: 온보딩 버튼에 disabled 추가 * feat: 라디오 버튼 선택해야만 다음 버튼 활성화 * style: step06인 온보딩 파이널의 헤더 구현(햄버거만 있는것) * feat: 온보딩 포스트 커스텀 훅 작성 * style: 온보딩 파이널 컴포넌트에 헤더 추가 * feat: 온보딩 파이널의 최종 POST 커스텀 훅 구현 * style: 온보딩헤더 props 수정 * chore: response 추가 * chore: 콘솔로그 추가 * chore: 필요없는 코드 제거 * style: 모든 온보딩 헤더 수정 * feat: client.ts 제네릭 수정 * style: 온보딩 페이지 헤더 구현 * chore: 콘솔로그 추가 * feat: step06 날짜 출력 boolean 값 추가 * feat: 온보딩 post 커스텀 훅 타입 지정 * feat: 첫번 째 스텝만 뒤로가기 구현 * [로그아웃/리프레쉬토큰] Logout / RefreshToken (#145) * feat: logout 코드 작성 * feat: refreshToken재발급 코드 작성 완료 * feat: 로그아웃 구현 * fix: import 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 링크복사 함수 커스텀 훅 분리 (#142) * style: 이미지 공유 함수 버튼 삭제 및 스타일 분리 * feat: 링크 복사 커스텀 훅 분리 * [선물등록] 미니타이머 구현, presigned url (#147) * feat: presignedUrl 적용 및 POST까지 연결 * feat: 데이터 삭제 시 바로 반영 * feat: 상품 등록 완료 버튼 조건부 활성화 추가 * style: 배경 이미지 추가 * feat: 타이머 숫자 형태 수정 * style: 배경 이미지 추가 * feat: 가격 포맷팅 * chore: 데이터 타입 수정 * feat: 빌드 에러 해결중 * feat: 빌드 에러 해결중 * [선물홈, 선물등록] 선물 링크 유효성 검사 api 연결, 타이머 기능 구현 마무리 (#149) * feat: 오픈그래프 post 구현중 * feat: 오픈그래프 post 연결 * feat: 친구들이 등록한 선물 연결 * feat: 오픈그래프 정보에 따른 플로우 구현 * feat: 카운트다운 타이머 구현 * feat: 미니타이머 연결 * feat: 미니타이머 타입 수정 * feat: 타입 수정 * feat: 미니타이머 추가 * feat: 타이머 수정 * chore: 빌드 에러 해결 * fix: 빌드 에러 해결 * fix: 빌드 에러 해결 * Delete public/motions/motion_02.json motion 파일 삭제 * [시작 페이지] start page (#151) * feat: start 페이지 코드 복사붙여넣기 * feat: animation 코드 복사 붙여넣기 * fix: 안쓰는 로그인 문 주석 처리 * fix: 안쓰는import 문 삭제 --------- Co-authored-by: Wang HoEun * [커스텀훅] 카카오톡 공유하기 기능 (#155) * chore: json 파일 푸쉬 * feat: 카카오 공유하기 리액트 자체구현 * feat: 카카오 공유 API utils * feat: 토너먼트 env 파일 변경 * [시작페이지] start page final (#154) * refactor: 화면 위치 조절 * fix: footer 위치 수정 * fix: 안 쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [온보딩] 링크 복사 & 선물전달일과 토너먼트 시작 날짜 계산 (#156) * feat: step06 링크복사 구현 * feat: useQuery를 useSuspense로 변경 * feat: 선물 전달일 당일인지 아닌지에 따라 다르게 로직 구현(미완) * style: 라디오 버튼 props 추가 * style: 공통 Title customStyle제거 * chore: 빌드 에러 해결 * [선물 등록, 선물 홈] presignedUrl, 가격 포맷팅, 링크 가져오기, 미니타이머 (#157) * feat: presignedUrl Post, GET 에러 해결 * feat: 선물 등록 POST 에러 해결중 * feat: 가격 포맷팅 * feat: 선물 등록 POST 에러 해결중 * feat: 빌드 에러 해결 * [마이페이지] roomId query string으로 넘기기 (#162) * feat: roomId 넘어가는 문제 해결 * fix: 코드 수정했지만 여전히 오류남 * feat: delete 코드 작성 * fix: react-query delete 문법 바꿔보기 * fix: 안쓰는 import 문 삭제 --------- Co-authored-by: Wang HoEun * [공통] 폰트 적용 및 토너먼트 타이머 시도 (#163) * feat: router prop 변경 * style: 글자 정렬 변경 * feat: 인덱스 타이틀 스윗 수정 * style: font link 연결 * fix: 빌드 에러 해결 * Feat/#161 props drilling ranking (#165) * feat: navigate 추가 * feat: query string으로 param 넘기기 * feat: useLocation 코드 작성 * feat: query string으로 받아오는 값 코드 작성 * fix: 로그인 버튼 보이게 함 * fix: 버튼 보이게 수정 * fix: & 로 수정 * fix: start 뷰 relative * fix: 옵서널 파라미터로 수정 * fix: null 값 처리 재 배치 * fix: null 값 처리 재 배치 --------- Co-authored-by: Wang HoEun * [마이페이지] 아이콘 변경 (#160) * feat: 새로운 아이콘 넣기 * feat: bottom 값 추가 --------- Co-authored-by: Wang HoEun … * [리프레쉬 토큰] reponse data 형식 변경 (#318) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 --------- Co-authored-by: Wang HoEun * [accessToken] api response 형태 관련 수정 (#320) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 --------- Co-authored-by: Wang HoEun * [Token] accessToken 요청 후 refreshToken 재 확인 (#322) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 --------- Co-authored-by: Wang HoEun * [Token] 리프레쉬 토큰 response message 형태 변동 (#324) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 --------- Co-authored-by: Wang HoEun * [refreshToken] 401 status도 조건부에 추가 (#326) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 --------- Co-authored-by: Wang HoEun * [refreshToken] error 메세지로 구분하기 때문에 error. 붙여서 형식 수정 (#328) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 --------- Co-authored-by: Wang HoEun * [refreshToken] axios 에러 일경우 로컬 비우고 재 요청 (#330) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. --------- Co-authored-by: Wang HoEun * [interceptor] 코드 정리 및 / config 형태 변동 (#332) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. * fix: 코드 중복 제거 및 정리 , 메세지에 따른 에러 경우도 분리 * fix: 코드 정리 및 config 형태 변동 --------- Co-authored-by: Wang HoEun * refactor: local 내부 svg 파일 확인 후 삭제 (#335) Co-authored-by: Wang HoEun * [로그인 유지 + refreshToken 재발급] 코드리뷰를 위한 pr (#334) * fix: 리프레쉬 토큰 만료 여부를 msg로 판단. localstorage 삭제 재로그인 * fix: interceptor 확인을 위한 console.log 작성 * fix: interceptor 하나 삭제 * fix: response data 형식 수정 * fix: 이번엔 api 요청 관련 response 형태 수정 * refactor: 에러 코드 확인을 위해 response 관련 코드 추가 * style: api 요청 response 찍히게 하기 * fix: accessToken 인증 시 refreshToken 체크 추가 * fix: msg 형태 변동 * fix: error status 도 refreshToken 에 넣기 and로 묶음 * fix: error 형식 수정 * fix: 401 에러가 난 경우가 아닌, 모든 에러에 대해서 리프레쉬 토큰을 삭제하도록 했다. * fix: 코드 중복 제거 및 정리 , 메세지에 따른 에러 경우도 분리 * fix: 코드 정리 및 config 형태 변동 * fix: 코드 정리 및 config 형태 변동 * feat: 일단 token 없이 url 이동 시 무조건 start로 가게 해둠. 추후 error 페이지 도출 예정 --------- Co-authored-by: Wang HoEun * [로컬로그인] production 모드와 development 모드 구분 하여 로그인 가능하도록 (#341) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 --------- Co-authored-by: Wang HoEun * [시작페이지] fixed view (#336) * fix: max width 값 지정하여 움직이지 않도록 함. svg 때문에 width100%가 안 먹고 있었다. * refactor: style 코드가 아닌, svg 파일 자체의 width 값 지정 (고정값) --------- Co-authored-by: Wang HoEun * [토너먼트 인트로] 토너먼트 전체 네이밍 및 인트로 예외처리 (#340) * fix: TournamentNew 폴더 -> Tournament 이름 변경 * style: mixin 대입 * fix : 토너먼트 컨데이너 -> 토너먼트 인트로 컨테이너 이름 변경 * feat: 토너먼트 선물 0개 일 때 예외 처리 * fix: 페이지/Tournament 폴더 생성 * chore: tournamentOngoing 파일 안쓰는거 제거 * style: mixin 추가 * [시작페이지] 코드 관심사의 분리 (#338) * refactor: scroll 애니메이션 코드 분리 및 애니메이션 폴더 생성 * refactor: 첫번째 선물 애니메이션 코드 분리 및 start style 페이지 정리 * refactor: footer position Footer의 고정값으로 수정 * refactor: 시작페이지 고정 버튼 코드분리 * style: start button 주석 삭제 * style: start button 컴포넌트 명 변경 * fix: 글로벌 스타일에서 margin 0 없앰 --------- Co-authored-by: Wang HoEun * [상태관리] recoil 삭제 (#346) * fix: recoil 폴더 삭제 및 recoil root 삭제 * refactor: recoil 패키지 의존성 제거 --------- Co-authored-by: Wang HoEun * [로컬 로그인] 기존 닫힌 review를 위한 pr (링크 확인 부탁 드립니다.) (#345) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 * style: 주석 지우기 * fix: 마이페이지 get 요청 도중 token 인식 실패문제 해결 * fix: 로그아웃 시 alert 창 뜨는거 수정 --------- Co-authored-by: Wang HoEun * [로컬 로그인] local redirect uri 숨기기 (#351) * feat: request interceptor 생성 후 alert 창 만듦 * refactor: redirect url 확인을 위해 local로 수정 후 start 페이지 주석 정리 * style: instance 명 수정. authInstance는 오로지 로그인 시에만 이용 ! 나머지 header가 클린한 instance는 cleanHeaderInstance * refactor: 실행 모드에 따른 header 값 수정 및 redirectUrl 반영 * style: 주석 지우기 * fix: 마이페이지 get 요청 도중 token 인식 실패문제 해결 * fix: 로그아웃 시 alert 창 뜨는거 수정 * fix: local redirect uri 수정 --------- Co-authored-by: Wang HoEun * [선물 등록, 선물방 편집] 리액트 쿼리 관련 데이터 실시간 업데이트 문제 해결 (#339) * refactor: 불필요한 주석 제거 및 푸터 컴포넌트 내 onSuccess 제거 * refactor: 불필요한 props 제거 * feat: 임시로 광고 숨김 * fix: invalidated queries to refetch fresh data * fix: 멤버 삭제 기능 수정 * fix: 파라미터 수정 * refactor: 에러 메시지 출력되도록 수정 * fix: 개설자 프로필 이미지 뜨도록 수정 * fix: 개설자 이미지 뜨도록 이름 수정 * fix: roomId 가져오는 방식 수정 * chore: 안 쓰는 import 주석 처리 * refactor: 주석 삭제 * refactor: 화살표 함수로 복구 * refactor: useQueryData로 변경 * [로그인] 로그인 에러 페이지 (#349) * feat: 카카오 로그인 에러 시 페이지 이동 * fix: 지민언니 addgiftfooter 부분 filename 삭제 --------- Co-authored-by: Wang HoEun * [시작페이지+header] 애니메이션 수정 및 header + layout (#353) * style: 안 쓰이는 mypage header 삭제 * refactor: start 페이지와 mypage header가 들어간 layout 생성 및 적용 * feat: header icon 변경 및 style 코드 정리 * refactor: mypage header 수정 및 start header 분리 + router 속 layout 수정 * style: start 페이지 속 tournament json 파일 추가 * refactor: 채팅 animation 각자 개별로 떨어트려두기로 수정 * fix: 새로 추가된 svg icon mypage와 home2 안쓰는 import문 삭제 후 빌드에러 해결 * fix: 안쓰는 import 문 삭제 * fix: 지민 언니 부분 안쓰는 filename 변수 삭제 * feat: 로그인 에러페이지 header layout적용 --------- Co-authored-by: Wang HoEun * [선물 등록] PresignedUrl로 선물 등록되도록 수정 & 커스텀 훅 분리 (#347) * feat: 이미지 주소를 파일로 변환하는 커스텀 훅 생성 * feat: 폼 데이터 형식을 put 하는 커스텀 훅 * refactor: 폼데이터 전송으로 수정 * refactor: presignedUrl 관련 코드 다시 추가 * feat: 이미지 put 커스텀훅 * refactor: 사용하지 않는 요소들 삭제 * fix: presignedUrl에 보낼 이미지 주소 파싱 방식 수정 * fix: binary 형식으로 put 하도록 수정 * fix: 오픈그래프 이미지가 아니어도 잘 등록되도록 수정 * chore: 콘솔 삭제 * fix: 일반 이미지 불러지지 않는 버그 해결 * refactor: 선물 등록 서버 통신 코드 커스텀 훅으로 분리 * refactor: 선물 이미지 업로드 커스텀 훅 분리 * refactor: 파일명 파싱 함수 커스텀 훅 분리 * fix: s3 이미지링크 비동기 문제 해결 * fix: 오픈그래프 이미지 사용시 파일명 없는 문제 해결 * fix: invalidateQueries 복구 * refactor: 링크가 없는 경우 presignedUrl 적용 * chore: 사용하지 않는 import 삭제 * chore: 빌드 에러 해결 및 함수형으로 수정 * chore: 빌드 에러 해결 * fix: 온보딩 커스텀 훅 복구 * 온보딩 구조 context API로 변경 & 관심사 분리 & 공통 Title 변경 (#343) * refactor: step01 다음 버튼 텍스트 스타일 공통으로 분리 * refactor: 모든 스텝 버튼 텍스트 스타일 공통으로 분리 * style: 라디오 버튼 onClick 제거 (이미 속성에 정의되어 있음) * feat: 공통 Title 속성 변경 기존에 저희끼리 이야기 나누었던 부분인 띄어쓰기 때문에 Title을 두 번씩 가져다 쓰는게 맞냐는 부분에대해 고민 후 Title의 속성을 PropsWithChildren으로 변경하여 사용하는 곳에서 br태그 사용 가능하도록 변경 * feat: 타이머 인풋창 가려지게 설정 & 아이콘 클릭 시 더이상 인풋창 출력되지 않고 바로 타이머 나오도록 설정 useRef 속성에 showPicker를 알게되어 사용. 그리고 투명도를 0으로 주어 타이머를 가렸습니다 * refactor: Step01 인라인 스타일 제거 * refactor: 온보딩 버튼 구조 수정 버튼 어디에나 공통으로 쓰이는 mixin이 있어 이를 함께 컴포넌트 안으로 묶어주었습니다 * chore: 안쓰는 step01 코드 삭제 * chore: step02 안쓰는 코드/주석제거 * style: 안쓰는 코드 제거 & 스타일 코드 수정 * refactor: step01 타입 Pick으로 변경 * feat: Onboarding context 작성 및 라우터에 Provider 추가 * feat: context에 imageUrl 빈값으로 추가 * feat: step01 인풋 입력 로직 커스텀 훅으로 분리 * feat: OnboardingInfo 타입 지정 * style: 온보딩 버튼 내 '$' 추가 * feat: step01 관심사 분리 완료 * feat: 미리보기 공통 커스텀 훅 작성 * feat: step02 관심사 분리 * refactor: interface 수정 * style: IconWrapper 추가 * feat: step03 관심사 분리 * style : step04 width값 삭제 * style: step04 인라인 스타일 제거를 위한 스타일 코드 추가 * feat: 캘린더 & 타이머 커스텀 훅 추가 * feat: step04 관심사 분리 및 추상화 수준 맞추기 * chore: 쓸모없는 타입 제거 * feat: step04 캘린더 & 타이머 아이콘 클릭의 추상화 정도 일치시키기 * feat: step05 로직 커스텀 훅 분리 * feat: step05 내 시간 선택하는 부분 컴포넌트 분리 * feat: 시간 계산 유틸 함수 작성 후 분리 * style: radio 버튼 '$'추가 * feat: step05 컴포넌트 및 관심사 분리 * chore: 온보딩 최상위 컴포넌트 필요없는 코드 제거 * style: 참여자 뷰에서 햄버거 메뉴 바 선택 시 글자 겹쳐 보이는 현상 수정 * feat: 전체 온보딩 정보를 요약한 정보 속 날짜 계산 로직을 커스텀 훅으로 분리 * refactor: 참여자 뷰 로직 분리 및 Title 구조 수정 * feat: step06 커스텀 훅으로 분리및 step06 필요없는 타입 & props 정리 * refactor: 온보딩 최상위 컴포넌트 상태와 props 정리 * refactor: step01 다른 스텝과 추상화 정도 맞추기 * style: 인라인 스타일 -> styled components로 변경 * chore: 설명주석 추가 & 필요없는 코드 제거 * style: 참여자 뷰 인라인 스타일 코드 -> styled Components로 변경 * chore: 파일명에 공백 제거 * fix: 라우터 속 import 파일명 공백 제거 * chore: 공통 타이틀 주석 제거 * fix: 메뉴바 클릭시 글자 겹쳐 보이는 현상 수정 * chore: 주석 제거 * chore: 필요없는 props type 제거 * style: Wrapper 컨벤션 맞추기 * feat: Content-Type': 'binary'로 변경 * feat: filename & file자체 저장 useState 추가 * feat: binary 파일 형식으로 바꿔주고 PUT하는 커스텀 훅 추가 * refactor: presignedUrl을 받아오는 POST 함수 수정 * feat: presignedUrl 로직 추가 POST로 받아온 presignedUrl, binary형식으로 파일 자체를 담아서 PUT * style: step06일 때는 다른 display 적용 * style: step06 일때 온보딩 버튼 위치 수정 * style: margin-bottom값 변경 * feat: step02 presignedUrl 값 context에 저장 * chore: 필요없는 조건문 및 주석 제거 * feat: 참여자 뷰 GET으로 받아온 값으로 구현 (추후 겹치는 로직 분리) * chore: TODO 주석추가 * style: 온보딩 이미지와 참여자 뷰 이미지 그라데이션 수치 일치화 * chore: 주석 추가 및 todo 추가 * feat: 참여자뷰에서 get받을 때 일반 axios사용으로 변경 * feat: 참여자 뷰 GET response를 data.data 로 변경 * style: 이미지 미리보기 등록 시 수정 아이콘 삽입 * chore: 사용하지 않는 코드 제거 및 todo 추가 * feat: input accept 형식 변경 * feat: 급하게 커스텀 훅 추가(충돌 해결을 위한) * [선물 등록] ContextApi 적용 (#350) * feat: 선물등록 임시저장 위한 context 적용중 * feat: 뒤로가기 시 정보 임시저장을 위한 context 생성 * feat: 뒤로 가기 혹은 다음 버튼 누르면 context 업데이트 * feat: 선물 등록 클릭 시 임시저장 데이터 초기화 * feat: 링크 입력 화면 context 적용 * chore: 머지하면서 사라진 부분 복구 * fix: 오타 수정 * chore: 빌드 에러 해결중 * chore: 빌드 에러 해결 * [토너먼트] 중복자 예외처리 + 토너먼트 로직 분리 (#354) * feat: 랜덤 함수 커스텀 훅 분리 * feat: 토너먼트 로직과 ui 분리 * fix: useGetItem 이름 변경 * fix: useGetItem 에러 임시 처리 * feat: 토너먼트 중복자 예외처리 * chore: 안쓰는 state 제거 * feat: 선물 0 개일 때 조건문 변경 * feat: 개설자 여부에 따라 버튼 출력 * 마이페이지 두번 누르는 이슈 해결 (#358) * feat: 카카오 로그인 에러 시 페이지 이동 * fix: 지민언니 addgiftfooter 부분 filename 삭제 * fix: 마이페이지 안 들어가는 이슈 확인 --------- Co-authored-by: Wang HoEun * fix: 에러페이지 도출 경우 에러 수정 * feat: 라우터 giftee -> gifteeName변경 (#362) * fix: logout instance 생성 후 interceptor 안 걸리게 함 * fix: 안쓰는 post instance import 삭제 * [마이페이지] 코드 리펙토링 (#370) * style: console 삭제 * refactor: logout 버튼 logic 코드 이동 * style: 마이페이지 data 순서 정리 * style: 마이페이지 header 코드 가독성 높이기 * refactor: progressgiftview 코드 정리 * refactor: donegiftview 코드 정리 * style: console 창 삭제 * style: 기존으로 다시 원상복귀.. * fix: logout instance 수정 * fix: loggout 시 스토리지 clear로 변경 * refactor: giftroomview 코드 클린하게 변동 * refactor: detail room 코드 정리 * refactor: mypage view 코드 분리 * style: 안 쓰는 interface 삭제 * refactor: 반복되는 컴포넌트 새로운 const로 생성 * refactor: view 코드 component 분리 map을 더 간단하고 가독성 있게 * style: props 변수 명 수정 및 옵셔널로 반영 * style: 좀 더 정확한 data 네이밍 수정 * style: data 옵셔널이 아닌, undefined로 예외처리 코드로 작성하기 수정 * refactor: React.FC 삭제 --------- Co-authored-by: Wang HoEun * [favicon/og] 파비콘과 오픈그래프 (#368) * feat: og tag 적용하여 썸네일과 설명 적용 * feat: 파비콘 설정 및 apple 아이콘 임의로 설정 --------- Co-authored-by: Wang HoEun * fix: 리프레시 토큰 재요청 경우 모든 에러 케이스 추가 * feat: 모바일에서 카카오 로그인 버튼 안보이는 현상 로직 수정 (#381) useEffect로 isToken을 boolean으로 주고 그에 따른 삼항 연산자로 뷰를 보여주는 로직으로 수정하였습니다. * isToken 기본 값 언디파인드로 변경 (#384) * feat: 모바일에서 카카오 로그인 버튼 안보이는 현상 로직 수정 useEffect로 isToken을 boolean으로 주고 그에 따른 삼항 연산자로 뷰를 보여주는 로직으로 수정하였습니다. * feat: isToken 기본 값을 false에서 undefiend로 변경 * feat: isToken 값 기본으로 false 설정을 제거 (#389) * [온보딩] useEffect 안 조건문 제거(02:36) (#390) * feat: isToken 값 기본으로 false 설정을 제거 * feat: useEffect 안 조건 문 제거 * [호은 1.5차 qa] edit 페이지 뒤로가기 header 추가 / 로그인 시 카카오 프로필 header에 나타남 (#375) * refactor: edit room code 정리 * feat: edit room 에 뒤로 가기 헤더 추가 * feat: 뒤로가기 헤더 layout 생성 후 공통으로 쓸 수 있도록 router 수정 * feat: login 했을때 profile 이미지 localstorage에 저장하고 header 속 프로필 바뀌게 하기 --------- Co-authored-by: Wang HoEun * [1.5차 QA : 토너먼트] 토너먼트 방 종료 버튼 구현 및 중복 참여자 ui 개선 (#378) * feat: 종료하기 기능 구현 * chore: React.FC 지양 * fix: 토너먼트 중복 참여자일 경우 ux 변경 * chore: 안쓰는 import 삭제 * chore: 코드 정리 * fix: 모달창 확인 버튼 마이페이지 이동 * fix: 화살표 함수 지정 * [1.5차 QA] 선물 등록 완료 버튼 관련 버그 수정(기본 이미지 문제, 로딩 뷰 처리) (#393) * fix: 링크 없이 등록 시 모달 안 뜨도록 수정 * fix: 기본 링크 설정에 쉼표 오타 제거 * refactor: 이미지 링크 빈 값 들어가는 에러 해결 * fix: CORS 에러 나면 바로 직접 입력으로 전환 * refactor: onSuccess 중복 제거 * feat: 선물 등록 시 지연 생길 때 로딩뷰 추가 * fix: 로딩 완료 후 바로 선물등록 홈으로 이동되도록 수정 * fix: svg 막고 핸드폰 사진 허용 * [1.5차] 선물등록 스타일 QA (#403) * fix: 미니타이머 아이콘 크기 고정 * fix: input 포커싱 때만 색상 주기 * fix: input 글자색 수정 * fix: 버튼 위치 수정 * fix: UX 라이팅 수정 * fix: 이미지 안 잘리도록 수정 * [1.5차 QA] 선물홈 스타일 QA 반영, 선물등록 모달창 추가 (#401) * fix: 중앙정렬 * fix: 잘리는 글자 해결 * fix: 내가 등록한 선물 스타일 적용 * feat: 삭제 모달 추가 * [시작페이지] style qa 진행 (#376) * refactor: 바뀐start 페이지 속 svg 수정 이후, header 속 svg 수정 * fix: logo header속 아이콘 도 수정 * style: home 아이콘 크기 수정 * fix: 새롭게 바뀐 svg 적용 + 애니메이션 적용을 위한 배경으로 변동 * style: step svg 파일 추가 후 tsx로 변환완료 * feat: 새로운 애니메이션 적용 및, 변경 된 svg 새롭게 적용 scroll animation 모든 부분 * feat: 새로운 tournament animation lottie 적용 * style: header 색상 하얀색으로 변경 * style: navigate 중앙정렬 및 색상 변경 + globalstyle margin 0 auto 추가 * style: 로고 헤더 wrapper 생성 후 중앙정렬 * fix: 화면 밀리는 문제 해결 start page + 애니메이션 속도 조절 * feat: downIcon에도 애니메이션 적용 start page * style: 시작 페이지 사진 width 값 100%으로 수정 첫번째 사진 제외하고 * style: 기존 width 37.5rem 로 변경 시작 첫번째 이미지 * fix: svg 파일 import 문 삭제 * fix: icon 바꾼거 네이밍 변경 적용 merge 시 바뀌게 된 듯 함 * refactor: 변경 된 start 첫번째 사진 svg에서 tsx 생성 * refactor: start 페이지 첫번째 이미지 수정 반영 margin 없음 * refactor: 수정 된 버튼 그라데이션 svg 반영 * feat: 수정한 버튼 그라데이션 코드에 적용 --------- Co-authored-by: Wang HoEun * [마이페이지] style qa를 위한 변경 사항 (#399) * style: 마이페이지 가로 스크롤 안 생기게 수정 및, userbox 중앙정렬 * refactor: mypage 이미지 svg로 변경 * fix: 선물방 마이페이지 사진 크기 가로세로 일정하게 수정 * feat: 선물방 카드 속 이름 길이에 따라 보여지는 style 다르게 하는 코드 작업중 중간 로직 코드 작성 (수정 필요) * fix: 선물방 카드 giftee 님을 위한 선물방 글자수에 맞게 보여지는게 다르게 수정 * feat: user name 색상 pink 6번 으로 수정 * refactor: header 배경 색 맨 위에 있을땐, 투명이었다가, 내릴때부터 하얀색으로 되게 수정 * refactor: 이미지 위치 수정 후, user wrapper 위치도 수정 * fix: UserName 부분 width 100% 빼기 * refactor: edit page 속 명수 색상 변동 적용 * fix: 안쓰는 import 문 svg 속에 있는거 삭제 * fix: mypage header 부분 icon 크기 변동과 gap 삭제 * fix: merge 하며 없어진 style header 속 코드 다시 반영 --------- Co-authored-by: Wang HoEun * [온보딩] 뒤로가기 기능 (#379) * feat: 뒤로가기 아이콘 추가 및 로직 추가 * chore: funnel 훅 폴더 정리 * feat: 온보딩 헤더 뒤로가기 로직 변경 * feat: 미리보기 이미지 전역으로 변경? 뒤로가기 시 미리보기 이미지가 보여지고 있음에도 불구하고 '다음'버튼이 활성화가 되지 않는 현상이 있습니다. 이를 콘솔로그를 통해 살펴보니 미리보기 이미지가 뒤로가기 시에 업로드 되어있지 않다는 판정이 되는 것 같아요 ㅠ 추후 수정하겠습니다 * feat: react.memo로 step02 감싸서 렌더링 방지 * feat: 미리보기 이미지 상태 다시 일반 state로 복귀 * feat: step03 뒤로가기 구현 * feat: step02 미리보기 전역 상태를 일반 state로 복귀 * feat: previewImage 커스텀 훅 안쓰는 코드 정리 * feat: step04 시간 선택 반영 잘되게 수정 * feat: 토너먼트 스케줄 캘린더 담당 커스텀 훅 작성 * feat: 뒤로 가기 시 캘린더 정보 저장(시간은 저장x) * feat: 토너먼트 시작 시간이 없을 시를 대비한 삼항 연산자 사용 * chore: 필요없는 코드 제거 * chore: 필요없는 useEffect 제거 * chore: 필요없는 코드 제거 * fix: 빌드에러 수정 * [온보딩] 썸네일 미리보기 이미지 짤리는 현상 (#395) * feat: svg 확장자는 전부 이미지 업로드 불가하여 accept에서 제거 * feat: 이미지의 크기가 매우 작은 경우를 대비하여 height 100% 설정 * fix: 썸네일 부분 height값 삭제 * feat: 이미지 특정 height 값 이하일 때 미리보기 안되게 구현 * feat: 이미지 최소 height 변경 (추후 논의 필요) * feat: image accept에 heic 추가 * [온보딩]16시 54분 기준 카카오 로그인 강제로 보이게 하여 svg의 문제인지 확인하는 작업 (#413) * feat: 카카오 로그인 조건부처리 없이 강제로 보이는지 확인 * feat: 새로운 도메인으로 변경 * feat: develop 브랜치에서 카카오 로그인 png로 변경 * [토너먼트 랭킹] 공유하기 기본 ui 기능 구현 (#416) * feat: 아이콘 추가 * style: 토너먼트 이미지 가운데 정렬 * chore: 불필요한 console 제거 * feat: 라우터 변경 공통 헤더 사용 * style: 메달 아이콘 변경 * style: 메달 구 아이콘 제거 신 버전 아이콘 업데이트 * style: 랭킹 메달 업데이트 및 랭킹 글자 가운데 정렬 * style: 토너먼트 랭킹 스타일 1.5차 QA * fix: 공유하기 일단 카카오톡 공유하기로 임시 대체 * fix: 빌드 에러 해결 * style: 토너먼트 헤더 반영 * feat: web share API 기능 구현 * [1.5차 QA] 선물 홈 - 토스트 메시지 추가, 헤더 변경, 카운트다운에 따른 네비게이션 (#397) * fix: 타이머 0이 되면 토너먼트 뷰로 이동하기 * fix: 미니 타이머 시간 만료되면 토너먼트로 이동 * fix: 클립보드 복사할 때 / 중복 제거 * refactor: 헤더 변경 * feat: 링크 복사 토스트 메시지 추가 * refactor: 미니타이머 prop 반영 * fix: invalid hook calls 해결 * refactor: 서버 명세 수정 반영 * refactor: 선물등록에 gifteeName 반영 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * [1.5차 QA] 중복 모달 추가 및 스크롤 생기는 이슈 해결 (#421) * feat: 모달 생성 * refactor: gifteeName 적용 * feat: 중복 모달 처리 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: state 업데이트 수정 * chore: 빌드 에러 해결 * fix: 직접 입력의 경우에도 중복 모달 작동하도록 수정 * [온보딩] 새롭게 바뀐 step06 (OnboardingFinal) 구현 (#400) * chore: svg 파일 추가 * feat: 시간 포맷팅 유틸함수 수정 * feat: onboardingFinal 컴포넌트 Footer 설정 * feat: 새로운 step06에 적용될 스타일 코드 추가 * feat: 새로운 step06 구현 * refactor: step06 코드 일부 정리 더 깔끔한 코드 분리는 조금만 자고 일어나서 하겠습니다... * fix: 빌드에러 수정 * style: btnRadio에 $ 추가 * feat: 코드리뷰 반영 * [온보딩] 스타일 qa 반영 24.02.23 16:14 기준 (#412) * style: step01 터치영역 늘림 * style: 터치 영역 늘리기 & 인풋창 focus 방지 * fix: 빌드에러 해결 * [온보딩] 새로운 참여자 뷰와 로직 작성 & 온보딩 파이널 전용 헤더 생성 & 토큰 여부에 따른 카카오로그인 버튼 (#418) * feat: 카카오 로그인 버튼 png로 변경하고 조건부 처리하여 올바르게 구현 * feat: svg 파일 추가 * feat: 396브랜치에 있는 onboarding footer 가져오기 * feat: 라우터 상수처리 * feat: 396브랜치에 있는 step06 가져오기 * feat: 날짜 포맷팅 유틸 함수 수정 * feat: 참여자 뷰 새로운 구조로 전체 변경 * style: 온보딩 파이널 & 참여자 뷰 전용 헤더 생성 * style: 참여자 뷰에만 적용될 gifterNumber 관련 스타일 코드 작성 * style: Onboarding Final Footer에 margin-top 추가 * fix: 빌드에러 수정 * feat: 아이폰 공유하기 공용 커스텀 훅 작성 * feat: 올바른 url로 복사를 위한 env 파일 변경 및 '/'추가 (#425) * [시작페이지] 2차 qa 내용 반영입니다 ! (#434) * style: 카카오 로그인 버튼 사이즈 수정 * refactor: 아래아이콘 스크롤에 따라서 애니메이션 적용 * style: 로고 중앙정렬 + header height 100% 로 * style: width 100%로 ! * style: footer 아이콘 간격 수정 * style: header 속 profileImage 모양과 크기 변동 * style: 토너먼트 애니메이션 위치 수정 --------- Co-authored-by: Wang HoEun * fix: 입장하기 버튼 클릭 시 아무 작동없는 문제 해결 (#428) * 공토 컴포넌트 공유를 위한 임시 PR입니다 (#445) * refactor: Delete Modal 공통 컴포넌트화 * feat: 플로팅 버튼에 따라 토스트 위치 변경 * [온보딩] 뒤로가기 시 이미지 미리보기 안보이는 현상 & 유저가 시간먼저 선택 시 발생하는 문제 수정 (#435) * style: step02 미리보기 이미지 위치 수정 * feat: 이미지 파싱 방법 변경 * feat: previewImageInfo 타입 추가 * feat: PreviewImageContext 새롭게 작성 * feat: 기존 OnboardingContext에서 previewImage 관련 로직 삭제 * feat: previewImageInfo Context 적용 * feat: 토스트 메세지 Object.freeze로 분리 * feat: 날짜 먼저 선택하라는 토스트 메세지 추가 * feat: 해당 토스트 메세지 적용 * feat: 뒤로가기 시 선택시간 유지를 위한 context 추가 * feat: 뒤로가기 시 이미 선택되어있는 시간이 존재할 때 날짜 선택 시 현재 시간으로 반영되는 문제 해결 * style: img 태그 styled Components로 분리 * feat: 반복되는 코드 정리(객체형태로 작성) * chore: 토스트 메세지 관리하는 파일 명 변경 * [토너먼트] 2차 QA 스타일 변경사항 (#446) * style: 사이 간격 넓히기 * style: ‘공유하기’ 글씨는 가운데 정렬 높이 변경 * style: 등록된 선물 문구 변경 * style: 상품명 3~5줄 말 줄임표 사용 * chore: 주석제거 * style: 이미지 비율 1:1 * style: 라인두께 2px 변경 * style: 중복 헤더 제거 * [선물 등록] 선물 등록 완료 버튼 활성화 기능 수정 (#450) * fix: 나가면 폼 정보 삭제 * fix: 첫 단계에서만 뒤로가기 시 초기화 * fix: 버튼 활성화 수정 * fix: 뒤로 갔다가 돌아와도 잘 정보 보존되도록 수정 * fix: 이름 잘 반영되도록 수정 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * fix: 아이템 개수에 따라 헤더 구성 변경 (#452) * [온보딩] 2차 스타일 qa & 공유하기 안드로이드 & pc 예외처리 (#447) * feat: 공유 링크 공용 커스텀 훅 수정 * chore: 안쓰는 코드 정리 * style: 수정된 타이틀 라이팅으로 변경 * style: step06 컨테이너 순서 변경 * style: 수정된 라이팅으로 변경 & 조건문 로직 삭제 * chore: 필요없는 코드 제거 * feat: 시간 선택 중 input 색상 P-06으로 변경 & 바깥 클릭 시 or 시간 선택 시 원래대로 * style: x 아이콘 조금 더 오른쪽으로 이동 * chore: 주석제거 * style: margin-top 위치 값 변경 * feat: 특정 step에서 인풋창 클릭 시 가상 키보드 올라오지 않게 구현 * fix: env 파일 수정으로 인한 '/' 제거 * feat: share API를 지원하지 않는 경우에 대한 예외처리(링크복사) * chore: stroke 포함된 empty thumbnail svg 파일 추가 * style: 썸네일 엠티 뷰 svg 변경 * [선물방 메인] 2차 QA 스타일 수정 (#449) * fix: 상하 스크롤 제거 * fix: 문법 수정 * fix: 스크롤바 숨기기 * fix: 간격 조정 * fix: 스타일 수정 * fix: 스타일 수정 * style: gap 통일 반영 * style: 햄버거 바 제거 * style: 스타일 수정 * chore: 빌드 에러 해결중 * chore: 빌드에러 해결중 * chore: 빌드 에러 해결 * chore: 빌드 에러 해결 * [선물등록] 2차 QA 스타일 수정 적용 (#453) * fix: 이미지 비율 조정 방식 변경 * fix: margin 추가 * fix: 버튼 클릭 시 색상 제거 및 스타일 수정 * fix: object fit cover * [온보딩] 사파리에서 날짜 형식 NaN, undefined 뜨는 현상 수정 (#451) * feat: 사파리 undefined 해결을 위한 TEST 컨테이너 작성 * feat: 안드로이드/pc 공유하기 예외처리 다른 브랜치에서 복붙 * feat: 토스트 메세지 추가 * feat: 사파리 날짜계산 undefined 해결 * chore: 필요없는 코드 제거 * fix: 병합 해결 * fix: 가로 세로 길이 5000px로 변경 * fix: 토너먼트 로직 롤백 (#456) * fix: 링크 입력 이름 추가 (#457) * fix: 이미지 세로길이 최소값 변경 (300px) * [토너먼트] 스타일 수정 (#462) * style : 배경 svg 추가 * style: svg 컴포넌트 배경 적용 * style: 다음 버튼 fixed로 변경 * style: none 트로피 높이 지정 * style: 다음버튼 색상 변경 * style: 이미지 비율 및 border 색상 * chore: 이미지 애러 제거 * chore: 이미지 최적화를 위한 라이브러리 설치 (#468) * style: 사파리 100vh 이슈 * fix: 사파리 100dvh 적용 * style: 토너먼트 결과 vh -> dvh 변경 및 주석 제거 * [선물등록, 선물 홈] 최종 QA 스타일 수정 (#467) * style: 화살표 PC에서도 안 보이도록 수정 * style: 버튼 정렬 * style: 상품 이미지 가로 세로 높이 고정 * style: 뒤로가기 아이콘 업데이트 * fix: svg export 복구 * refactor: warning 해결 * style: 선물홈 배경 이미지 교체 * refactor: 배경이미지를 위해 구조 수정 * chore: 빌드 에러 해결 * [온보딩] 최종qa 스타일 & step04 날짜 연속 수정 시 오류 해결 & 아이폰 공유하기 시 텍스트 같이 복사 해결 (#465) * style: step02 이미지 미리보기 위치 변경 * feat: step02 썸네일 엠티 뷰 위치 변경 * feat: step04 인풋 value 추상화 수준 일치화 * refactor: step04 날짜 연속 변경 시 발생하는 에러 해결 & 조건문 형식 변경 * fix: 공유하기 클릭 시 텍스트도 같이 복사되는 문제해결(아이폰) * fix: 빌드에러 해결 * [선물 등록] 이미지 url 파일 변환 실패 시 선물 등록 사항 초기화되도록 수정 (#480) * fix: 직접 입력 진입 시 무조건 이미지 초기화 * chore: 주석 삭제 * chore: 주석 이동 * [선물홈, 선물등록] 이미지 최적화 진행 (#481) * refactor: 선물 등록시 이미지 용량 압축 * chore: 파일명 변경 * chore: 이미지 교체 * feat: 파일 이름 설정 * chore: 주석 제거 * refactor: 화질 설정 수정 * refactor: skeleton ui 임의 추가 * refactor: 스타일 명시 * [마이페이지,시작페이지] 최종 QA 반영입니다 ! (#471) * refactor: done detail room empty view 중앙정렬 * style: count user gap 적용 * style: margin 조금 더 적용 * feat: 토너먼트 애니메이션 직접 구현 위해 폴더 및 파일 생성 * feat: tournament svg 추가 * feat: touranment 애니메이션 직접 구현 후 적용 X view에 안 보이는 이슈 * fix: 안쓰는 svg import문 삭제 --------- Co-authored-by: Wang HoEun * [토너먼트] 결과 이미지 높이 지정 스타일 (#484) * style: 카드 결과 이미지 높이 지정 * feat: 카카오 공유하기 * [온보딩] 시간 선택 스크롤 바 라이브러리로 교체 & 파일 용량 압축 라이브러리 사용 (#478) * feat: 브랜치 459의 useTournamentScheduleCalendar훅 복붙 * chore: MUI DigitalClock 라이브러리 설치 * chore: 필요없는 콘솔로그 제거 * chore: 타입확인을 위한 콘솔로그 추가 * feat: 시간 선택 스크롤 창 MUI 라이브러리로 변경 * feat: 시간 선택 창 am/pm 제거 * chore: 시간 선택 라이브러리 설치를 위한 react-is@^18.2.0 설치 * feat: 이미지네임 파싱 방법 변경 * feat: image-file-resizer를 위한 타입 수정 * feat: image-file-resizer 사용 시 필요한 타입위해 binary로 변환시켜주는 커스텀 훅 타입 변환 * feat: image-file-resizer 적용 * chore: todo 추가 (추후 타입 지정) * chore: 필요없는 코드 제거 * feat: image/webp 추가 * feat: resizedFile 함수 분리 및 확장자 강제 WEBP로 변경 * fix: resizedFile 함수 안 이미지 최대 길이 값 및 화질 수정 * fix: develop 브랜치와 step02 스타일이 달라서 일치화 * [온보딩] step02 -> step03 넘어갈 때 스켈레톤 ui 적용 (#483) * feat: 이미지 HEIGHT 최대값 10000으로 변경 * feat: Loading 상태 추가 후 일단 스피너로 추가 * chore: 필요없는 주석 및 코드 제거 * feat: step05 로딩 스피너 추가 * fix: 이미지 최대 세로 값 5000px로 변경 * feat: 온보딩 전용 스켈레톤 ui 컴포넌트 구현 * feat: 온보딩 전용 스켈레톤 ui Step02에 적용 * style: 온보딩 스켈레톤 스타일 코드 분리 * [마이페이지] 로그아웃 버튼 클릭 시 모달 나타내기 (#474) * fix: delete modal 확인 버튼 시 clickedItem에 따른 옵서녈 실행 수정 * refactor: 넘겨받는 확인 버튼 멘트 props로 바꾸기 * feat: 로그아웃 모달 추가하기 * fix: 안쓰는 import 문 삭제 * fix: suspense 재 적용 --------- Co-authored-by: Wang HoEun * fix: step04 시간 선택 인풋창 클릭 시 키보드 안올라오게 * fix: step03 인풋창도 키보드 안올라오게 * feat: webp로 이미지 교체 * [온보딩] step01에서 특수문자 입력 안되게 유효성 체크 (#487) * feat: 일반 특수문자 & 아이폰 특수문자 입력 안되게 유효성 체크 * feat: 아이폰 이모티콘도 입력안되게 유효성 체크 추가 * fix: 아이폰 특수문자는 토너먼트 진행 url에 문제없으므로 유효성검사에서 제거 * feat: 토스트 메세지에 특수문자 유효성 검사 추가 * fix: 특수문자 토스트 메세지 자동 닫힘 시간 변경 * [시작페이지] 이미지 최적화 (webP로 형식 변환) (#489) * refactor: webP 변환 부분 적용 / 하지만 하얀색 화면 이슈 수정 필요 * fix: webp 파일 재 변환 후 새롭게 적용 * fix: webp 파일 main02와 main04 png로 수정 후 재 변환. 깨지는 문제 해결 * style: 안쓰는 import 문 삭제 및 주석 삭제 * fix: main03 새롭게 파일 변환 후, 각 파일 height 적절하게 변동 --------- Co-authored-by: Wang HoEun * fix: main 03 이미지 webp 변환 후 적용 (#494) Co-authored-by: Wang HoEun * refactor: heic 변환 처리 추가 (#492) * [온보딩] step05 라디오 버튼 테두리 짤려 보이는 현상 수정 (#495) * feat: step03 인풋 클릭 시 키보드 안올라오게 설정 * style: 라디오 버튼 svg 파일 위치 값 수치 조정 * [온보딩] step02 썸네일 등록 시 아이폰 이미지 확장자(heic) 업로드 안되는 현상 수정 (#497) * chore: heic 변환 라이브러리 설치 * feat: heic 확장자 input으로 받도록 추가 * refactor: 함수 분리 & 고용량 이미지 이슈 예외처리 이미지 업로드가 되는 것을 진행해놓은 상태에서 다시 고용량 이미지를 추가하면 이미지 업로드가 되는 현상이 있어 이를 수정하였습니다. * feat: heic 확장자 업로드 가능하도록 수정 * fix: step02 파일 인풋 대소문자 구분x로 인해 확장자 하나 삭제 * chore: 콘솔로그 제거 * [마이페이지] 선물방으로 이동 버튼 기능 추가 (#501) * feat: 선물방 생성으로 이동 navigate 추가 * fix: empty view 공통 컴포넌트화 * fix: 안쓰는 import 문 삭제. 공통컴포넌트화 하며 생겼다. --------- Co-authored-by: Wang HoEun * [시작페이지] 이미지 화질 수정 (#504) * fix: 파일 webp 변환 다시 해보기. 화질 수정 * fix: 파일 명 수정 --------- Co-authored-by: Wang HoEun * [토너먼트] 강제종료 (#508) * feat: 선물방 강제 종료하기 API * chore: 선물방 아이디 콘솔 출력 * feat: 선물 삭제 api * [공통] vercel analytics, speed-insights 적용 (#511) * chore: installed vercel analytics and speed-insights * chore: import 수정 * [유저 트래픽] vercel analytics -> google analytics migration (#515) * feat: ga 태그 head 내부에 삽입하기 * refactor: 기존 ga 계정 sweet 이메일로 리펙토링 --------- Co-authored-by: Wang HoEun --------- Co-authored-by: Wang HoEun Co-authored-by: LEE KAYOUNG / KATIE <104339899+imeureka@users.noreply.github.com> Co-authored-by: 장정안 <126966681+ExceptAnyone@users.noreply.github.com> Co-authored-by: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Co-authored-by: 장정안 Co-authored-by: imeureka --- index.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/index.html b/index.html index b6eb628e..3e5603d4 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,17 @@ + + +

    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 VO$m*RfT9i&{U3O;r~R);{|CbE@1g(z literal 91758 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 NLkVe{-tI@e+yme?_{9JK diff --git a/src/assets/img/main03.webp b/src/assets/img/main03.webp index dcd3fe735d72c200dd82a9b6c2706e9e32e223f8..2c97c60d8f22feecfa51c211d02acc4b69ff0081 100644 GIT binary patch literal 147894 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⁣6> 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 E0T{mN-v9sr literal 22454 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 diff --git a/src/assets/img/main03_no_animation.webp b/src/assets/img/main03_no_animation.webp deleted file mode 100644 index cf8bbe4879645439a62e7a0807dc902929ee8163..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23686 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 literal 1322 zcmch}`B%~h003}If)20EtxQSHpkn0-qN1j$X{2ajFJB%=k*MWYEY0%%`dp?d`TFXl zJZ2u#x0iXKVc~^YhywM*B9ErHC8EwKK%2v2`(b~>-shJOg%lWQw-pA9IPQ1q>?!w< zUH{%OeW(i-RQ~|5!j9AdTjaSW8fG(4UFswMB||3#(Gl+`PE-F=BCT=a;-O+)TVSd-c#x5D%zxp zT%J)?3bn9vrGVIS#iFntOMI^7gyG;ZPnUUEFXHv;C{2B1uh4veI;#y0adfyb7U~(? zdGi<&v6tW)k(hzWy4&EjdgOS5O1c?&F`90Pl%r&>@+wrDK>})pHS7weP6|#lGiwEP zF~zz{?V%JFn!L5m?X8_wy{_&d-lxwi{iK@1MtNj58q-t1Gd6ZYPFT$?bTaAv>EY7t z!s_m-KAon9W6EBEI78CU=630{A+GYFq^=6V5ChG zwso@FF`iek{-VAXw|@C=3U{IP(cmtC8u=hbEHez~dNXWC!fv7tlFD)tLCrMp)|blI z)kUu1x~9x4a(cs5DQuat5E%lShWq((_INXHHl&Z{vV1+6CH6m(dzyWHZ3x-@<=*iZ z%Dmgf-YdYQSr%t8!``}M@$o`AWh(oxsJ@%wuQGM>$dOA~w?A8Ca(iw$3ufH$Nt+f- z=fa7f-=y~i2Yb1m(d+A;9~}I2=Jm^IWl1EiT~e`D_SpaYe#L>4S#_67tah6pQc3J2 bK>i;`awzW?@4L*|?1)**`=99ZHW2>+z(lJf diff --git a/src/pages/Start/Start.style.ts b/src/pages/Start/Start.style.ts index 9f54ded1..cf70b609 100644 --- a/src/pages/Start/Start.style.ts +++ b/src/pages/Start/Start.style.ts @@ -2,7 +2,7 @@ import styled from 'styled-components'; import { HomeBgGradientFix, GradientCta } from '../../assets/svg'; import HomeBackgroundWebP from '../../assets/img/home_background.webp'; import Main02WebP from '../../assets/img/main02.webp'; -import Main03WebP from '../../assets/img/main03_no_animation.webp'; +import Main03WebP from '../../assets/img/main03.webp'; import Main04WebP from '../../assets/img/main04.webp'; import BtnFill from '../../components/common/Button/Cta/fill/BtnFill'; From 4050b4c7e0dc94e6dd7192b8016dbf008d08fa49 Mon Sep 17 00:00:00 2001 From: Jimin Yu <92876819+urjimyu@users.noreply.github.com> Date: Wed, 27 Mar 2024 18:01:31 +0900 Subject: [PATCH 03/10] docs: added and rearranged favicon --- README.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6abef25f..d0e8a805 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,15 @@

    6f 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 z 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�_tfe}5!}!0 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