From f9c9bf117e5bc1ead4e5a08939a90cc20b33cfc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Sat, 28 Mar 2026 20:48:05 +0300 Subject: [PATCH] feat: implement dashboard UI and configure path aliases for renderer and locales --- electron.vite.config.ts | 4 +- src/renderer/src/App.tsx | 189 +++++++++++------- src/renderer/src/i18n.ts | 6 +- {locales => src/renderer/src/locales}/de.json | 0 {locales => src/renderer/src/locales}/en.json | 0 {locales => src/renderer/src/locales}/tr.json | 0 tsconfig.web.json | 3 + 7 files changed, 124 insertions(+), 78 deletions(-) rename {locales => src/renderer/src/locales}/de.json (100%) rename {locales => src/renderer/src/locales}/en.json (100%) rename {locales => src/renderer/src/locales}/tr.json (100%) diff --git a/electron.vite.config.ts b/electron.vite.config.ts index de357f2..561fc4a 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -12,8 +12,8 @@ export default defineConfig({ renderer: { resolve: { alias: { - '@renderer': resolve('src/renderer/src'), - '@locales': resolve('locales') + '@renderer': resolve(__dirname, 'src/renderer/src'), + '@locales': resolve(__dirname, 'src/renderer/src/locales') } }, plugins: [react()] diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 4196849..a6423e5 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -34,7 +34,9 @@ import { Tab, InputAdornment, CircularProgress, - Stack + Stack, + Grid, + Avatar } from '@mui/material' import { Dashboard as DashboardIcon, @@ -55,11 +57,14 @@ import { Save as SaveIcon, LanguageOutlined as WebIcon, Terminal as TerminalIcon, - ContentCopy as CopyIcon, Close as CloseIcon, ContentCopy as ContentCopyIcon, OpenInNew as OpenIcon, - Edit as EditIcon + Edit as EditIcon, + Folder as FolderIcon, + Storage as MySQLIcon, + Language as HostIcon, + Launch as LaunchIcon } from '@mui/icons-material' import { useTranslation } from 'react-i18next' @@ -810,33 +815,110 @@ function App(): JSX.Element { Henüz bir proje eklenmemiş. ) : ( - + {projects.map((project) => ( - - - { - setNewProject(project) - setIsProjectDialogOpen(true) - }} sx={{ mr: 1 }}> - - - handleRemoveProject(project.id)}> - - - - } + + - - - - + + + + + + + + {project.name} + + + {project.path.length > 40 ? '...' + project.path.slice(-37) : project.path} + + + + + + { + setNewProject(project) + setIsProjectDialogOpen(true) + }} sx={{ color: 'rgba(255,255,255,0.4)', '&:hover': { color: '#39A7FF' } }}> + + + + + handleRemoveProject(project.id)} sx={{ color: 'rgba(255,255,255,0.4)', '&:hover': { color: '#ff4444' } }}> + + + + + + + + + } + label={`PHP ${project.phpVersion}`} + sx={{ bgcolor: 'rgba(71, 74, 255, 0.1)', color: '#777bb4', fontWeight: 600, border: '1px solid rgba(71, 74, 255, 0.2)' }} + /> + {project.mySqlVersion && ( + } + label={`MySQL ${project.mySqlVersion}`} + sx={{ bgcolor: 'rgba(242, 145, 17, 0.1)', color: '#f29111', fontWeight: 600, border: '1px solid rgba(242, 145, 17, 0.2)' }} + /> + )} + + + + + + + {project.host} + + + + + + + ))} - + )} )} @@ -1046,51 +1128,12 @@ function App(): JSX.Element { variant="contained" disabled={!newProject.name || !newProject.path || installedPhpVersions.length === 0 || mySqlVersions.filter(v => v.status === 'installed').length === 0} > - - - {/* Log Dialog */} - setLogDialogOpen(false)} fullWidth maxWidth="md"> - - - - {selectedService.toUpperCase()} Konsol Çıktısı - - - navigator.clipboard.writeText(logs.join('\n'))}> - - - - - - - {logs.length === 0 ? ( - Henüz log kaydı yok... - ) : ( - logs.map((line, i) => ( - - {line} - - )) - )} - - - - - - - - ) + {newProject.id ? 'Güncelle' : 'Ekle'} + + + + + ) } - export default App +export default App diff --git a/src/renderer/src/i18n.ts b/src/renderer/src/i18n.ts index 28d984a..e5499fd 100644 --- a/src/renderer/src/i18n.ts +++ b/src/renderer/src/i18n.ts @@ -1,8 +1,8 @@ import i18n from 'i18next' import { initReactI18next } from 'react-i18next' -import tr from '@locales/tr.json' -import en from '@locales/en.json' -import de from '@locales/de.json' +import tr from './locales/tr.json' +import en from './locales/en.json' +import de from './locales/de.json' i18n .use(initReactI18next) diff --git a/locales/de.json b/src/renderer/src/locales/de.json similarity index 100% rename from locales/de.json rename to src/renderer/src/locales/de.json diff --git a/locales/en.json b/src/renderer/src/locales/en.json similarity index 100% rename from locales/en.json rename to src/renderer/src/locales/en.json diff --git a/locales/tr.json b/src/renderer/src/locales/tr.json similarity index 100% rename from locales/tr.json rename to src/renderer/src/locales/tr.json diff --git a/tsconfig.web.json b/tsconfig.web.json index 4a4ff1f..c3c4125 100644 --- a/tsconfig.web.json +++ b/tsconfig.web.json @@ -13,6 +13,9 @@ "paths": { "@renderer/*": [ "src/renderer/src/*" + ], + "@locales/*": [ + "src/renderer/src/locales/*" ] } }