Commit ea00c85
feat(datasources): only auto-expand search matches in the data sources tree (#9955)
## Summary
Follow-up to #9845 (which superseded the closed #9874). No API or
wire-protocol change — purely a frontend UX improvement on the existing
`Database.schemas` model.
Previously, typing any text into the data sources search box ran
`setIsExpanded(hasSearch)` on **every** database and schema, expanding
the entire tree open regardless of whether a branch had any matching
tables.
Now a database/schema row auto-expands during search **only when its
already-loaded subtree contains a table whose name matches the query**.
Crucially, deferred (not-yet-fetched) tables and child schemas are
treated as non-matching, so searching never triggers a lazy catalog
fetch — important for large/remote connections (Iceberg, etc.) where
unconditional expansion would cause a fetch storm. Expansion is
re-evaluated on each keystroke.
This is a reimplementation, against the merged `Database.schemas` model,
of the matched-subtree search behavior from the closed #9874.
## Changes
- New helpers in `datasources/utils.ts`:
- `schemaSubtreeMatchesSearch(schema, query)` — recurses over *resolved*
tables/child schemas only.
- `shouldExpandDatabaseForSearch(database, query)` — false when the
schema list is deferred.
- `datasources.tsx`: `DatabaseItem` and `SchemaNode` now drive
auto-expansion via these helpers, tracking `prevSearchValue` so
expansion follows the query. Removes the now-unused `hasSearch` plumbing
through the tree.
https://github.com/user-attachments/assets/c58cb882-aa88-4b74-9508-ebf8bb6c1dee
## Testing
- New unit tests for both helpers, including the deferred-bucket cases
(search must not match unfetched data).
- `pnpm test src/components/datasources/` — 55 tests pass.
## Pre-Review Checklist
- [x] Any AI generated code has been reviewed line-by-line by the human
PR author, who stands by it.
- [x] Video or media evidence is provided for any visual changes
(optional).
## Merge Checklist
- [x] I have read the contributor guidelines.
- [x] Tests have been added for the changes made.
<!-- This is an auto-generated description by cubic. -->
<a
href="https://cubic.dev/pr/marimo-team/marimo/pull/9955?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>1 parent c9b403d commit ea00c85
4 files changed
Lines changed: 901 additions & 19 deletions
File tree
- frontend/src/components/datasources
- __tests__
- marimo/_smoke_tests/sql
Lines changed: 127 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
7 | | - | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
8 | 18 | | |
9 | 19 | | |
10 | 20 | | |
| |||
519 | 529 | | |
520 | 530 | | |
521 | 531 | | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
| 86 | + | |
| 87 | + | |
86 | 88 | | |
87 | 89 | | |
88 | 90 | | |
| |||
360 | 362 | | |
361 | 363 | | |
362 | 364 | | |
363 | | - | |
364 | 365 | | |
365 | 366 | | |
366 | 367 | | |
| |||
435 | 436 | | |
436 | 437 | | |
437 | 438 | | |
438 | | - | |
439 | 439 | | |
440 | 440 | | |
441 | 441 | | |
| |||
470 | 470 | | |
471 | 471 | | |
472 | 472 | | |
473 | | - | |
474 | 473 | | |
475 | | - | |
| 474 | + | |
476 | 475 | | |
477 | 476 | | |
478 | 477 | | |
479 | 478 | | |
480 | 479 | | |
481 | 480 | | |
482 | 481 | | |
483 | | - | |
484 | 482 | | |
485 | 483 | | |
486 | 484 | | |
| |||
489 | 487 | | |
490 | 488 | | |
491 | 489 | | |
492 | | - | |
493 | 490 | | |
494 | 491 | | |
495 | 492 | | |
| |||
498 | 495 | | |
499 | 496 | | |
500 | 497 | | |
501 | | - | |
| 498 | + | |
502 | 499 | | |
503 | 500 | | |
504 | 501 | | |
| |||
513 | 510 | | |
514 | 511 | | |
515 | 512 | | |
516 | | - | |
| 513 | + | |
517 | 514 | | |
518 | 515 | | |
519 | 516 | | |
520 | | - | |
521 | | - | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
522 | 522 | | |
523 | | - | |
524 | | - | |
525 | | - | |
526 | | - | |
527 | | - | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
528 | 537 | | |
529 | 538 | | |
530 | 539 | | |
| |||
657 | 666 | | |
658 | 667 | | |
659 | 668 | | |
660 | | - | |
661 | | - | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
662 | 674 | | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
663 | 678 | | |
664 | 679 | | |
665 | 680 | | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
666 | 693 | | |
667 | 694 | | |
668 | 695 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
55 | 100 | | |
56 | 101 | | |
57 | 102 | | |
| |||
0 commit comments