feat(DT-3657): Support shift click for bulk selection in workflow table#3344
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
82757c2 to
b865fe8
Compare
| > | ||
| <slot name="cloud" slot="cloud" /> | ||
| </WorkflowsSummaryConfigurableTable> | ||
| {cloud} |
There was a problem hiding this comment.
This change requires a small update in cloud-ui to pass in a snippet instead of a slot
There was a problem hiding this comment.
We'll just want to make sure we have a commit ready to add to the generated Cloud release PR that updates this.
laurakwhit
left a comment
There was a problem hiding this comment.
This is looking great ⌨️ 🎉 Nothing major, but a few things to clarify.
| > | ||
| <slot name="cloud" slot="cloud" /> | ||
| </WorkflowsSummaryConfigurableTable> | ||
| {cloud} |
There was a problem hiding this comment.
We'll just want to make sure we have a commit ready to add to the generated Cloud release PR that updates this.
| data-track-name="checkbox" | ||
| data-track-intent="toggle" | ||
| data-track-text={label} | ||
| bind:checked |
There was a problem hiding this comment.
Should this no longer be bind:checked (and instead just be {checked}) since it's computed from $selectedWorkflows?
There was a problem hiding this comment.
Other uses of holocene checkbox might want to bind to checked
laurakwhit
left a comment
There was a problem hiding this comment.
Two small comments r.e. keyed by (column), but otherwise 🚀
|
|
||
| inFlightChildRequests.add(workflow.runId); | ||
| try { | ||
| const children = await fetchAllChildWorkflows( |
There was a problem hiding this comment.
Perhaps out of scope for this PR and probably not causing any bugs atm, but wondering what you think about having some kind of AbortSignal for fetchAllChildWorkflows. Seems like it might be possible to expand, collapse, and then expand child workflows again before the first fetch has resolved.
There was a problem hiding this comment.
yeah an abort signal would be nice. I didn't want to go down that rabbit hole for this PR though.
Co-authored-by: Laura Whitaker <[email protected]>
…le (#3344) * Fix eslint warning * Migrate to Svelte 5 syntax * Add multiselect via shift key * Clear prev index after page selected or all selected trigger * Make onClickBatchSelect optional, disable checkbox if child * Do not set child disabled * Support shift+click select within child workflows * Update shift+click logic. Instead of multiple scopes, treat all visible items as one scope. * Remove console log * Fixup type * Add tests * Account for prevClickedRow being nullish * Fix type * Fix some warnings * Fix type * Fix type for onClickBatchSelect * Fix type check * Use early return * More warning fixes * Undo prop type change * Fix warning * Default query to empty string * Move comment to inside handler :\ * Move isChecked higher * Fix race condition * Fix the fix :P * Use runId as key * use runId for check * Show root rows as checked if allSelected * Use map instead of set so we rely on runId for equality * Fix header checkmark status * Address PR comments * Apply suggestions from code review Co-authored-by: Laura Whitaker <[email protected]> --------- Co-authored-by: Laura Whitaker <[email protected]>
* Enable Svelte 5 runes on files not using legacy features * Migrate components to Svelte 5 runes syntax * Trivial migrations * More simple migrations * feat(DT-3657): Support shift click for bulk selection in workflow table (#3344) * Fix eslint warning * Migrate to Svelte 5 syntax * Add multiselect via shift key * Clear prev index after page selected or all selected trigger * Make onClickBatchSelect optional, disable checkbox if child * Do not set child disabled * Support shift+click select within child workflows * Update shift+click logic. Instead of multiple scopes, treat all visible items as one scope. * Remove console log * Fixup type * Add tests * Account for prevClickedRow being nullish * Fix type * Fix some warnings * Fix type * Fix type for onClickBatchSelect * Fix type check * Use early return * More warning fixes * Undo prop type change * Fix warning * Default query to empty string * Move comment to inside handler :\ * Move isChecked higher * Fix race condition * Fix the fix :P * Use runId as key * use runId for check * Show root rows as checked if allSelected * Use map instead of set so we rely on runId for equality * Fix header checkmark status * Address PR comments * Apply suggestions from code review Co-authored-by: Laura Whitaker <[email protected]> --------- Co-authored-by: Laura Whitaker <[email protected]> * Delete unused file --------- Co-authored-by: Laura Whitaker <[email protected]>
…le (#3344) * Fix eslint warning * Migrate to Svelte 5 syntax * Add multiselect via shift key * Clear prev index after page selected or all selected trigger * Make onClickBatchSelect optional, disable checkbox if child * Do not set child disabled * Support shift+click select within child workflows * Update shift+click logic. Instead of multiple scopes, treat all visible items as one scope. * Remove console log * Fixup type * Add tests * Account for prevClickedRow being nullish * Fix type * Fix some warnings * Fix type * Fix type for onClickBatchSelect * Fix type check * Use early return * More warning fixes * Undo prop type change * Fix warning * Default query to empty string * Move comment to inside handler :\ * Move isChecked higher * Fix race condition * Fix the fix :P * Use runId as key * use runId for check * Show root rows as checked if allSelected * Use map instead of set so we rely on runId for equality * Fix header checkmark status * Address PR comments * Apply suggestions from code review Co-authored-by: Laura Whitaker <[email protected]> --------- Co-authored-by: Laura Whitaker <[email protected]>
* Enable Svelte 5 runes on files not using legacy features * Migrate components to Svelte 5 runes syntax * Trivial migrations * More simple migrations * feat(DT-3657): Support shift click for bulk selection in workflow table (#3344) * Fix eslint warning * Migrate to Svelte 5 syntax * Add multiselect via shift key * Clear prev index after page selected or all selected trigger * Make onClickBatchSelect optional, disable checkbox if child * Do not set child disabled * Support shift+click select within child workflows * Update shift+click logic. Instead of multiple scopes, treat all visible items as one scope. * Remove console log * Fixup type * Add tests * Account for prevClickedRow being nullish * Fix type * Fix some warnings * Fix type * Fix type for onClickBatchSelect * Fix type check * Use early return * More warning fixes * Undo prop type change * Fix warning * Default query to empty string * Move comment to inside handler :\ * Move isChecked higher * Fix race condition * Fix the fix :P * Use runId as key * use runId for check * Show root rows as checked if allSelected * Use map instead of set so we rely on runId for equality * Fix header checkmark status * Address PR comments * Apply suggestions from code review Co-authored-by: Laura Whitaker <[email protected]> --------- Co-authored-by: Laura Whitaker <[email protected]> * Delete unused file --------- Co-authored-by: Laura Whitaker <[email protected]>
Auto-generated version bump from 2.49.1 to 2.50.0 Bump type: minor Changes included: - [`29832bec`](29832be) Use initiatedEvent for startChildFailed event grouping (#3342) - [`91a01560`](91a0156) rm slash (#3343) - [`2e7b88d0`](2e7b88d) feat: Set Current Version action for worker deployment versions (#3319) - [`b2685f3b`](b2685f3) Add relative path prefix support to routeFor utilities (#3292) - [`9c888c0c`](9c888c0) fix: validate connection modal status, retry button, and copy nits (#3347) - [`38989c48`](38989c4) revert: restore original create worker deployment copy (#3348) - [`90e1fe58`](90e1fe5) Common Errors for Event History (#3306) - [`f479e4e2`](f479e4e) Show current duration for pending timeline events (#3346) - [`65a7ff0d`](65a7ff0) Add refresh button to workers list view (#3349) - [`219cfee4`](219cfee) Fix null conditionals in search attribute filter (#3351) - [`08bd2f01`](08bd2f0) Add support for adding caller Namespace even if it's not in list of allowed Namespace options for Nexus endpoint (#3167) - [`d424a78a`](d424a78) refactor(DT-3906): Add knip (#3350) - [`e828b14f`](e828b14) Remove icon (#3357) - [`252a755c`](252a755) Add Java to list of support versions for worker heartbeats (#3362) - [`0f446c7a`](0f446c7) refactor(DT-3906): Simple Svelte 5 migrations (#3359) - [`63db5b72`](63db5b7) feat(DT-3657): Support shift click for bulk selection in workflow table (#3344) - [`389d57bf`](389d57b) Enable Svelte 5 runes on files not using legacy features (#3363) - [`f4b87e1d`](f4b87e1) Update components/workflow to Svelte 5 syntax (#3361) - [`3e2cce43`](3e2cce4) refactor(DT-3906): More Svelte 5 Migrations (trivial ones) (#3364) - [`15adcd73`](15adcd7) refactor(DT-3906): UI svelte 5 migrate components/events (#3365) - [`031fb867`](031fb86) refactor(DT-3906): Migrate stories to Svelte 5 syntax (#3366) - [`4eac9d2a`](4eac9d2) Scope group hover to tooltip component only (#3379) - [`eeace5c3`](eeace5c) chore: upgrade TypeScript to v6.0.3 (#3371) - [`cb80efdd`](cb80efd) refactor(DT-3906): More trivial migrations (#3367) - [`6cc395bf`](6cc395b) refactor(DT-3906): migrate holocene primitives + layout components to Svelte 5 runes (#3377) - [`40a029ea`](40a029e) refactor(DT-3906): UI Svelte 5 Migrations medium (#3368) - [`7dc29ba6`](7dc29ba) refactor(DT-3906): Delete unused Svelte 4 scaffolding (carved from #3370 - Part 1) (#3372) - [`34a8547e`](34a8547) refactor(DT-3906): Migrate workflow client-action modals to runes (carved from #3370 - Part 4) (#3375) - [`61090d7e`](61090d7) refactor(DT-3906): Migrate schedule view components to runes (carved from #3370 - Part 2) (#3373) - [`988e0479`](988e047) refactor(DT-3906): Migrate filter and input components to runes (carved from #3370 - Part 3) (#3374) - [`d8b78496`](d8b7849) refactor(DT-3906): Migrate workflows-summary table + relationships to runes (carved from #3370 - Part 5) (#3376) - [`ff86c004`](ff86c00) fix(DT-3968): Make Workflow Table Tooltips render in portal (#3383) - [`5e02642a`](5e02642) fix(DT-3967): Visibly toggle the view children button even with a parent has 0 (#3382) - [`1f2b1031`](1f2b103) Remove capability guard from Set Current Version menu item (#3386) - [`0d54dcb4`](0d54dcb) fix: portal maximizable to body to escape stacking context (#3385) - [`abf45438`](abf4543) chore(security): patch Dependabot alerts for axios, protobufjs, fast-uri, uuid, postcss, gomarkdown (#3388) - [`4500f5ea`](4500f5e) Upgrade GitHub actions (#3389) - [`4a8c0c5b`](4a8c0c5) fix(timeline): stabilize child workflow timeline width with scrollbar-gutter (#3329) - [`ead14c61`](ead14c6) Move Create Schedule button to header row (#3390) - [`e8638a2b`](e8638a2) Add top margin (#3392) - [`ef03dfce`](ef03dfc) refactor: replace PayloadDecoder and MetadataDecoder with unified Payload component (#3299) - [`89b9eafa`](89b9eaf) add loading state to payload code block (#3397) - [`ee3ae138`](ee3ae13) Update Schedules search attributes filter (#3396) - [`41fd4f1f`](41fd4f1) DT-3751 - download external payloads (#3345) - [`e4fee0b6`](e4fee0b) Fix codec server request URL (#3400) - [`966b3d0a`](966b3d0) Make input from schedule result actually a string and update tests (#3403) - [`48a014db`](48a014d) feat(history): show Nexus operation name in compact view (#3394) - [`9127c768`](9127c76) Refactor status counts and refresh button (#3402) - [`747ec109`](747ec10) Fix double loader button (#3407) - [`6ae961fc`](6ae961f) Payload rendering and error optimizations (#3401) - [`32c74a48`](32c74a4) add codec server error banner back to workflow layout (#3408) - [`f73c7ec9`](f73c7ec) Nxs operation/kt (#3406) - [`672bb04a`](672bb04) Bump Go 1.26.2→1.26.3, x/net v0.54.0, remove curl from runtime image (#3409) - [`1ee09fe3`](1ee09fe) chore(deps-dev): bump svelte from 5.55.1 to 5.55.7 (#3395) - [`565bb071`](565bb07) VLN-1352: remediate missing-dependency-cooldown (#3398) - [`25794ed8`](25794ed) Bump devalue to 5.8.1 (#3410) - [`b18d0060`](b18d006) Set color-scheme explicitly (#3358) - [`e7995b81`](e7995b8) chore: ensure the empty app.html respects the user's ligh/dark settings (#3353) - [`01d64038`](01d6403) fix: enable external payload download button with namespace level codec endpoint (#3420) - [`4cc44311`](4cc4431) Fix publicPath URL duplication when prefix appears as substring (#3393) Co-authored-by: laurakwhit <[email protected]>
Description & motivation 💭
The workflow table supports selecting multiple workflows in order to perform batch actions on the selections. Right now, you can either select all workflows, the entire page of workflows, or individual workflows (one at a time).
A common pattern is to allow multi select by selecting an item, pressing (and holding shift key), and selecting another item. All items between the two (including the two) will either be selected or deselected based on the selection state of the item.
Screenshots (if applicable) 📸
Screen.Recording.2026-04-24.at.12.59.20.PM.mov
Holding shift key after having selected or deselected a workflow, all workflows between the previously clicked workflow and the next clicked workflow will be selected (if the next clicked workflow is currently unselected) or deselected (if the next clicked workflow is currently selected).
Screen.Recording.2026-04-24.at.1.05.55.PM.mov
Clear memory of prev clicked workflow when selected or deselecting all or page. (It's not intuitive to maintain the index after making a different bulk selection change).
Screen.Recording.2026-04-27.at.12.05.08.PM.mov
There is a single shift+click scope.
Design Considerations 🎨
N/A (no visual change)
Testing 🧪
How was this tested 👻
Steps for others to test: 🚶🏽♂️🚶🏽♀️
Checklists
Draft Checklist
Merge Checklist
Issue(s) closed
DT-3657
Docs
Any docs updates needed?