Skip to content

Conversation

@MMhunter
Copy link
Contributor

@MMhunter MMhunter commented Sep 29, 2025

Types

  • ๐ŸŽ‰ New Features
  • ๐Ÿ› Bug Fixes
  • ๐Ÿ“š Documentation Changes
  • ๐Ÿ’„ Code Style Changes
  • ๐Ÿ’„ Style Changes
  • ๐Ÿชš Refactors
  • ๐Ÿš€ Performance Improvements
  • ๐Ÿ—๏ธ Build System
  • โฑ Tests
  • ๐Ÿงน Chores
  • Other Changes

Background or solution

ไฟฎๅค็”ฑ #4306 ๅผ•ๅ…ฅ็š„ๅŽŸๆœ‰ๆœ็ดขๆŽงไปถ็š„ๆœ็ดข็ญ›้€‰ๅŠŸ่ƒฝๅฎžๆ•ˆ้—ฎ้ข˜

Changelog

Summary by CodeRabbit

  • ๆ–ฐๅŠŸ่ƒฝ
    • Select ็ป„ไปถๆ”ฏๆŒๅค–้ƒจๆœ็ดขๆŽงๅˆถ๏ผ›ๅฏ็”จไธ”่พ“ๅ…ฅ้ž็ฉบๆ—ถไธๅ†ๆ˜พ็คบๅ†…็ฝฎ้€‰้กนๅˆ—่กจใ€‚
    • ๆ–‡ไปถๅฏน่ฏๆก†็š„็›ฎๅฝ•้€‰ๆ‹ฉๅฏ็”จๅค–้ƒจๆœ็ดข๏ผŒไพฟไบŽ่‡ชๅฎšไน‰ๆœ็ดขไฝ“้ชŒใ€‚
  • ไฟฎๅค
    • ้€‰้กนๅกๆ ๅœจ่ฐƒๆ•ดๅคงๅฐๆ—ถๆญฃ็กฎ่Žทๅ–ๅฝ“ๅ‰ๅฎนๅ™จ็Šถๆ€๏ผŒ้ฟๅ…ๅ› ้”™่ฏฏๅˆคๆ–ญๅฏผ่‡ด็š„ๅฐบๅฏธๅ˜ๆ›ดๅผ‚ๅธธใ€‚

@opensumi opensumi bot added the ๐Ÿž bug Something isn't working label Sep 29, 2025
@MMhunter
Copy link
Contributor Author

/next

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 29, 2025

Warning

Rate limit exceeded

@MMhunter has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 18 minutes and 24 seconds before requesting another review.

โŒ› How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

๐Ÿšฆ How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between f9a850e and a276714.

๐Ÿ“’ Files selected for processing (2)
  • packages/components/src/select/index.tsx (3 hunks)
  • packages/file-tree-next/src/browser/dialog/file-dialog.view.tsx (1 hunks)

Walkthrough

ไธบ Select ็ป„ไปถๆ–ฐๅขž externalSearchBehavior ๅ…ฌๆœ‰ๅฑžๆ€งๅนถ่ฐƒๆ•ดๆœ็ดขๆธฒๆŸ“้€ป่พ‘๏ผ›ๅœจ FileDialog ไธญไธบ็›ฎๅฝ•้€‰ๆ‹ฉ Select ๅฏ็”จ่ฏฅๅฑžๆ€ง๏ผ›ๅœจ TabbarService ็š„ onResize ไธญๅฐ†ๅฏน currentContainerId ็š„่ฎฟ้—ฎๆ”นไธบไฝฟ็”จ get() ่Žทๅ–ๅ€ผใ€‚

Changes

Cohort / File(s) Summary
Select ็ป„ไปถ๏ผšๆ–ฐๅขžๅฏนๅค–ๆœ็ดขๆŽงๅˆถ
packages/components/src/select/index.tsx
ๆ–ฐๅขž externalSearchBehavior?: boolean ๅ…ฌๆœ‰ๅฑžๆ€ง๏ผ›ๅฝ“ๆไพ› onSearchChange ๆ—ถ้ป˜่ฎคๅฏ็”จ๏ผ›ๅฝ“ๅฏ็”จไธ” searchInput ้ž็ฉบๆ—ถไธๆธฒๆŸ“ SelectOptionsList๏ผ›ๅ…ฌๅผ€่ฏฅๅฑžๆ€งๅˆฐ็ป„ไปถๅ…ฅๅ‚ใ€‚
FileDialog ไฝฟ็”จๅค–้ƒจๆœ็ดขๆจกๅผ
packages/file-tree-next/src/browser/dialog/file-dialog.view.tsx
ไธบ็›ฎๅฝ•้€‰ๆ‹ฉ็š„ Select ๅขžๅŠ  externalSearchBehavior={true}๏ผŒไปฅไฝฟ็”จๅค–้ƒจๆœ็ดข่กŒไธบใ€‚
TabbarService ่Žทๅ–ๅฏ่ง‚ๅฏŸๅ€ผ
packages/main-layout/src/browser/tabbar/tabbar.service.ts
ๅœจ onResize ไธญๅฐ† this.currentContainerId ็š„ๅˆคๆ–ญๆ”นไธบ this.currentContainerId.get()๏ผŒไปฅ่Žทๅ–ๅฏ่ง‚ๅฏŸๅ€ผๅ†่ฟ›่กŒๅˆคๆ–ญใ€‚

Sequence Diagram(s)

sequenceDiagram
  actor User as ็”จๆˆท
  participant Select as Select็ป„ไปถ
  participant Consumer as ๅค–้ƒจๆœ็ดขๆŽงๅˆถๆ–น
  participant List as SelectOptionsList

  User->>Select: ่พ“ๅ…ฅๆœ็ดขๅ…ณ้”ฎๅญ—
  Select->>Consumer: ่งฆๅ‘ onSearchChange(keyword)๏ผˆ่‹ฅๆไพ›๏ผ‰
  alt externalSearchBehavior ไธบ true ไธ” keyword ้ž็ฉบ
    Note over Select,Consumer: ๅค–้ƒจๆŽฅ็ฎก่ฟ‡ๆปค/็ป“ๆžœๅฑ•็คบ
    Select--xList: ไธๆธฒๆŸ“ไธ‹ๆ‹‰ๅˆ—่กจ
  else ๅ…ถไป–ๆƒ…ๅ†ต
    Select->>List: ๆธฒๆŸ“ๅนถๆŒ‰ๅ†…้ƒจ้€ป่พ‘ๅฑ•็คบ้€‰้กน
  end
Loading

Estimated code review effort

๐ŸŽฏ 3 (Moderate) | โฑ๏ธ ~20 minutes

Possibly related PRs

  • fix(layout): optimize layout resizing and tabbar change handlingย #4575: ๅŒๅœจ TabbarService ไธญ่ฐƒๆ•ด currentContainerId ็š„่Žทๅ–/ๅˆคๆ–ญๆ–นๅผ๏ผŒๆถ‰ๅŠ็›ธๅŒไปฃ็ ๅŒบๅŸŸใ€‚
  • fix: render tabbar correctly on initial loadย #3895: ไฟฎๆ”น TabbarService๏ผŒๆทปๅŠ  nextContainerId/useFirstContainerId ไธŽๆ›ดๆ–ฐ้€ป่พ‘๏ผŒๅ’Œๆœฌๆฌกๅ˜ๆ›ดๅŒไธ€ๆœๅŠก็›ธๅ…ณใ€‚
  • feat: support search path on file dialogย #4306: ๅฏน Select ็ป„ไปถๆœ็ดข่กŒไธบ็š„ๆ”นๅŠจ๏ผˆonSearchChangeใ€ๅ†…้ƒจ่ฟ‡ๆปคไผ˜ๅŒ–็ญ‰๏ผ‰๏ผŒไธŽๆœฌๆฌกๆ–ฐๅขž externalSearchBehavior ็š„ๅŒไธ€็ป„ไปถ็›ธๅ…ณใ€‚

Suggested labels

๐Ÿž bug

Suggested reviewers

  • erha19
  • Ricbet
  • bytemain

Pre-merge checks and finishing touches

โŒ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage โš ๏ธ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title Check โ“ Inconclusive ่ฏฅๆ ‡้ข˜ๅˆๅนถไบ†โ€œFeatโ€ๅ’Œโ€œfixโ€ๆ ‡็ญพๅนถไฝฟ็”จๆ–œๆ ๅˆ†้š”๏ผŒ่ฏญไน‰ไธๆ˜Ž็กฎ๏ผŒๆ— ๆณ•ๆธ…ๆ™ฐไผ ่พพๆœฌๆฌกๆไบค็š„ไธป่ฆไฟฎๆ”น็‚น๏ผšๅฏน Select ็ป„ไปถ้ป˜่ฎคๆœ็ดข่กŒไธบ็š„ไฟฎๅคๅ’Œๆ–ฐๅฑžๆ€ง externalSearchBehavior ็š„ๅผ•ๅ…ฅ๏ผŒๅ› ๆญคๅœจๅฎก้˜…ๅކๅฒ่ฎฐๅฝ•ๆ—ถไธๆ˜“ไบŽๅฟซ้€Ÿ็†่งฃๅ˜ๆ›ดๆ ธๅฟƒใ€‚ ๅปบ่ฎฎๅฐ†ๆ ‡้ข˜ไฟฎๆ”นไธบไธ€ๆก็ฎ€ๆดๆ˜Žไบ†็š„่ฏญๅฅ๏ผŒไพ‹ๅฆ‚โ€œFix default search behavior in Select componentโ€ๆˆ–โ€œfeat(select): add externalSearchBehavior prop to control search filteringโ€๏ผŒไปฅๅ‡†็กฎๅๆ˜ ๆ–ฐๅขžๅฑžๆ€งๅ’Œไฟฎๅค็š„ๆœ็ดข่กŒไธบ้—ฎ้ข˜ใ€‚
โœ… Passed checks (1 passed)
Check name Status Explanation
Description Check โœ… Passed Check skipped - CodeRabbitโ€™s high-level summary is enabled.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

โค๏ธ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and canโ€™t be posted inline due to platform limitations.

โš ๏ธ Outside diff range comments (2)
packages/components/src/select/index.tsx (1)

425-429: ๆœ็ดข่พ“ๅ…ฅๆœช้šไธ‹ๆ‹‰ๅ…ณ้—ญๆธ…็ฉบ๏ผšไพ่ต–ๆ•ฐ็ป„็ผบๅคฑๅฏผ่‡ด้€ป่พ‘ๅคฑๆ•ˆ

่ฏฅๅ‰ฏไฝœ็”จๅชๅœจ้ฆ–ๆฌกๆŒ‚่ฝฝๆ‰ง่กŒไธ€ๆฌก๏ผŒๆ— ๆณ•ๅœจๅ…ณ้—ญ้ขๆฟๆ—ถๆธ…็ฉบ searchInput๏ผŒ็ป“ๅˆโ€œๅฏ็”จๅค–้ƒจๆœ็ดขๆ—ถๆœ‰่พ“ๅ…ฅๅฐฑไธๆธฒๆŸ“ๅˆ—่กจโ€็š„้€ป่พ‘๏ผŒๅฏ่ƒฝๅฏผ่‡ดๅ†ๆฌกๆ‰“ๅผ€ๅŽๅˆ—่กจไธ€็›ดไธๆ˜พ็คบใ€‚

-  useEffect(() => {
-    if (!open && searchInput) {
-      setSearchInput('');
-    }
-  }, []);
+  useEffect(() => {
+    if (!open && searchInput) {
+      setSearchInput('');
+    }
+  }, [open, searchInput]);
packages/file-tree-next/src/browser/dialog/file-dialog.view.tsx (1)

170-181: ้”™่ฏฏไฝฟ็”จไบ†ๆœชๅฎšไน‰็š„ event ๅ˜้‡๏ผŒๆ˜“ๅผ•ๅ‘้€ป่พ‘้”™่ฏฏ

ๅ›ž่ฐƒๅ‚ๆ•ฐๅไธบ ev๏ผŒไฝ†่ฟ™้‡Œ่ฐƒ็”จไบ† hasShiftMask(event) / hasCtrlCmdMask(event)ใ€‚ๅœจ React ็Žฏๅขƒไธ‹ window.event ไธๅฏ้ ๏ผŒ่ฟ™ไผšๅฏผ่‡ดไฟฎ้ฅฐ้”ฎๅˆคๆ–ญๅผ‚ๅธธใ€‚

-      const shiftMask = hasShiftMask(event);
-      const ctrlCmdMask = hasCtrlCmdMask(event);
+      const shiftMask = hasShiftMask(ev);
+      const ctrlCmdMask = hasCtrlCmdMask(ev);
๐Ÿงน Nitpick comments (7)
packages/main-layout/src/browser/tabbar/tabbar.service.ts (1)

831-841: ๆ”น็”จ .get() ่ฏปๅ– currentContainerId ็š„ไฟฎๅคๆ˜ฏๅˆ็†็š„๏ผ›ๅปบ่ฎฎไธ€ๆฌก่ฏปๅ–ๅนถๅค็”จไปฅ้ฟๅ…็Šถๆ€ๆŠ–ๅŠจ

ๅฝ“ๅ‰ๅœจๅŒไธ€่ฝฎๆ‰ง่กŒไธญๅฏน this.currentContainerId.get() ่ฏปๅ–ไบ†ไธคๆฌก๏ผŒๆž็ซฏๆƒ…ๅ†ตไธ‹ๅฏ่ƒฝๅ‡บ็Žฐๅ‰ๅŽไธไธ€่‡ด๏ผˆไพ‹ๅฆ‚ๅˆ‡ๆขๅ‘็”Ÿๅœจ fastdom ๅ›ž่ฐƒ้—ด้š™๏ผ‰๏ผŒไนŸไผšไบง็”Ÿไธ€ๆฌกไธๅฟ…่ฆ็š„ observable ่ฏปๅ–ใ€‚ๅปบ่ฎฎๅฐ†ๅ€ผ็ผ“ๅญ˜ๅˆฐๅฑ€้ƒจๅ˜้‡ๅนถๅค็”จ๏ผŒ่ฏญไน‰ๆ›ด็จณๅฎšไนŸๆ›ดๆ˜“่ฏปใ€‚

 fastdom.measureAtNextFrame(() => {
-  if (!this.currentContainerId.get() || !this.resizeHandle) {
+  const currentId = this.currentContainerId.get();
+  if (!currentId || !this.resizeHandle) {
     // ๆŠ˜ๅ ๆ—ถไธ็›‘ๅฌๅ˜ๅŒ–
     return;
   }

   const size = this.resizeHandle.getSize();
-  if (size !== this.barSize && !this.shouldExpand(this.currentContainerId.get())) {
+  if (size !== this.barSize && !this.shouldExpand(currentId)) {
     this.prevSize = size;
     this.onSizeChangeEmitter.fire({ size });
   }
 });
packages/components/src/select/index.tsx (4)

536-536: ้š่—ไธ‹ๆ‹‰ๅˆ—่กจ็š„ๆกไปถๅปบ่ฎฎๆ”น็”จๆดพ็”Ÿๅธธ้‡๏ผŒๅนถ่ฏท็กฎ่ฎคไบคไบ’ๆ˜ฏๅฆ็ฌฆๅˆ้ข„ๆœŸ

ๅฝ“ๅ‰ๆกไปถๅœจๆœ‰่พ“ๅ…ฅไธ”ๅฏ็”จๅค–้ƒจๆœ็ดขๆ—ถๅฎŒๅ…จไธๆธฒๆŸ“ๅˆ—่กจ๏ผŒๅฏ่ƒฝๅฏผ่‡ด็”จๆˆท่พ“ๅ…ฅๆœŸ้—ดๆ— ๅฏ้€‰็ป“ๆžœๅฏ่ง†/ๅฏ่พพใ€‚่‹ฅๅค–้ƒจไผšๆŒ‰่พ“ๅ…ฅๅผ‚ๆญฅๅˆทๆ–ฐ options๏ผŒ้€šๅธธไปๅธŒๆœ›ๅฑ•็คบๆ›ดๆ–ฐๅŽ็š„ๅˆ—่กจใ€‚

ๅปบ่ฎฎๅ…ˆๆ”น็”จๅฑ€้ƒจๅธธ้‡๏ผ›ไบคไบ’ๅฑ‚้ข่ฏท็กฎ่ฎค๏ผšๆ˜ฏๅฆ้œ€่ฆโ€œๆญฃๅœจๆœ็ดขโ€ฆโ€ๅ ไฝๆˆ–ไฟ็•™ไธŠๆฌก็ป“ๆžœใ€‚

-        !(externalSearchBehavior && searchInput) &&
+        !(isExternalSearch && searchInput) &&

ๅฆ‚้œ€ไฟ็•™ๆธฒๆŸ“ๅนถไบค็ป™ๅค–้ƒจ่ฟ‡ๆปค๏ผŒๅฏๆ”นไธบๅง‹็ปˆๆธฒๆŸ“ๅนถ็”ฑๅค–้ƒจๆŽงๅˆถ options ๅ†…ๅฎนใ€‚้œ€่ฆ็š„่ฏๆˆ‘ๅฏไปฅ่กฅๆไบคโ€œๆœ็ดขไธญๅ ไฝ + ็ฉบๆ€โ€ๆ–นๆกˆใ€‚


484-508: ๅค–้ƒจๆœ็ดขๅฏ็”จๆ—ถๅฏ้ฟๅ…ไธๅฟ…่ฆ็š„ๆœฌๅœฐ่ฟ‡ๆปค่ฎก็ฎ—

ๅฝ“ isExternalSearch && searchInput ๆ—ถๆœฌๅœฐ filterOption ็ป“ๆžœไธไผš่ขซๆธฒๆŸ“๏ผŒไป่ฎก็ฎ—ไผšๅนณ็™ฝไบง็”Ÿๅผ€้”€ใ€‚

-  const filteredOptions = useMemo(() => {
+  const filteredOptions = useMemo(() => {
+    if (isExternalSearch && searchInput) {
+      // ๅค–้ƒจๆ‰˜็ฎก่ฟ‡ๆปค๏ผš็›ดๆŽฅ่ฟ”ๅ›žๅŽŸ options๏ผˆๆˆ–ๅค–้ƒจไผ ๅ…ฅ็š„็ป“ๆžœ๏ผ‰
+      return options;
+    }
     if (!searchInput) {
       return options;
     }
@@
-  }, [options, searchInput, filterOption]);
+  }, [options, searchInput, filterOption, isExternalSearch]);

516-522: useCallback ไพ่ต–ๅŒ…ๅซๆ— ็”จ็š„ searchInput

ๅ›ž่ฐƒๅ†…ๆœช่ฏปๅ– searchInput๏ผŒๅฐ†ๅ…ถๆ”พๅ…ฅไพ่ต–ไผš้€ ๆˆไธๅฟ…่ฆ็š„้‡ๅปบใ€‚

-  }, [searchInput, onSearchChange],
+  }, [onSearchChange],

30-33: ่กฅๅ……ๅค–้ƒจๆœ็ดขๅผ€ๅ…ณ็š„้ป˜่ฎค่ฏญไน‰ๅˆฐๆณจ้‡Š

ไธบ้ฟๅ…ๆญงไน‰๏ผŒๅปบ่ฎฎๅœจๆณจ้‡Šไธญๆ˜Ž็กฎโ€œๆœชๆ˜พๅผไผ ๅ…ฅๆ—ถ๏ผŒ่‹ฅๆไพ› onSearchChange ๅˆ™้ป˜่ฎคๅฏ็”จโ€ใ€‚

   /**
-   * ๆœ็ดข่กŒไธบไธ้‡‡็”จ้ป˜่ฎค็š„ filterOptions ่ฟ›่กŒ็ญ›้€‰๏ผŒ็”ฑๅค–้ƒจๆ‰˜็ฎก
+   * ๆœ็ดข่กŒไธบ็”ฑๅค–้ƒจๆ‰˜็ฎก๏ผˆไธไฝฟ็”จ้ป˜่ฎค filterOption๏ผ‰ใ€‚
+   * ๆœชๆ˜พๅผไผ ๅ…ฅๆ—ถ๏ผŒ่‹ฅๆไพ› onSearchChange ๅˆ™้ป˜่ฎคๅฏ็”จใ€‚
    */
   externalSearchBehavior?: boolean;
packages/file-tree-next/src/browser/dialog/file-dialog.view.tsx (2)

291-291: ๆญคๅค„ๅฏ็œ็•ฅ externalSearchBehavior๏ผˆๅฏ้€‰๏ผ‰

ๅœจ Select ไธญๆˆ‘ไปฌๅทฒ็บฆๅฎšโ€œๆœชๆ˜พๅผไผ ๅ…ฅๆ—ถ๏ผŒๆไพ›ไบ† onSearchChange ๅˆ™้ป˜่ฎคๅฏ็”จๅค–้ƒจๆœ็ดขโ€๏ผŒๅ› ๆญค่ฟ™้‡Œๅฏไปฅไธๅฟ…ๆ˜พๅผไผ  true๏ผŒ้ฟๅ…ๆ ทๆฟไปฃ็ ใ€‚

-          externalSearchBehavior={true}
+          // ็œ็•ฅ๏ผšๆไพ›ไบ† onSearchChange๏ผŒ้ป˜่ฎคๅฏ็”จๅค–้ƒจๆœ็ดข

224-232: ็›ฎๅฝ•่ทฏๅพ„ๆœ็ดขๆฏๅ‡ป้”ฎๅณ่งฆๅ‘ๆ ‘ๆจกๅž‹ๅˆทๆ–ฐ๏ผŒๅปบ่ฎฎๅŽปๆŠ–

้ข‘็น่ฐƒ็”จ updateTreeModel ๅฏ่ƒฝๅผ•ๅ‘ๆ€ง่ƒฝๆŠ–ๅŠจใ€‚ๅปบ่ฎฎๅฏน onSearchChangeHandler ๅš่ฝป้‡ๅŽปๆŠ–๏ผˆ200ms ไฝœไธบ่ตท็‚น๏ผ‰๏ผŒๅŒๆ—ถ็ฒพ็ฎ€ไพ่ต–ใ€‚

-  const onSearchChangeHandler = useCallback(
-    async (value: string) => {
-      setIsReady(false);
-      setSelectPath(value);
-      await model.updateTreeModel(value);
-      setIsReady(true);
-    },
-    [model, isReady, selectPath, directoryList],
-  );
+  const debounceRef = useRef<number | null>(null);
+  const onSearchChangeHandler = useCallback(
+    (value: string) => {
+      if (debounceRef.current) {
+        window.clearTimeout(debounceRef.current);
+      }
+      debounceRef.current = window.setTimeout(async () => {
+        setIsReady(false);
+        setSelectPath(value);
+        await model.updateTreeModel(value);
+        setIsReady(true);
+      }, 200);
+    },
+    [model],
+  );
๐Ÿ“œ Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 09d815e and f9a850e.

๐Ÿ“’ Files selected for processing (3)
  • packages/components/src/select/index.tsx (3 hunks)
  • packages/file-tree-next/src/browser/dialog/file-dialog.view.tsx (1 hunks)
  • packages/main-layout/src/browser/tabbar/tabbar.service.ts (1 hunks)
โฐ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: build (macos-latest, 20.x)
  • GitHub Check: build (ubuntu-latest, 20.x)
  • GitHub Check: unittest (macos-latest, 18.x, jsdom)
  • GitHub Check: unittest (ubuntu-latest, 18.x, node)
  • GitHub Check: unittest (ubuntu-latest, 18.x, jsdom)
  • GitHub Check: unittest (macos-latest, 18.x, node)
  • GitHub Check: ubuntu-latest, Node.js 20.x

Comment on lines 305 to 306
externalSearchBehavior = externalSearchBehavior || !!onSearchChange

Copy link
Contributor

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue | ๐Ÿ”ด Critical

้ป˜่ฎคๅ€ผ่ฆ†็›–ๆ˜พๅผ false๏ผŒไธ”็›ดๆŽฅๆ”นๅ†™ๅ‚ๆ•ฐ๏ผŒๅญ˜ๅœจ่ฏญไน‰ไธŽๅฏ็ปดๆŠคๆ€ง้—ฎ้ข˜

  • ไฝฟ็”จ || ไผšๅœจ onSearchChange ๅญ˜ๅœจๆ—ถๆŠŠ็”จๆˆทๆ˜พๅผไผ ๅ…ฅ็š„ false ่ฆ†็›–ๆˆ true๏ผŒ่ฟ™ไธ็ฌฆๅˆ็›ด่ง‰ใ€‚
  • ไธ่ฆ็›ดๆŽฅ้‡ๅ†™ๅ‡ฝๆ•ฐๅ‚ๆ•ฐ๏ผŒๆ”น็”จๆดพ็”Ÿ็š„ๅฑ€้ƒจๅธธ้‡ๆ›ดๅฎ‰ๅ…จๆธ…ๆ™ฐใ€‚

ๅปบ่ฎฎ๏ผš็”จ็ฉบๅ€ผๅˆๅนถๅนถๅผ•ๅ…ฅๅฑ€้ƒจๅ˜้‡๏ผŒๆ—ขไฟ็•™โ€œๅฝ“ๆœชๆ˜พๅผไผ ๅ€ผๆ—ถ้ป˜่ฎค้š onSearchChange ๅฏ็”จโ€็š„่ฏญไน‰๏ผŒไนŸๅฐŠ้‡ๆ˜พๅผ falseใ€‚

 export function Select<T = string>({
@@
   onSearchChange,
-  externalSearchBehavior
+  externalSearchBehavior
 }: ISelectProps<T>) {
@@
-  externalSearchBehavior = externalSearchBehavior || !!onSearchChange
+  // ๆดพ็”Ÿๅค–้ƒจๆœ็ดขๅผ€ๅ…ณ๏ผšๆœชๆ˜พๅผไผ ๅ…ฅๆ—ถ๏ผŒ้ป˜่ฎค้š onSearchChange ๅฏ็”จ๏ผ›ๆ˜พๅผ false ๅฟ…้กป่ขซๅฐŠ้‡
+  const isExternalSearch = externalSearchBehavior ?? !!onSearchChange;

ๅนถๅŒๆญฅๆ›ฟๆขๅŽ็ปญๅฏน externalSearchBehavior ็š„ไฝฟ็”จ๏ผˆ่งไธ‹ๆ–น็›ธๅ…ณ diff๏ผ‰ใ€‚

Also applies to: 297-298

๐Ÿค– Prompt for AI Agents
In packages/components/src/select/index.tsx around lines 297-306, the code
mutates the parameter and uses `||` which erroneously treats an explicit false
as missing; change to derive a local constant using nullish coalescing (e.g.
const resolvedExternalSearchBehavior = externalSearchBehavior ??
!!onSearchChange) so an explicit false is preserved and you donโ€™t overwrite the
parameter, and then update all subsequent references to use this new local
constant instead of the original parameter.

@MMhunter MMhunter force-pushed the feat/fix-select-default-search branch 2 times, most recently from f9d6550 to 9ecabc3 Compare September 29, 2025 06:59
@opensumi
Copy link
Contributor

opensumi bot commented Sep 29, 2025

๐ŸŽ‰ PR Next publish successful!

3.9.1-next-1759129101.0

@MMhunter MMhunter force-pushed the feat/fix-select-default-search branch from 9ecabc3 to a276714 Compare September 29, 2025 07:00
@codecov
Copy link

codecov bot commented Sep 29, 2025

Codecov Report

โœ… All modified and coverable lines are covered by tests.
โœ… Project coverage is 52.60%. Comparing base (7dfa870) to head (a276714).
โš ๏ธ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff            @@
##             main    #4639    +/-   ##
========================================
  Coverage   52.59%   52.60%            
========================================
  Files        1686     1686            
  Lines      104362   104362            
  Branches    22682    22830   +148     
========================================
+ Hits        54894    54901     +7     
+ Misses      41097    41091     -6     
+ Partials     8371     8370     -1     
Flag Coverage ฮ”
jsdom 48.14% <รธ> (+<0.01%) โฌ†๏ธ
node 12.03% <รธ> (รธ)

Flags with carried forward coverage won't be shown. Click here to find out more.

โ˜” View full report in Codecov by Sentry.
๐Ÿ“ข Have feedback on the report? Share it here.

๐Ÿš€ New features to boost your workflow:
  • โ„๏ธ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • ๐Ÿ“ฆ JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

๐Ÿž bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants