Historie: Task-Notizen + Link sichtbar, Navigation zu Tagen mit Einträgen
- Notizfeld pro Task in der Reflexion (optional, jeder Status) — nutzt das bestehende dropReason-Feld (Limit 200->500). Wird in der Historie bei JEDEM Status angezeigt (bisher nur bei "verworfen"). - Optionaler Tages-Link wird in der Historie jetzt angezeigt. - Historie-Pfeile springen zum naechsten/vorherigen Tag MIT Eintraegen statt starr ueber Werktage — Wochenend-Arbeit (z. B. Sa 6.6.) ist nun erreichbar. Default-Tag = juengster Tag vor heute mit Eintrag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
6e7a910ed3
commit
6acf9977ec
4 files changed
+116
-56
No files matched your search
@@ -1,12 +1,11 @@
|
||||
import { TRPCError } from '@trpc/server';
|
||||
import { and, eq, gte, isNull, lt, lte, asc, desc, inArray } from 'drizzle-orm';
|
||||
import { and, eq, gt, gte, isNull, lt, lte, asc, desc, inArray } from 'drizzle-orm';
|
||||
import { dayEntry, todo, blocker, user, type Db, type DayEntry, type Todo } from '@cockpit/db';
|
||||
import { DayEntrySchemas } from '@cockpit/shared';
|
||||
import { router, protectedProcedure } from '../trpc.js';
|
||||
import {
|
||||
todayIso,
|
||||
previousWerktag,
|
||||
nextWerktag,
|
||||
addCalendarDays,
|
||||
workdayCutoffMs,
|
||||
isWorkdaySealed,
|
||||
@@ -618,7 +617,18 @@ export const dayEntryRouter = router({
|
||||
.input(DayEntrySchemas.historyForDateInput)
|
||||
.query(async ({ ctx, input }) => {
|
||||
const today = todayIso();
|
||||
const date = input.date ?? previousWerktag(today);
|
||||
// Default-Tag = der jüngste Tag VOR heute, an dem es überhaupt Einträge gibt
|
||||
// (nicht starr der vorige Werktag — sonst sieht man Wochenend-Arbeit nicht).
|
||||
const fallbackDate =
|
||||
(
|
||||
await ctx.db
|
||||
.select({ d: dayEntry.date })
|
||||
.from(dayEntry)
|
||||
.where(lt(dayEntry.date, today))
|
||||
.orderBy(desc(dayEntry.date))
|
||||
.limit(1)
|
||||
)[0]?.d ?? previousWerktag(today);
|
||||
const date = input.date ?? fallbackDate;
|
||||
const isToday = date === today;
|
||||
|
||||
const entries = await ctx.db.select().from(dayEntry).where(eq(dayEntry.date, date));
|
||||
@@ -669,11 +679,28 @@ export const dayEntryRouter = router({
|
||||
.map((u) => u.name)
|
||||
.sort((a, b) => a.localeCompare(b));
|
||||
|
||||
const nw = nextWerktag(date);
|
||||
// Pfeil-Navigation springt zum nächsten/vorherigen Tag MIT Einträgen
|
||||
// (überspringt leere Tage, erreicht aber Wochenend-Arbeit).
|
||||
const prevRow = (
|
||||
await ctx.db
|
||||
.select({ d: dayEntry.date })
|
||||
.from(dayEntry)
|
||||
.where(lt(dayEntry.date, date))
|
||||
.orderBy(desc(dayEntry.date))
|
||||
.limit(1)
|
||||
)[0];
|
||||
const nextRow = (
|
||||
await ctx.db
|
||||
.select({ d: dayEntry.date })
|
||||
.from(dayEntry)
|
||||
.where(and(gt(dayEntry.date, date), lte(dayEntry.date, today)))
|
||||
.orderBy(asc(dayEntry.date))
|
||||
.limit(1)
|
||||
)[0];
|
||||
return {
|
||||
date,
|
||||
prevDate: previousWerktag(date),
|
||||
nextDate: nw < today ? nw : null,
|
||||
prevDate: prevRow?.d ?? null,
|
||||
nextDate: nextRow?.d ?? null,
|
||||
entries: list,
|
||||
ohneEintrag,
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user