feat(platform): harden access scoping and delivery baseline

This commit is contained in:
2026-03-30 00:27:31 +02:00
parent 00b936fa1f
commit 819345acfa
109 changed files with 26142 additions and 8081 deletions
@@ -6,6 +6,9 @@ export function useInvalidateTimeline() {
return () => {
void utils.timeline.getEntries.invalidate();
void utils.timeline.getEntriesView.invalidate();
void utils.timeline.getMyEntriesView.invalidate();
void utils.timeline.getHolidayOverlays.invalidate();
void utils.timeline.getMyHolidayOverlays.invalidate();
void utils.timeline.getProjectContext.invalidate();
void utils.timeline.getBudgetStatus.invalidate();
};
@@ -25,6 +28,9 @@ export function useInvalidatePlanningViews() {
void utils.allocation.listAssignments.invalidate();
void utils.timeline.getEntries.invalidate();
void utils.timeline.getEntriesView.invalidate();
void utils.timeline.getMyEntriesView.invalidate();
void utils.timeline.getHolidayOverlays.invalidate();
void utils.timeline.getMyHolidayOverlays.invalidate();
void utils.timeline.getProjectContext.invalidate();
void utils.timeline.getBudgetStatus.invalidate();
};
+2 -2
View File
@@ -18,11 +18,11 @@ type ProjectDragContextResult = {
project: any | null;
};
export function useProjectDragContext(projectId: string | null): ProjectDragContextResult {
export function useProjectDragContext(projectId: string | null, enabled = true): ProjectDragContextResult {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const { data } = trpc.timeline.getProjectContext.useQuery(
{ projectId: projectId! },
{ enabled: !!projectId, staleTime: 10_000 },
{ enabled: enabled && !!projectId, staleTime: 10_000 },
) as { data: any };
return {
+13
View File
@@ -28,11 +28,19 @@ export function useTimelineSSE() {
case SSE_EVENT_TYPES.ALLOCATION_UPDATED:
case SSE_EVENT_TYPES.ALLOCATION_DELETED:
void queryClient.invalidateQueries({ queryKey: [["timeline", "getEntries"]] });
void queryClient.invalidateQueries({ queryKey: [["timeline", "getEntriesView"]] });
void queryClient.invalidateQueries({ queryKey: [["timeline", "getMyEntriesView"]] });
void queryClient.invalidateQueries({ queryKey: [["timeline", "getHolidayOverlays"]] });
void queryClient.invalidateQueries({ queryKey: [["timeline", "getMyHolidayOverlays"]] });
void queryClient.invalidateQueries({ queryKey: [["allocation", "list"]] });
break;
case SSE_EVENT_TYPES.PROJECT_SHIFTED:
void queryClient.invalidateQueries({ queryKey: [["timeline", "getEntries"]] });
void queryClient.invalidateQueries({ queryKey: [["timeline", "getEntriesView"]] });
void queryClient.invalidateQueries({ queryKey: [["timeline", "getMyEntriesView"]] });
void queryClient.invalidateQueries({ queryKey: [["timeline", "getHolidayOverlays"]] });
void queryClient.invalidateQueries({ queryKey: [["timeline", "getMyHolidayOverlays"]] });
void queryClient.invalidateQueries({ queryKey: [["project", "list"]] });
break;
@@ -40,6 +48,11 @@ export function useTimelineSSE() {
void queryClient.invalidateQueries({ queryKey: [["timeline", "getBudgetStatus"]] });
break;
case SSE_EVENT_TYPES.NOTIFICATION_CREATED:
void queryClient.invalidateQueries({ queryKey: [["notification", "list"]] });
void queryClient.invalidateQueries({ queryKey: [["notification", "unreadCount"]] });
break;
case SSE_EVENT_TYPES.TASK_ASSIGNED:
case SSE_EVENT_TYPES.TASK_COMPLETED:
case SSE_EVENT_TYPES.TASK_STATUS_CHANGED: