Repository navigation
[ZEPPELIN-6747] Add AI Assistant conversation list and header components - #5575
Conversation
There was a problem hiding this comment.
Thanks, the components and stories look good and follow the existing patterns. Two small changes before merging:
- Untitled conversations: the server stores
nullwhen the create request has no title, which leaves the row button without a name and labels the delete button "Delete undefined" (ConversationList.tsx:59,92,ConversationHeader.tsx). A shared fallback such as "Untitled conversation" for the visible title and both labels would fix it. - ID coverage in tests: the select and delete tests only click the first row, so they still pass if every row sends
'a'(ConversationList.spec.tsx:123,139). Clicking the second row and expecting'b'would cover the ID the issue asks for.
Optional, not blocking:
- A story with
selectedIdset would let reviewers see the selected row. - If the panel passes an already-filtered list, an empty result during a search shows "No conversations yet."; keying the message on
searchingwould avoid it. - The read-only marker and the relative time have no tests yet.
- Other components put
import * as styleslast.
|
@xhaktm00 #5561 is on On The remaining review items are a visible title fallback and a select/delete test that checks the second conversation ID. Correction to my earlier review: when a create request omits the title, the server substitutes a timestamp rather than storing |
Add ConversationList and ConversationHeader, the Assistant panel's conversation browsing UI, buildable and reviewable without a server. ConversationList takes conversation data and the selection state as props, shows the list grouped into a "Today" section (with a relative time) and an "Earlier" section, search with a distinct empty-search message, and a delete request per conversation. ConversationHeader shows the inner header for the selected conversation. Both report every action (new conversation, selection, delete request, search term change) through callbacks; actual deletion and its confirmation step stay with panel assembly. Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Show "Untitled conversation" for a missing or empty title in the list, the header, and both labels, and match it in search - Key the empty-result message on whether a search is active - Check the second conversation's ID in the select and delete tests and story - Add a story with a selected conversation - Test the read-only marker and the relative time formats - Fill ownerId, canSendMessage, and updatedAt in fixtures for the master contract - Move the styles import last Co-Authored-By: Claude Opus 5.5 <[email protected]>
61c70dd to
3990561
Compare
|
@voidmatcha Thanks for the review. Rebased onto master and force-pushed!
|
voidmatcha
left a comment
There was a problem hiding this comment.
Thanks for addressing the review feedback. I checked the updated diff at 3990561 and ran the two relevant Vitest specs locally (26 tests), the React package typecheck, ESLint on the changed TypeScript files, and Prettier. All passed. The title fallback, second-conversation ID assertions, and updated fixtures look good. I have no further code changes to request.
Two small PR description cleanups when you have a chance:
- Please remove "Depends on #5565 (ZEPPELIN-6743) per Jira." ZEPPELIN-6747 says these components can be merged independently of the notebook shell, and #5565 has now merged.
- Please clarify the "Both report ..." sentence: ConversationList reports selection and search term changes, while ConversationHeader does not.
|
Merged into master (bf65886). |
What is this PR for?
Add
ConversationListandConversationHeader, the Assistant panel's conversation browsing UI, reviewable in Storybook without a server.Components
ConversationListConversationHeaderConversationListreports new conversation, selection, delete requests, and search term changes through callbacksConversationHeaderreports new conversation and delete requests through callbacksBeyond the acceptance criteria
canSendMessage === false) show a lock and no delete button, and the read-only state is announced to screen readersTitle handling
titleis optional in the contract, and the server preserves an explicit empty title on createconversationTitlehelperDependencies
What type of PR is it?
Feature
Todos
ConversationListwith search, distinct empty states, "Today"/"Earlier" sections, and delete requestsConversationHeaderfor the selected conversationWhat is the Jira issue?
ZEPPELIN-6747
How should this be tested?
Run from
zeppelin-web-angular/projects/zeppelin-react/:npm ci npm test npm run typecheck npm run lint npm run build:storybook npm run test:storybook npm run storybooknpm testruns 22 files and 208 tests, 26 of them new.npm run test:storybookruns every story in both themes (40 tests) and needs Playwright Chromium. In Storybook, checkAssistant/ConversationList(Empty, Search, Selected, SelectAndDelete, TodayAndEarlier) andAssistant/ConversationHeader(Current, NoSelection, ReadOnly) in both the light and dark themes.Screenshots (if appropriate)
N/A
Questions: