Repository navigation
Show custom search attribute values in the SAA table - #3987
Conversation
…s table Custom search attribute columns on the standalone activities list were always empty: the table cell had no branch for them, and list items carried undecoded payloads. - Decode search attributes when loading the activities list (ActivityExecutionListInfo), reusing toSearchAttributes from the workflow model - Share custom search attribute rendering between the workflows and activities tables via isFilterableCustomSearchAttribute and a new table/search-attribute-value component - Read customSearchAttributes reactively in both cells so columns fill in once the namespace's search attributes load - Reuse toSearchAttributes in the activity workers tab - Remove the now-unused isCustomSearchAttribute Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
What was the root issue here since I thought all filterable tables shared the same components? What was different about the SAA SAs from workflow SAs? Do we need to check SANO / Schedule SAs? |
… in tables - Decode search attributes when loading the standalone Nexus operations list, and render custom search attribute columns in its table cell, with filter and copy buttons for Keyword and Text values - Render custom search attribute values in the schedules table with the shared SearchAttributeValue component, decoding without mutating the schedule - Accept the proto SearchAttribute type in toSearchAttributes - Remove standalone-activities.test.ts Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…d as parseSearchAttributes The helper is now shared by the workflows, activities, Nexus operations and schedules tables and the activity workers tab, so it no longer belongs in the workflow model. It sits next to parseRawPayloadToJSON and parsePayloadAttributes, and is renamed to match the file's "parse" (no codec) naming. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
| {/if} | ||
| {:else if label === 'State Transitions'} | ||
| {operation.stateTransitionCount ?? ''} | ||
| {:else if label in $customSearchAttributes && customSearchAttributeValue !== undefined} |
There was a problem hiding this comment.
What was the root issue here since I thought all filterable tables shared the same components?
They share the wrapper of the table, but not the code that turns a row into cells. The custom search attribute support lived in the part that isn't shared.
What was different about the SAA SAs from workflow SAs?
The workflows list has a conversion layer that decodes search attributes along with the rest of each row. The standalone activities list used the API response directly and its table cell never had the custom search attribute logic like the workflows did.
Do we need to check SANO / Schedule SAs?
Yup, updated in c1c352d.
#3987 added custom search attribute rendering and filtering to the activities and Nexus tables using the per-column structure this branch replaced, so its intent is ported rather than its diff. Its SearchAttributeValue component now renders the per-type display all three cells were duplicating, the two value getters fall through to a row's indexed fields, and activities take the decoded ActivityExecutionListInfo. Its isFilterableCustomSearchAttribute is deliberately not adopted: it narrows custom attributes to Keyword and Text, which this branch supersedes by gating on the search attribute store so every custom type can be filtered.
Description & motivation 💭
When a custom search attribute was added as a column on the Standalone Activities list page, the column was always empty. The activities table cell had no handling for custom search attributes and the list API returns raw payloads that were never decoded.
This PR shows those values and shares the rendering with the workflows table, so the two tables behave the same:
fetchPaginatedActivitiesmaps each item throughtoActivityExecutionListInfo. It reusestoSearchAttributesfrom the workflow model, the same decoding the workflows list uses. A newActivityExecutionListInfotype carries the decoded values. The detail page keeps the rawActivityExecutionInfo, because its Search Attributes tab decodes on its own.isFilterableCustomSearchAttributeand a newcomponents/table/search-attribute-value.svelte:label in $customSearchAttributes. The oldisCustomSearchAttributeread the store once withget(), so a custom column could stay blank if the table drew before the namespace's search attributes loaded.toSearchAttributesinstead of its own copy of the decoding, andisCustomSearchAttributeis removed.Screenshots (if applicable) 📸
Design Considerations 🎨
Testing 🧪
How was this tested 👻
Steps for others to test: 🚶🏽♂️🚶🏽♀️
Checklists
Draft Checklist
Merge Checklist
Issue(s) closed
Docs
Any docs updates needed?