From face9dcfed22a78efdd400a14311b13917d73018 Mon Sep 17 00:00:00 2001 From: ssoogit Date: Sun, 3 Aug 2025 06:03:32 +0900 Subject: [PATCH 01/12] =?UTF-8?q?refactor(editor):=20=EC=97=90=EB=94=94?= =?UTF-8?q?=ED=84=B0=EC=97=90=EC=84=9C=EC=9D=98=20=ED=99=95=EC=9E=A5?= =?UTF-8?q?=EC=9E=90=20=EC=84=B8=EB=B6=80=20=EC=84=A4=EC=A0=95=20=EB=B0=8F?= =?UTF-8?q?=20=ED=99=95=EC=9E=A5=EC=9E=90=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20=EC=84=A4=EC=A0=95=20/=20DP-204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icons/book.svg | 3 ++ src/assets/icons/chart.svg | 3 ++ src/assets/icons/git-merge.svg | 3 ++ src/assets/icons/image.svg | 3 ++ src/assets/icons/note.svg | 3 ++ src/utils/editorLanguages.ts | 71 +++++++++++++++++++++++-- src/utils/fileExtensions.ts | 94 ++++++++++++++++++++++++++++++++++ 7 files changed, 177 insertions(+), 3 deletions(-) create mode 100644 src/assets/icons/book.svg create mode 100644 src/assets/icons/chart.svg create mode 100644 src/assets/icons/git-merge.svg create mode 100644 src/assets/icons/image.svg create mode 100644 src/assets/icons/note.svg diff --git a/src/assets/icons/book.svg b/src/assets/icons/book.svg new file mode 100644 index 00000000..fd749ece --- /dev/null +++ b/src/assets/icons/book.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/chart.svg b/src/assets/icons/chart.svg new file mode 100644 index 00000000..0c8e42aa --- /dev/null +++ b/src/assets/icons/chart.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/git-merge.svg b/src/assets/icons/git-merge.svg new file mode 100644 index 00000000..b2d3c968 --- /dev/null +++ b/src/assets/icons/git-merge.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/image.svg b/src/assets/icons/image.svg new file mode 100644 index 00000000..9f24f683 --- /dev/null +++ b/src/assets/icons/image.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/note.svg b/src/assets/icons/note.svg new file mode 100644 index 00000000..dde7c3bb --- /dev/null +++ b/src/assets/icons/note.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/utils/editorLanguages.ts b/src/utils/editorLanguages.ts index d7f54171..921b00ad 100644 --- a/src/utils/editorLanguages.ts +++ b/src/utils/editorLanguages.ts @@ -11,7 +11,25 @@ export const LANGUAGE_CONFIGS: Record = { language: 'spring-boot', id: 'java', monacoLanguage: 'java', - fileExtensions: ['.java', '.xml', '.properties', '.yaml', '.yml'], + fileExtensions: [ + '.java', + '.xml', + '.properties', + '.yaml', + '.yml', + '.gradle', + '.gradle.kts', + '.sql', + '.jsp', + '.jspx', + '.ftl', + '.vm', + '.groovy', + '.kt', + '.kts', + '.conf', + '.toml', + ], defaultTheme: 'vs-dark', snippets: ['sysout', 'psvm', 'fori'], }, @@ -19,7 +37,31 @@ export const LANGUAGE_CONFIGS: Record = { language: 'react', id: 'typescript', monacoLanguage: 'typescript', - fileExtensions: ['.ts', '.tsx', '.js', '.jsx', '.json', '.css', '.scss'], + fileExtensions: [ + '.ts', + '.tsx', + '.js', + '.jsx', + '.json', + '.css', + '.scss', + '.sass', + '.less', + '.stylus', + '.postcss', + '.vue', + '.svelte', + '.mjs', + '.cjs', + '.d.ts', + '.mdx', + '.html', + '.htm', + '.env', + '.env.local', + '.env.development', + '.env.production', + ], defaultTheme: 'vs-dark', snippets: ['rfc', 'useState', 'useEffect'], }, @@ -27,7 +69,30 @@ export const LANGUAGE_CONFIGS: Record = { language: 'fastapi', id: 'python', monacoLanguage: 'python', - fileExtensions: ['.py', '.pyi', '.pyx', '.requirements.txt'], + fileExtensions: [ + '.py', + '.pyi', + '.pyx', + '.requirements.txt', + '.pyc', + '.pyo', + '.pyw', + '.ipynb', + '.toml', + '.cfg', + '.ini', + '.txt', + '.lock', + '.pipfile', + '.dockerfile', + '.dockerignore', + '.env', + '.jinja', + '.jinja2', + '.j2', + '.iml', + '.http', + ], defaultTheme: 'vs-dark', snippets: ['def', 'class', 'if', 'for'], }, diff --git a/src/utils/fileExtensions.ts b/src/utils/fileExtensions.ts index 56387469..ac5b5655 100644 --- a/src/utils/fileExtensions.ts +++ b/src/utils/fileExtensions.ts @@ -8,6 +8,13 @@ import articleIcon from '@/assets/icons/article.svg'; import slidersIcon from '@/assets/icons/sliders.svg'; import folderClosedIcon from '@/assets/icons/folder-closed.svg'; import folderOpenIcon from '@/assets/icons/folder-open.svg'; +import chartIcon from '@/assets/icons/chart.svg'; +import noteIcon from '@/assets/icons/note.svg'; +import lockIcon from '@/assets/icons/lock.svg'; +import archiveIcon from '@/assets/icons/archive.svg'; +import bookIcon from '@/assets/icons/book.svg'; +import imageIcon from '@/assets/icons/image.svg'; +import gitIcon from '@/assets/icons/git-merge.svg'; export const getLanguageFromFile = (fileName: string): string => { const extension = fileName.split('.').pop()?.toLowerCase(); @@ -19,6 +26,17 @@ export const getLanguageFromFile = (fileName: string): string => { properties: 'properties', yaml: 'yaml', yml: 'yaml', + gradle: 'groovy', + kts: 'kotlin', + sql: 'sql', + jsp: 'html', + jspx: 'xml', + ftl: 'html', + vm: 'html', + groovy: 'groovy', + kt: 'kotlin', + conf: 'ini', + toml: 'toml', // React/TypeScript ts: 'typescript', @@ -28,11 +46,36 @@ export const getLanguageFromFile = (fileName: string): string => { json: 'json', css: 'css', scss: 'scss', + sass: 'scss', + less: 'less', + stylus: 'stylus', + postcss: 'css', + vue: 'html', + svelte: 'html', + mjs: 'javascript', + cjs: 'javascript', + mdx: 'markdown', + htm: 'html', + env: 'properties', // Python/FastAPI py: 'python', pyi: 'python', pyx: 'python', + pyc: 'python', + pyo: 'python', + pyw: 'python', + ipynb: 'json', + cfg: 'ini', + ini: 'ini', + lock: 'yaml', + pipfile: 'toml', + dockerignore: 'plaintext', + jinja: 'html', + jinja2: 'html', + j2: 'html', + iml: 'xml', + http: 'plaintext', // 기타 - Monaco Editor 언어 ID에 맞춰 수정 md: 'markdown', @@ -40,6 +83,13 @@ export const getLanguageFromFile = (fileName: string): string => { html: 'html', dockerfile: 'dockerfile', gitignore: 'plaintext', + log: 'plaintext', + eslintrc: 'json', + prettierrc: 'json', + editorconfig: 'ini', + nvmrc: 'plaintext', + npmrc: 'ini', + svg: 'xml', }; return extensionMap[extension || ''] || 'plaintext'; @@ -55,6 +105,17 @@ export const getFileIcon = (fileName: string): string => { properties: slidersIcon, yaml: fileAltIcon, yml: fileAltIcon, + gradle: scriptIcon, + kts: scriptIcon, + sql: chartIcon, + jsp: codeIcon, + jspx: codeIcon, + ftl: noteIcon, + vm: noteIcon, + groovy: scriptIcon, + kt: codeIcon, + conf: slidersIcon, + toml: slidersIcon, // React/TypeScript ts: codeIcon, @@ -64,14 +125,47 @@ export const getFileIcon = (fileName: string): string => { json: fileAltIcon, css: colorsSwatchIcon, scss: colorsSwatchIcon, + sass: colorsSwatchIcon, + less: colorsSwatchIcon, + stylus: colorsSwatchIcon, + postcss: colorsSwatchIcon, + vue: codeIcon, + svelte: codeIcon, + mjs: scriptIcon, + cjs: scriptIcon, + mdx: articleIcon, + htm: codeIcon, + env: lockIcon, // Python/FastAPI py: scriptIcon, + pyc: archiveIcon, + pyo: archiveIcon, + pyw: scriptIcon, + ipynb: bookIcon, + cfg: slidersIcon, + ini: slidersIcon, + lock: lockIcon, + pipfile: fileAltIcon, + dockerignore: fileOffIcon, + jinja: noteIcon, + jinja2: noteIcon, + j2: noteIcon, + iml: slidersIcon, + http: scriptIcon, // 기타 md: articleIcon, txt: notesIcon, html: codeIcon, + log: notesIcon, + eslintrc: slidersIcon, + prettierrc: slidersIcon, + editorconfig: slidersIcon, + nvmrc: fileAltIcon, + npmrc: slidersIcon, + gitignore: gitIcon, + svg: imageIcon, }; return iconMap[extension || ''] || fileOffIcon; From fd177a9ea2eed94a7cdb375f7ed71a0a4cc45e08 Mon Sep 17 00:00:00 2001 From: Shin-Yu-1 Date: Sun, 3 Aug 2025 08:45:21 +0900 Subject: [PATCH 02/12] =?UTF-8?q?fix:=20origin=20=EC=A3=BC=EC=86=8C=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=EB=AC=B8=EB=95=8C=EB=AC=B8=EC=97=90=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=ED=95=9C=20=EA=B2=83=20=ED=99=95=EC=9D=B8?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EC=A0=9C=EA=B1=B0=ED=95=A8.=20/=20DP-205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../molecules/GitHubLoginButton/GitHubLoginButton.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/molecules/GitHubLoginButton/GitHubLoginButton.tsx b/src/components/molecules/GitHubLoginButton/GitHubLoginButton.tsx index 5e56d9b6..45651c24 100644 --- a/src/components/molecules/GitHubLoginButton/GitHubLoginButton.tsx +++ b/src/components/molecules/GitHubLoginButton/GitHubLoginButton.tsx @@ -31,8 +31,6 @@ const GitHubLoginButton = () => { } const handleMessage = (event: MessageEvent) => { - if (event.origin !== 'http://localhost:8080') return; - const { type, response } = event.data; if (type === 'GITHUB_LOGIN_SUCCESS') { setAuthSocialLogin(response); From 4ab7a7fbe976433da9ea77e17a4f9e4d436374f4 Mon Sep 17 00:00:00 2001 From: Jammanb0 <151705970+Jammanb0@users.noreply.github.com> Date: Sun, 3 Aug 2025 04:50:36 +0900 Subject: [PATCH 03/12] =?UTF-8?q?fix(CreatFileModal):=20=EC=9E=98=EB=AA=BB?= =?UTF-8?q?=EB=90=9C=20=ED=86=A0=EC=8A=A4=ED=8A=B8=20=EC=95=88=EB=82=B4=20?= =?UTF-8?q?=EB=AC=B8=EA=B5=AC=20=EC=88=98=EC=A0=95=20/=20DP-203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fileTree/components/CreateFileModal/CreateFileModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/Repo/fileTree/components/CreateFileModal/CreateFileModal.tsx b/src/features/Repo/fileTree/components/CreateFileModal/CreateFileModal.tsx index ff4dcb87..377df2c9 100644 --- a/src/features/Repo/fileTree/components/CreateFileModal/CreateFileModal.tsx +++ b/src/features/Repo/fileTree/components/CreateFileModal/CreateFileModal.tsx @@ -114,7 +114,7 @@ const CreateFileModal: React.FC = ({ } onConfirm(trimmedName, parentNode?.path); - toast.success(`${isFile ? '파일' : '폴더'}이 생성되었습니다.`); + toast.success(`${isFile ? '파일이' : '폴더가'} 생성되었습니다.`); cleanupModal(); onOpenChange(false); }, [ From 6989701515e6f7101eab7b4327467b72a9cd1b7d Mon Sep 17 00:00:00 2001 From: Jammanb0 <151705970+Jammanb0@users.noreply.github.com> Date: Sun, 3 Aug 2025 06:00:48 +0900 Subject: [PATCH 04/12] =?UTF-8?q?feat(Tab):=20Tab=20=EC=8B=A4=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=EB=B3=80=EB=8F=99=EC=82=AC=ED=95=AD=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=20/=20DP-203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sidebar/RepoSidebar/RepoSidebar.tsx | 10 +- .../organisms/TabBar/TabBar.module.scss | 64 ++++++++++++ src/components/organisms/TabBar/TabBar.tsx | 27 ++--- src/features/Repo/fileTree/FileTree.tsx | 41 ++++++++ src/pages/Repo/RepoPage.tsx | 13 ++- src/stores/tabStore.ts | 99 +++++++++++++++++++ src/types/repo/repo.types.ts | 6 +- src/types/repo/tabStore.types.ts | 21 ++-- 8 files changed, 252 insertions(+), 29 deletions(-) diff --git a/src/components/organisms/Sidebar/RepoSidebar/RepoSidebar.tsx b/src/components/organisms/Sidebar/RepoSidebar/RepoSidebar.tsx index a0f2e8c3..ef7fc14f 100644 --- a/src/components/organisms/Sidebar/RepoSidebar/RepoSidebar.tsx +++ b/src/components/organisms/Sidebar/RepoSidebar/RepoSidebar.tsx @@ -23,6 +23,14 @@ export const Sidebar = () => { } }; + const handleExitClick = () => { + if (repoId) { + navigate({ + to: '/main', + }); + } + }; + return (