feat: packing templates with category-based workflow — closes #14

- Admin: create/edit/delete packing templates with categories and items
- Trip packing: category-first workflow (add category → add items inside)
- Apply template button adds items additively (preserves existing)
- Replaces old item+category freetext input
This commit is contained in:
Maurice
2026-03-29 14:19:06 +02:00
parent 44138af11a
commit 2f8a189319
9 changed files with 685 additions and 91 deletions
+4
View File
@@ -12,6 +12,7 @@ import CategoryManager from '../components/Admin/CategoryManager'
import BackupPanel from '../components/Admin/BackupPanel'
import GitHubPanel from '../components/Admin/GitHubPanel'
import AddonManager from '../components/Admin/AddonManager'
import PackingTemplateManager from '../components/Admin/PackingTemplateManager'
import { Users, Map, Briefcase, Shield, Trash2, Edit2, Camera, FileText, Eye, EyeOff, Save, CheckCircle, XCircle, Loader2, UserPlus, ArrowUpCircle, ExternalLink, Download, AlertTriangle, RefreshCw, GitBranch, Sun, Link2, Copy, Plus } from 'lucide-react'
import CustomSelect from '../components/shared/CustomSelect'
@@ -57,6 +58,7 @@ export default function AdminPage(): React.ReactElement {
const TABS = [
{ id: 'users', label: t('admin.tabs.users') },
{ id: 'categories', label: t('admin.tabs.categories') },
{ id: 'templates', label: t('admin.tabs.templates') },
{ id: 'addons', label: t('admin.tabs.addons') },
{ id: 'settings', label: t('admin.tabs.settings') },
{ id: 'backup', label: t('admin.tabs.backup') },
@@ -645,6 +647,8 @@ export default function AdminPage(): React.ReactElement {
{activeTab === 'categories' && <CategoryManager />}
{activeTab === 'templates' && <PackingTemplateManager />}
{activeTab === 'addons' && <AddonManager />}
{activeTab === 'settings' && (