Skip to content

[ZEPPELIN-6747] Add AI Assistant conversation list and header components - #5575

Open
xhaktm00 wants to merge 1 commit into
apache:branch-voidmatcha-assistant-storybook-tempfrom
xhaktm00:ZEPPELIN-6747
Open

xhaktm00 wants to merge 1 commit into
apache:branch-voidmatcha-assistant-storybook-tempfrom
xhaktm00:ZEPPELIN-6747

Conversation

@xhaktm00

Copy link
Copy Markdown
Contributor

What is this PR for?

Add ConversationList and ConversationHeader, the Assistant panel's conversation browsing UI, reviewable in Storybook without a server.

Components

  • ConversationList
    • Takes conversation data and the selection state as props
    • Shows the list, search results, and an empty state
    • Uses different messages for an empty list and a search with no matches
  • ConversationHeader
    • Shows the inner header for the selected conversation
  • Both report new conversation, selection, delete requests, and search term changes through callbacks
  • Deletion and its confirmation step are left to panel assembly (ZEPPELIN-6748)

Beyond the acceptance criteria

  • The list groups conversations into "Today" (with a relative time) and "Earlier", within the issue's design latitude
  • Search shows a flat result list without sections
  • Read-only conversations (canSendMessage === false) show a lock and no delete button

Title handling

  • Giving a conversation its title is left to the server, so the components render title as is with no fallback for an untitled conversation
  • The server fills a missing title with the creation time, so a UI placeholder would only duplicate the server's rule
  • Rename rejects a blank title, but create does not reject an explicit empty title (AssistantConversationRestApi#create)
  • To keep this design, later work that creates conversations, starting with ZEPPELIN-6749, should omit the title or send a non-blank one

What type of PR is it?

Feature

Todos

What 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 storybook

npm test runs 22 files and 150 tests, 20 of them new. In Storybook, check Assistant/ConversationList (Empty, Search, SelectAndDelete, TodayAndEarlier) and Assistant/ConversationHeader (Current, NoSelection, ReadOnly) in both the light and dark themes.

Screenshots (if appropriate)

N/A

Questions:

  • Does the license files need to update? No
  • Is there breaking changes for older versions? No
  • Does this needs documentation? No

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 <noreply@anthropic.com>
@voidmatcha
voidmatcha changed the base branch from master to branch-voidmatcha-assistant-storybook-temp October 16, 2026 03:53

@voidmatcha voidmatcha left a comment •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, the components and stories look good and follow the existing patterns. Two small changes before merging:

  1. Untitled conversations: the server stores null when 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.
  2. 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 selectedId set 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 searching would avoid it.
  • The read-only marker and the relative time have no tests yet.
  • Other components put import * as styles last.

@voidmatcha

Copy link
Copy Markdown
Member

@xhaktm00 #5561 is on master now. Could you rebase onto master, force-push, and then switch the base to master?

git fetch https://github.com/apache/zeppelin.git master
git rebase --onto FETCH_HEAD 4599ad2d9
git push --force-with-lease

On master, AssistantConversation also requires ownerId, canSendMessage, and updatedAt, so the ConversationHeader and ConversationList specs and stories fail to typecheck after the rebase. Please add those fields to the fixtures along with the two review items above.

@voidmatcha

Copy link
Copy Markdown
Member

Correction on item 1: the server doesn't store null. Conversation.create falls back to a timestamp title. The fallback is still worth adding because the contract keeps title optional, so an undefined title would still show "Delete undefined".

voidmatcha added a commit that referenced this pull request Oct 17, 2026

This branch has not been deployed

No deployments
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.

2 participants