diff --git a/.replit b/.replit index 2202770..a572720 100644 --- a/.replit +++ b/.replit @@ -18,10 +18,6 @@ externalPort = 80 localPort = 35345 externalPort = 3002 -[[ports]] -localPort = 36697 -externalPort = 4200 - [[ports]] localPort = 39063 externalPort = 3001 diff --git a/client/src/App.tsx b/client/src/App.tsx index 58da0f1..4fa2e61 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -348,7 +348,7 @@ function App() { ); case 'settings': - return ; + return setCurrentTab('templates')} />; default: return ( diff --git a/client/src/i18n/locales/de.json b/client/src/i18n/locales/de.json index ac5e256..98aecb4 100644 --- a/client/src/i18n/locales/de.json +++ b/client/src/i18n/locales/de.json @@ -172,15 +172,31 @@ "english": "Englisch (English)", "german": "Deutsch" }, - "appearance": { - "title": "Erscheinungsbild", - "description": "Passe das Aussehen an", - "themeToggle": "Thema-Umschalter ist in der Kopfzeile verfügbar" + "labels": { + "title": "Aufgabenlabels", + "description": "Erstellen und verwalten Sie Labels, um Ihre Aufgaben zu organisieren", + "createLabel": "Label erstellen", + "createNewLabel": "Neues Label erstellen", + "editLabel": "Label bearbeiten", + "labelNamePlaceholder": "Label-Name", + "cancel": "Abbrechen", + "create": "Erstellen", + "update": "Aktualisieren", + "loading": "Labels werden geladen...", + "noLabels": "Noch keine Labels", + "noLabelsDescription": "Erstellen Sie Ihr erstes Label, um Ihre Aufgaben nach Farbe und Kategorie zu organisieren.", + "deleteConfirm": "Sind Sie sicher, dass Sie dieses Label löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", + "created": "Label erstellt", + "createdDescription": "Ihr Label wurde erfolgreich erstellt.", + "updated": "Label aktualisiert", + "updatedDescription": "Ihr Label wurde erfolgreich aktualisiert.", + "deleted": "Label gelöscht", + "deletedDescription": "Ihr Label wurde erfolgreich gelöscht." }, "templates": { "title": "Projektvorlagen", "description": "Verwende Vorlagen zum schnellen Erstellen von Projekten", - "accessInfo": "Zugriff auf Vorlagen über das Navigationsmenü" + "manageTemplates": "Vorlagen verwalten" } }, "projectTemplate": { diff --git a/client/src/i18n/locales/en.json b/client/src/i18n/locales/en.json index 7d9ecbe..2efb574 100644 --- a/client/src/i18n/locales/en.json +++ b/client/src/i18n/locales/en.json @@ -172,15 +172,31 @@ "english": "English", "german": "German (Deutsch)" }, - "appearance": { - "title": "Appearance", - "description": "Customize the look and feel", - "themeToggle": "Theme toggle available in the header" + "labels": { + "title": "Task Labels", + "description": "Create and manage labels to organize your tasks", + "createLabel": "Create Label", + "createNewLabel": "Create New Label", + "editLabel": "Edit Label", + "labelNamePlaceholder": "Label name", + "cancel": "Cancel", + "create": "Create", + "update": "Update", + "loading": "Loading labels...", + "noLabels": "No labels yet", + "noLabelsDescription": "Create your first label to organize your tasks by color and category.", + "deleteConfirm": "Are you sure you want to delete this label? This action cannot be undone.", + "created": "Label created", + "createdDescription": "Your label has been created successfully.", + "updated": "Label updated", + "updatedDescription": "Your label has been updated successfully.", + "deleted": "Label deleted", + "deletedDescription": "Your label has been deleted successfully." }, "templates": { "title": "Project Templates", "description": "Use templates to quickly create projects", - "accessInfo": "Access templates from the navigation menu" + "manageTemplates": "Manage Templates" } }, "projectTemplate": { diff --git a/client/src/pages/settings.tsx b/client/src/pages/settings.tsx index f50526c..4a723c1 100644 --- a/client/src/pages/settings.tsx +++ b/client/src/pages/settings.tsx @@ -1,10 +1,28 @@ +import { useState } from 'react'; import { useTranslation } from 'react-i18next'; +import { useQuery, useMutation } from '@tanstack/react-query'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; -import { Globe } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; +import { Globe, Tag, Plus, Edit, Trash2, Layers } from 'lucide-react'; +import { Label } from '@shared/schema'; +import { queryClient, apiRequest } from '@/lib/queryClient'; +import { useToast } from '@/hooks/use-toast'; -export default function Settings() { +interface SettingsProps { + onNavigateToTemplates: () => void; +} + +export default function Settings({ onNavigateToTemplates }: SettingsProps) { const { t, i18n } = useTranslation(); + const { toast } = useToast(); + + const [isLabelDialogOpen, setIsLabelDialogOpen] = useState(false); + const [editingLabel, setEditingLabel] = useState