Skip to content

Commit 7b170c9

Browse files
authored
init fixing event assignment to new note (#1054)
1 parent 51594d9 commit 7b170c9

File tree

4 files changed

+57
-33
lines changed

4 files changed

+57
-33
lines changed

apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -94,19 +94,26 @@ export function EventChip({ sessionId }: EventChipProps) {
9494
return eventId;
9595
},
9696
onSuccess: async (assignedEventId) => {
97-
event.refetch();
98-
eventsInPastWithoutAssignedSession.refetch();
97+
// Optimistically update the event query cache to prevent race conditions
98+
const eventDetails = await dbCommands.getEvent(assignedEventId);
99+
if (eventDetails) {
100+
queryClient.setQueryData(["event", sessionId], { ...eventDetails, meetingLink: null });
101+
}
102+
103+
// Wait for critical queries to complete before invalidating sessions
104+
await Promise.all([
105+
event.refetch(),
106+
eventsInPastWithoutAssignedSession.refetch(),
107+
]);
108+
109+
// Only invalidate sessions cache after individual queries are settled
99110
queryClient.invalidateQueries({ queryKey: ["sessions"] });
100111

101-
if (assignedEventId && updateTitle && currentSessionDetails) {
112+
if (assignedEventId && updateTitle && currentSessionDetails && eventDetails?.name) {
102113
try {
103-
const eventDetails = await dbCommands.getEvent(assignedEventId);
104-
105-
if (eventDetails?.name) {
106-
if (!currentSessionDetails.title?.trim()) {
107-
updateTitle(eventDetails.name);
108-
queryClient.invalidateQueries({ queryKey: ["session", sessionId] });
109-
}
114+
if (!currentSessionDetails.title?.trim()) {
115+
updateTitle(eventDetails.name);
116+
queryClient.invalidateQueries({ queryKey: ["session", sessionId] });
110117
}
111118
} catch (error) {
112119
console.error("Failed to update session title after event assignment:", error);
@@ -119,9 +126,17 @@ export function EventChip({ sessionId }: EventChipProps) {
119126
mutationFn: async () => {
120127
await dbCommands.setSessionEvent(sessionId, null);
121128
},
122-
onSuccess: () => {
123-
event.refetch();
124-
eventsInPastWithoutAssignedSession.refetch();
129+
onSuccess: async () => {
130+
// Optimistically clear the event query cache
131+
queryClient.setQueryData(["event", sessionId], null);
132+
133+
// Wait for critical queries to complete before invalidating sessions
134+
await Promise.all([
135+
event.refetch(),
136+
eventsInPastWithoutAssignedSession.refetch(),
137+
]);
138+
139+
// Only invalidate sessions cache after individual queries are settled
125140
queryClient.invalidateQueries({ queryKey: ["sessions"] });
126141
setIsEventSelectorOpen(false);
127142
},
@@ -141,9 +156,6 @@ export function EventChip({ sessionId }: EventChipProps) {
141156
const handleSelectEvent = async (eventIdToLink: string) => {
142157
assignEvent.mutate(eventIdToLink, {
143158
onSuccess: () => {
144-
event.refetch();
145-
eventsInPastWithoutAssignedSession.refetch();
146-
queryClient.invalidateQueries({ queryKey: ["sessions"] });
147159
setIsEventSelectorOpen(false);
148160
},
149161
onError: (error) => {

apps/desktop/src/components/left-sidebar/notes-list.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,19 @@ export default function NotesList({ ongoingSessionId, filter }: NotesListProps)
6060
end: to,
6161
limit: 100,
6262
});
63-
sessions.forEach(insertSession);
63+
// Defensively insert sessions - don't overwrite existing data that might be more recent
64+
sessions.forEach((session) => {
65+
const existingStore = sessionsStore[session.id];
66+
// Only insert if session doesn't exist or existing data is older
67+
if (!existingStore) {
68+
insertSession(session);
69+
} else {
70+
const existingSession = existingStore.getState().session;
71+
if (new Date(existingSession.visited_at) <= new Date(session.visited_at)) {
72+
insertSession(session);
73+
}
74+
}
75+
});
6476

6577
const sessionWithEvents = await Promise.all(sessions.map(async (session) => {
6678
const event = await dbCommands.sessionGetEvent(session.id);

apps/desktop/src/locales/en/messages.po

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ msgid "Apple"
359359
msgstr "Apple"
360360

361361
#: src/components/toolbar/buttons/delete-note-button.tsx:43
362-
#: src/components/left-sidebar/notes-list.tsx:255
362+
#: src/components/left-sidebar/notes-list.tsx:262
363363
msgid "Are you sure you want to delete this note?"
364364
msgstr "Are you sure you want to delete this note?"
365365

@@ -502,7 +502,7 @@ msgstr "Custom Endpoint"
502502

503503
#: src/components/settings/views/template.tsx:86
504504
#: src/components/settings/views/team.tsx:165
505-
#: src/components/left-sidebar/notes-list.tsx:322
505+
#: src/components/left-sidebar/notes-list.tsx:329
506506
msgid "Delete"
507507
msgstr "Delete"
508508

@@ -684,7 +684,7 @@ msgstr "Jargons"
684684
msgid "Job title"
685685
msgstr "Job title"
686686

687-
#: src/components/editor-area/note-header/chips/event-chip.tsx:229
687+
#: src/components/editor-area/note-header/chips/event-chip.tsx:241
688688
msgid "Join meeting"
689689
msgstr "Join meeting"
690690

@@ -716,7 +716,7 @@ msgstr "Live summary of the meeting"
716716
msgid "Loading available models..."
717717
msgstr "Loading available models..."
718718

719-
#: src/components/editor-area/note-header/chips/event-chip.tsx:277
719+
#: src/components/editor-area/note-header/chips/event-chip.tsx:289
720720
msgid "Loading events..."
721721
msgstr "Loading events..."
722722

@@ -778,7 +778,7 @@ msgstr "My Templates"
778778
msgid "New note"
779779
msgstr "New note"
780780

781-
#: src/components/left-sidebar/notes-list.tsx:299
781+
#: src/components/left-sidebar/notes-list.tsx:306
782782
#: src/components/left-sidebar/events-list.tsx:181
783783
msgid "New window"
784784
msgstr "New window"
@@ -795,7 +795,7 @@ msgstr "No members found"
795795
#~ msgid "No models available for this endpoint."
796796
#~ msgstr "No models available for this endpoint."
797797

798-
#: src/components/editor-area/note-header/chips/event-chip.tsx:302
798+
#: src/components/editor-area/note-header/chips/event-chip.tsx:314
799799
msgid "No past events found."
800800
msgstr "No past events found."
801801

@@ -1131,12 +1131,12 @@ msgstr "User:"
11311131
msgid "username"
11321132
msgstr "username"
11331133

1134-
#: src/components/left-sidebar/notes-list.tsx:310
1134+
#: src/components/left-sidebar/notes-list.tsx:317
11351135
msgid "View calendar"
11361136
msgstr "View calendar"
11371137

11381138
#: src/components/left-sidebar/events-list.tsx:193
1139-
#: src/components/editor-area/note-header/chips/event-chip.tsx:234
1139+
#: src/components/editor-area/note-header/chips/event-chip.tsx:246
11401140
msgid "View in calendar"
11411141
msgstr "View in calendar"
11421142

apps/desktop/src/locales/ko/messages.po

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ msgid "Apple"
359359
msgstr ""
360360

361361
#: src/components/toolbar/buttons/delete-note-button.tsx:43
362-
#: src/components/left-sidebar/notes-list.tsx:255
362+
#: src/components/left-sidebar/notes-list.tsx:262
363363
msgid "Are you sure you want to delete this note?"
364364
msgstr ""
365365

@@ -502,7 +502,7 @@ msgstr ""
502502

503503
#: src/components/settings/views/template.tsx:86
504504
#: src/components/settings/views/team.tsx:165
505-
#: src/components/left-sidebar/notes-list.tsx:322
505+
#: src/components/left-sidebar/notes-list.tsx:329
506506
msgid "Delete"
507507
msgstr ""
508508

@@ -684,7 +684,7 @@ msgstr ""
684684
msgid "Job title"
685685
msgstr ""
686686

687-
#: src/components/editor-area/note-header/chips/event-chip.tsx:229
687+
#: src/components/editor-area/note-header/chips/event-chip.tsx:241
688688
msgid "Join meeting"
689689
msgstr ""
690690

@@ -716,7 +716,7 @@ msgstr ""
716716
msgid "Loading available models..."
717717
msgstr ""
718718

719-
#: src/components/editor-area/note-header/chips/event-chip.tsx:277
719+
#: src/components/editor-area/note-header/chips/event-chip.tsx:289
720720
msgid "Loading events..."
721721
msgstr ""
722722

@@ -778,7 +778,7 @@ msgstr ""
778778
msgid "New note"
779779
msgstr ""
780780

781-
#: src/components/left-sidebar/notes-list.tsx:299
781+
#: src/components/left-sidebar/notes-list.tsx:306
782782
#: src/components/left-sidebar/events-list.tsx:181
783783
msgid "New window"
784784
msgstr ""
@@ -795,7 +795,7 @@ msgstr ""
795795
#~ msgid "No models available for this endpoint."
796796
#~ msgstr ""
797797

798-
#: src/components/editor-area/note-header/chips/event-chip.tsx:302
798+
#: src/components/editor-area/note-header/chips/event-chip.tsx:314
799799
msgid "No past events found."
800800
msgstr ""
801801

@@ -1131,12 +1131,12 @@ msgstr ""
11311131
msgid "username"
11321132
msgstr ""
11331133

1134-
#: src/components/left-sidebar/notes-list.tsx:310
1134+
#: src/components/left-sidebar/notes-list.tsx:317
11351135
msgid "View calendar"
11361136
msgstr ""
11371137

11381138
#: src/components/left-sidebar/events-list.tsx:193
1139-
#: src/components/editor-area/note-header/chips/event-chip.tsx:234
1139+
#: src/components/editor-area/note-header/chips/event-chip.tsx:246
11401140
msgid "View in calendar"
11411141
msgstr ""
11421142

0 commit comments

Comments
 (0)