diff --git a/actions/notes.ts b/actions/notes.ts index 3eaf974..b474824 100644 --- a/actions/notes.ts +++ b/actions/notes.ts @@ -6,7 +6,7 @@ import { withUser } from "@/lib/db"; import type { ActionResult } from "@/lib/db/rpc"; /** - * Notizen einer Kollegin oder eines Kollegen ein- oder ausblenden. + * Notizen einer Kollegin oder eines Kollegen hinzuwählen oder abwählen. * * Kein Aufruf einer SQL-Funktion und kein Protokolleintrag, anders als bei * allem, was Personaldaten ändert: das hier ist eine persönliche @@ -15,7 +15,7 @@ import type { ActionResult } from "@/lib/db/rpc"; * Dasselbe Muster wie bei gespeicherten Auswertungen und Entwürfen * (actions/reports.ts, actions/hireDrafts.ts). * - * Abgesichert ist es trotzdem: die Regel `note_mutes_owner` lässt nur Zeilen + * Abgesichert ist es trotzdem: die Regel `note_subscriptions_owner` lässt nur Zeilen * zu, deren `user_id` die angemeldete Person ist. Eine fremde Einstellung * liesse sich auch mit erfundenen Werten nicht schreiben. */ @@ -25,28 +25,28 @@ export async function setNotizSichtbarkeit(payload: { }): Promise { const userId = await requireUserId(); - // Die eigenen Notizen bleiben immer sichtbar. Die Prüfbedingung der - // Tabelle weist das ohnehin ab; hier kommt die Meldung heraus, die jemand - // lesen kann, statt einer Verletzungsmeldung aus der Datenbank. + // Die eigenen Notizen sind ohnehin immer dabei. Die Prüfbedingung der + // Tabelle weist das ab; hier kommt die Meldung heraus, die jemand lesen + // kann, statt einer Verletzungsmeldung aus der Datenbank. if (payload.kollegeId === userId) { - return { success: false, error: "Die eigenen Notizen lassen sich nicht ausblenden." }; + return { success: false, error: "Die eigenen Notizen sind immer dabei." }; } try { await withUser(userId, async (tx) => { if (payload.sichtbar) { - await tx - .deleteFrom("note_mutes") - .where("user_id", "=", userId) - .where("muted_user_id", "=", payload.kollegeId) - .execute(); - } else { - // `on conflict do nothing`: zweimal dasselbe Ausblenden ist kein + // `on conflict do nothing`: zweimal dasselbe Hinzuwählen ist kein // Fehler, sondern derselbe Wunsch — etwa wenn zwei Reiter offen sind. await tx - .insertInto("note_mutes") - .values({ user_id: userId, muted_user_id: payload.kollegeId }) - .onConflict((oc) => oc.columns(["user_id", "muted_user_id"]).doNothing()) + .insertInto("note_subscriptions") + .values({ user_id: userId, author_user_id: payload.kollegeId }) + .onConflict((oc) => oc.columns(["user_id", "author_user_id"]).doNothing()) + .execute(); + } else { + await tx + .deleteFrom("note_subscriptions") + .where("user_id", "=", userId) + .where("author_user_id", "=", payload.kollegeId) .execute(); } }); diff --git a/components/shell/NotesBell.tsx b/components/shell/NotesBell.tsx index 7b11206..71bd072 100644 --- a/components/shell/NotesBell.tsx +++ b/components/shell/NotesBell.tsx @@ -28,7 +28,7 @@ export function NotesBell({ notes, kollegen }: { notes: OpenNote[]; kollegen: Ko const containerRef = useRef(null); const sichtbarkeit = (k: Kollege) => eigen[k.id] ?? k.sichtbar; - const ausgeblendet = kollegen.filter((k) => !sichtbarkeit(k)).length; + const dazugewaehlt = kollegen.filter((k) => sichtbarkeit(k)).length; async function schalte(k: Kollege) { const neu = !sichtbarkeit(k); @@ -91,16 +91,16 @@ export function NotesBell({ notes, kollegen }: { notes: OpenNote[]; kollegen: Ko > Kolleg:innen - {/* Nur wenn eingeschränkt: sonst ist die Zahl bei jedem - Aufschlagen zu lesen, ohne je etwas zu bedeuten. */} - {ausgeblendet > 0 && ({ausgeblendet} aus)} + {/* Nur wenn jemand dazugewählt ist: eine „0" bei jedem + Aufschlagen zu lesen, sagt nichts. */} + {dazugewaehlt > 0 && +{dazugewaehlt}} {zeigeEinstellung && (

- Wessen Notizen hier erscheinen. Die eigenen sind immer dabei. + Wessen Notizen hier zusätzlich erscheinen. Die eigenen sind immer dabei.

{kollegen.length === 0 ? (

Keine weiteren HR-Kolleg:innen freigeschaltet.

@@ -138,6 +138,13 @@ export function NotesBell({ notes, kollegen }: { notes: OpenNote[]; kollegen: Ko {fmtDate(n.created_at)}

{n.note_text}

+ {/* Von wem die Notiz stammt. Sichtbar sind die eigenen und + die hinzugewählten — ohne diese Zeile wäre nicht zu + unterscheiden, welche davon man gerade liest. „Ich" + statt des eigenen Namens: den kennt man. */} +

+ {n.vonMir ? "von mir" : `von ${n.author_name}`} +

{n.due_date &&

🔔 fällig {fmtDate(n.due_date)}

}