Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/#409-K: 선택된 회의록 id URL에 반영 #411

Merged
merged 19 commits into from
Jun 12, 2023
Merged

Feat/#409-K: 선택된 회의록 id URL에 반영 #411

merged 19 commits into from
Jun 12, 2023

Conversation

se030
Copy link
Collaborator

@se030 se030 commented May 30, 2023

🤠 개요

💫 설명

  • pathname 정규식이 수정됐어요. 정규식 이해를 돕기 위해 주석을 추가했습니다.

    // App.tsx
      const validPathPattern = /^\/workspace(\/\d+(\/.+)?)?$/; // /workspace(/숫자(/아무거나)) 와 처음부터 끝까지 일치하는 패턴
      if (user && !validPathPattern.test(pathname)) {
        navigate('/workspace');
      }
    
    // ...
            <Routes>
              <Route path="/" element={<LoginPage />} />
              <Route path="/oauth" element={<OAuthPage />} />
              <Route path="/workspace/*" element={<WorkspacePage />} />
  • Workspace 컴포넌트에서 선택 회의록 id를 알 수 있고 URL에 따라서 동작합니다.

    // Workspace.tsx
    const params = useParams();
    const momId = params['*'];
    
    // ...
    
    useEffect(() => {
      if (!workspace) return;
      const { moms } = workspace;
    
      if (!momId && moms.length) {
        navigate(moms[0]._id); // 선택 회의록이 없는 경우 첫번째 회의록으로 navigate
      }
    }, [workspace, momId]);
  • MomList 아이템들의 onSelect 핸들러는 선택 회의록 정보를 리셋하고 선택된 id로 navigate합니다.

    // MomList.tsx
      const onSelect = (id: string) => {
        setSelectedMom(null);
        navigate(id);
      };
  • Workspace 쪽에서 URL 정보를 사용해 MOM_EVENT.SELECT를 emit하는 흐름이에요. 동일 이벤트에 의해 발생하는 동작 흐름이 비슷한 위치에 있어야 이해하기 쉬울 것 같아 관련 로직은 모두 Workspace 컴포넌트로 옮겼습니다.

    // 선택 회의록이 변경되면 클라이언트 상태를 변경하기 전에 회의록 소켓 서버에 알려줘야 함
    useEffect(() => {
      if (momId && momSocket) {
        const message: MomMessage.Select = { id: momId };
        momSocket.emit(MOM_EVENT.SELECT, message);
      }
    }, [momId, momSocket]);

🌜 고민거리

  • 작업하면서 상태관리 라이브러리 사용이 결정돼서 Context 관련 리팩토링은 진행하지 않을게요.

  • 마이그레이션 작업에서 앱 전체적으로 상태에 대한 관심사가 제대로 분리되어 있는지, 비동기로 업데이트되는 상태들에 대해서 로딩이나 Skeleton이 제대로 적용되고 있는지 확인이 필요할 것 같아요.

    • 아래처럼 Skeleton 대신 빈 영역이 렌더링되고 있어 해결 방법을 고민하고 있어요. (상태 관련 리팩토링이 필요해요.)

      image

📷 스크린샷 (Optional)

@se030 se030 added the ✨ Feat 기능 개발 label May 30, 2023
@se030 se030 self-assigned this May 30, 2023
@se030 se030 marked this pull request as ready for review June 5, 2023 03:31
@se030 se030 requested a review from dohun31 June 5, 2023 03:32
@se030 se030 changed the title Feat/#409-K Feat/#409-K: 선택된 회의록 id URL에 반영 Jun 5, 2023
Copy link
Member

@dohun31 dohun31 left a comment

Choose a reason for hiding this comment

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

진짜 상태들이 다 여기저기 흩어져있어서 애먹었네요
관심사 분리 시급해요,,,😂

client/src/components/Mom/index.tsx Outdated Show resolved Hide resolved
client/src/components/Mom/index.tsx Outdated Show resolved Hide resolved
@dohun31
Copy link
Member

dohun31 commented Jun 5, 2023

각 폴더들에 index.ts 만들어서 import문 정리하는 의견 제시합니다..

이유는 너무 import ... from ...이 많아서 import순서가 섞여있으면 뭔가 보기 힘들어요

import { Workspace, Mom, MomList } from "@src/components"
import { 
  SelectedMomContext, 
  WorkspaceContext,
 } from "@src/hooks/context"

@se030
Copy link
Collaborator Author

se030 commented Jun 5, 2023

각 폴더들에 index.ts 만들어서 import문 정리하는 의견 제시합니다..

이유는 너무 import ... from ...이 많아서 import순서가 섞여있으면 뭔가 보기 힘들어요

import { Workspace, Mom, MomList } from "@src/components"
import { 
  SelectedMomContext, 
  WorkspaceContext,
 } from "@src/hooks/context"

배럴 파일로 만들면 원본 파일을 찾아갈 때 두 depth를 들어가야 하는데 어떤게 더 불편할까요?
이제보니 자동완성 경로도 src/components, comopnents/ 이런식으로 섞여있네요. 여러가지 대공사가 필요해요.

@dohun31
Copy link
Member

dohun31 commented Jun 5, 2023

각 폴더들에 index.ts 만들어서 import문 정리하는 의견 제시합니다..
이유는 너무 import ... from ...이 많아서 import순서가 섞여있으면 뭔가 보기 힘들어요

import { Workspace, Mom, MomList } from "@src/components"
import { 
  SelectedMomContext, 
  WorkspaceContext,
 } from "@src/hooks/context"

배럴 파일로 만들면 원본 파일을 찾아갈 때 두 depth를 들어가야 하는데 어떤게 더 불편할까요? 이제보니 자동완성 경로도 src/components, comopnents/ 이런식으로 섞여있네요. 여러가지 대공사가 필요해요.

뭐가됐든 먼저 하나로 통일 시켜야겠네요

@dohun31
Copy link
Member

dohun31 commented Jun 5, 2023

아 정규식도 상수로 빼서 관리하는건 어때요?

se030 added 5 commits June 5, 2023 21:06
- 초기 접속한 URL에 momId가 지정되어 있을 경우도 커버하기 위해 URL 변경에 소켓 이벤트가 발생하도록 변경
- MomList는 navigate 역할만 수행
- 이동할 워크스페이스 정보가 로드되기 전 렌더링 로직을 위해 workspace atom null로 리셋
- 이전과 값이 동일한 경우에는 변동이 없도록 수정
@se030
Copy link
Collaborator Author

se030 commented Jun 5, 2023

아 정규식도 상수로 빼서 관리하는건 어때요?

정규식 특성 상 가독성이 떨어지긴 하는데, 어떻게 명확한 네이밍을 할지도 고민이고 지금 사용되는 정규식 패턴이 서로 달라서 상수화가 의미있을지 잘 모르겠어요. 의미를 쉽게 파악할 수 있게 주석을 한번 추가해볼게요!

정규식을 읽기 쉽게 쓸 수 있게 해주는 아래와 같은 라이브러리들도 있는데 두 라인을 위해서 도입하기에는 과한 느낌이에요. 언젠가 유용하게 쓸 수 있을지 모르니 남겨둘게요 😗

@se030 se030 requested a review from dohun31 June 5, 2023 13:04
@se030
Copy link
Collaborator Author

se030 commented Jun 5, 2023

PR Details 수정했어요 리뷰하실 때 참고해주세요 👍🏻

Copy link
Member

@dohun31 dohun31 left a comment

Choose a reason for hiding this comment

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

너무 깔끔해졌어요
이제야 각자의 관심사를 찾아간 느낌이에요 ㅋㅋㅋㅋ
세영님 대단해요

client/src/components/Sidebar/index.tsx Show resolved Hide resolved
client/src/components/Workspace/index.tsx Outdated Show resolved Hide resolved
client/src/components/Workspace/index.tsx Show resolved Hide resolved
client/src/components/WorkspaceThumbnailList/index.tsx Outdated Show resolved Hide resolved
client/src/components/WorkspaceThumbnailList/index.tsx Outdated Show resolved Hide resolved
se030 added 2 commits June 13, 2023 03:23
Refactor: 상태 관리에 react-query 적용 #412
recoil 관련 코드 제거 및 react-query로 대체
@se030 se030 merged commit c3ff94e into dev Jun 12, 2023
@se030 se030 deleted the feat/#409-K branch June 12, 2023 18:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feat 기능 개발
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Refactor: Context 타입 가드 훅 리팩토링 Feat: 선택된 회의록 정보 URL params로 관리
2 participants