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: 为tabs组件添加showScrollbar属性 #643

Open
wants to merge 7 commits into
base: master
Choose a base branch
from

Conversation

windyeasy
Copy link

@windyeasy windyeasy commented Oct 4, 2024

🤔 这个 PR 的性质是?(至少选择一个)

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

🔗 相关 Issue

💡 需求背景和解决方案

  1. 要解决的问题:wd-tabs在标签可以滑动时会出现滚动条需要手动样式覆盖比较麻烦
    1

  2. 添加通过(showScrollbar)属性控制滚动条是否可以显示

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

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

  • 文档已补充或无须补充
  • 代码演示已提供或无须提供
  • TypeScript 定义已补充或无须补充

Summary by CodeRabbit

  • 新功能
    • wd-tabs组件中添加showScrollbar属性,允许用户通过配置来展示是否展示滚动条
  • 文档
    • 更新了wd-tabs组件的文档,说明属性的作用以及默认值

Summary by CodeRabbit

  • 新功能
    • 更新了 wd-tabs 组件的文档,增加了新属性和功能。
    • 现在 v-model 可以接受 number(选中的标签索引)和 string(标签名称)。
    • 新增 sticky 属性以支持粘性布局配置。
    • 允许在 wd-tab 上设置 disabled 属性以禁用特定标签。
    • 新增事件监听器以处理标签点击事件。
    • 新增 swipeable 属性以支持手势切换标签。
    • 新增 animated 属性以实现标签内容切换时的过渡动画。
    • Tabs 属性表中新增 showScrollbar 属性,控制可滚动标签的滚动条可见性。

Copy link

vercel bot commented Oct 4, 2024

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

Name Status Preview Comments Updated (UTC)
wot-design-uni ✅ Ready (Inspect) Visit Preview 💬 Add feedback Oct 16, 2024 1:32am

Copy link

coderabbitai bot commented Oct 4, 2024

Walkthrough

此次变更更新了wd-tabs组件的文档和实现,新增了多个功能和属性。v-model现在支持numberstring类型,增强了对选项卡的控制。新增的sticky属性允许粘性布局配置,disabled属性可用于禁用特定选项卡。引入了新的事件监听器以处理选项卡点击事件,并添加了swipeableanimated属性来支持手势切换和过渡动画。此外,文档中的属性表和事件部分也得到了扩展,以提供更详细的信息。

Changes

文件路径 更改摘要
docs/component/tabs.md 更新文档以包含新特性和属性,包括v-model支持类型、sticky属性、disabled属性、事件监听器等。
src/uni_modules/wot-design-uni/components/wd-tabs/types.ts tabsProps对象中添加showScrollbar属性,并更新duration属性。
src/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue wd-tabs组件中添加:showScrollbar属性以控制滚动条的可见性。
src/uni_modules/wot-design-uni/components/wd-tabs/index.scss 添加.hide-scrollbar类的新CSS规则以控制滚动条的可见性。

Possibly related PRs

Poem

在选项卡中跳跃,
新特性如花绽放,
粘性与手势共舞,
滚动条悄然旁观。
兔子欢呼雀跃,
代码如春风荡漾。 🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 2a2490f and 113643d.

📒 Files selected for processing (1)
  • src/uni_modules/wot-design-uni/components/wd-tabs/types.ts (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/uni_modules/wot-design-uni/components/wd-tabs/types.ts

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

netlify bot commented Oct 4, 2024

Deploy Preview for wot-design-uni ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit 113643d
🔍 Latest deploy log https://app.netlify.com/sites/wot-design-uni/deploys/670f1776b7e2c80008171a5e
😎 Deploy Preview https://deploy-preview-643--wot-design-uni.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

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 (4)
src/uni_modules/wot-design-uni/components/wd-tabs/types.ts (1)

62-67: 新属性 showScrollbar 添加正确

新添加的 showScrollbar 属性很好地解决了 PR 中提到的问题。使用 makeBooleanProp(false) 来定义属性是正确的,与文件中其他布尔属性的定义方式一致。默认值设置为 false 符合需求,默认情况下不显示滚动条。

建议稍微修改一下注释,使其更加明确:

/**
 * 控制是否显示滚动条
 *
 * @default false
 */
showScrollbar: makeBooleanProp(false)

这样可以更清楚地表明这个属性的作用和默认值。

docs/component/tabs.md (2)

150-151: 需要更新版本信息并添加使用示例

  1. 请将 $LOWEST_VERSION$ 替换为实际的最低支持版本号。

  2. 建议在文档中添加一个使用 showScrollbar 属性的示例,以帮助用户更好地理解如何使用这个新特性。例如:

<wd-tabs v-model="tab" :show-scrollbar="false">
  <!-- 标签内容 -->
</wd-tabs>

这将使文档更加完整和用户友好。


Line range hint 1-3: 建议在文档开头介绍新特性

为了突出新添加的 showScrollbar 属性,建议在文档的介绍部分或者作为一个新的章节来说明这个特性。例如,可以在基本用法部分之后添加如下内容:

## 控制滚动条显示

使用 `showScrollbar` 属性来控制当标签可以滚动时是否显示滚动条。默认情况下,滚动条是不显示的。

```html
<wd-tabs v-model="tab" :show-scrollbar="true">
  <!-- 标签内容 -->
</wd-tabs>

这个新特性允许用户根据需要显示或隐藏滚动条,提高了组件的灵活性和可定制性。


这样可以让用户更容易注意到并理解这个新功能。

</blockquote></details>
<details>
<summary>src/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue (1)</summary><blockquote>

`83-83`: **新属性 `showScrollbar` 的实现看起来不错!**

`:showScrollbar="showScrollbar"` 的添加允许用户控制滚动条的可见性,这与 PR 的目标一致。实现简单明了,很好地解决了问题。



建议:
1. 请确保在组件的 props 中定义了 `showScrollbar` 属性。如果还没有定义,请添加它并指定适当的类型和默认值。
2. 更新组件的文档,说明这个新属性的用途和默认值。

这将有助于保持代码的完整性和提高可维护性。

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**

<details>
<summary>📥 Commits</summary>

Files that changed from the base of the PR and between 5092c5a6548fe7222e0d6e2614020f15ce95c5df and 8d33269958538e5e1ae3b44c51271aaf694b979b.

</details>

<details>
<summary>📒 Files selected for processing (3)</summary>

* docs/component/tabs.md (1 hunks)
* src/uni_modules/wot-design-uni/components/wd-tabs/types.ts (1 hunks)
* src/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue (1 hunks)

</details>

<details>
<summary>🔇 Additional comments (3)</summary><blockquote>

<details>
<summary>src/uni_modules/wot-design-uni/components/wd-tabs/types.ts (1)</summary><blockquote>

`61-61`: **代码风格改进:添加尾随逗号**

添加尾随逗号是一个好的做法。它使得添加新属性更容易,并且在版本控制中产生更清晰的差异。这个改变有助于提高代码的可维护性。

</blockquote></details>
<details>
<summary>docs/component/tabs.md (2)</summary><blockquote>

`150-151`: **新属性 `showScrollbar` 的描述准确且有用**

`showScrollbar` 属性的描述清晰地解释了其功能和默认值。这与 PR 的目标一致,允许用户控制滚动条的可见性。

---

Line range hint `1-151`: **总体评价:文档更新符合预期,有小改进空间**

本次更新成功添加了 `showScrollbar` 属性的说明,这与 PR 的目标一致。文档的修改准确反映了新功能的添加。为了进一步提高文档质量,建议:

1. 替换 `$LOWEST_VERSION$` 为实际的版本号。
2. 在文档前面部分添加关于 `showScrollbar` 属性的介绍和使用示例。
3. 考虑在现有的示例中展示 `showScrollbar` 的使用方法。

这些小的改进将使文档更加全面和用户友好,有助于开发者更好地理解和使用这个新特性。

</blockquote></details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

@Moonofweisheng
Copy link
Owner

showScrollbar在app-vue钉钉小程序支付宝小程序h5平台应该是不支持的,在微信小程序平台需要结合enhanced使用,建议还是通过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: 1

🧹 Outside diff range and nitpick comments (4)
src/uni_modules/wot-design-uni/components/wd-tabs/types.ts (1)

62-67: 考虑跨平台兼容性和替代方案

根据 PR 的评论,showScrollbar 属性在某些平台上可能不受支持或需要额外配置。考虑以下建议:

  1. 添加注释说明兼容性问题:

    /**
     * 控制是否出现滚动条
     * 注意:此属性在某些平台(如 app-vue、钉钉小程序、支付宝小程序、h5)可能不生效。
     * 在微信小程序中,需要配合 `enhanced` 设置使用。
     *
     * 默认为 true
     */
    showScrollbar: makeBooleanProp(true)
  2. 考虑使用 CSS 方法控制滚动条可见性,这可能提供更好的跨平台兼容性。您可以添加一个新的 prop 来切换 CSS 类:

    /**
     * 使用 CSS 控制滚动条可见性(推荐用于跨平台兼容)
     *
     * 默认为 false
     */
    hideScrollbarWithCss: makeBooleanProp(false)
  3. 在组件的实现中,根据不同平台采取相应的策略来处理滚动条可见性。

请考虑这些建议以提高组件的跨平台兼容性和使用灵活性。

src/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue (3)

5-9: 代码结构优化和新功能添加

这些更改改进了代码的可读性,并成功实现了 showScrollbar 属性的功能。通过条件类绑定,现在可以动态控制滚动条的可见性,这与 PR 的目标相符。

建议:为了进一步提高可读性,考虑使用模板字符串来组织类名。例如:

:class="`
  wd-tabs
  ${customClass}
  ${slidableNum < items.length ? 'is-slide' : ''}
  ${mapNum < items.length && mapNum !== 0 ? 'is-map' : ''}
  ${showScrollbar ? '' : 'hide-scrollbar'}
`"

这种方式可以使类名的结构更清晰,特别是在有多个条件类的情况下。


83-88: 非粘性模板的一致性更新

这些更改确保了非粘性模板与粘性模板保持一致,同时实现了 showScrollbar 属性的功能。这种一致性有助于维护代码的可读性和可维护性。

建议:与之前的建议一致,考虑使用模板字符串来组织类名,以进一步提高可读性:

:class="`
  wd-tabs
  ${customClass}
  ${slidableNum < items.length ? 'is-slide' : ''}
  ${mapNum < items.length && mapNum !== 0 ? 'is-map' : ''}
  ${showScrollbar ? '' : 'hide-scrollbar'}
`"

这种方式可以使类名的结构更清晰,特别是在有多个条件类的情况下。


Line range hint 1-488: 缺少属性定义和文档说明

在实现 showScrollbar 功能时,发现了以下问题:

  1. showScrollbar 属性没有在组件的 props 中定义。这可能导致意外的行为,因为 Vue 不会正确地识别和响应这个属性的变化。

  2. 缺少关于 showScrollbar 功能的文档或注释说明。这可能会使其他开发者难以理解和正确使用这个新功能。

建议:

  1. 在 props 中添加 showScrollbar 的定义,例如:
showScrollbar: {
  type: Boolean,
  default: true
}
  1. 在组件顶部添加注释,解释 showScrollbar 属性的用途和默认值:
<!--
  @property {Boolean} showScrollbar - 控制滚动条的可见性,默认为 true
-->
  1. 考虑在 README 或组件文档中添加关于这个新属性的使用说明和示例。

实施这些改进将有助于提高代码的健壮性和可维护性,同时为其他开发者提供更好的使用指导。

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 8d33269 and 2a2490f.

📒 Files selected for processing (3)
  • src/uni_modules/wot-design-uni/components/wd-tabs/index.scss (1 hunks)
  • src/uni_modules/wot-design-uni/components/wd-tabs/types.ts (1 hunks)
  • src/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue (2 hunks)
🧰 Additional context used
🔇 Additional comments (4)
src/uni_modules/wot-design-uni/components/wd-tabs/types.ts (1)

61-61: 代码风格改进:添加尾随逗号

添加尾随逗号是一个好的做法。它使得在添加新属性时的版本控制差异更清晰,并与对象中其他属性的样式保持一致。

src/uni_modules/wot-design-uni/components/wd-tabs/index.scss (2)

Line range hint 1-287: 总体评估:新增样式与现有代码的集成

新增的隐藏滚动条样式是对现有wd-tabs组件的一个小但重要的补充。然而,考虑到文件的整体结构和现有的样式定义,我们需要注意以下几点:

  1. 集成性:新增的样式应该与现有的样式结构保持一致,可能需要考虑将其整合到适当的嵌套结构中。
  2. 响应式设计:文件中已有针对不同屏幕尺寸的样式调整(如@media查询),可能需要考虑新增样式在不同设备上的表现。
  3. 主题兼容性:文件开头定义了暗黑主题,新增的样式可能需要在暗黑主题下进行相应的调整。
  4. 命名一致性:确保新增的hide-scrollbar类名与组件的整体命名规范保持一致。

建议:

  1. 考虑将新增的样式整合到现有的嵌套结构中,可能的位置是在@include b(tabs)块内。
  2. 检查新样式在暗黑主题下的表现,必要时添加相应的样式规则。
  3. 确保新增的功能在组件文档中得到充分说明,包括使用方法和潜在的平台限制。

为了确保新增样式与现有代码的一致性,我们可以运行以下脚本:

#!/bin/bash
# 检查样式结构和命名约定

# 查找所有使用 @include b(tabs) 的地方
rg --type scss '@include b\(tabs\)' src/uni_modules/wot-design-uni/components/wd-tabs/

# 检查是否有其他地方使用了类似的命名约定
rg --type scss '@include [bem]' src/uni_modules/wot-design-uni/components/wd-tabs/

这将帮助我们了解现有的样式结构和命名约定,从而确保新增样式的一致性。


283-287: 🛠️ Refactor suggestion

新增的隐藏滚动条样式需要考虑兼容性和用户体验

这个新增的CSS规则用于隐藏webkit浏览器的滚动条,与PR的目标(添加showScrollbar属性来控制滚动条可见性)相符。然而,我们需要考虑以下几点:

  1. 跨浏览器兼容性:这个规则只适用于webkit内核的浏览器,可能需要为其他浏览器添加相应的规则。
  2. 用户体验:完全隐藏滚动条可能会影响某些用户的浏览体验,特别是在内容较长的情况下。
  3. 辅助功能:隐藏滚动条可能会影响使用辅助技术的用户。

建议:

  1. 考虑添加非webkit浏览器的兼容性样式。
  2. 在文档中清楚地说明这个功能的局限性。
  3. 提供一个优雅降级的方案,在不支持隐藏滚动条的平台上提供替代的视觉反馈。

考虑添加以下代码来提高跨浏览器兼容性:

.hide-scrollbar {
  -ms-overflow-style: none;  /* IE and Edge */
  scrollbar-width: none;  /* Firefox */
}

为了验证这个变更对不同平台的影响,我们可以运行以下脚本:

这将帮助我们了解是否需要为特定平台添加额外的样式规则。

src/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue (1)

Line range hint 1-488: 平台兼容性问题

根据 PR 评论中提到的信息,showScrollbar 属性在某些平台上可能不起作用,包括 app-vue、钉钉小程序、支付宝小程序和 h5 平台。当前的实现没有考虑到这些平台特定的兼容性问题。

建议:

  1. 考虑使用 CSS 来控制滚动条的可见性,这可能会提供更好的跨平台兼容性。例如:
.hide-scrollbar {
  scrollbar-width: none; /* Firefox */
  -ms-overflow-style: none; /* IE and Edge */
  &::-webkit-scrollbar {
    display: none; /* Chrome, Safari and Opera */
  }
}
  1. 对于微信小程序,可能需要额外的逻辑来处理 enhanced 设置。考虑添加一个条件检查:
<scroll-view
  :scroll-x="slidableNum < items.length"
  :enhanced="isWechatMiniProgram && showScrollbar"
  :show-scrollbar="isWechatMiniProgram ? showScrollbar : true"
>
  <!-- ... -->
</scroll-view>
  1. 在组件文档中清楚地说明各平台的兼容性情况,以及任何已知的限制或特殊要求。

  2. 考虑添加一个平台检测的辅助函数,以便更容易地处理平台特定的行为:

function getPlatform() {
  // 实现平台检测逻辑
}

通过实施这些建议,可以提高组件在不同平台上的兼容性和可用性。

Comment on lines 62 to 67
/**
* 控制是否出现滚动条
*
* 默认为 false
*/
showScrollbar: makeBooleanProp(true)
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

修复 showScrollbar 属性的注释和默认值不一致

新添加的 showScrollbar 属性很好地实现了 PR 的目标。然而,注释中说明默认值为 false,但实际实现中默认值为 true。这种不一致可能会导致使用者混淆。

建议修改如下:

  1. 如果默认值应该是 true

    /**
     * 控制是否出现滚动条
     *
     * 默认为 true
     */
    showScrollbar: makeBooleanProp(true)
  2. 如果默认值应该是 false

    /**
     * 控制是否出现滚动条
     *
     * 默认为 false
     */
    showScrollbar: makeBooleanProp(false)

请确认正确的默认值,并相应地更新代码或注释。

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