Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: expandedRowClassName support receive a string #1195

Merged
merged 10 commits into from
Sep 29, 2024

Conversation

li-jia-nan
Copy link
Member

@li-jia-nan li-jia-nan commented Sep 28, 2024

expandedRowClassName 支持 string 类型

Summary by CodeRabbit

  • 新功能
    • 更新了可扩展行的类名计算逻辑,支持字符串和函数两种类型的类名。
    • 演示组件增强,支持直接滚动到表的开始和结束位置。
  • 文档
    • 更新了文档中 expandable.expandedRowClassName 属性的类型声明,支持字符串和函数两种形式。
  • 测试
    • 新增测试用例,验证当 expandedRowClassName 为字符串时,扩展行类名的正确渲染。
    • 在虚拟表组件的测试中新增 expandedRowClassName 属性并进行断言。

Copy link

vercel bot commented Sep 28, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
table ✅ Ready (Inspect) Visit Preview 💬 Add feedback Sep 29, 2024 3:03am

Copy link

coderabbitai bot commented Sep 28, 2024

Warning

Rate limit exceeded

@li-jia-nan has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 10 minutes and 20 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

Files that changed from the base of the PR and between e7d1f36 and 687e0a5.

Walkthrough

此次更改涉及对BodyRowBodyLine组件的优化,通过引入新的computedExpandedClassName工具函数来计算扩展行的类名,增强了灵活性。同时,TableContextProps接口和ExpandableConfig<RecordType>接口中的expandedRowClassName属性的类型被更新为更灵活的string | RowClassName<RecordType>,允许接受字符串类型。此外,新增了测试用例,以验证当expandedRowClassName为字符串时,扩展行类名是否正确渲染。

Changes

文件路径 更改摘要
src/Body/BodyRow.tsx 修改computedExpandedRowClassName的计算方式,使用computedExpandedClassName工具函数进行优化。
src/VirtualTable/BodyLine.tsx 引入computedExpandedClassName工具函数,支持动态和静态类名的计算。
src/context/TableContext.tsx 更新TableContextProps接口中的expandedRowClassName属性类型为`string
src/interface.ts 更新ExpandableConfig<RecordType>接口中的expandedRowClassName属性类型为`string
src/utils/expandUtil.tsx 新增computedExpandedClassName函数,用于计算扩展行的类名。
tests/ExpandRow.spec.jsx 新增测试用例,验证当expandedRowClassName为字符串时,扩展行类名是否正确渲染。
tests/Virtual.spec.tsx 在虚拟表格组件的测试用例中新增expandedRowClassName属性,并添加断言以检查类名。
docs/examples/virtual.tsx 修改Demo组件以支持两个虚拟表格的同时滚动,更新相关按钮功能和渲染逻辑。

Poem

在兔子洞里欢声笑,
代码更新真是妙。
行类名更灵活,
测试用例增添好。
兔子跳跃庆新生,
代码世界更精彩! 🐇✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@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: 0

🧹 Outside diff range and nitpick comments (1)
src/Body/BodyRow.tsx (1)

149-151: 条件应用 computedExpandedRowClassName 的改进

这个改动很好地优化了 computedExpandedRowClassName 的应用逻辑。通过只在 indent >= 1 时应用这个类名,确保了扩展行样式只在实际扩展的行上生效。这比之前的实现更加精确,避免了不必要的类名应用。

为了进一步提高代码的可读性,您可以考虑将条件提取为一个命名常量:

const isExpandedRow = indent >= 1;

然后在类名对象中使用这个常量:

{
  [computedExpandedRowClassName]: isExpandedRow,
}

这样可以使代码的意图更加明确。

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 8efa10c and 5524853.

📒 Files selected for processing (3)
  • src/Body/BodyRow.tsx (2 hunks)
  • src/context/TableContext.tsx (1 hunks)
  • tests/ExpandRow.spec.jsx (1 hunks)
🔇 Additional comments (4)
src/context/TableContext.tsx (1)

40-40: 批准更改,但建议验证使用情况

这个更改增加了 expandedRowClassName 属性的灵活性,允许它接受字符串或 RowClassName<RecordType> 函数。这与上面的 rowClassName 属性保持一致,是一个很好的改进。

为了确保这个更改不会在其他地方引起问题,请运行以下脚本来验证 expandedRowClassName 的使用情况:

这将帮助我们确认是否需要在其他文件中进行相应的更新。

✅ Verification successful

修正搜索 expandedRowClassName 的脚本

之前的搜索命令因未识别类型 typescript 而失败。请使用以下修正后的命令重新搜索:


修正搜索 expandedRowClassName 的脚本

之前的搜索命令因未识别类型 tsx 而失败。请使用以下修正后的命令重新搜索:


验证通过,无问题发现

expandedRowClassName 属性的类型已成功修改为 string | RowClassName<RecordType>,并且在代码库中的所有使用情况均已正确处理,没有引入任何问题。

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 描述:验证 expandedRowClassName 的所有使用情况

# 测试:搜索 expandedRowClassName 的使用。预期:找到所有使用该属性的地方。
rg --type typescript -A 5 $'expandedRowClassName'

Length of output: 83


Script:

#!/bin/bash
# 描述:验证 expandedRowClassName 的所有使用情况

# 修正:使用正确的文件类型
rg -A 5 'expandedRowClassName' -t ts -t tsx

Length of output: 71


Script:

#!/bin/bash
# 描述:验证 expandedRowClassName 的所有使用情况

# 修正:使用通配符匹配 .ts 和 .tsx 文件
rg -A 5 'expandedRowClassName' -g '*.ts' -g '*.tsx'

Length of output: 6038

src/Body/BodyRow.tsx (2)

129-137: 使用 React.useMemo 优化性能,很好!

这个改动通过使用 React.useMemo 来优化 computedExpandedRowClassName 的计算,是一个很好的性能改进。它可以避免在每次渲染时都重新计算这个值,只有当依赖项(expandedRowClassName, record, index, 和 indent)发生变化时才会重新计算。

此外,这个实现正确地处理了 expandedRowClassName 可能是字符串或函数的情况,增加了代码的灵活性。


Line range hint 129-151: 总结:性能和正确性的显著改进

这些更改通过使用 React.useMemo 和更精确的类名应用逻辑,显著提高了组件的性能和正确性。主要改进包括:

  1. 使用 React.useMemo 优化 computedExpandedRowClassName 的计算。
  2. 更精确地应用扩展行类名,只在实际扩展的行(indent >= 1)上应用。

这些改动不仅提高了性能,还增强了代码的可维护性和灵活性。建议的小改进(使用命名常量来增加可读性)可以在未来的重构中考虑。

总的来说,这是一个高质量的改进,符合 React 的最佳实践。

tests/ExpandRow.spec.jsx (1)

418-431: 新测试用例看起来不错,但可以进一步改进

这个新的测试用例很好地验证了当 expandedRowClassName 是字符串时的行为。这与PR的目标一致,即支持 expandedRowClassName 接收字符串类型。

建议:

  1. 考虑添加一个反面测试用例,验证当提供无效的 expandedRowClassName 时(如数字或对象)的行为。
  2. 可以测试多个展开的行,以确保类名正确应用于所有展开的行。
  3. 为了提高可读性,可以将 expandedRowClassName 声明为常量,放在测试用例外部。

Copy link

codecov bot commented Sep 28, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 97.71%. Comparing base (8efa10c) to head (687e0a5).
Report is 1 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #1195   +/-   ##
=======================================
  Coverage   97.70%   97.71%           
=======================================
  Files          75       75           
  Lines        7420     7451   +31     
  Branches     1112     1116    +4     
=======================================
+ Hits         7250     7281   +31     
  Misses        164      164           
  Partials        6        6           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link

@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

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 5524853 and 99f61c8.

📒 Files selected for processing (1)
  • src/VirtualTable/BodyLine.tsx (1 hunks)
🧰 Additional context used
🪛 GitHub Check: codecov/patch
src/VirtualTable/BodyLine.tsx

[warning] 48-49: src/VirtualTable/BodyLine.tsx#L48-L49
Added lines #L48 - L49 were not covered by tests


[warning] 51-52: src/VirtualTable/BodyLine.tsx#L51-L52
Added lines #L51 - L52 were not covered by tests

src/VirtualTable/BodyLine.tsx Outdated Show resolved Hide resolved
Copy link

@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: 0

🧹 Outside diff range and nitpick comments (2)
docs/examples/virtual.tsx (2)

198-199: 同步滚动功能已实现,但可以进一步优化。

这个更改实现了两个表格同时滚动到底部的功能,这很好。但是,使用一个非常大的数值(9999999999999)作为滚动位置可能不是最佳做法。

建议:

  1. 考虑使用 scrollHeight 属性来获取实际的滚动高度。
  2. 或者,如果 API 支持,使用类似 scrollToBottom() 的方法可能更加清晰和可维护。

214-215: 滚动到特定键的功能已更新,但可以考虑进一步增强。

这个更改实现了两个表格同时滚动到数据的最后一个索引,这很好。然而,当前的实现限制了只能滚动到最后一个索引。

建议:

  1. 考虑允许用户指定要滚动到的索引,而不是固定到最后一个。
  2. 可以添加一个输入框,让用户输入想要滚动到的特定索引或键。

这样可以提高功能的灵活性和实用性。

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 99f61c8 and edcd865.

📒 Files selected for processing (3)
  • docs/examples/virtual.tsx (2 hunks)
  • src/interface.ts (1 hunks)
  • tests/Virtual.spec.tsx (1 hunks)
🔇 Additional comments (8)
docs/examples/virtual.tsx (5)

192-193: 代码更改看起来不错!

这个更改引入了两个独立的表格引用(table1Reftable2Ref)。这种方法允许对两个虚拟表格进行独立控制,为后续的功能增强奠定了基础。


206-211: 新增的滚动到顶部功能很好!

这个新增的功能很好地补充了之前的滚动到底部的功能。实现简洁明了,同时保持了两个表格的同步。这种对称的设计提高了用户体验。


221-222: VirtualTable 组件的更改看起来不错。

  1. 将 ref 更改为 table1Ref 与之前的修改保持一致,很好。
  2. 添加的 style 属性通过设置上边距,改善了表格之间的视觉分隔,这有助于提高用户体验。

这些更改都是合理的,有助于改善组件的结构和外观。


238-241: getContainerWidth 函数的重构很棒!

这次重构提高了代码的可读性,同时保持了原有的功能:

  1. 使用解构赋值来获取 borderInlineStartWidth,使代码更简洁。
  2. 变量名 mergedWidth 更具描述性,清楚地表明了它的用途。
  3. 代码结构更清晰,易于理解。

这些小改动体现了良好的编码实践,值得赞赏。


243-264: 新增的第二个 VirtualTable 组件很好地展示了新功能!

这个新增的 VirtualTable 组件有以下几个亮点:

  1. 使用 table2Ref 作为引用,与之前的修改保持一致。
  2. 大部分属性与第一个表格相同,确保了两个表格的行为一致性。
  3. expandedRowClassName 属性使用了字符串值 'good-one-string',这很好地展示了 PR 中提到的新功能。

这个例子不仅演示了如何同步两个虚拟表格,还直观地展示了 expandedRowClassName 支持字符串的新特性。这对于文档和测试都很有价值。

src/interface.ts (2)

250-250: 扩展了 expandedRowClassName 的类型定义,提高了灵活性。

这个改动允许 expandedRowClassName 接受字符串或函数类型,增加了组件的灵活性。

优点:

  1. 用户可以直接传入一个字符串作为类名,简化了简单场景的使用。
  2. 保留了原有的函数类型,仍然支持复杂的动态类名逻辑。

建议:

  1. 更新相关文档,说明这个新的用法。
  2. 考虑在其他相似的属性上也采用这种模式,以保持一致性。

Line range hint 1-250: 总体评估:积极的改进,提高了 API 的灵活性。

这个改动虽小,但影响深远:

  1. 增强了 expandedRowClassName 的使用灵活性,同时保持了向后兼容性。
  2. 符合组件库设计的最佳实践,允许简单和复杂的使用场景。
  3. 可能需要更新文档和测试用例以反映这一变化。

建议:

  1. 确保此更改在 CHANGELOG 中得到适当记录。
  2. 考虑是否有其他类似的属性可以采用这种模式,以提高整体 API 的一致性。
tests/Virtual.spec.tsx (1)

166-166: 代码更改符合预期,建议小幅改进

这个更改很好地实现了允许 expandedRowClassName 接收字符串类型的功能。测试用例正确地设置了 expandedRowClassName 并验证了其应用。

建议:

  1. 考虑添加一个额外的测试用例,以验证当 expandedRowClassName 为函数时的行为,确保两种用法都能正常工作。
  2. 可以将断言更改为使用 toHaveClass() 方法,这样可以更明确地表达意图:
expect(container.querySelector<HTMLElement>('.rc-table-expanded-row')).toHaveClass('bamboo');

Also applies to: 173-173

@afc163
Copy link
Member

afc163 commented Sep 29, 2024

为啥需要支持 string?

@li-jia-nan
Copy link
Member Author

为啥需要支持 string?

  • rowClassName 也同时支持 string 和 function,这两个属性保持一致吧
  • 另外其实在大多数场景中用不到函数,只需要写成 expandedRowClassName: "custom-ant-table-row", 就可以了

src/Body/BodyRow.tsx Outdated Show resolved Hide resolved
Copy link

@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

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between fa5f1db and e7d1f36.

📒 Files selected for processing (3)
  • src/Body/BodyRow.tsx (4 hunks)
  • src/VirtualTable/BodyLine.tsx (3 hunks)
  • src/utils/expandUtil.tsx (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/Body/BodyRow.tsx
  • src/VirtualTable/BodyLine.tsx
🔇 Additional comments (2)
src/utils/expandUtil.tsx (2)

3-3: 导入语句更新正确

导入 ExpandableConfig 类型是合理的,因为它在新添加的 computedExpandedClassName 函数中被使用。这个更改与现有的代码风格保持一致。


Line range hint 1-68: 总体评价:变更有效实现了新功能

此次更改成功地为 expandedRowClassName 添加了字符串类型支持,与 PR 的目标和讨论保持一致。新增的 computedExpandedClassName 函数设计合理,能够处理字符串和函数类型的输入。

代码结构良好,遵循了现有的编码风格,新函数在文件中的位置也很合适。这个更改提高了组件的灵活性和易用性,使得开发者可以更方便地为展开行设置类名。

为了确保这个更改不会影响其他部分的代码,建议运行以下脚本来检查 expandedRowClassName 的使用情况:

这将帮助我们确认其他地方的代码是否需要相应的更新。

src/utils/expandUtil.tsx Outdated Show resolved Hide resolved
@afc163 afc163 merged commit 38d75cd into master Sep 29, 2024
12 checks passed
@afc163 afc163 deleted the feat-expandedRowClassName branch September 29, 2024 03:39
@afc163
Copy link
Member

afc163 commented Sep 29, 2024

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.

2 participants