Skip to content

Fix participant saves and link calendar attendees to meeting notes#544

Merged
gabrielste1n merged 3 commits intomainfrom
meeting-participants
Apr 3, 2026
Merged

Fix participant saves and link calendar attendees to meeting notes#544
gabrielste1n merged 3 commits intomainfrom
meeting-participants

Conversation

@gabrielste1n
Copy link
Copy Markdown
Collaborator

@gabrielste1n gabrielste1n commented Apr 3, 2026

Summary

  • Calendar attendees now sync to the store — the meeting detection engine was updating the DB with calendar_event_id and participants but never broadcasting note-updated, so the UI showed 0 attendees until navigation. Manual adds then overwrote the calendar attendees in the DB.
  • Stabilized participant save callbacksNoteParticipants now owns its own save via a stable noteId-based useCallback instead of receiving an unstable inline onUpdate closure from NoteEditor that was recreated every render.
  • Extracted ParticipantAvatar component — pulled the inline Gravatar + colored-initials rendering into a typed component, applied to both the participant list and the contact suggestions.

Changes

File What
meetingDetectionEngine.js Broadcast note-updated after setting calendar attendees on a new meeting note
NoteParticipants.tsx Takes noteId prop, owns saveParticipants callback, extracts ParticipantAvatar
NoteEditor.tsx Passes noteId instead of inline onUpdate callback

Test plan

  • Start a meeting recording from a calendar event with attendees → verify attendees appear immediately in the participants popover
  • Manually add a participant via the popover → navigate away and back → verify it persists
  • Manually add a participant to a note that already has calendar attendees → verify calendar attendees are preserved
  • Remove a participant → verify it's removed from the DB (navigate away and back)

Extract attendee data from Google Calendar API and store as JSON on
calendar_events. Auto-link notes to calendar events and populate
participants when meeting detection creates a note. Add contacts table
as a materialized index for cross-note autocomplete.

New Granola-style attendee chip + popover in the note metadata bar with
domain grouping, Gravatar avatars with initial-circle fallback, search/
add/remove participants, and contacts autocomplete via IPC. Popover uses
new Radix Popover primitive (shadcn/ui pattern).

Translations added for all 10 locales.
Add note.id to parsedParticipants memo dependency so it recomputes
when switching notes even when both have null participants. Fix
Gravatar hash effect dependency to use localParticipants instead of
prop. Remove redundant JSX comments.
…cipant saves

The meeting detection engine updated notes with calendar attendees
directly via databaseManager.updateNote() but never broadcast
note-updated, so the store kept the bare note without participants.
Manual adds then overwrote calendar attendees in the DB.

- Broadcast note-updated after setting calendar_event_id/participants
- NoteParticipants now owns its save via stable noteId-based callback
  instead of receiving an unstable inline onUpdate from NoteEditor
- Extract ParticipantAvatar component for cleaner avatar rendering
@gabrielste1n gabrielste1n merged commit 22ddf2f into main Apr 3, 2026
5 checks passed
@gabrielste1n gabrielste1n deleted the meeting-participants branch April 3, 2026 01:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant