L7 Offline & PWA: E2E-Test (20 Ops offline → ein Batch → applied/duplicate, Mandanten-/Scope-Trennung), Message-Keys ohne Punkt

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 17:21:41 +02:00
co-authored by Claude Opus 5
parent 9b3c50923f
commit 8ebf3c0685
4 changed files with 223 additions and 30 deletions
+2 -2
View File
@@ -145,7 +145,7 @@ export function SyncPanel() {
<li key={op.clientOpId} className={cn(op.status === "conflict" ? noticeWarn : noticeError, "flex-col gap-2")}>
<p className="flex items-center gap-2 font-semibold text-foreground">
<TriangleAlert className="size-4.5 shrink-0 text-[var(--warn)]" aria-hidden />
{t(`op.${op.opType}`)} · {t(`state.${op.status}`)}
{t(`op.${op.opType.replace(".", "_")}`)} · {t(`state.${op.status}`)}
</p>
<p className="text-foreground">{t(`problem.${problemKey(op)}`)}</p>
<p className="text-[13px] text-muted-foreground">{t("sync.createdAt", { time: fmtDateTimeShort(op.clientCreatedAt, locale) })}</p>
@@ -273,7 +273,7 @@ function QueueRow({ op, locale }: { op: OutboxEntry; locale: string }) {
return (
<li className="space-y-0.5 py-2.5 text-[15px]">
<div className="flex flex-wrap items-baseline justify-between gap-2">
<span className="font-semibold">{t(`op.${op.opType}`)}</span>
<span className="font-semibold">{t(`op.${op.opType.replace(".", "_")}`)}</span>
<span className="text-[13px] font-semibold text-muted-foreground">{t(`state.${op.status}`)}</span>
</div>
<p className="text-[13px] text-muted-foreground">