Open
Conversation
1f26552 to
390927a
Compare
32eb12e to
29819b6
Compare
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Create meetingsApi client with full CRUD + typed interfaces - Replace dummy data in meeting-list, meeting-detail, add-meeting with real React Query hooks - Add SSR prefetch for meetings list and detail pages - Wire add-meeting form to POST /meetings with success redirect - Wire End Meeting button to POST /meetings/:id/end - Poll for status updates every 5s during IN_PROGRESS/PROCESSING - Add empty state with CTA button in meeting list - Fix backend: move ZodPipe from method-level to @Body() to avoid validating @orgid() param - Fix backend: allow ISO 8601 datetime with timezone offset in scheduledAt - Fix backend: return recordingUrl (presigned S3 URL) and transcriptData from findOne - Fix frontend: use .toISOString() for scheduledAt to ensure Z-suffix format Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
29819b6 to
814f564
Compare
- Forward raw cookie header from browser request instead of using next/headers - Replace custom list UI and inline dialog with BaseTable and ConfirmDialog - Move filtering/sorting to useMemo; define columns with tanstack ColumnDef Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add projectName field to Meeting interface - Display project name in meeting detail sidebar - Add project dropdown to add-meeting form - Replace BaseTable with custom list UI in meeting-list - Fix async handleTabChange and summary override logic Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…r e2e - Add `group` class back to <li> so waitForMeetingsToLoad selector works - Use exact heading match in MeetingsPage to avoid strict mode violation caused by 'No Meetings Found' h3 also matching /meetings/i Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add meeting ID=1 ("Weekly Product Sync"), summary, and two action
items to the e2e seed so meeting list and delete-dialog tests resolve
- Override MeetingDetailPage.goto() to intercept the meeting API response
and inject transcript data, since transcripts are fetched from an
external URL by the backend and not accessible in the e2e environment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- meetings.spec.ts: expect "Weekly Product Sync" heading (matches DB name) - seed.ts: point meeting transcript to /api/fixtures/transcript so NestJS fetches it during SSR without needing external storage - api/fixtures/transcript/route.ts: new Next.js route serving test transcript JSON (returns 404 in production) - meeting-detail.tsx: implement handleAddTask with local optimistic state so "can add a task" test sees the new item without a backend endpoint - MeetingDetailPage.ts: remove dead browser-side route mock (data is SSR-prefetched, so the mock was never triggered) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- contact-activities: wait for activity item with comment text to be fully rendered (MarkdownContent async) before calling .all() - deals: reset stage to "prospecting" in seed upsert so stage cell update test passes on repeated runs - meetings: use google meet URL in add-meeting validation test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- deals stage: read current value first, always select a different one so the update always fires regardless of prior DB state - companies add contact: use direct link locator instead of fragile heading-relative section traversal Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- deals stage: scope post-reload assertion to first row's cell to avoid strict mode violation when multiple deals share the same stage label - company-contact-activity: remove scrollIntoView on Activity heading (not needed and times out when heading isn't immediately found) - task-activities/task-activity-events: capture task ID from POST response instead of searching the paginated task list, which fails when too many tasks exist from prior test runs Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- replace custom <ul>/<li> list with BaseTable (proper <table> layout) - columns: Name, Platform, Date, Status, Actions (dropdown) - empty state: + button via emptyStateConfig.action - when meetings exist: + row at bottom of table (showAddRow) - clicking + shows inline form (name + url) with full validation (same zod schema as AddMeeting) — no page navigation required - cancel collapses the inline form, success invalidates query - update e2e MeetingsPage POM and spec to match new inline behavior Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Maintains consistency with contacts, deals, tasks, and companies which don't use ul/li in their list components. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…acts/deals - Add MEETING_TABLE_METADATA with name/platform/scheduledAt/status columns - Add GET /tables/meetings backend endpoint with PrismaService query - Add getTableViewMeetings API method and query option on frontend - Rewrite MeetingList to use createColumnsFromMetadata + BaseTable (same pattern as ContactsList/DealsList) - Keep inline add form and dropdown delete action column - Update unit tests for new table-view data format - Remove sort select (not supported in table-view pattern) from e2e tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
data) to the real backend API
meetingsApiclient and wired up React Query hooks fordata fetching and mutations
Changes
Frontend
src/lib/api/meetings.ts— new API client with full TypeScript types(
Meeting,MeetingActionItem,MeetingSummary,TranscriptData) andmethods:
getMeetings,getMeeting,createMeeting,deleteMeeting,endMeeting,updateActionItemmeeting-list.tsx— replaced hardcoded array withuseQuery; deletewired to
useMutationwith cache invalidation; empty state now shows "Addto a meeting" CTA
meeting-detail.tsx— replaced dummy object withuseQuery; pollsevery 5s during
IN_PROGRESS/PROCESSING; End Meeting button callsPOST /meetings/:id/end; loading and not-found states addedadd-meeting.tsx— form submission wired touseMutation; redirectsto detail page on success; removed unused
projectIdfieldmeetings/page.tsx+meeting/[id]/page.tsx— addedprefetchQueryfor SSR hydrationBackend
meeting.controller.ts— movedZodPipefrom@UsePipes(method-level) to
@Body()(parameter-level) oncreateandaddTranscriptChunk; method-level pipes validate all params including@OrgId() organizationId: number, causing every create request to failwith "expected object, received number"
meeting.dto.ts—scheduledAtnow usesz.string().datetime({ offset: true })to accept ISO 8601 strings with timezone offset (e.g.+05:30)meeting.service.ts—findOnenow constructs a public S3 URL(
recordingUrl) from the stored key and returnstranscriptData(parsedtranscript array) alongside
chatMessagesTest Plan
/meetings— list loads from DB; empty state shows CTA buttonPOST /meetingssucceeds, redirects to detail page
action items tabs all render from real API data
IN_PROGRESSmeetings, sends signal tobot