Skip to content

Commit

Permalink
[CHORE] 운영환경 배포를 위한 frontend 브랜치 merge (#471)
Browse files Browse the repository at this point in the history
* chore: 세팅중인 상태

* fix: vanilla-extract 설정 변경

* fix: storybook 실행 안되는 오류 해결

@chromatic-com/storybook이 문제였음.

* chore: storybook tset 확인

* chore: eslint 예외 추가

* chore: eslint, prettier 설정

* chore: DS_Store ignore

* chore: husky 테스트

* chore: husky 적용 중

* chore: husky 적용

* chore: 테스트용 컴포넌트 삭제

* chore: jest 적용

* chore: ts를 devDependencies로 이동

* chore: sample test 파일 삭제

* chore: add files to gitignore

* chore: vscode setting 추가

* chore: playwright example test code 삭제

* chore: e2e test github action 추가

* fix: action 오타 수정

* fix: 깃허브 액션 오타 수정

* chore: add corepack

* chore: 실행 순서 변경

* chore: browser 설치

* chore: playwright-report path 변경

* chore: �액션 if문 제거

* fix: 액션 탭 간격 변경

* chore: github action 테스트를 위한 싶패 테스트

* chore: 항상 report를 뽑을 수 있게 변경

* chore: github action 테스트를 위한 성공 테스트

* chore: vanilla-extract storybook 적용

* chore: 프로젝트 세팅을 위한 필요없는 파일 없애기

* chore: playwright yarn script 추가

* chore: react-hot-toast 적용

* feat: 깃허브 액션 테스트용 PR (#4)

* chore: 세팅중인 상태

* fix: vanilla-extract 설정 변경

* fix: storybook 실행 안되는 오류 해결

@chromatic-com/storybook이 문제였음.

* chore: storybook tset 확인

* chore: eslint 예외 추가

* chore: eslint, prettier 설정

* chore: DS_Store ignore

* chore: husky 테스트

* chore: husky 적용 중

* chore: husky 적용

* chore: 테스트용 컴포넌트 삭제

* chore: jest 적용

* chore: ts를 devDependencies로 이동

* chore: sample test 파일 삭제

* chore: add files to gitignore

* chore: vscode setting 추가

* chore: playwright example test code 삭제

* chore: github action 테스트를 위한 싶패 테스트

* chore: github action 테스트를 위한 성공 테스트

* chore: vanilla-extract storybook 적용

* chore: 프로젝트 세팅을 위한 필요없는 파일 없애기

* chore: playwright yarn script 추가

* chore: react-hot-toast 적용

---------

Co-authored-by: Jason <enigsuss@gmail.com>

* chore: 프로젝트 구조 세팅 (#11)

* chore: 필요없는 파일 제거

* fix: 파일명 오타 수정

* feat: 기본 디렉토리 추가

* chore: yarn set version berry (#12)

* chore: 깃허브 액션 변경

* feat: 모노레포 분리 (#28)

* chore: 서비스 디렉토리 이동

* chore: eslint 적용중

* fix: eslint 설정

* chore: extension 프로젝트 세팅 중 husky 충돌

* fix: pre-commit 동작 수정

* chore: backup

* chore: backup

* chore: backup2

* chore: setting

* chore: ignore 설정

* chore: husky 설치

* chore: monorepo로 변경된 뒤 액션 변경

* chore: husky 설치

---------

Co-authored-by: Jason <enigsuss@gmail.com>

* chore: 폴더명 변경에 따른 액션 변경

* chore: 폴더명 변경 (#37)

* Front/feat/#35 (#40)

* chore: 폴더명 변경
* build: 크롬 익스텐션 빌드 설정
* feat: css 파일 제거
* build: 파일 수정시마다 build되는 스크립트 추가
* chore: 의존성 설치
@tanstack/react-query, @vanilla-extract/css, react-router-dom, zustand
* feat: 디렉토리 생성
* feat: router 추가
* feat: react-query provider 설정
* feat: vanilla-extract 세팅

* feat: 현재 탭에서 데이터 가져오기 (#50)

* feat: 북마크 페이지 생성
* chore: 절대경로 수정
* build: build시에는 빌드를 한번하게 변경
* feat: 새로운 링크로 이동할 시 og image가져오는 동작 추
* feat: tab 열 때 마다 og image 가져오기
* refactor: 쓰지 않는 코드 제거
* chore: 주석 제거
* feat: 파비콘 가져오기
* feat: 서비스워커를 이용해서 동작하는 것으로 변경
* refactor: useGetTabInfo hook으로 분리
* refactor: background.ts 제거
* feat: og:description 가져오기
* chore: 쓰지 않는 상수 제거

* feat: 페이지 기본 요소 렌더링 (#52)

* chore: init

* design: theme 설정

* design: dirView 구조 정의

* chore: downgrade version - yarn 4.3.1 / typescript 5.5.4

* feat: react-arborist 적용 및 테스트 완료

* feat: 디렉토리 구성 및 아이콘 추가

* chore: use-resize-observer 라이브러리 추가

* design: tree 높이 동적 조절되도록 수정

* feat: 우측 view에 folder 및 link 표시

* chore: 컴포넌트 분리

* chore: 불필요한 주석 제거

* chore: 4.3.1 cjs 추가

* refactor: pr 수정요청사항 적용

* chore: import 수정

* chore: index.ts 추가

* chore: index.ts 추가

* chore: conflict 해결

* refactor: barrel exports pattern 적용

* refactor: icon export 처리

* refactor: directoryNode export 처리

* refactor: icon 이동

* refactor: icon을 public으로 이동

* chore: 불필요한 index 제거

* chore: 이름 변경

* chore: 이름 변경

* chore: 이름 변경

* chore: 이름 변경

* chore: 이름 변경

* [FEAT] 익스텐션 태그 인풋 핵심 로직 구현 (#126)

* feat: 북마크 페이지 생성
* chore: 절대경로 수정
* build: build시에는 빌드를 한번하게 변경
* feat: 새로운 링크로 이동할 시 og image가져오는 동작 추가
* feat: tab 열 때 마다 og image 가져오기
* refactor: 쓰지 않는 코드 제거
* chore: 주석 제거
* feat: 파비콘 가져오기
* feat: 서비스워커를 이용해서 동작하는 것으로 변경
* refactor: useGetTabInfo hook으로 분리
* refactor: background.ts 제거
* feat: og:description 가져오기
* chore: 쓰지 않는 상수 제거
* feat: cmdk 적용
* feat: 현재 선택한 태그가 보이도록 변경
* feat: 비동기 호출 흉내내서 라벨 데이터 가져오기
* chore: immer 설치
* feat: tagStore CRUD 구현
* chore: lucide icon 설치
* feat: deselect button ui 추가
* feat: deselect 기능 추가
* feat: SelectedTag ui 개선
* chore: todo 주석 제거
* feat: 동일한 태그가 없을 때 생성 아이템 추가
* feat: 태그 생성 로직 구현
* chore: 폴더 변경
* feat: TagInfoPopover 간단한 UI 구현
* feat: tag update 기능 추가
* chore: tagStore 폴더 변경
* chore: @radix-ui/react-dialog 설치
* chore: showDeleteTagDialogButton 파일 변경
* feat: DeleteTagDialog 상태 관리 구현
* chore: 다음 작업에 할 Todo 내용 추가
* feat: DeleteTag 관련 컴포넌트 구현
* chore: Command.Dialog css 변경
* refactor: useEffect내 함수 기명함수로 변경
* refactor: 분리되어있던 컴포넌트 SelectedTagItem폴더로 이동
* chore: components 에서 ui로 폴더명 변경
* refactor: TagInput컴포넌트에서 TagSelectionDialog컴포넌트 분리
* refactor: TagInput에서 TagPicker로 컴포넌트명 변경
* refactor: TagAutocompleteDialog로 컴포넌트명 변경
* refactor: TagPicker css명 변경
* refactor: css classname 변경
* refactor: 분리되어있던 css 합치기
* refactor: onSelectTag함수로 반복되는 함수 호출 합침
* refactor: 문자열 상수로 변경
* chore: 주석 추가
* feat: enter키 입력시 popover 켜지게 변경
* refactor: PopoverTriggerButton으로 분리
* chore: 사용하지 않는 index.ts 제거
* chore: 폴더명 components에서 ui로 변경
* chore: 폴더명 변경
* chore: tsbuildinfo update
* chore: 폴더 위치 이동
* chore: 폴더 이동
* chore: git pull frontend
* chore: todo 주석 추가

* [FEAT] Drag&Drop 구현: Directory (#117)

* test: mockdata 동적 생성

* chore: react-dnd, react-dnd-html5-backend 추가

* feat: dragDropManager 적용

* feat: dragDropManager 적용

* feat: Drag&Drop 시 mockData도 변경되도록 수정

* feat: treeData를 전역 상태로 관리

* design: LinkEditorSection 렌더링 요소 변경

* design: hover 시 음영 추가

* refactor: type 변경

* feat: 현재 위치에 폴더가 없으면 표시하지 않도록 변경

* fix: 아래로 이동 시 한칸씩 밀리는 버그 수정

* feat: FolderSection에 dnd 적용

* feat: LinkEditorSection 에서 DirectoryTreeSection 으로 Folder Drag and Drop 가능

* fix: DirectorySection에서 동일 부모의 자식 간 순서 변경 시 폴더를 아래쪽으로 이동할 경우 두칸씩 움직이는 문제 해결

* feat: DirectorySection에서 Folder를 이동 시 폴더 사라지는 로직 추가

* feat: LinkEditorSection에서 Pick Dnd 가능

* refactor: 중복 코드 hook으로 분리

* refactor: 이름 변경

* refactor: 이름 변경

* design: Lucid Icon 적용

* refactor: 중복 코드 제거

* chore: marged branch frontend

* chore: yarn cache clean and re-installed

* [FEAT] 우측으로 dnd 작업 가능 (#145)

* design: theme 변경시 icon 색상도 변경되도록 수정

* feat: LinkEditorSection 상단에 Directory Name 동적 변화

* design: 선택된 항목 강조 표시

* fix: DirectorySection 내부에서 dnd 작업 시 우측에도 반영되도록 수정

* fix: DirectorySection 내부에서 dnd 작업 시 우측에도 반영되도록 수정: 순서 변경 적용

* fix: DirectorySection 내부에서 dnd 작업 시 우측에도 반영되도록 수정: 순서 변경 적용

* fix: 순서 변경 시 인덱스 오차 수정

* feat: 폴더 클릭 시 해당 폴더로 이동

* fix: 내부에 요소가 없으면 빈 화면 표시

* feat: 좌측->우측 dnd 가능

* fix: 최초 로드 시 treeApi를 받아오지 못하는 문제 해결

* �[FEAT] .env 파일 설정 및 서버와 연결 확인 (#158)

* feat: 환경변수로 도메인 저장
* feat: 간단한 login 페이지 생성 및 .env파일 세팅

* �[FEAT] 크롬 익스텐션 로그인 링크 페이지 구현 (#167)

* build: dev 모드, production 모드에 따라 환경변수 주입
* build: build시에 manifest.json에 환경변수 주입
* fix: mode에 따른 환경변수 주입
* fix: script 오타 수정
* chore: ky 종속성 설치
* feat: ky를 이용한 baseApi 생성
* feat: 로그인 여부 파악 후 페이지 렌더링
* chore: tsbuildinfo 삭제
* chore: 주석 제거
* feat: Text 컴포넌트 구현
* feat: Button 컴포넌트 구현
* feat: 로그인 링크 페이지 구현
* feat: 상수로 적용
* fix: 상수대신 .env 직접 적용
- 해당 코드에서 에러가 생겨서 추후 수정할 예정
* chore: 주석 추가

* [FEAT] Swagger의 api-doc을 이용한 type 생성 (#177)

* feat: type 생성
* chore: root의 ts version 원상 복구

* [CI] 프론트엔드 서버 배포 스크립트 (#202)

* 🚀 프론트 서버 배포 설정

* 🚀 프론트 브랜치와 연결

* 🚀 docker image 빌드 전 환경변수 생성(for next build)

* build: 필요하지 않은 github action script 제거

* fix: cd script 원상 복구

---------

Co-authored-by: dmdgpdi <33450285+dmdgpdi@users.noreply.github.com>

* [FEAT] 북마크 생성 페이지 디자인 및 태그 API 연결, (#210)

* chore: 북마크 페이지 폴더 내로 이동

* feat: 북마크 페이지 기초적인 레이아웃 설정

* refactor: BookmarkHeader 컴포넌트 분리

* feat: Gap 컴포넌트 구현

* feat: Gap 컴포넌트 default값 변경

* feat: 북마크 페이지 style 분리

* feat: ogImage 가져오기

* feat: ThumbnailImage 컴포넌트 구현

* feat: 이미지 로딩 시 애니메이션 적용

* chore: 주석 제거

* refactor: ThumbnailImage 컴포넌트 수정

* feat: input tag css 적용

* feat: TagPicker tab 및 focus 애니메이션 적용

* refactor: onKeyDown 함수 뺴기

* chore: 인풋 값 확인

* feat: 위, 아래 화살표에 따라 focus를 변경하는 hook 생성

* feat: 화살표따라 탭 포커스 이동 적용

* feat: props에 따라 고정된 속성 제공

* chore: SelectedTagListLayout 폴더 이동

* feat: 공통 스타일 적용

* feat: SelectedTagList의 스타일 추가

* chore: 간단한 색 변경

* chore: 필요없는 data-desc 제거

* feat: 팝오버 버튼 tab 이동 막기, 엔터 키 제거

* chore: style 변경

* feat: 태그픽커 및 다이얼로그에 style 적용

* feat: radix-ui popover 를 floating-ui로 대체

* feat: 팝오버 버튼 디자인 구현

* feat: 태그 삭제 모달 디자인 추가

* feat: tag 목록이 길 때 스타일 변경

* �chore: 스크롤바 제거 globalStyle에 적용

* feat: 선택한 라벨 높이에 따라 commandListHeight 변경

* chore: css 제거

* feat: CommandList 로딩 화면 추가

* chore: randomcolor 라이브러리 설치

* chore: pre-commit command 수정

* fix: pre-commit command 수정

* feat: numberColor 함수 구현 및 태그 생성시 적용

* feat: randomColor style 적용

* chore: type 생성

* fix: 태그 다이얼로그에서 공백 입력시 아무것도 뜨지 않게 변경

* chore: schema를 위한 절대 경로 추가

* feat: 실제 서버의 타입으로 변경

* fix: 태그 리스트가 없을 때, Command.Empty가 보이게 조건문 변경

* fix: �적용되지 않는 함수 제거

* feat: 태그 생성 api 연결

* refactor: 태그 선택 취소 시에 id값만 이용

* feat: delete tag api 연결

* feat: updateTag api 연결

* chore: schema 타입 최신화

* fix: tagName 수정 후 enter key 입력시 모달창 생기는 버그 수정

* feat: 사용하지 않는 CurrentTabInfo 컴포넌트 삭제

* refactor: useGetTabInfo 폴더 이동

* refactor: api 적용을 위해 default value 변경

* fear: create pick api 연결

* chore: react hot toast 라이브러리 설치

* chore: 사용하지 않는 SAMPLE_DATA 제거

* feat: toast 라이브러리 적용

* feat: ApiErrorBody type 선언

* chore: todo 제거

* feat: post api 통신 에러 핸들링 추가

* feat: deleteTag optimistic update 추가

* feat: update tag optimistic update 추가

* refactor: useCalculateCommandListHeight hook으로 분리

* refactor: onSelectCreatableTag 함수 분리

* chore: 쓰지 않는 return 제거

* feat: enter key로 태그 삭제 및 취소 가능

* feat: 간단한 에러 페이지 생성

* feat: 에러 핸들링 추가

* [FEAT] sanitizeHtml에서 DOMPurify로 교체 (#213)

* fix: 런타임 에러 해결(잘못된 변수 접근) (#215)

* [FEAT] 크롬 익스텐션 픽 수정 기능 구현 (#229)

* chore: schema 최신화
* feat: getLinkByUrl api 추가
* feat: useHasLink hook 구현
* chore: API 변경에 따른 type 최신화
* feat: CreatePickForm, UpdatePickForm 분리
* feat: chore: Pick API 변경에 따른 type 최신화
* feat: link api 삭제
* feat: getPickByUrl api 추가
* feat: useHasPick 변경
* chore: ThumbnailImage backgroundColor 변경
* feat: updateForm 구현
* feat: 로딩 상태 시의 Skeleton 구현
* feat: DeferredComponent 구현
* feat: 로딩화면 구현
* chore: 주석 제거

* [FEAT] Backend api 연결 및 ux 미세조정 (#227)

* design: flex wrap 설정

* design: flex wrap 이중 줄바꿈 문제 수정

* feat: 우클릭 시 context menu 표시

* chore: 주석 제거

* chore: alt 이름 변경

* feat: treeRef 추가

* feat: mockData create 가능

* feat: api 연동: create&move

* feat: api 연동: dnd move 동작 확인

* refactor: 핸들러 함수 hook으로 분리

* feat: edit ux 추가 및 arborist node outline 제거

* feat: folder rename 연결 완료

* feat: folder delete(move to recyclebin) 연결 완료

* feat: create 로직 수정

* feat: 초기 로드 시 recycleBin 생성(향후 수정 예정)

* feat: Tree 컴포넌트 추가 전 커밋

* chore: popover Demo 추가

* design: 버튼 및 팝오버 디자인 수정

* feat: 휴지통 붙임:수정예정

* feat: 휴지통 숨김 설정

* design: 전체적인 디자인 미세 조정

* feat: 로그아웃 버튼 추가 및 디렉토리 조정

* feat: client 로그인 검증로직 추가

* design: 로그인 페이지 디자인 추가

* refactor: 폴더 create 로직 수정

* refactor: 폴더 create 로직 수정2

* refactor: 필요없어진 popover제거

* fix: 중첩 폴더 구조에서 폴더 생성 불가한 문제 해결

* design: 에러 토스트 메시지 추가

* refactor: 삭제 로직 수정(id 부여 방식)

* feat: 휴지통에서 폴더 완전삭제 가능

* [FEAT] 익스텐션 테마 적용 (#241)

* feat: theme을 techpick-shared 모노레포로 분리
* feat: theme 적용
* design: 익스텐션 테마 적용
* fix: peerDependencies제거
* design: techpick의 theme을 techpick-shared에 의존하게 변경
* feat: techpick reset.css 수정
* feat: git pull 이후 필요없는 파일 삭제
* feat: theme 동기화

* [FEAT] 카드 컴포넌트 디자인 구현 (#246)

* fix: ky middleware credentials속성 올바르게 적용

* feat: teckpick-service와 동일하게 id 변경

* feat: techpick-shared의 export 추가

* feat: images모든 url을 허용 및 next.config.mjs제거

* chore: 의존성 설치

* chore: @/schema 절대 경로 추가

* chore: portalContainer id 변경

* feat: pickCard 컴포넌트 디자인 및 레이아웃 구현

* feat: TagPicker 컴포넌트 복사

* [FEAT] 버그 수정, 휴지통 복원, context menu, pr 요청사항 적용 (#247)

* fix: 한글 입력시 폴더 두번 생성되는 문제 해결

* fix: 생성중인 폴더가 있을 때, 폴더 추가생성 방지로직 추가

* refactor: 폴더 위치 변경 및 Input 테마 적용

* fix: 노드 클릭 시 2개의 트리 중 한 노드만 focus되도록 수정

* refactor: 프로젝트 디렉토리 및 파일 구조 수정

* refactor: 프로젝트 디렉토리 및 파일 구조 수정2

* feat: recycleBin에서 contextmenu 사용 가능

* feat: recycleBin에서 restore 가능

* refactor: 이전 코드리뷰 comment 반영

* fix: 폴더 생성시 input이 사라지는 문제 수정

* fix: 폴더 삭제 시 우측 화면 업데이트 안되는 문제 수정

* fix: DirectorySection ui 틀어짐 수정

* feat: 휴지통 내부 dnd 가능

* fix: 좌측 디렉토리 절반만 표시되는 문제 수정

* fix: 간격 수정

* fix: 휴지통 dnd 비활성화

* fix: 생성 또는 이름변경 실패 이후 + 버튼클릭 안되는 버그 수정

* feat: 우측 folder contextMenu 이용가능
*버그 수정 필요(recycleBin menu 출력되는 문제)*

* fix: 우측 contextMenu 버그 수정

* fix: 우측 context 수정중

* chore:충돌 방지용 git pull

* [CI] 도커 이미지 build 관련 버그 수정 (#252)

* build: Dockerfile yarn berry 적용 및 필요한 파일 추가
* chore: 주석 변경

* fix: tag 생성 연속 입력 문제 해결 (#257)

* [FIX] 로그인된 상태일 때 메인 페이지로 리다이렉트 (#260)

* [FEAT] unclassified 표시 가능 (#261)

* feat: unclassifiedPicks api 호출 코드 추가

* feat: unclassified 표시됨

* [FEAT] PickCard API 연결 (#266)

* chore: 주석 추가

* feat: PickCard 이미지 스타일 수정

* chore: 쓰지 않는 apis 폴더 삭제

* refactor: 중복된 api middleware 제거

* fix: ky middleware content-type 추가

* feat: getPick api 연결

* design: 디자인 변경

* chore: import 순서 변경

* feat: updatePick api 연결

* feat: selected Tag 태그 삭제시 상태 변경

* chore: 주석제거

---------

Co-authored-by: Jason <enigsuss@gmail.com>

* feat: skelton 적용 (#268)

* feat: skelton 적용

* feat: link 추가 및 tagPicker 동작 수정

* [FIX] 태그 생성 후 창 유지후에 수정 했을 때, 생성한게 추가가 안되는 로직 (#270)

* [FEAT] pick dnd (#272)

* feat: nodeApi로 변환 로직 추가

* fix: 임시 디바운싱 적용

* fix: api 교체

* fix: 간헐적으로 unclassified 안보이는 문제 수정

* feat: pick 휴지통, 복원, 삭제 api 연결완료

* fix: 이름 길어지면 ...으로 표시

* fix: 가상 미분류 폴더 렌더링 방지 처리

* fix: 버그유발 기능 비활성화

* fix: fix

* fix: fix2

* [REFACTOR] 폴더구조 변경 (#308)

* refactor: shared 폴더 제거

* refactor: entities/pick 폴더 제거

* refactor: entities/tag 제거

* refactor: features/tag 제거

* refactor: features/userManagement 제거

* refactor: features/themeManagement 제거

* refactor: features/nodeManagement 제거

* refactor: widgets 제거

* [REFACTOR] import 순서 변경 (#311)

* chore: eslint import 순서 정리
* reafactor: import 순서 변경

* feat: 디자인 토큰 추가

* feat: 디자인 토큰 적용

* feat: �commontThemeContract 삭제

* fix: ThemeProvider 변경사항 적용

* fix: 위치 조정

* [FEAT] 디자인 토큰 추가

* [FEAT] 같은 계층일 때, 폴더 multi select 구현 (#332)

* chore: dnd-kit 설치 및 tree 페이지 생성

* feat: jest 설정추가

* fix: jest monorepo별 적용

* chore: root jest config 삭제

* feat: 같은 부모 밑에서 1개씩 폴더 이동

* design: tree page margin 변경

* test: 복수의 폴더 이동 테스트코트 작성

* feat: 현재 드래그 여부 상태 zustand에 추가

* feat: 폴더 다중 선택 기능 추가

* feat: DragOverlay추가

* design: primary color로 변경

* fix: test문 it.only 제거

* refactor: dndTreeStore에 hasIndex 적용

* [FEAT] 검색창 및 리스트 로직 설계 (#333)

* feat: 검색 위젯 로직 구현

* feat: 유틸리티 클래스 구현 (파싱, 필터링)

* doc: 유틸리티 참고 이미지 및 설명

* feat: zustand, react query 추가

* feat: 뷰포트 리액트 컴포넌트

* refactor: esToolkit import

* refactor: useViewScope 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: Util 함수 리팩토링

* [FEAT] 픽 리스트 - 사용자 설정 필터 & 뷰 템플릿 (#348)

* feat: 검색 위젯 로직 구현

* feat: 유틸리티 클래스 구현 (파싱, 필터링)

* doc: 유틸리티 참고 이미지 및 설명

* feat: zustand, react query 추가

* feat: 뷰포트 리액트 컴포넌트

* refactor: esToolkit import

* refactor: useViewScope 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: Util 함수 리팩토링

* chore: 파일 제거 및 위치 이동

* chore: use-Immer 패키지 추가

* feat: 유틸리티 (Stream, Tokenizer) 리팩토링 및 개선

* chore: 공통 타입 추가 및 일부 변경

* feat: 태그 아이템 UI 컴포넌트 (익스텐션에서 가져옴)

* feat: 최상단 컴포넌트 (뷰어) 및 상태 구현

* test: 쿼리 더미 데이터 추가

* feat: 옵션 리스트 위젯 및 상태 구현

* feat: 검색창 위젯 구현

* feat: 필터 옵션 기능 구현

* feat: 뷰 템플릿 (리스트 vs 그리드) 옵션 구현

* chore: 디렉토리 이름 변경, 기존 폴더 제거

* chore: dummy data 업데이트

* ♻️ refactor: 코드 리뷰 기반으로 리팩토링 진행

* [REFACTOR] Drag & Drop 함수 및 컴포넌트 분리  (#351)

* test: moveFolder test code 삭제

* feat: mockdata 변경에 따른 로직 변경

* refactor: 중앙 스토어에서 로직 분리

* design: treePageWrapper css 변경

* feat: shift + click시에 active가 부모 폴더가 다르면 초기화

* feat: 다른 폴더간 이동 구현

* chore: 테스트코드 예제 삭제

* refactor: reorderFolderInSameParent 함수명 수정

* refactor: SelectedFolderListType으로 대체

* refactor: handleClick 함수 분리

* chore: tree 컴포넌트를 components 폴더로 이동

* [FEAT] 공통 테마에 jsdoc 추가 (#354)

* [FIX] drag & drop 후 정렬 변경 (#360)

* fix: drag & drop 후 정렬 변경

* refactor: isSameParentFolder parameter 변경(동일한 값)

* [FEAT] 폴더 생성 UI 및 상태 관리 로직 변경 (#365)

* design: 작업 전 디자인 변경

* design: CreateFolderInput 디자인 추가

* feat: 폴더 생성 UI 구현

* design: FolderTree 전체적인 레이아웃 변경

* design: 폴더 트리 디자인 개선

* feat: CreateFolderInput 생성시 focus 이동

* design: createFolderInputLayout 디자인 변경

* [FEAT] 폴더 이름 변경 UI 및 로직 구현 (#367)

* feat: CreateFolderInput, FolderInput 컴포넌트로 추출

* design: 공통 테마 사이즈 추가

* chore: PORTAL_CONTAINER_ID 상수로 변경

* feat: 폴더 이름 변경 UI 및 로직 연결

* feat: 우클릭시에 포커스되는 폴더 변경

* [FEAT]: 삭제 UI 및 로직 추가 (#369)

* [CI/CD] nextjs docker image 사이즈 감소 (#380)

* [FEAT] Folder API 연결 (#399)

* chore: api 변경에 따른 스키마 업데이트

* feat: 폴더 관련 api 타입 지정

* refactor: api 변경에 따른 타입 변환

* feat: top level error 추가

* feat: folder crud api 추가

* chore: api 변경에 따른 타입 변경

* feat: 폴더 드래그 앤 드랍 api 연결

* feat: 폴더 이름 변경 api 연결

* feat: 휴지통 이동 api 연결

* refactor: -1 매직넘버 상수로 변경

* chore: mockdata 삭제

* chore: re-resizable 의존성 설치

* faet: FolderTree 크기 조정 가능하게 변경

* chore: api 변경에 따른 타입 최신화

* feat: createFolder api 연결

* refactor: getFolders, getBasicFolders 로 함수명 변경

* reafactor: getRootFolderList로 변경

* [FEAT] 폴더 클릭에 따른 라우팅 변경 (#405)

* feat: 라우팅 설정 변경

* chore: root 폴더에서 tsc 동작시 build된 파일 생성 차단

* chore: legacy 삭제

* feat: 폴더 클릭시마다 라우팅 이동

* feat: useTreeStore subscribeWithSelector 적용

* refactor: FolderInfoItem 컴포넌트 분리

* feat: url을 이용해 folder 선택하게 변경

* feat: route 경로 추가

* feat: middleware redirect url 변경

* feat: 휴지통 및 미분류 폴더 추가

* design: 최초 로딩시에 사이드바 사이즈 지정

* design: 사이드바 디자인 조정

* chore: 쓰지 않는 props 제거

* refactor: useEffect 함수명 추가

* [FEAT] 검색 위젯 기능 구현 및 미사용 필터 제거 (#410)

* chore: 중간 작업 공유

* chore: 타입 변경 및 기존 SearchWidget.tsx 리팩토링

* chore: 타입 변경 및 기존 SearchWidget.tsx 리팩토링

* feat: 기존 로직에서 미사용하는 필터 제거

* feat: dndTreeStore 병합 작업

* [FEAT] 검색창 자동 완성 (#418)

* refactor: PrefixTokenizer 구현 수정

* refactor: PrefixTokenizer 구현 수정

* feat: 검색 위젯 토큰화 구현

* chore: 화면 테스트를 위한 뷰어 패널 코드 수정 (반영 안될 수 있는 커밋)

* feat: 토큰 검색창 CSS 설정

* chore: 일부 주석 추가 및 코드 위치 변경

* chore: yarn.lock 파일 커밋

* [FEAT] 같은 폴더 내에서 Pick Drag&Drop 구현 (#420)

* chore: 백엔드 api 타입 최신화

* chore: util 스펠링 정확하게 변경

* feat: pickType 추가

* feat: getPicksByFolderId 추가

* refactor: viewTemplate 코드 변경

* refactor: 바로 호출이 아닌, useEffect 내에서 비동기함수 호출

* chore: git pull을 위한 커밋

* refactor: pickCardListViewer로 PickCard 컴포넌트 이동

* design: card link style 변경

* feat: 더블 클릭시 링크 이동

* feat: dnd가 가능한 list와 그렇지 않은 list분리

* refactor: dnd여부에 따라 PickListViewer분리

* refactor: DnDCurrentType을 dnd.type으로 이동

* refactor: 공통 utils함수로 추출

* feat: 픽에서 픽으로 이동(api 미연결)

* feat: pick multi-select 구현

* feat: multi-select drag&drop 구현(api 미연결)

* feat: 같은 폴더 내 픽 drag&drop api 연결

* [FIX] 깃허브 액션 API 테스트

* [FIX] 검색창 버그 수정 및 URL 업데이트 (#424)

* 🚨 fix: useSearchParams 사용처에 <Suspence> 추가

* [DESIGN] 폴더 영역 디자인 개선 (#430)

* [FEAT] 픽을 폴더로 이동하는 기능 추가 (#432)

* refactor: draggable type에 따라 검증 함수 분리

* chore: store barrel export 추가

* feat: pick to folder를 위한 dnd context 생성

* fix: dnd context 변경에 따른 로직 변경

* refactor: 컴포넌트명 변경

* refactor: useGetDndContextSensor로 로직 분리

* fix: 로직에 따라 pickId 문자열 대신 정수로 수정

* feat: PickDraggableObjectType에 부모 폴더 id 추가

* feat: 드래깅하는 카드 정보 store에 추가

* feat: pick to pick 시 overlay 카드 생성

* feat: folder drag시 folder overlay 보이도록 변경

* design: 카드 드래그 시 크기 줄이기

* feat: pick to folder drag over시 폴더 색상 변경

* refactor: movePicksToEqualFolder로 함수명 변경

* feat: 휴지통 및 미분류로 픽 이동 감지

* feat: 다른 폴더로 픽 이동 로직 추가

* feat: 폴더 디테일 페이지 뷰 연결

* feat: �휴지통 페이지 카드 렌더링

* [FIX] DragOver 수정 및 휴지통 이동 로직 변경 (#441)

* fix: DragOver 개선

* refactor: 백엔드 API 변경에 따른 휴지통 이동 로직 변경

* [FIX] 현재 포커스된 폴더 삭제 시에 미분류 페이지로 리다이렉트 (#446)

* fix: 현재 포커스된 폴더 삭제 시에 미분류 페이지로 리다이렉트

* design: 드래그시 outline 제거

* [FEAT] 로그인 리다이렉트 URL 추가 (#450)

* chore: sample 대신 관용적으로 사용되는 example로 변경

* feat: 로그인 redirect url 추가

* ci/cd: github Actions secrets 추가 및 적용

* [REFACTOR] 익스텐션 폴더 구조 변경 및 API 최신화 (#458)

* feat: 익스텐션 로그인 페이지 디자인 변경

* chore: 백엔드 타입 최신화

* chore: 백엔드 타입 최신화

* refactor: type은 types폴더로 이동

* chore: 백엔드 타입 최신화

* refactor: api 호출 함수 변경

* refactor: api url 상수로 관리

* feat: barrel export에서 값과 함수 제거

* refactor: 도메인 의존성 없는 컴포넌트 lib폴더로 이동

* refactor: toast 관련 함수 lib 폴더로 이동

* refactor: store는 store폴더로 이동

* chore: 사용하지 않는 타입 제거

* refactor: util함수 util 폴더로 이동

* refactor: 페이지 폴더 제거

* refactor: 컴포넌트는 컴포넌트 폴더로 이동

* fix: returnErrorFromHTTPError에 await 문구 추가

* chore: 백엔드 api 변경에 따른 타입 변경

* [FIX] 로그인 이후 뒤로가기 시 로그인 화면으로 이동하지 못하게 수정 (#453)

* [fix] 픽 검색 API 페이지네이션 적용 (#460)

* chore: 무한스크롤 라이브러리 추가

* chore: 무한스크롤 라이브러리 추가

* feat: 무한 스크롤 구현

* chore: pick 조회 스토어 함수 수정

* chore: 불필요한 코드 수정

* [FEAT] radix-color 추가 (#462)

* feat: radix-color 추가

* chore: radix-color 추가 변경사항 적용

* chore: route 변수 수정

* feat:  breadcrumb 적용

* chore: 기타 스타일링

* chore: 입력창 스타일링

* feat: 무한 스크롤 다듬기 작업

* feat: 검색창 변수 수정

* [DESIGN] 검색 바 디자인 개선 (#463)

* chore: route 변수 수정

* feat:  breadcrumb 적용

* chore: 기타 스타일링

* chore: 입력창 스타일링

* feat: 무한 스크롤 다듬기 작업

* feat: 검색창 변수 수정

* fix: useSearchParams는 suspense로 반드시 감싸야 한다.

---------

Co-authored-by: dmdgpdi <33450285+dmdgpdi@users.noreply.github.com>
Co-authored-by: Jason <enigsuss@gmail.com>
Co-authored-by: Jason <69420498+enigsuss@users.noreply.github.com>
Co-authored-by: Minky <minkyeki@student.42seoul.kr>
  • Loading branch information
5 people authored Nov 18, 2024
1 parent 82bab92 commit abc3c9f
Show file tree
Hide file tree
Showing 367 changed files with 30,330 additions and 0 deletions.
39 changes: 39 additions & 0 deletions .github/workflows/playwright.test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Playwright Tests
on:
pull_request:
branches: [frontend]
workflow_dispatch:
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-latest
defaults:
run:
working-directory: frontend/techpick
steps:
- uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable

- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: 'yarn'
cache-dependency-path: frontend/yarn.lock

- name: Install dependencies
run: yarn

- name: Install Playwright Browsers
run: yarn playwright install --with-deps

- name: Run Playwright tests
run: yarn playwright test

- name: 'Upload Playwright Report'
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: frontend/techpick/playwright-report/
retention-days: 10
75 changes: 75 additions & 0 deletions .github/workflows/test-client-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Tech-pick Client Next.js Deploy

on:
push:
branches:
- 'frontend' # Frontend 브랜치와 연결

jobs:
build:
runs-on: ubuntu-latest
steps:
- # 저장소 Checkout
name: Checkout source code
uses: actions/checkout@v4

- # .env 파일 설정
name: Create .env.production
run: |
cd ./frontend/techpick
touch .env.production
echo "NEXT_PUBLIC_API=${{ secrets.FRONT_NEXT_PUBLIC_API }}" >> .env.production
echo "NEXT_PUBLIC_DOMAIN=${{ secrets.FRONT_NEXT_PUBLIC_DOMAIN }}" >> .env.production
echo "NEXT_PUBLIC_REDIRECT_URL=${{secrets.FRONT_NEXT_PUBLIC_REDIRECT_URL}}" >> .env.production
- # Docker image 빌드
name: Build docker image
run: |
cd ./frontend
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/techpick:client-${{ github.sha }} .
- # Docker hub 로그인
name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- # Docker hub 업로드
name: Publish to docker hub
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/techpick:client-${{ github.sha }}
- # 서버 ssh 접속 후 방금 올린 이미지 pull 받고 실행
name: Deploy on Test-Server
uses: appleboy/ssh-action@master
with:
host: minlife.me # test home server
port: 4242
username: root # root user
password: ${{ secrets.SSH_TEST_SERVER_KYEU_PASSWORD }}
script: |
echo "login docker hub for private repository access ..."
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
echo "docker - pulling..."
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/techpick:client-${{ github.sha }}
echo "docker - changing image name and tag ..."
docker tag ${{ secrets.DOCKERHUB_USERNAME }}/techpick:client-${{ github.sha }} techpick:client-staging
cd /home/project/techpick/client
docker-compose down
docker compose up -d
echo "docker - pruning images that passed 24h ..."
docker image prune -af --filter "until=24h"
- # 배포 Action 실행 결과 깃허브 알림
name: Discord Webhook Action
uses: sarisia/actions-status-discord@v1.14.7
if: always()
with:
webhook: ${{ secrets.DISCORD_WEBHOOK_URL }}
status: ${{ job.status }}
title: 'Test Client Deployment Action Result'
description: '테스트 클라이언트 ${{ env.api-version }} 배포 완료'
color: 0xff91a4
url: 'https://github.com/sarisia/actions-status-discord'
username: GitHub Actions
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.vscode
.DS_Store
.vscode/extensions.json
.vscode/settings.json
.idea
frontend/techpick/.env.production
frontend/techpick/.env.development
frontend/techpick-extension/.env.development
frontend/techpick-extension/.env.production
11 changes: 11 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
if git diff --cached --name-only | grep -q '^frontend/techpick-extension'; then
echo "frontend/techpick-extension lint or tsc error"
cd "frontend/techpick-extension"
yarn lint
yarn tsc -b
elif git diff --cached --name-only | grep -q '^frontend/techpick'; then
echo "frontend/techpick lint or tsc error"
cd frontend/techpick
yarn lint
yarn tsc
fi
10 changes: 10 additions & 0 deletions frontend/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
root = true

[*]
end_of_line = lf
insert_final_newline = true

[*.{js,json,yml}]
charset = utf-8
indent_style = space
indent_size = 2
23 changes: 23 additions & 0 deletions frontend/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/* eslint-disable no-undef */

module.exports = {
root: true,
env: {
browser: true,
es2021: true,
},
parser: '@typescript-eslint/parser',
extends: [
'eslint:recommended',
'prettier',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
rules: {
'react/react-in-jsx-scope': 'off',
},
};
4 changes: 4 additions & 0 deletions frontend/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/.yarn/** linguist-vendored
/.yarn/releases/* binary
/.yarn/plugins/**/* binary
/.pnp.* binary linguist-generated
39 changes: 39 additions & 0 deletions frontend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

# Swap the comments on the following lines if you wish to use zero-installs
# In that case, don't forget to run `yarn config set enableGlobalCache false`!
# Documentation here: https://yarnpkg.com/features/caching#zero-installs

#!.yarn/cache
#.pnp.*

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
10 changes: 10 additions & 0 deletions frontend/.prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": true,
"trailingComma": "es5",
"bracketSpacing": true,
"arrowParens": "always"
}
894 changes: 894 additions & 0 deletions frontend/.yarn/releases/yarn-4.3.1.cjs

Large diffs are not rendered by default.

32 changes: 32 additions & 0 deletions frontend/.yarn/sdks/eslint/bin/eslint.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/bin/eslint.js
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint/bin/eslint.js your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint/bin/eslint.js`));
32 changes: 32 additions & 0 deletions frontend/.yarn/sdks/eslint/lib/api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint`));
32 changes: 32 additions & 0 deletions frontend/.yarn/sdks/eslint/lib/unsupported-api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/use-at-your-own-risk
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real eslint/use-at-your-own-risk your application uses
module.exports = wrapWithUserWrapper(absRequire(`eslint/use-at-your-own-risk`));
14 changes: 14 additions & 0 deletions frontend/.yarn/sdks/eslint/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "eslint",
"version": "8.57.1-sdk",
"main": "./lib/api.js",
"type": "commonjs",
"bin": {
"eslint": "./bin/eslint.js"
},
"exports": {
"./package.json": "./package.json",
".": "./lib/api.js",
"./use-at-your-own-risk": "./lib/unsupported-api.js"
}
}
5 changes: 5 additions & 0 deletions frontend/.yarn/sdks/integrations.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# This file is automatically generated by @yarnpkg/sdks.
# Manual changes might be lost!

integrations:
- vscode
32 changes: 32 additions & 0 deletions frontend/.yarn/sdks/prettier/bin/prettier.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env node

const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);

const relPnpApiPath = "../../../../.pnp.cjs";

const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);

const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);

if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require prettier/bin/prettier.cjs
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}

const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;

// Defer to the real prettier/bin/prettier.cjs your application uses
module.exports = wrapWithUserWrapper(absRequire(`prettier/bin/prettier.cjs`));
Loading

0 comments on commit abc3c9f

Please sign in to comment.