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(price): v15 #2885

Merged
merged 17 commits into from
Dec 27, 2024
Merged

feat(price): v15 #2885

merged 17 commits into from
Dec 27, 2024

Conversation

irisSong
Copy link
Collaborator

@irisSong irisSong commented Dec 24, 2024

🤔 这个变动的性质是?

  • 新特性提交
  • 日常 bug 修复
  • 站点、文档改进
  • 演示代码改进
  • 组件样式/交互改进
  • TypeScript 定义更新
  • 包体积优化
  • 性能优化
  • 功能增强
  • 国际化改进
  • 重构
  • 代码风格优化
  • 测试用例
  • 分支合并
  • 其他改动(是关于什么的改动?)

🔗 相关 Issue

💡 需求背景和解决方案

☑️ 请求合并前的自查清单

⚠️ 请自检并全部勾选全部选项⚠️

  • 文档已补充或无须补充
  • 代码演示已提供或无须提供
  • TypeScript 定义已补充或无须补充
  • fork仓库代码是否为最新避免文件冲突
  • Files changed 没有 package.json lock 等无关文件

Summary by CodeRabbit

  • 新功能

    • 引入了新的 Demo9 组件,展示价格列表,支持多种尺寸和颜色选项。
    • 更新了 Price 组件,增加了 xlarge 尺寸选项和 color 属性。
  • 文档

    • 更新了 Price 组件的文档,增加了 xlarge 尺寸和颜色选项的说明。
  • 样式

    • 修改了 Price 组件的样式,支持新的尺寸和颜色变量。
  • 测试

    • Price 组件添加了新测试用例,验证 sizecolor 属性的正确性。

Copy link

coderabbitai bot commented Dec 24, 2024

概述

演练

本次更新主要针对 NutUI React 从 2.x 版本迁移到 3.x 版本,涉及 Price 组件的多个方面的改进。更新包括引入新的尺寸选项(如 xlarge)、新增颜色属性、调整组件样式和文档,并对组件的渲染逻辑进行了重构。这些变更旨在提高组件的灵活性和可定制性。

变更

文件 变更摘要
src/packages/price/types.ts 新增 PriceSizePriceColor 类型,定义价格组件属性
src/packages/price/price.tsx 移除 BasicComponent,新增 color 属性,调整默认 size
src/packages/price/price.scss 新增颜色和尺寸相关样式
src/styles/variables.scss 添加价格相关新变量,调整尺寸和颜色定义
src/packages/price/doc*.md 更新文档,新增尺寸和颜色说明

可能相关的 PR

建议标签

size/S

建议评审人

oasis-cloud

诗歌

价格跳跃,尺寸飞扬 🐰
大小变幻,颜色绽放
代码如诗,优雅飞翔
组件进化,技术飞扬
NutUI 起舞,未来无疆!

Tip

CodeRabbit's docstrings feature is now available as part of our Early Access Program! Simply use the command @coderabbitai generate docstrings to have CodeRabbit automatically generate docstrings for your pull request. We would love to hear your feedback on Discord.


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 generate docstrings to generate docstrings for this PR. (Beta)
  • @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.

@github-actions github-actions bot added the 3.x label Dec 24, 2024
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: 5

🧹 Nitpick comments (19)
src/packages/price/demos/h5/demo8.tsx (1)

7-7: 移除了千位分隔和小数位后,默认展示与预期一致。
若需其他显示规则,建议在组件属性中显式配置。

src/packages/price/types.ts (1)

5-14: 接口字段定义合理
PriceProps 的各字段功能清晰,如 symboldigitsthousandspositionline 等都很有针对性;price 兼容 number 与 string,增强了灵活性;type 结合 PriceType 也有助于避免拼写错误。可以进一步考虑将 position 也改为字面量类型来统一规范,但目前这样使用也无明显问题。

src/packages/price/demos/taro/demo1.tsx (2)

2-2: 建议保留模块化导入顺序一致性
导入 CellGroup 后,可以考虑与现有的导入顺序保持一致,增强可读性和维护性。


14-14: 大尺寸价格展示场景
size="large" 一般在强调价格场景使用,建议结合设计规范或视觉要求统一处理相关样式。

src/packages/price/demos/h5/demo9.tsx (2)

4-9: 样式对象书写规范
在行内样式采用对象形式时,建议在团队内统一命名与注释规范,避免多人维护时的混淆。


10-15: 多份样式对象重复可考虑合并
如若后续还会增加相似样式,可考虑合并重复属性并通过传参方式定制差异,减少冗余。

src/packages/price/demos/taro/demo9.tsx (1)

17-41: 多种价格信息展示时需警惕可维护性
一次性渲染多种样式需注意不同平台对 DOM 或组件的限制,后续若还有新增可能需要拆分成可复用的子组件。

src/packages/price/demo.tsx (3)

24-24: 细化文案描述
“场域分类”可考虑补充更多示例说明,帮助用户理解该分类场景与业务的关系。


47-47: 强调“Field classification”含义
若将来组件扩展更多分类场景,可考虑单独撰写文档章节描述这些类别及其适用场景。


55-56: 在示例中优先展示新功能
Demo9 接在前面展示能强调其新增特色,但请留意用户体验,以防重要功能被埋没。

src/packages/price/price.taro.tsx (2)

11-17: 默认属性新增 type 与修改 size 建议补充测试
这里为 Price 组件新增了 type: 'primary',且将 size 默认值设为 normal。建议在单元测试或示例中验证这两个属性的显示效果,避免遗漏边缘场景。


59-60: 数值格式化逻辑可再封装避免重复
该处 formatThousands 函数部分逻辑与 checkPoint 存在可能重复的判断,建议提取或精简,以提升可读性与可维护性。

src/packages/price/price.scss (2)

16-25: .nut-price-darkgray 的嵌套写法较深,后续维护可能有风险
内层再写 .nut-price-xxx 会增加选择器层级,遇到多主题或其他修改时容易冲突,建议在结构及命名上保持简洁。


40-49: 新增 &-xlarge&-normal 亟须与设计规范对齐
多一档尺寸时,需核对与其他字号、行高在设计系统中的适配度。建议测试多语言场景下的渲染差异。

src/packages/price/doc.taro.md (1)

21-28: 新增 “场域分类” 小节合理,但篇幅可再充实
作为新增章节,简单列出原子级、模块级等分类后,最好给出可视化、示例或最佳实践,帮助使用者快速理解差异与应用场景。

src/packages/price/doc.md (2)

13-28: 新增的场域分类部分需要补充说明

建议为场域分类(原子级、模块级、列表级、页面级)添加具体的使用场景说明和示例,以帮助开发者更好地理解和选择合适的使用方式。


91-91: Props 表格中的新属性说明需要完善

建议补充以下内容:

  1. type 属性的使用场景说明,解释每种类型的适用情况
  2. size 属性中 xlarge 尺寸的推荐使用场景

Also applies to: 97-97

src/styles/jd-font.scss (1)

1-16: 字体声明实现规范!

字体声明的实现遵循了最佳实践,包括:

  • 使用 font-display: swap 避免 FOIT (Flash of Invisible Text)
  • 正确设置字重 (regular 400, bold 700)
  • 使用 base64 编码避免额外的网络请求

建议考虑以下优化:

  1. 可以考虑使用 preload 预加载关键字体
  2. 可以考虑使用 unicode-range 限制字体文件的字符范围,减小字体文件大小

示例:

<link 
  rel="preload" 
  href="data:font/ttf;charset=utf-8;base64,..." 
  as="font" 
  type="font/ttf" 
  crossorigin
>
src/styles/variables.scss (1)

809-828: 价格组件其他尺寸变量优化合理

对 large、normal 和 small 尺寸的变量进行了优化:

  • 统一了命名规范
  • 调整了各部分的大小比例
  • 保持了视觉层级的一致性

建议考虑添加以下变量以提高灵活性:

$price-font-family: var(--nutui-price-font-family, $font-family) !default;
$price-line-height: var(--nutui-price-line-height, 1.5) !default;
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 71f0a53 and 32129b2.

⛔ Files ignored due to path filters (1)
  • src/packages/price/__test__/__snapshots__/price.spec.tsx.snap is excluded by !**/*.snap
📒 Files selected for processing (38)
  • migrate-from-v2.md (1 hunks)
  • src/packages/cell/cell.taro.tsx (1 hunks)
  • src/packages/cell/cell.tsx (1 hunks)
  • src/packages/cell/index.taro.ts (1 hunks)
  • src/packages/cell/index.ts (1 hunks)
  • src/packages/cell/types.ts (1 hunks)
  • src/packages/price/demo.taro.tsx (3 hunks)
  • src/packages/price/demo.tsx (2 hunks)
  • src/packages/price/demos/h5/demo1.tsx (1 hunks)
  • src/packages/price/demos/h5/demo2.tsx (1 hunks)
  • src/packages/price/demos/h5/demo3.tsx (1 hunks)
  • src/packages/price/demos/h5/demo4.tsx (1 hunks)
  • src/packages/price/demos/h5/demo5.tsx (1 hunks)
  • src/packages/price/demos/h5/demo6.tsx (1 hunks)
  • src/packages/price/demos/h5/demo7.tsx (1 hunks)
  • src/packages/price/demos/h5/demo8.tsx (1 hunks)
  • src/packages/price/demos/h5/demo9.tsx (1 hunks)
  • src/packages/price/demos/taro/demo1.tsx (1 hunks)
  • src/packages/price/demos/taro/demo2.tsx (1 hunks)
  • src/packages/price/demos/taro/demo3.tsx (1 hunks)
  • src/packages/price/demos/taro/demo4.tsx (1 hunks)
  • src/packages/price/demos/taro/demo5.tsx (1 hunks)
  • src/packages/price/demos/taro/demo6.tsx (1 hunks)
  • src/packages/price/demos/taro/demo7.tsx (1 hunks)
  • src/packages/price/demos/taro/demo8.tsx (1 hunks)
  • src/packages/price/demos/taro/demo9.tsx (1 hunks)
  • src/packages/price/doc.en-US.md (3 hunks)
  • src/packages/price/doc.md (3 hunks)
  • src/packages/price/doc.taro.md (3 hunks)
  • src/packages/price/doc.zh-TW.md (4 hunks)
  • src/packages/price/index.taro.ts (1 hunks)
  • src/packages/price/index.ts (1 hunks)
  • src/packages/price/price.scss (3 hunks)
  • src/packages/price/price.taro.tsx (3 hunks)
  • src/packages/price/price.tsx (4 hunks)
  • src/packages/price/types.ts (1 hunks)
  • src/styles/jd-font.scss (1 hunks)
  • src/styles/variables.scss (1 hunks)
✅ Files skipped from review due to trivial changes (4)
  • src/packages/price/demos/h5/demo5.tsx
  • src/packages/price/demos/h5/demo7.tsx
  • src/packages/price/demos/h5/demo6.tsx
  • src/packages/price/demos/taro/demo3.tsx
🧰 Additional context used
🪛 Markdownlint (0.37.0)
src/packages/price/doc.zh-TW.md

104-104: null
Link fragments should be valid

(MD051, link-fragments)

🔇 Additional comments (79)
src/packages/cell/index.ts (1)

3-3: 导出新类型用法良好
添加了 CellAlignCellProps 的完整导出,便于在其他文件中统一使用。整体实现简洁清晰,可保持。

src/packages/cell/index.taro.ts (1)

3-3: 类型统一管理更具可维护性
index.ts 文件保持一致,将 CellPropsCellAlign 集中到 ./types,有助于后续维护和扩展。

src/packages/price/index.ts (1)

3-3: 新增类型有助于增强拓展性
一次性导出 PriceProps, PriceSize, PriceType,方便后续分层管理与引用,结构更清晰。

src/packages/price/index.taro.ts (1)

3-3: 类型拆分更利于组件复用
PricePropsPriceSizePriceType./types 中导出,清晰地分隔了不同功能的属性分类,推荐保留此设计。

src/packages/price/demos/taro/demo6.tsx (1)

7-7: 此处移除 size 属性后用法简洁,符合最新 API 规范。
此修改看起来没问题,可继续保持。

src/packages/price/demos/h5/demo3.tsx (1)

7-7: 使用千分位配置与新版 API 接口保持一致。
当前写法更清晰,且无多余属性,建议保留。

src/packages/price/demos/h5/demo2.tsx (1)

7-7: 修改 price 并去掉 size 属性后更符合改版需求。
功能正常,推荐保留此方式。

src/packages/price/demos/h5/demo4.tsx (1)

7-7: 保留 digits 与 thousands 属性即可满足需求,移除 size 属性后无兼容性问题。
代码简洁明了,符合设计初衷。

src/packages/price/demos/taro/demo2.tsx (1)

7-7: 请确认 digits=0 的设置是否符合业务预期。
如果您希望保留小数位,请考虑将其设置为其他值;否则,金额将被截断至整数显示。

src/packages/price/demos/taro/demo4.tsx (1)

7-7: 此处展示三位小数可提供更精确的价格信息。
如果这是您想要的精度范围,则无需进一步修改。

src/packages/price/demos/taro/demo5.tsx (1)

7-7: 请留意 Price 组件的默认小数位。
当前示例未显式声明 digits,如果需要特定的精度,可在此处添加相应配置。

src/packages/price/demos/h5/demo8.tsx (2)

6-6: 对齐方式改为 baseline 可能会影响文本与图标等元素的垂直对齐。
请确认是否满足设计需求。


9-9: 新增 type="gray"size="small" 搭配划线价格线,提升样式区分度。
请确保在产品设计中,灰色和小号样式符合需求。

src/packages/price/types.ts (2)

1-2: 导入声明检查
这行导入 BasicComponent 看起来正常,但要确保其他文件中确实需要此基础类型,如果在后续实际使用中并没有依赖该类型,可考虑去除以简化依赖关系。


3-4: 类型声明命名清晰
PriceSizePriceType 两个类型声明语义明确,使用字面量类型能有效限制可选值范围,提升可维护性。

src/packages/cell/types.ts (3)

1-2: 基础类型导入验证
同理,若 BasicComponent 未在本接口内用到其附加属性或方法,可后续评估是否需要去除依赖以减轻耦合。


3-4: 布局对齐方式可行
CellAlign 提供了 CSS 常见的 flex-startcenter 等可选值,扩展性较好。


5-14: CellProps 的字段命名直观
titledescriptionextra 均采用 React.ReactNode 类型,能方便插入自定义组件;onClick 回调的类型也与常规写法保持一致。请确保业务上正确处理可点击与不可点击的逻辑。

src/packages/price/demos/taro/demo7.tsx (1)

17-17: 动态价格演示恰当
此处的 Price 使用了 digitsthousands 属性,能展示格式化后的价格。建议在文档中强调此示例可观察价格随时间变动,以便使用者了解组件动态刷新场景。

src/packages/price/demos/h5/demo1.tsx (6)

2-2: 新增依赖组件
引入的 CellGroup 有助于在展示多个 Cell 时保持一致的布局结构,便于排版与分组管理。


6-6: 分组标签使用
使用 <CellGroup> 包裹 <Cell> 组件,可以让布局更有层次,且与 NutUI 的设计习惯一致。


8-8: 小尺寸价格
<Price price={618.68} size="small" thousands /> 显示效果更紧凑,适合场景较小或空间有限的价格展示,逻辑上无问题。


11-11: 普通尺寸价格
size="normal" 同样简洁,符合默认用例。


14-14: 大尺寸价格
size="large" 对于重点突出价格的场景很有用。


16-19: 超大尺寸价格和布局包裹
size="xlarge" 能满足更显眼的展示需求,未来如需更灵活的字号配置,可考虑让用户完全自定义样式或扩展更多尺寸。使用 <Cell> 包裹也能保持组件一致性。

src/packages/price/demos/taro/demo1.tsx (4)

6-7: 此处使用 CellGroup 包裹 Cell 可读性更强
该结构能够使组件层次更清晰,便于后续维护和调整。


8-8: 建议确认价格来源的真实性
在示例中使用常量价格 618.68 仅用于演示,但在实际环境中应确保数值来源可靠并考虑国际化等需求。


11-11: 保持组件属性一致性
size="normal" 在说明文档中已经提及,可以与其他示例例如 xlarge 一同出现在组件使用说明里,以免用户混淆。


16-19: ** xlarge 尺寸可用性检查**
新增的 xlarge 尺寸展示丰富了组件的使用场景,但需确认当前项目无排版或样式冲突。

src/packages/price/demos/h5/demo9.tsx (3)

1-3: 导入语句简洁性
这里导入的组件较多,但都来自同一库,让人一目了然。对于日后维护来说,可读性良好。


17-41: 价格与描述信息配合展示
同一行同时展示多种价格信息,布局与样式已经较清晰,建议保持此组件在不同业务场景中的一致性。


42-42: 默认导出组件命名保持统一
export default Demo9 与文件命名保持一致,后期维护检索时更加便捷。

src/packages/price/demos/taro/demo9.tsx (4)

1-3: Taro 端组件导入合理
引入 CellCellGroupPrice 三者配合得当,可复用现有组件生态。


4-5: 自定义工具函数 harmony() 用法检查
对于某些平台差异化处理逻辑,需确保该函数返回值在不同环境下符合预期。


6-15: 样式对象命名规范
在统一管理样式时,推荐保持字段含义与页面或组件功能相符合,比如 exclusivePriceStyles 与业务场景对应明显。


42-46: 默认导出命名唯一性
Demo9 已与文件名对齐,有助于分辨示例组件的用途并提升调试效率。

src/packages/price/demo.tsx (5)

11-11: 新示例引入位置合适
在所有 Demo 组件后导入 Demo9,可以帮助开发者按顺序体验功能增强点。


16-16: 文案更新同步说明
标题 title1 中包含 xlarge,需同文档持续保持一致,避免文档或示例间出现不一致问题。


27-27: 繁体文案与简体文案保持同步
确保用户在不同语言环境均能看到对应的功能介绍。


35-35: 繁体标题文案的一致性
与标题 title1 字段相互呼应,避免用户在阅读文档时产生误解。


38-38: 英文文案简洁清晰
Support sizes:small、normal、large、xlarge 文案易于理解,可与中文版本通过注释或文档互相参照。

src/packages/price/demo.taro.tsx (9)

14-14: 导入 Demo9 组件值得肯定
该改动为页面新增演示模块,能有效展示新功能。


19-19: title1 中增加 “xlarge” 尺寸
此处更新了尺寸选项,确保文档和实际功能保持一致。


27-27: 新增 title9 翻译文案
为示例补充了场域分类的说明,信息更加清晰。


30-30: 繁体中文也同步增加 “xlarge”
保持多语言翻译一致性,做得很好。


38-38: 更新繁体中文场域分类文案
文本“場域分類:原子級、模塊級、列表級、頁面級”翻译准确。


41-41: title1 英文翻译中包含 “xlarge”
保持与中文翻译同步,可读性良好。


50-50: 新增英文 title9
对英文版演示场域分类提供了清晰描述。


59-59: 新增对 title9 的演示标题
Demo9 提供了必要的标题,方便用户理解。


60-60: 渲染 Demo9 组件
成功将 Demo9 引入演示页面,助于功能效果展示。

src/packages/cell/cell.tsx (3)

1-1: 引入 React Hooks 和 FunctionComponent
这一步为后续的组件逻辑提供了必要依赖。


3-3: 新增 ComponentDefaults
确保默认属性来源明确,可增强组件可维护性。


7-7: 使用独立类型文件中的 CellProps
减少重复声明,清晰管理类型定义。

src/packages/cell/cell.taro.tsx (3)

1-1: 引入 React、FunctionComponent 和 useContext
与主平台版本保持一致,让组件在 Taro 中具备相同功能。


4-4: 使用 ComponentDefaults
为 Taro 环境下的 Cell 组件提供统一默认属性。


9-9: 从 types 文件中引入 CellProps
集中管理类型,便于后续维护与扩展。

src/packages/price/price.tsx (8)

3-3: 引入 ComponentDefaults
为 Price 组件提供统一默认属性,避免重复定义。


5-5: 引入 PriceProps
从独立文件导入类型,提升代码的可读性和可维护性。


9-9: 新增参数 type: 'primary'
默认值为 'primary',有助于自定义价格风格。


15-15: 修改默认 size 为 'normal'
改动与“xlarge”功能的更新相吻合,设定更灵活。


20-20: 在解构中增加 type
让组件可根据不同类型动态渲染,增强灵活度。


49-49: 格式化数字的逻辑调整
在检查小数点和处理千分位之前进行强制转换,保证安全性。


96-96: 在 className 中根据 type 动态设置样式
有效区分不同价格类型的视觉表现。


108-124: 管理小数点渲染
通过 <>{...}</> 组合展示小数点与小数区段,逻辑清晰且易扩展。

src/packages/price/price.taro.tsx (4)

2-4: 引入 Taro 组件的方式正确,但建议审视依赖层级
此处同时使用 TextView 以及自定义组件,整体无问题。但若项目结构调整,可能需核对对应依赖路径。


6-6: 从独立文件导入 PriceProps 可提升可维护性
外部声明的 PriceProps 接口结构更清晰,引用时避免重复定义,可读性提高。


Line range hint 22-40: 结构拆分合并后建议注意同名属性覆盖顺序
通过解构 { ...defaultProps, ...props } 可覆盖默认属性,但需保持默认属性与用户传入属性间的优先级清晰,尽可能避免后续属性命名冲突。


141-158: 基于 harmony() 判断选择 Taro 原生组件的方式可行
此处通过三元运算符渲染 TextView,逻辑清晰。后续若有多平台或多端需求时,可进行更系统的抽象。

src/packages/price/demos/taro/demo8.tsx (2)

7-7: Cell 使用 align="baseline" 合理,但需在不同设备上验证
在小屏、老式机型或各端口可能呈现差异,建议在示例或文档中补充兼容性说明。


8-10: Price 组件新版属性运用正确,注意小数与千位数分隔场景
price={618.68}price={1080.68} 均未启用 thousands;若后续展示更大数值,最好在演示中添加千位分隔的用例,保证示例全面。

src/packages/price/price.scss (4)

11-14: 统一使用 $price-color 并指定字体有助于视觉一致性
整体统一了默认颜色为 $price-color,并强制使用 'JD' 字体,可有效减少 UI 差异,但需与设计团队确认跨平台字体可用性。


27-35: .nut-price-primary 同样采用嵌套写法,稳定性需考量
.nut-price-darkgray 一致,需要注意选择器串联深度,以免后续覆盖不易控制。


63-72: &-integer 尺寸变体增多,注意数值换行与折叠问题
当整数部分过长时,在小屏幕窄容器里可能出现布局问题,建议确认是否需额外的换行处理或文字缩放策略。


81-90: &-decimal 引入多档尺寸,需与整数部分配合测试
小数部分若与整数部分尺寸差距过大,视觉上可能不协调。可在文档或示例展示不同尺寸搭配效果。

src/packages/price/doc.taro.md (2)

13-13: 文档强调 xlarge 新增尺寸,示例需详述适用场景
当前仅单独列举新增尺寸,建议在后续示例中加入高亮说明或对比图,以帮助开发者做出更恰当的选择。


91-96: Props 表中引入 typesize 的更多选项,请补充边缘用例
目前只指明用例 darkgraygrayxlarge 等,建议在 Demo 或文档查看如何与 thousandssymbol 等属性配合使用。

migrate-from-v2.md (1)

750-751: 价格组件 API 变更说明清晰

文档清晰地说明了 Price 组件的两个重要变更:

  1. 新增 'xlarge' 尺寸选项
  2. 新增 'type' 属性用于设置价格类型
src/styles/variables.scss (2)

782-792: 价格相关的颜色变量定义合理

颜色变量的定义遵循了良好的实践:

  • 使用语义化的命名
  • 提供默认值和 CSS 变量支持
  • 保持与设计系统的一致性

798-806: 新增 xlarge 尺寸变量定义完整

为 xlarge 尺寸定义了完整的变量集:

  • 符号大小: 12px
  • 整数部分: 24px
  • 小数部分: 12px

src/packages/price/price.taro.tsx Show resolved Hide resolved
src/packages/price/doc.taro.md Show resolved Hide resolved
src/packages/price/doc.zh-TW.md Show resolved Hide resolved
src/packages/price/doc.en-US.md Show resolved Hide resolved
src/packages/price/doc.en-US.md 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

🧹 Nitpick comments (3)
src/packages/cell/cell.taro.tsx (3)

Line range hint 11-15: 建议添加接口文档注释

为了提高代码的可维护性,建议为 CellTaroProps 接口添加 JSDoc 文档注释,说明其用途和参数含义。

建议添加如下文档:

+/**
+ * Taro 环境下 Cell 组件的属性接口
+ * @extends CellProps 基础 Cell 组件属性
+ * @property onClick 点击事件处理函数,支持 React 标准事件和 Taro 事件
+ */
interface CellTaroProps extends CellProps {
  onClick: (
    event: React.MouseEvent<HTMLDivElement, MouseEvent> | ITouchEvent
  ) => void
}

Line range hint 17-29: 建议优化 radius 属性的处理方式

当前 radius 属性使用固定值 '6px',建议考虑以下改进:

  1. 支持主题配置
  2. 允许使用不同的单位(如 rem、em 等)

建议修改如下:

const defaultProps = {
  ...ComponentDefaults,
  title: null,
  description: null,
  extra: null,
-  radius: '6px',
+  radius: ComponentDefaults.radius || '6px',
  align: 'flex-start',
  clickable: false,
  isLast: false,
  onClick: (
    event: React.MouseEvent<HTMLDivElement, MouseEvent> | ITouchEvent
  ) => {},
} as CellTaroProps

33-35: 建议优化组件性能

组件实现基本合理,但建议考虑以下优化:

  1. 使用 useCallback 优化 handleClick 函数
  2. 使用 useMemo 优化样式计算

建议修改如下:

+ import React, { FunctionComponent, useContext, useCallback, useMemo } from 'react'

// ... 其他代码 ...

- const handleClick = (
-   event: React.MouseEvent<HTMLDivElement, MouseEvent> | ITouchEvent
- ) => {
-   onClick(event)
- }
+ const handleClick = useCallback(
+   (event: React.MouseEvent<HTMLDivElement, MouseEvent> | ITouchEvent) => {
+     onClick(event)
+   },
+   [onClick]
+ )

- const baseStyle = {
-   ...style,
-   borderRadius: pxTransform(radiusNumber),
-   alignItems: align,
- }
+ const baseStyle = useMemo(
+   () => ({
+     ...style,
+     borderRadius: pxTransform(radiusNumber),
+     alignItems: align,
+   }),
+   [style, radiusNumber, align]
+ )
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 659338a and beeb6bd.

📒 Files selected for processing (1)
  • src/packages/cell/cell.taro.tsx (2 hunks)
🔇 Additional comments (1)
src/packages/cell/cell.taro.tsx (1)

1-10: 导入声明看起来很合理!

代码结构清晰,依赖项导入合理,将 CellProps 类型定义移至单独的类型文件是个很好的重构决定。

Copy link

codecov bot commented Dec 24, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 85.88%. Comparing base (f764c71) to head (bb9bd4b).
Report is 2 commits behind head on feat_v3.x.

Additional details and impacted files
@@              Coverage Diff              @@
##           feat_v3.x    #2885      +/-   ##
=============================================
+ Coverage      85.85%   85.88%   +0.02%     
=============================================
  Files            271      271              
  Lines          18393    18429      +36     
  Branches        2721     2726       +5     
=============================================
+ Hits           15791    15827      +36     
  Misses          2597     2597              
  Partials           5        5              

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

🧹 Nitpick comments (1)
src/packages/price/doc.en-US.md (1)

21-27: 建议补充字段分类的详细说明

当前的字段分类部分缺少对 atomic、module、list、page 这些分类的具体解释说明。建议添加:

  • 每种分类的使用场景
  • 各分类之间的区别
  • 最佳实践建议
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between aaa7cdb and 6ea5f29.

📒 Files selected for processing (1)
  • src/packages/price/doc.en-US.md (3 hunks)
🔇 Additional comments (2)
src/packages/price/doc.en-US.md (2)

97-97: size 属性默认值不一致

英文文档中 size 属性的默认值为 large,而中文文档中为 normal,需要统一默认值。

建议修改为:

-| size | Size,`xlarge` \| `large` \| `normal` \| `small` | `string` | `large` |
+| size | Size,`xlarge` \| `large` \| `normal` \| `small` | `string` | `normal` |

108-124: CSS 变量文档结构清晰完整

新增的 CSS 变量文档:

  • 命名规范统一
  • 分类清晰(按类型和尺寸分组)
  • 默认值设置合理
  • 描述准确

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

♻️ Duplicate comments (1)
src/packages/price/doc.en-US.md (1)

97-97: ⚠️ Potential issue

修复 size 属性默认值不一致

英文文档中 size 属性的默认值为 large,而组件实现中默认值为 normal,需要保持一致。

建议修改为:

-| size | Size,`xlarge` \| `large` \| `normal` \| `small` | `string` | `large` |
+| size | Size,`xlarge` \| `large` \| `normal` \| `small` | `string` | `normal` |
🧹 Nitpick comments (8)
src/packages/price/demos/taro/demo9.tsx (2)

6-19: 【样式定义可合并优化】
colorStylesexclusivePriceStylespriceStyles 都是简单的样式对象,若重复使用较多,可以考虑提取出公共逻辑,减少重复定义。


46-46: 【默认导出方式注意与命名导出一致性】
组件已默认导出 Demo9,若需要与其他组件形成统一风格,可在团队内部确认导出方式与命名规则的统一。

src/packages/price/demos/h5/demo9.tsx (2)

4-9: 建议将内联样式拆分为可复用的类
目前通过对象合并的方式定义内联样式,若样式需求增多,可考虑使用 CSS 或者 styled 组件以便增强可维护性。


17-40: 多个 <Cell> 组件示例存在重复代码
同一段示例中多次展示仅尺寸与文案不同的用法,建议通过动态参数或循环生成的方式减少重复,提高可维护性。

src/packages/price/types.ts (1)

5-14: 可进一步提高类型约束
目前 position: string 可以考虑使用 'before' | 'after' 等字面量类型,以保证在调用时得到更好的编译期检查。

src/packages/price/doc.md (1)

21-22: 场域分类段落可添加更多示例
仅以标题概括场景分类可能比较抽象,适当增加说明或示例能让使用者更快理解。

src/packages/price/price.tsx (1)

108-124: 优化小数部分的渲染逻辑

当前实现将小数点和小数值分开渲染,这可能导致样式不一致。建议考虑以下优化:

  1. 合并小数点和小数值的渲染,减少 DOM 节点
  2. 确保小数点和数值的样式保持一致

建议修改为:

-      {digits ? (
-        <>
-          <div
-            className={`${classPrefix}-decimal ${classPrefix}-decimal-${size} ${
-              line ? `${classPrefix}-line` : ''
-            }`}
-          >
-            .
-          </div>
-          <div
-            className={`${classPrefix}-decimal ${classPrefix}-decimal-${size} ${
-              line ? `${classPrefix}-line` : ''
-            }`}
-          >
-            {formatDecimal(price)}
-          </div>
-        </>
-      ) : null}
+      {digits ? (
+        <div
+          className={`${classPrefix}-decimal ${classPrefix}-decimal-${size} ${
+            line ? `${classPrefix}-line` : ''
+          }`}
+        >
+          {`.${formatDecimal(price)}`}
+        </div>
+      ) : null}
src/packages/price/price.taro.tsx (1)

141-158: 优化条件渲染结构

当前实现存在以下可优化点:

  1. 外层使用了不必要的空 Fragment
  2. 条件渲染逻辑可以简化

建议应用以下优化:

-  return (
-    <>
-      {harmony() ? (
-        <Text
-          className={`${classPrefix} ${classPrefix}-${color} ${className}`}
-          style={style}
-        >
-          {renderInner()}
-        </Text>
-      ) : (
-        <View
-          className={`${classPrefix} ${classPrefix}-${color} ${className}`}
-          style={style}
-        >
-          {renderInner()}
-        </View>
-      )}
-    </>
-  )
+  const Wrapper = harmony() ? Text : View
+  return (
+    <Wrapper
+      className={`${classPrefix} ${classPrefix}-${color} ${className}`}
+      style={style}
+    >
+      {renderInner()}
+    </Wrapper>
+  )
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6ae06ec and bb9bd4b.

⛔ Files ignored due to path filters (1)
  • src/packages/card/__test__/__snapshots__/card.spec.tsx.snap is excluded by !**/*.snap
📒 Files selected for processing (14)
  • migrate-from-v2.md (1 hunks)
  • src/packages/price/__test__/price.spec.tsx (1 hunks)
  • src/packages/price/demos/h5/demo8.tsx (1 hunks)
  • src/packages/price/demos/h5/demo9.tsx (1 hunks)
  • src/packages/price/demos/taro/demo8.tsx (1 hunks)
  • src/packages/price/demos/taro/demo9.tsx (1 hunks)
  • src/packages/price/doc.en-US.md (3 hunks)
  • src/packages/price/doc.md (3 hunks)
  • src/packages/price/doc.zh-TW.md (4 hunks)
  • src/packages/price/index.taro.ts (1 hunks)
  • src/packages/price/index.ts (1 hunks)
  • src/packages/price/price.taro.tsx (3 hunks)
  • src/packages/price/price.tsx (4 hunks)
  • src/packages/price/types.ts (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/packages/price/index.ts
  • src/packages/price/demos/taro/demo8.tsx
  • src/packages/price/test/price.spec.tsx
  • src/packages/price/demos/h5/demo8.tsx
🧰 Additional context used
🪛 Markdownlint (0.37.0)
src/packages/price/doc.zh-TW.md

104-104: null
Link fragments should be valid

(MD051, link-fragments)

🔇 Additional comments (19)
migrate-from-v2.md (1)

736-737: Price 组件的改进提升了其灵活性和可用性

这些更改增强了 Price 组件的功能:

  • 新增 'xlarge' 尺寸选项,提供更多显示选择
  • 新增 'color' 属性,支持自定义价格类型的样式定制
src/packages/price/demos/taro/demo9.tsx (3)

1-3: 【导入依赖合理】
文件顶部使用了 React、CellCellGroupPrice 组件,以及 Taro 的 Text 组件,方便封装和使用。敲定后续不会发生冲突时,可保持当前逻辑。


4-4: 【导入 harmony 需确认工具方法可用】
harmony 来自 @/utils/platform-taro,请确保此方法已在依赖文件中正确导出,且行为符合预期。若文件外仍需验证其正确性并避免潜在错误,可在测试用例中加入相关断言。


21-43: 【组件布局与样式】
当前使用多组 Cell 来展示不同的价格与 Text 标识,结构清晰。不过要注意以下点:

  1. Price 组件本身拥有多种 size,结合 Text 样式时可检查排版是否一致。
  2. 考虑到小程序端的适配,可测试在实际设备上效果是否符合期望。
src/packages/price/demos/h5/demo9.tsx (3)

1-3: 导入语句良好
导入的组件和库在这里使用合理,没有发现多余或缺失的内容。


10-15: 样式对象命名具有可读性
exclusivePriceStylespriceStyles 等名称清晰易懂,便于快速理解用途。


42-42: 组件导出正常
默认导出 Demo9,符合预期的命名规范与用法。

src/packages/price/index.taro.ts (1)

3-3: 统一的类型导出方便维护
将多个类型从 ./types 导出,有助于保持类型定义的集中管理,便于后续拓展和维护。

src/packages/price/types.ts (1)

3-4: 类型定义简洁明了
PriceSizePriceColor 使用字面量类型,能有效提示可用选项并减少输入错误。

src/packages/price/doc.md (7)

13-13: 新增尺寸小节的标题表述恰当
清晰列出可用尺寸,便于用户快速了解组件的可选项。


25-25: 新示例 Demo9 引入合理
在文档中嵌入 <CodeBlock src='h5/demo9.tsx' /> 便于读者实时查看示例。


91-91: 新增 color 属性解释到位
文档中详细说明了 primarygraydarkgray 三种可选项,便于用户选择。


97-97: 尺寸属性更新包含 xlarge
在文档中补充 xlarge 选项,保持与代码中的定义一致,信息同步无误。


108-110: CSS 变量命名符合用途
--nutui-price-primary-color--nutui-price-color--nutui-price-darkgray-color 语义明确,为自定义主题提供了清晰的切入点。


113-115: 针对 xlarge 尺寸的专用变量
进一步完善了对不同字号的定义,使得 xlarge 场景下的符号和整数、小数部分更易统一管理。


122-124: small 尺寸的变量定义也已覆盖
--nutui-price-decimal-small-size 等变量使不同大小的价格显示更加灵活。

src/packages/price/doc.zh-TW.md (1)

104-104: ⚠️ Potential issue

修复无效的文档链接

ConfigProvider 组件的链接片段无效,需要更新为正确的链接地址。

建议修改为:

-[ConfigProvider 组件](#/zh-CN/component/configprovider)
+[ConfigProvider 組件](#/zh-TW/component/configprovider)

Likely invalid or redundant comment.

🧰 Tools
🪛 Markdownlint (0.37.0)

104-104: null
Link fragments should be valid

(MD051, link-fragments)

src/packages/price/price.taro.tsx (2)

106-139: 建议进一步拆分渲染逻辑

当前 renderInner 函数虽然已经将渲染逻辑独立出来,但仍然包含了多个职责。建议:

  1. 将符号、整数、小数部分分别拆分为独立的渲染函数
  2. 这样可以提高代码的可维护性和复用性

11-11: 请确认默认值的变更影响

size 的默认值从 'large' 改为 'normal' 可能会影响现有使用场景。建议:

  1. 在更新日志中标注这是一个破坏性改动
  2. 确保相关文档已更新
  3. 考虑是否需要迁移指南

运行以下脚本以检查现有使用情况:

Also applies to: 17-17

@xiaoyatong xiaoyatong merged commit a91e0e2 into jdf2e:feat_v3.x Dec 27, 2024
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants