fix(ui): project status convention, linked-order chip, diacritics, lazy dashboard

- PROJECT_STATUS added to documentStatus.ts (aktivni=info, dokonceny=success,
  zruseny=error — app convention); Projects/ProjectDetail local maps deleted;
  status Select derives its MenuItems from the shared map.
- ProjectDetail linked-order status now rendered via the received-order map
  (was the project map with zero key overlap → raw DB token).
- Cancelled label unified across received/issued orders in documentStatus.ts.
- 'Chyba pripojeni' → 'Chyba připojení' (Dashboard, AuthContext).
- Dashboard lazy-loaded like every other route — its 7 subcomponents leave
  the Login critical path.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
BOHA
2026-07-04 03:22:26 +02:00
parent 9c192e79e7
commit a274a49e90
6 changed files with 72 additions and 70 deletions

View File

@@ -31,24 +31,15 @@ import {
PageEnter,
headerActionsSx,
} from "../ui";
import {
PROJECT_STATUS,
ORDER_STATUS,
statusLabel,
statusColor,
} from "../lib/documentStatus";
const API_BASE = "/api/admin";
const STATUS_LABELS: Record<string, string> = {
aktivni: "Aktivní",
dokonceny: "Dokončený",
zruseny: "Zrušený",
};
const STATUS_COLORS: Record<
string,
"default" | "success" | "error" | "warning" | "info"
> = {
aktivni: "success",
dokonceny: "info",
zruseny: "default",
};
interface User {
id: number;
name: string;
@@ -335,8 +326,8 @@ export default function ProjectDetail() {
</Box>
</Typography>
<StatusChip
label={STATUS_LABELS[project.status] || project.status}
color={STATUS_COLORS[project.status] || "default"}
label={statusLabel(PROJECT_STATUS, project.status)}
color={statusColor(PROJECT_STATUS, project.status)}
/>
</Box>
</Box>
@@ -418,9 +409,11 @@ export default function ProjectDetail() {
onChange={(v) => updateForm("status", v)}
disabled={!canEdit}
>
<MenuItem value="aktivni">Aktivní</MenuItem>
<MenuItem value="dokonceny">Dokončený</MenuItem>
<MenuItem value="zruseny">Zrušený</MenuItem>
{Object.entries(PROJECT_STATUS).map(([value, s]) => (
<MenuItem key={value} value={value}>
{s.label}
</MenuItem>
))}
</Select>
</Field>
<Field label="Datum zahájení">
@@ -556,30 +549,36 @@ export default function ProjectDetail() {
<Typography variant="caption" color="text.secondary">
Objednávka
</Typography>
<Typography variant="body2">
<Typography
variant="body2"
component="div"
sx={{
display: "flex",
alignItems: "center",
gap: 1,
flexWrap: "wrap",
}}
>
{project.order_id ? (
<Box
component={RouterLink}
to={`/orders/${project.order_id}`}
sx={{
color: "primary.main",
textDecoration: "none",
"&:hover": { textDecoration: "underline" },
}}
>
{project.order_number}
<>
<Box
component={RouterLink}
to={`/orders/${project.order_id}`}
sx={{
color: "primary.main",
textDecoration: "none",
"&:hover": { textDecoration: "underline" },
}}
>
{project.order_number}
</Box>
{project.order_status && (
<Box
component="span"
sx={{ color: "text.secondary", ml: 1 }}
>
(
{STATUS_LABELS[project.order_status] ||
project.order_status}
)
</Box>
<StatusChip
label={statusLabel(ORDER_STATUS, project.order_status)}
color={statusColor(ORDER_STATUS, project.order_status)}
/>
)}
</Box>
</>
) : (
"—"
)}