Conversation
* chore: 국제화 라이브러리 설치 * feat: i18next 초기화 및 언어 감지/HTTP 백엔드 설정 * feat: 국제화 라우팅 래퍼 생성 * feat: 중첩 라우팅 구조로 변경 및 국제화 라우팅 래퍼 적용 * chore: 필요한 바벨 설정 및 스크립트 추가 * feat: 파일 관련 유틸 생성 * feat: ATS 관련 및 국제화 훅 추가, t wrapper 유틸 생성 * feat: 한글 키를 기준으로 각 언어 JSON에 키 추가 유틸 생성 * feat: React 컴포넌트의 한글 텍스트 자동 변환 기능 구현 * fix: 테스트 파일과 스토리북 파일이 포함되는 문제 해결 * refactor: 컴포넌트 판별 로직을 분리하여 여러 형태에 대응할 수 있도록 수정 * feat: 템플릿 리터럴 자동 변환 및 키 추출 기능 구현 * refactor: 컴포넌트 내부에 있는 한글 문자열만 변환되도록 수정 * refactor: 복잡한 확장자 처리를 위한 라이브러리 사용으로 더이상 사용하지 않는 확장자 찾는 함수 삭제 * fix: ts-node 실행 오류 해결 및 tsx 기반으로 스크립트 전환 * refactor: 불필요한 주석 삭제 * feat: 언어셀렉터 추가 * refactor: 언어 라우팅 로직 분리 및 유틸 추가 * refactor: prop default 값의 한글이 번역되지 않아 컴포넌트 구조 수정 * refactor: br태그로 인해 번역키가 쪼개져 번역 어순 문제가 발생해 하나의 번역키가 되도록 \n구조로 수정 * refactor: 현재 사용하지 않는 컴포넌트와 유틸 삭제 * fix: prettier로 인해 줄바꿈이 되어 번역 키에 공백이 들어가는 문제 해결 * fix: 언어 라우팅 리다이렉트 시 쿼리스트링 유지가 안되는 문제 해결 * fix: 템플릿 리터럴에서 escape 문자가 포함된 한글 문자열 처리 오류 수정 * refactor: i18n자동화를 이용해서 컴포넌트 변환, import 및 hook 추가 * feat: i18n 자동화를 적용한 언어별 key, value 생성 * refactor: 언어 라우팅 쿼리 유지 및 경로 전환 문제 해결 * refactor: 발언 유형 관련 로직 유틸화 * feat: develop 병합으로 인한 새로운 키 추가 * refactor: Neutral오타 수정 * refactor: 에러메세지 추가 및 동사형으로 투표완료 번역 내용 수정 * fix: 한글 에러 메세지가 그대로 들어오는 경우 번역 안되는 문제 해결 * refactor: 단수, 복수 구분되도록 i18n Plurals 규칙 적용 * refactor: 투표 인원 카운트와 단위 사이에 공백 추가 및 투표 인원이 중복돼서 나오는 문제 수정 * refactor: 경로 하드코딩을 언어 경로 라우팅 buildLangPath 이용하여 정리 - 언어 경로가 깨지거나 리다이렉트가 발생하는 문제 해결 * fix: 개발환경에서도 설정한 base url이 들어갈 수 있도록 수정하여 개발환경에서 시간표 공유 오류 해결 * refactor: 줄바꿈 설정 빠진 부분 수정 * refactor: 발언자 길이 검증 로직 일관적이게 수정 * refactor: 상수라서 번역 안되던 부분 번역 * refactor: 띄어쓰기 적용 안 된 번역키 수정 * refactor: 종소리 설정 대문자 시작으로 수정 * refactor: 불필요한 코드 삭제 * refactor: 언어 선택 핸들러에 셀렉터 닫는 코드도 함께 넣도록 수정 * refactor: 종소리 라벨 번역 및 시간 표기 띄어쓰기 추가 * refactor: tailwind 오타 수정 * refactor: 루트 경로 비교 시 trailing slash 처리하는 정규화 추가 * refactor: 자유토론 편집 시 입력 무시되는 문제를 TIME_BASED를 입력값 우선으로 처리하도록 해결 * refactor: 중립 라벨 번역 추가 * fix: 국제화 코드 추가로 인한 테스트 코드 수정 * test: MSW 번역 핸들러에 실제 문자열 응답 추가 * test: i18n locale 고정, 라우트 추가
* chore: 비교적 안전한 업데이트 적용 * chore: 중간 수준 위험도의 업데이트 적용 * chore: 다소 높은 수준의 위험도 적용 * chore: React 버전 불일치 수정 * chore: Storybook 마이너 업데이트 진행
* feat: 에셋 추가 및 구현 * feat: 패치노트 데이터 타입 정의 * feat: 패치노트 UI 구현 * feat: 라우터에 패치노트 추가 * refactor: 자세히 보기 버튼 로직 위치 변경 * refactor: PatchNoteData 인터페이스 변수 타입 변경 * chore: 자동 PR 세팅 스크립트에서 치코 제거 * chore: 자동 PR 세팅 스크립트 제거 * chore: 주석에 이미지가 필수임을 명시 * test: Story 변수 값 수정 * refactor: 불필요한 화살표 함수 제거 * refactor: 로깅 함수 제거 * feat: 모달 표시 여부를 따질 때 버전도 함께 확인 * fix: isChecked가 최신 값으로 유지되지 못하는 문제 수정 * design: 써니 피드백 반영 * feat: 단일 이미지만 표시하는 패치 노트 타입 추가 * feat: UI에 ImageOnlyPatchNoteData 변경 사항 반영 * test: Story에 확장된 타입 명시 * refactor: 체크박스에 속성 추가 * refactor: 패치 노트 데이터 타입 다듬기 * test: 누락된 매개변수 Story에 추가 * refactor: 텍스트 클릭 시 체크박스도 터치되도록 개선 * refactor: 체크박스 클릭 시 함수 별도로 분리 * refactor: 매직 넘버 분리 * feat: 디스플레이 크기에 따라 UI 크기도 바뀌도록 개선 * feat: '자세히 보기' 버튼 클릭 시 모달 닫히도록 개선 * fix: 파일 경로 수정 * refactor: 필요 없는 타입 캐스팅 제거
* chore: 파비콘 파일 추가 * chore: Android 및 Chrome 대응을 위한 manifest.json 추가 * design: 새 파비콘 반영 * chore: 사용하지 않는 로고 삭제 * fix: 잘못된 파일 이름 정정
* design: 메인 컨테이너 크기 변경 * design: 내부 텍스트 및 컨텐츠 크기 변경 * design: 체크박스 크기 변경 * design: 추가 요구사항 반영
* chore: 프리뷰 배포 기능 * chore: 프리뷰에서 언어 변환이 적용되도록 수정 * chore: state 검증 추가 * chore: 클라우드 프론트 캐시 초기화 추가
* chore: 취약점 해결을 위한 패키지 버전 업데이트 * design: 써니의 패치 노트 피드백 추가 반영 * feat: 패치노트 모달이 랜딩 페이지, 시간표 목록 화면에만 표시되도록 수정 * refactor: 린팅 경고 해결 * fix: 빌드 오류 해결
* refactor: API 기반 코드 준비 * refactor: UI가 데이터를 API에서 패칭하도록 수정 * chore: 이제 사용하지 않는 상수 삭제 * chore: 다국어 번역 테이블에 항목 추가 * fix: 병합 과정에서 누락된 프리뷰 관련 코드 추가 * fix: 코드 리뷰 반영 * feat: 패치 노트가 랜딩 페이지와 시간표 목록 페이지에만 표시되도록 수정 * Revert "feat: 패치 노트가 랜딩 페이지와 시간표 목록 페이지에만 표시되도록 수정" This reverts commit b606b6c. * chore: 더 이상 필요하지 않은 에셋 삭제 * test: msw가 정적 이미지 에셋 요청도 가로채도록 개선 * refactor: 시간표 공유 관련 함수 한 파일로 통합 및 이름 변경 * refactor: 조금 더 탄탄한 파싱 방식 적용 * test: 테스트 함수 추가
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Tip Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs). Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이 배포는 기관별 토론 템플릿을 API 기반으로 전환하여 애플리케이션의 확장성을 높이고, 다국어 지원을 전면적으로 도입하여 글로벌 사용자들에게 더 나은 접근성을 제공합니다. 또한, 최신 의존성 업데이트를 통해 전반적인 시스템 안정성과 개발 환경을 개선하고, 새로운 업데이트 알림 모달을 추가하여 사용자에게 중요한 변경 사항을 효과적으로 전달할 수 있게 되었습니다. Highlights
Changelog
Ignored Files
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
이 PR은 배포를 위한 것으로, 기관별 템플릿을 API로 대체하고 국제화(i18n)를 위한 대규모 리팩토링 및 의존성 업데이트를 포함하고 있습니다. 전반적으로 코드의 일관성을 높이고 유지보수성을 개선하는 좋은 변경 사항들이 많습니다.
다만, package.json에서 typescript 버전 표기 방식이 비표준적이어서 수정이 필요합니다. 이 부분은 배포 전에 반드시 수정해야 합니다.
추가적으로 src/util/arrayEncoding.ts 파일에서 URL을 생성하는 로직이 중복되어 있어, 이를 개선하기 위한 리팩토링을 제안합니다.
Note: Security Review did not run due to the size of the PR.
| "tailwindcss": "^3.4.16", | ||
| "tsx": "^4.21.0", | ||
| "typescript": "^5.7.2", | ||
| "typescript": "5.7", |
| export function createTableShareUrlFromTable( | ||
| baseUrl: string | undefined, | ||
| data: DebateTableData, | ||
| ): string { | ||
| const encoded = encodeDebateTableData(data); | ||
| return `${baseUrl}/share?data=${encoded}`; | ||
| const resolvedBaseUrl = | ||
| baseUrl && baseUrl.trim() !== '' ? baseUrl : window.location.origin; | ||
| const normalizedBaseUrl = resolvedBaseUrl.replace(/\/+$/, ''); | ||
| const basePath = import.meta.env.VITE_BASE_PATH; | ||
| const pathPrefix = basePath && basePath !== '/' ? basePath : ''; | ||
| return `${normalizedBaseUrl}${pathPrefix}/share?data=${encoded}`; | ||
| } | ||
|
|
||
| export function createTableShareUrlFromEncodedData(encodeData: string): string { | ||
| const baseUrl = import.meta.env.VITE_SHARE_BASE_URL || window.location.origin; | ||
| const resolvedBaseUrl = | ||
| baseUrl && baseUrl.trim() !== '' ? baseUrl : window.location.origin; | ||
| const normalizedBaseUrl = resolvedBaseUrl.replace(/\/+$/, ''); | ||
| const basePath = import.meta.env.VITE_BASE_PATH; | ||
| const pathPrefix = basePath && basePath !== '/' ? basePath : ''; | ||
| return `${normalizedBaseUrl}${pathPrefix}/share?data=${encodeData}`; | ||
| } |
There was a problem hiding this comment.
createTableShareUrlFromTable 함수와 createTableShareUrlFromEncodedData 함수 내에서 공유 URL을 생성하는 로직이 거의 동일하게 중복되고 있습니다. 코드의 중복을 줄이고 유지보수성을 높이기 위해 이 로직을 별도의 헬퍼 함수로 추출하는 것이 좋습니다.
function buildShareUrl(encodedData: string, baseUrl?: string): string {
const resolvedBaseUrl =
baseUrl && baseUrl.trim() !== '' ? baseUrl : window.location.origin;
const normalizedBaseUrl = resolvedBaseUrl.replace(/\/+$/, '');
const basePath = import.meta.env.VITE_BASE_PATH;
const pathPrefix = basePath && basePath !== '/' ? basePath : '';
return `${normalizedBaseUrl}${pathPrefix}/share?data=${encodedData}`;
}
export function createTableShareUrlFromTable(
baseUrl: string | undefined,
data: DebateTableData,
): string {
const encoded = encodeDebateTableData(data);
return buildShareUrl(encoded, baseUrl);
}
export function createTableShareUrlFromEncodedData(encodeData: string): string {
const baseUrl = import.meta.env.VITE_SHARE_BASE_URL;
return buildShareUrl(encodeData, baseUrl);
}
🚩 연관 이슈
closed #430
📝 작업 내용
기관별 템플릿을 API로 대체한 버전을 배포합니다. 특이사항으로, 파일 삭제에 따른 develop 브랜치와 main 브랜치 간 충돌이 있어, develop에서 별도 브랜치 분리 후 main으로 병합하는 점 안내합니다.
🏞️ 스크린샷 (선택)
없음
🗣️ 리뷰 요구사항 (선택)
없음