feat(ui): UI-002 Command Palette und Deep-Links statt Nav-Umbau
Globale Suche/Quick Actions per Strg/Cmd+K (CommandPalette): Objekt- Suche nach Name/Code, Sprung zu QR-Scan/Material/Lager/Personal/ Verwaltung. AdminPage-Tab jetzt im URL-Query (?tab=...) statt nur lokalem State, damit die Palette gezielt verlinken kann, ohne Routen zu duplizieren. Bewusst keine neuen Sidebar-Punkte fuer Fahrzeuge/ Kontrollen/Pruefungen - dafuer gibt es keine eigenstaendigen Listen- Seiten in MABEA. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useSearchParams } from "react-router-dom";
|
||||
|
||||
import { apiRequest } from "../api/client";
|
||||
import { useAuth } from "../auth/AuthContext";
|
||||
@@ -96,9 +97,16 @@ export function AdminPage() {
|
||||
const [qualifikationstypen, setQualifikationstypen] = useState<Qualifikationstyp[]>([]);
|
||||
const [fehler, setFehler] = useState<string | null>(null);
|
||||
const [laedt, setLaedt] = useState(true);
|
||||
const [tab, setTab] = useState<Tab | null>(null);
|
||||
// UI-002 (Epic 20): Tab im URL-Query statt nur lokalem State - erlaubt
|
||||
// Deep-Links von der Command Palette (z.B. /admin?tab=material).
|
||||
const [suchparameter, setSuchparameter] = useSearchParams();
|
||||
const tab = suchparameter.get("tab") as Tab | null;
|
||||
const aktiverTab = tab && sichtbareTabs.some((t) => t.key === tab) ? tab : sichtbareTabs[0]?.key ?? null;
|
||||
|
||||
function setTab(neuerTab: Tab) {
|
||||
setSuchparameter({ tab: neuerTab });
|
||||
}
|
||||
|
||||
async function ladeAlles() {
|
||||
// /benutzer ist admin-only (Backend require_roles) - Promise.all würde bei
|
||||
// Material-/Leitungsverantwortlichen mit 403 durchfallen und die komplette
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { Link, useNavigate } from "react-router-dom";
|
||||
import { Link, useNavigate, useSearchParams } from "react-router-dom";
|
||||
|
||||
import { apiRequest, ApiError } from "../api/client";
|
||||
import type { Objekt } from "../api/types";
|
||||
@@ -16,6 +16,17 @@ export function ObjektListPage() {
|
||||
const [ladefehler, setLadefehler] = useState<string | null>(null);
|
||||
const [laedt, setLaedt] = useState(true);
|
||||
const [scannerOffen, setScannerOffen] = useState(false);
|
||||
const [suchparameter, setSuchparameter] = useSearchParams();
|
||||
|
||||
// UI-002 (Epic 20): Quick Action "QR scannen" aus der Command Palette springt
|
||||
// hierher mit ?scan=1 und öffnet den Scanner direkt, statt nur die Liste zu zeigen.
|
||||
useEffect(() => {
|
||||
if (suchparameter.get("scan") === "1") {
|
||||
setScannerOffen(true);
|
||||
setSuchparameter({}, { replace: true });
|
||||
}
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
apiRequest<Objekt[]>("/objekte")
|
||||
|
||||
Reference in New Issue
Block a user