feat(list, select, tree, tree-select): unify Ctrl/Cmd+A select-all across (#DS-3102)#1690
feat(list, select, tree, tree-select): unify Ctrl/Cmd+A select-all across (#DS-3102)#1690lskramarov wants to merge 3 commits into
Conversation
|
Visit the preview URL for this PR (updated for commit f515957): https://koobiq-next--prs-1690-91ljdm76.web.app (expires Tue, 07 Jul 2026 16:36:07 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: c9e37e518febda70d0317d07e8ceb35ac43c534c |
| } | ||
|
|
||
| /** Event emitted by the `onSelectAll` outputs when the select-all toggle runs. */ | ||
| export class KbqSelectAllEvent<T> { |
There was a problem hiding this comment.
возможно будет полезно указать source
| export class KbqSelectAllEvent<T> { | |
| export class KbqSelectAllEvent<T = unknown, S = unknown> { |
| private _noUnselectLast: boolean = true; | ||
|
|
||
| /** When `true`, a repeated Ctrl/Cmd+A deselects all options. Off by default (Ctrl+A only selects). */ | ||
| @Input({ transform: booleanAttribute }) selectAllToggle: boolean = false; |
There was a problem hiding this comment.
Pull request overview
This PR standardizes the Ctrl/Cmd+A “select all” keyboard behavior across list, select, tree-selection, and tree-select by centralizing the toggling logic in core utilities and aligning component APIs/events around it.
Changes:
- Added shared core utilities for select-all behavior:
toggleSelectAll,shouldSelectSearchText, plusKbqSelectAllEvent/adapter types. - Introduced
selectAllToggleinput to opt into “second press deselects all” (default is “select-only” to match the unified behavior). - Updated select/tree-select to emit a new
onSelectAlloutput event and to prioritize selecting search input text when appropriate; expanded unit test coverage accordingly.
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/public_api_guard/components/tree.api.md | Updates TreeSelection public API (select-all handler/toggle + signature change). |
| tools/public_api_guard/components/tree-select.api.md | Updates TreeSelect public API (selectAllToggle + onSelectAll + handler). |
| tools/public_api_guard/components/select.api.md | Updates Select public API (selectAllToggle + onSelectAll). |
| tools/public_api_guard/components/list.api.md | Updates ListSelection public API (selectAllToggle + handler). |
| tools/public_api_guard/components/core.api.md | Exposes new core select-all utilities + types in public API snapshot. |
| packages/components/core/selection/select-all.ts | Introduces shared select-all logic + event/type helpers. |
| packages/components/core/selection/select-all.spec.ts | Adds unit tests for the new core select-all helpers. |
| packages/components/core/selection/index.ts | Re-exports the new core select-all utilities. |
| packages/components/select/select.component.ts | Switches Ctrl/Cmd+A handling to shared logic; adds onSelectAll + search-text selection behavior. |
| packages/components/select/select.component.spec.ts | Adds tests for Cmd+A (macOS), search input behavior, and selectAllToggle default behavior. |
| packages/components/tree-select/tree-select.component.ts | Aligns Ctrl/Cmd+A handling with search-input selection + emits onSelectAll. |
| packages/components/tree-select/tree-select.component.spec.ts | Adds coverage for Ctrl+A behavior when search is focused and for selectAllToggle default behavior. |
| packages/components/tree/tree-selection.component.ts | Uses shared toggle logic; adds selectAllToggle + selectAllHandler input; changes selectAllOptions signature. |
| packages/components/tree/tree-selection.component.spec.ts | Adds coverage for selectAllToggle default and custom handler invocation. |
| packages/components/list/list-selection.component.ts | Uses shared toggle logic; adds selectAllToggle + selectAllHandler input. |
| packages/components/list/list-selection.component.spec.ts | Adds coverage for selectAllToggle default behavior + custom handler behavior + form value update. |
| packages/docs-examples/components/select/select-search/select-search-example.ts | Updates docs example to showcase selectAllToggle usage. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const options = tree.renderedOptions.filter((option) => !option.disabled && option.selectable()); | ||
| const selected = options.some((option) => tree.selectionModel.isSelected(option.data)); | ||
|
|
||
| select.onSelectAll.emit(new KbqSelectAllEvent(select, options, selected)); |
|
@rmnturov в стандартном поведении os ctrl+a при "выделено всё" ничего не делает, в данной реализации выделение снимается, это ок? |
No description provided.