Skip to content

Improve Search Attribute deletion messaging#3629

Merged
laurakwhit merged 3 commits into
mainfrom
DT-4190-delete-search-attributes-improvement
Jul 7, 2026
Merged

Improve Search Attribute deletion messaging#3629
laurakwhit merged 3 commits into
mainfrom
DT-4190-delete-search-attributes-improvement

Conversation

@laurakwhit

@laurakwhit laurakwhit commented Jul 2, 2026

Copy link
Copy Markdown
Collaborator

Description & motivation 💭

  • Added an isExisting prop when adding a row so button to remove row is a close icon instead of a trash icon for new attributes.
  • In Cloud the trash button is disabled and shows a tooltip.
  • The getSupportedTypes prop was removed and the content component now defines the type list internally.
  • Added an optional description snippet prop with a fallback <p> that now includes a "Search Attribute docs" Link.
  • hideCancelButton prop removed since it was not being used.

Screenshots (if applicable) 📸

Default Cloud Cloud w/ delete enabled
Screenshot 2026-07-02 at 3 52 40 PM Screenshot 2026-07-06 at 2 57 32 PM Screenshot 2026-07-02 at 3 50 41 PM

Design Considerations 🎨

Testing 🧪

How was this tested 👻

  • Manual testing
  • E2E tests added
  • Unit tests added

Steps for others to test: 🚶🏽‍♂️🚶🏽‍♀️

For an existing search attribute

  • type select should be disabled
  • if the feature flag is enabled there should be a disabled delete button
  • if the feature flag not enabled there should be no delete button

For a new search attbibute

  • type select should be enabled
  • there should be a close button

Checklists

Draft Checklist

Merge Checklist

Issue(s) closed

DT-4190

Docs

Any docs updates needed?

@laurakwhit
laurakwhit requested a review from a team as a code owner July 2, 2026 23:43
@vercel

vercel Bot commented Jul 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
holocene Ready Ready Preview, Comment Jul 7, 2026 5:40pm

Request Review

@temporal-cicd

temporal-cicd Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor
Warnings
⚠️

📊 Strict Mode: 4 errors in 1 file (0.5% of 852 total)

src/lib/components/search-attributes-form/search-attributes-form-content.svelte (4)
  • L133:16: 'error' is of type 'unknown'.
  • L199:12: Type 'string | undefined' is not assignable to type 'string'.
  • L200:12: Type 'string | undefined' is not assignable to type 'string'.
  • L204:50: Element implicitly has an 'any' type because index expression is not of type 'number'.

Generated by 🚫 dangerJS against 03ef681

@bilal-karim

Copy link
Copy Markdown
Member
  • Can we remove the book-sparkles icon from the docs links?
  • In Default / Cloud with delete enabled, the inputs aren't aligned with the Type column heading.
  • Is there a reason we're showing "search attributes cannot be deleted" in the card description rather than just the delete button tooltip? Displaying it in the description when no attributes exist may be unnecessary. Could we only show it when search attributes >= 1? Or surface it as an informational alert banner instead of card description text?

<Link
href="https://docs.temporal.io/search-attribute"
newTab
trailingIcon="book"

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Can we remove the book-sparkles icon from the docs links?

@bilal-karim I added these based on designs from @acav-temporalio.

In Default / Cloud with delete enabled, the inputs aren't aligned with the Type column heading.

Fixed ⬇️

Image

Is there a reason we're showing "search attributes cannot be deleted" in the card description rather than just the delete button tooltip? Displaying it in the description when no attributes exist may be unnecessary. Could we only show it when search attributes >= 1? Or surface it as an informational alert banner instead of card description text?

Will defer to @acav-temporalio.

@acav-temporalio

Copy link
Copy Markdown

@bilal-karim

  • Can we remove the book-sparkles icon from the docs links?
    I thought this was the preferred icon for linking to Docs from within the platform? (as opposed to an external link with the --> arrow.
  • Is there a reason we're showing "search attributes cannot be deleted" in the card description rather than just the delete button tooltip? Displaying it in the description when no attributes exist may be unnecessary. Could we only show it when search attributes >= 1? Or surface it as an informational alert banner instead of card description text?

A few reasons why the content is not in the tooltip only. The tooltip requires user interaction (onHover/onFocus) whereas the content displayed is read without user interaction both visually and via screenreader. Because we have been getting feedback about this functionality and our goal is trying to avoid scenarios where people are carelessly adding search attributes that now require temporal support intervention to delete, this content treatment is added specifically to make two things clear:

  1. search attributes cannot be deleted if they are in use, period
  2. they cannot be deleted self-serve - contacting support is the only way to delete them right now.

The content is both preemptive (double check your work before adding a search attribute! covers the "no search attributes yet" scenario) and reactive (once these are added, you have to contact support to delete them). We want the content to exist regardless of whether there are custom search attributes added yet because we want to encourage intentional CSA additions to avoid getting support involved for deleting accidental typos, etc.

@bilal-karim

Copy link
Copy Markdown
Member

@acav-temporalio Ok, fine by me re: copy. Also, we're not really using the book sparkles icon anymore for learn more links. Good to remove?

@acav-temporalio

Copy link
Copy Markdown

@acav-temporalio Ok, fine by me re: copy. Also, we're not really using the book sparkles icon anymore for learn more links. Good to remove?

Yup if that's no longer standard, we can just use a regular link. @laurakwhit do you mind making that update (no external link icon, just link).

everything else LGTM.


{#each $formData.attributes as _, index}
{#each $formData.attributes as _, index (index)}
<SearchAttributeRow

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

  • ⚠️ Type 'string | undefined' is not assignable to type 'string'.

{#each $formData.attributes as _, index}
{#each $formData.attributes as _, index (index)}
<SearchAttributeRow
name={$formData.attributes[index].name}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

  • ⚠️ Type 'string | undefined' is not assignable to type 'string'.

@@ -164,7 +204,9 @@
submitting={$submitting}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

  • ⚠️ Element implicitly has an 'any' type because index expression is not of type 'number'.

@acav-temporalio acav-temporalio left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

approved - LGTM. Thanks Laura!

@andrewzamojc andrewzamojc left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM 🚀

variant="ghost"
size="xs"
on:click={onRemove}
disabled={submitting || isCloud}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The new show/hide logic makes sense to me.

onSave: handleSave,
onSuccess: handleSuccess,
onCancel: handleCancel,
getSupportedTypes,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I see that getSupportedTypes is no longer passed in, and so removed from this storybook file. What about where the form is actually used? Like a page somewhere?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

i see now, in cloud-ui 👍

@laurakwhit
laurakwhit merged commit a399ed3 into main Jul 7, 2026
26 checks passed
@laurakwhit
laurakwhit deleted the DT-4190-delete-search-attributes-improvement branch July 7, 2026 19:53
temporal-cicd Bot pushed a commit that referenced this pull request Jul 8, 2026
Auto-generated version bump from 2.51.1 to 2.52.0

Bump type: minor

Changes included:
- [`9c6fcd54`](9c6fcd5) Add direct SSO redirect and backend logout (#3590)
- [`feab0d90`](feab0d9) a11y(4.1.3): Toaster role="log" → per-toast role="status"/"alert" for correct AT announcement semantics (#3560)
- [`d7bbfb01`](d7bbfb0) a11y(2.5.8): toast — replace bare close button with IconButton (36×36 px) (#3553)
- [`4efd6ab6`](4efd6ab) a11y(3.3.1): Holocene input primitives — add aria-invalid, aria-describedby, and uniform live-region error announcement (#3554)
- [`0600b700`](0600b70) Use green only (#3599)
- [`94107549`](9410754) Clarify activity pause timeout behavior (#3600)
- [`9f88d5a8`](9f88d5a) Bump node version to 22.23.1 or newer to fix issue from previous security release (#3604)
- [`ca4104ae`](ca4104a) Update reason copy and inputs (#3588)
- [`51db73fa`](51db73f) Update batch operation reason input hint (#3605)
- [`836d7c55`](836d7c5) a11y(2.4.3): route navigation — move focus to the main landmark on afterNavigate, not just scroll (#3538)
- [`4ee95696`](4ee9569) Improve re-renders for large encoded event histories (#3592)
- [`fa5e7aa1`](fa5e7aa) feature/schedules (#3603)
- [`0d9467fd`](0d9467f) Default includeHeartbeatDetails and includeLastFailure to true for getActivityExecution and pollActivityExecution (#3521)
- [`e5bc514e`](e5bc514) fix schedules: duplicate key (#3612)
- [`f1eb489f`](f1eb489) Remove preview badge (#3581)
- [`1e5173b4`](1e5173b) Add existing versions to worker create deployment version form (#3601)
- [`a8552bae`](a8552ba) fix schedules -e.trim not a function (#3613)
- [`0442f847`](0442f84) Fix width of ComputeBadge in VersionTableRow (#3615)
- [`ddbeb54f`](ddbeb54) fix(cloud-nav): animate and stabilize side-nav collapse (#3606)
- [`3cfc684b`](3cfc684) fix - schedules recent/upcoming runs - sort issue (#3616)
- [`92b8875b`](92b8875) Move timestamp out of translate (#3617)
- [`901258af`](901258a) Fix SAA and WF consistency (#3614)
- [`99593d97`](99593d9) DT-4001 - standalone nexus operations (#3496)
- [`f10d1bf1`](f10d1bf) Clamp codeblock to container width (#3621)
- [`0a9d93ce`](0a9d93c) Remove unnecessary bottom-0 (#3623)
- [`9dabb522`](9dabb52) chore(deps-dev): bump vite from 6.4.2 to 6.4.3 (#3610)
- [`5c1854d3`](5c1854d) News Feed (#3596)
- [`340da30f`](340da30) a11y(2.1.1): guard global r/R keydown so text inputs can receive the letter (#3589)
- [`dd97a9d1`](dd97a9d) fix(markdown-editor): disable chromatic snapshot for preview story (#3631)
- [`7db61ab9`](7db61ab) a11y(4.1.2): Table / ProgressBar / Loading primitives — expose aria-busy on data-refresh regions (#3555)
- [`d2111ecf`](d2111ec) a11y(4.1.3): Add live-region wrappers for workflow status, event count, filter counts, and Banner (#3561)
- [`24eabaec`](24eabae) a11y(2.4.6): guard DrawerContent against empty <h2> when title is omitted (#3595)
- [`3552e307`](3552e30) Fix CodeMirror Lezer dependency mismatch (#3632)
- [`7ac37199`](7ac3719) Update defaults to match workflow defaults (#3634)
- [`c1f02865`](c1f0286) Draft fix for link variant handling (#3620)
- [`bbbf2b8c`](bbbf2b8) Add connection status and optional Latest Version column to deployments (DT-4174) (#3618)
- [`76f266f4`](76f266f) DurationInput updates (#3633)
- [`07da53c5`](07da53c) COM-191 - prefill CloudFormation template params in Launch Stack link (#3619)
- [`90946e0b`](90946e0) Schedules - Timeout empty defaults (#3637)
- [`97f9ad39`](97f9ad3) fix(cloud-nav): smooth label fade on side-nav collapse/expand (#3628)
- [`a399ed35`](a399ed3) Improve Search Attribute deletion messaging (#3629)
- [`ad976d94`](ad976d9) Pass through source prop for News Feed Widget (#3638)
- [`6ef84fe3`](6ef84fe) Restrict select-all to exclude workflow status (#3639)
- [`4c3729f8`](4c3729f) Reduce news feed markdown whitespace (#3642)
- [`aa04a9b6`](aa04a9b) feat(nexus-operations): add loading state to standalone nexus operations list page header (#3643)
- [`dce2f804`](dce2f80) chore: remove unused generate-holocene-props script (#3644)
- [`760bc7bc`](760bc7b) Make megaphone icon bigger (#3645)
- [`c047384a`](c047384) refactor(nexus): replace hand-rolled types with @temporalio/proto (#3646)
rossedfort added a commit that referenced this pull request Jul 8, 2026
Auto-generated version bump from 2.51.1 to 2.52.0

Bump type: minor

Changes included:
- [`9c6fcd54`](9c6fcd5) Add direct SSO redirect and backend logout (#3590)
- [`feab0d90`](feab0d9) a11y(4.1.3): Toaster role="log" → per-toast role="status"/"alert" for correct AT announcement semantics (#3560)
- [`d7bbfb01`](d7bbfb0) a11y(2.5.8): toast — replace bare close button with IconButton (36×36 px) (#3553)
- [`4efd6ab6`](4efd6ab) a11y(3.3.1): Holocene input primitives — add aria-invalid, aria-describedby, and uniform live-region error announcement (#3554)
- [`0600b700`](0600b70) Use green only (#3599)
- [`94107549`](9410754) Clarify activity pause timeout behavior (#3600)
- [`9f88d5a8`](9f88d5a) Bump node version to 22.23.1 or newer to fix issue from previous security release (#3604)
- [`ca4104ae`](ca4104a) Update reason copy and inputs (#3588)
- [`51db73fa`](51db73f) Update batch operation reason input hint (#3605)
- [`836d7c55`](836d7c5) a11y(2.4.3): route navigation — move focus to the main landmark on afterNavigate, not just scroll (#3538)
- [`4ee95696`](4ee9569) Improve re-renders for large encoded event histories (#3592)
- [`fa5e7aa1`](fa5e7aa) feature/schedules (#3603)
- [`0d9467fd`](0d9467f) Default includeHeartbeatDetails and includeLastFailure to true for getActivityExecution and pollActivityExecution (#3521)
- [`e5bc514e`](e5bc514) fix schedules: duplicate key (#3612)
- [`f1eb489f`](f1eb489) Remove preview badge (#3581)
- [`1e5173b4`](1e5173b) Add existing versions to worker create deployment version form (#3601)
- [`a8552bae`](a8552ba) fix schedules -e.trim not a function (#3613)
- [`0442f847`](0442f84) Fix width of ComputeBadge in VersionTableRow (#3615)
- [`ddbeb54f`](ddbeb54) fix(cloud-nav): animate and stabilize side-nav collapse (#3606)
- [`3cfc684b`](3cfc684) fix - schedules recent/upcoming runs - sort issue (#3616)
- [`92b8875b`](92b8875) Move timestamp out of translate (#3617)
- [`901258af`](901258a) Fix SAA and WF consistency (#3614)
- [`99593d97`](99593d9) DT-4001 - standalone nexus operations (#3496)
- [`f10d1bf1`](f10d1bf) Clamp codeblock to container width (#3621)
- [`0a9d93ce`](0a9d93c) Remove unnecessary bottom-0 (#3623)
- [`9dabb522`](9dabb52) chore(deps-dev): bump vite from 6.4.2 to 6.4.3 (#3610)
- [`5c1854d3`](5c1854d) News Feed (#3596)
- [`340da30f`](340da30) a11y(2.1.1): guard global r/R keydown so text inputs can receive the letter (#3589)
- [`dd97a9d1`](dd97a9d) fix(markdown-editor): disable chromatic snapshot for preview story (#3631)
- [`7db61ab9`](7db61ab) a11y(4.1.2): Table / ProgressBar / Loading primitives — expose aria-busy on data-refresh regions (#3555)
- [`d2111ecf`](d2111ec) a11y(4.1.3): Add live-region wrappers for workflow status, event count, filter counts, and Banner (#3561)
- [`24eabaec`](24eabae) a11y(2.4.6): guard DrawerContent against empty <h2> when title is omitted (#3595)
- [`3552e307`](3552e30) Fix CodeMirror Lezer dependency mismatch (#3632)
- [`7ac37199`](7ac3719) Update defaults to match workflow defaults (#3634)
- [`c1f02865`](c1f0286) Draft fix for link variant handling (#3620)
- [`bbbf2b8c`](bbbf2b8) Add connection status and optional Latest Version column to deployments (DT-4174) (#3618)
- [`76f266f4`](76f266f) DurationInput updates (#3633)
- [`07da53c5`](07da53c) COM-191 - prefill CloudFormation template params in Launch Stack link (#3619)
- [`90946e0b`](90946e0) Schedules - Timeout empty defaults (#3637)
- [`97f9ad39`](97f9ad3) fix(cloud-nav): smooth label fade on side-nav collapse/expand (#3628)
- [`a399ed35`](a399ed3) Improve Search Attribute deletion messaging (#3629)
- [`ad976d94`](ad976d9) Pass through source prop for News Feed Widget (#3638)
- [`6ef84fe3`](6ef84fe) Restrict select-all to exclude workflow status (#3639)
- [`4c3729f8`](4c3729f) Reduce news feed markdown whitespace (#3642)
- [`aa04a9b6`](aa04a9b) feat(nexus-operations): add loading state to standalone nexus operations list page header (#3643)
- [`dce2f804`](dce2f80) chore: remove unused generate-holocene-props script (#3644)
- [`760bc7bc`](760bc7b) Make megaphone icon bigger (#3645)
- [`c047384a`](c047384) refactor(nexus): replace hand-rolled types with @temporalio/proto (#3646)

Co-authored-by: rossedfort <[email protected]>
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.

4 participants