normalize data
This commit is contained in:
@@ -1,9 +1,7 @@
|
||||
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
||||
import type { getTimeline } from "@/functions/get-timeline";
|
||||
import type { NormalizedTimeline } from "@/functions/get-timeline";
|
||||
import { updateTimelineItem } from "@/functions/update-timeline-item";
|
||||
|
||||
type TimelineData = Awaited<ReturnType<typeof getTimeline>>;
|
||||
|
||||
type EntryMovedVars = {
|
||||
entryId: string;
|
||||
newStart: string;
|
||||
@@ -31,47 +29,23 @@ export function useEntryMovedMutation(timelineId: string) {
|
||||
onMutate: async (vars) => {
|
||||
// Cancel in-flight fetches so they don't overwrite our optimistic update
|
||||
await queryClient.cancelQueries({ queryKey });
|
||||
const previous = queryClient.getQueryData<TimelineData>(queryKey);
|
||||
const previous = queryClient.getQueryData<NormalizedTimeline>(queryKey);
|
||||
|
||||
queryClient.setQueryData<TimelineData>(queryKey, (old) => {
|
||||
queryClient.setQueryData<NormalizedTimeline>(queryKey, (old) => {
|
||||
if (!old) return old;
|
||||
|
||||
let movedItem:
|
||||
| TimelineData["groups"][number]["items"][number]
|
||||
| undefined;
|
||||
|
||||
const groups = old.groups.map((group) => {
|
||||
const filtered = group.items.filter((item) => {
|
||||
if (item.id === vars.entryId) {
|
||||
movedItem = item;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return { ...group, items: filtered };
|
||||
});
|
||||
|
||||
if (!movedItem) return old;
|
||||
|
||||
return {
|
||||
...old,
|
||||
groups: groups.map((group) =>
|
||||
group.id === vars.newGroupId
|
||||
? {
|
||||
...group,
|
||||
items: [
|
||||
...group.items,
|
||||
{
|
||||
...movedItem!,
|
||||
start: new Date(vars.newStart),
|
||||
end: vars.newEnd ? new Date(vars.newEnd) : null,
|
||||
lane: vars.newLane,
|
||||
timelineGroupId: vars.newGroupId,
|
||||
},
|
||||
],
|
||||
}
|
||||
: group
|
||||
),
|
||||
items: {
|
||||
...old.items,
|
||||
[vars.entryId]: {
|
||||
...old.items[vars.entryId],
|
||||
start: new Date(vars.newStart),
|
||||
end: vars.newEnd ? new Date(vars.newEnd) : null,
|
||||
groupId: vars.newGroupId,
|
||||
lane: vars.newLane,
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user