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(calendar,cascader)!: 新增open/opened、close/closed事件(重构DOM结构) #428

Merged
merged 1 commit into from
Sep 24, 2024
Merged

Conversation

xiaohe0601
Copy link
Member

关联 #426

Copy link

netlify bot commented Sep 24, 2024

Deploy Preview for nutui-uniapp ready!

Name Link
🔨 Latest commit 73316e6
🔍 Latest deploy log https://app.netlify.com/sites/nutui-uniapp/deploys/66f2540b0b997300082f9c95
😎 Deploy Preview https://deploy-preview-428--nutui-uniapp.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 96 (no change from production)
Accessibility: 97 (no change from production)
Best Practices: 100 (no change from production)
SEO: 92 (no change from production)
PWA: 70 (no change from production)
View the detailed breakdown and full score reports

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

Copy link

coderabbitai bot commented Sep 24, 2024

Walkthrough

此次更改涉及多个组件的文档和代码更新,包括弹出框、日历、级联选择器和日历项等。主要更新包括新增事件、属性和方法的定义,以及现有属性的重组和简化。文档部分则增强了对新特性的描述,提升了可读性和一致性,确保开发者能够更好地理解和使用这些组件。

Changes

文件路径 更改摘要
docs/components/basic/popup.md 新增 click-overlay 事件,更新文档结构。
docs/components/dentry/calendar.md 更新了属性、事件、插槽和方法部分,新增 pop-style 属性及 openopened 事件,重组了文档格式。
docs/components/dentry/cascader.md 更新了属性、事件和插槽部分,新增 pop-style 属性及多个新事件,重组文档格式。
packages/nutui/components/calendar/*.ts 新增 popStylelockScroll 属性,更新事件常量和事件处理逻辑,简化事件验证。
packages/nutui/components/calendar/*.vue 添加新方法以处理事件,更新模板结构,增强组件的事件处理和样式能力。
packages/nutui/components/calendar/index.scss 格式化导入语句。
packages/nutui/components/calendar/index.ts 修改导出语句以导出所有实体。
packages/nutui/components/calendaritem/*.ts 更新属性和事件验证逻辑,简化结构,移动类型定义。
packages/nutui/components/calendaritem/*.vue 优化代码结构和可读性,更新方法和模板。
packages/nutui/components/cascader/*.ts 新增多个属性和事件,更新事件处理逻辑,简化验证。
packages/nutui/components/cascader/*.vue 更新事件处理和模板结构,增强组件的可用性。
packages/nutui/components/popup/*.ts 新增 round 属性,重组现有属性,并简化事件验证逻辑。
packages/nutui/components/popup/*.vue 添加计算属性 innerDuration,更新模板以使用新属性。
packages/nutui/components/popup/index.scss 格式化导入语句。
packages/nutui/components/cascaderitem/index.ts 修改导出语句以导出所有实体。
packages/nutui/components/cascader/index.ts 修改导出语句以导出所有实体。

Possibly related PRs

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: 12

Outside diff range and nitpick comments (28)
packages/nutui/components/calendaritem/types.ts (2)

42-51: 接口重构和命名优化

  1. 新增了 CalendarDateProp 接口,替代了之前的 Dateprop 接口。这个命名更加具体和清晰,有助于提高代码的可读性。

  2. Day 接口被移动到了新的位置,但其内容基本保持不变。这种重组可能是为了改善代码的逻辑结构。

这些更改提高了代码的组织性和命名规范,有利于长期的代码维护。

建议:

  • 考虑为 CalendarDatePropDay 接口添加简短的注释,说明它们的用途,以进一步提高代码的可读性。

Line range hint 1-66: 总体评价

这次更改主要集中在改进代码结构和命名规范上,包括:

  1. 重命名 Dateprop 接口为 CalendarDateProp,提高了命名的特异性。
  2. 重新组织了 Day 接口的位置。
  3. 通过添加空行来改善代码的可读性。

这些修改与PR的目标(重构日历组件)保持一致,有助于提高代码的可维护性和可读性。没有观察到重大的功能变更,这表明这次更新主要关注于代码质量的提升。

建议:

  • 考虑为新的和修改过的接口添加简短的注释,以进一步提高代码的可读性和可理解性。
packages/nutui/components/popup/popup.vue (1)

48-49: 模板绑定的改进增强了代码的清晰度

NutOverlay 组件的更改提高了代码的可读性和一致性:

  1. 显式绑定 :overlay-class:overlay-style 使属性传递更加明确。
  2. 使用 innerDuration 确保了类型一致性。
  3. 显式绑定 :close-on-click-overlay 增加了代码的清晰度。

这些更改都是积极的改进。为了保持一致性,建议也将 visiblez-indexlock-scrolldestroy-on-close 属性改为显式绑定。

建议将其他属性也改为显式绑定,例如:

-    visible="props.visible"
-    z-index="innerIndex"
+    :visible="props.visible"
+    :z-index="innerIndex"
-    lock-scroll="props.lockScroll"
-    destroy-on-close="props.destroyOnClose"
+    :lock-scroll="props.lockScroll"
+    :destroy-on-close="props.destroyOnClose"

Also applies to: 52-52, 54-54

packages/nutui/components/popup/popup.ts (3)

27-29: 新增 round 属性正确,建议细化文档

round 属性的添加有助于控制弹出框的圆角显示。文档清晰,但可以更具体一些。

建议将文档描述修改为:

- * @description 是否显示圆角
+ * @description 是否显示圆角(true 表示显示圆角,false 表示不显示)

31-33: 属性重组和文档更新正确,建议进一步优化

closeablecloseIconPosition 属性的重组和文档更新提高了代码的可读性和使用性。

建议为 closeIconPosition 属性添加默认值说明:

 * @description 关闭按钮位置(top-left,top-right,bottom-left,bottom-right)
+ * @default 'top-right'

Also applies to: 38-41


62-65: 事件处理逻辑简化和一致性改进

事件处理逻辑的简化和 CLOSE_EVENTCLOSED_EVENT 的重新添加提高了代码的一致性和可维护性。

建议将 'click-pop' 事件的参数类型改为更具体的类型,以提高代码的类型安全性:

- 'click-pop': (event: any) => true,
+ 'click-pop': (event: MouseEvent) => true,

Also applies to: 70-71

packages/nutui/components/cascader/index.scss (3)

1-17: 深色主题样式结构优化良好

深色主题的样式结构调整合理,嵌套逻辑清晰,有助于提高代码的可维护性。

为保持一致性,建议在第8行和第14行的颜色值后添加 !important,以确保在深色主题下样式能够正确覆盖:

-      color: $dark-color;
+      color: $dark-color !important;
-        color: $dark-color-gray;
+        color: $dark-color-gray !important;

Line range hint 30-87: 级联选择器项样式结构优化,新增水平标签样式

级联选择器项的样式结构调整合理,新增的水平标签样式增强了组件的灵活性。使用 SCSS 的嵌套和 $block 变量的方式很恰当,有助于提高代码的可维护性和可读性。

为了进一步提高代码可读性,建议在第35行后添加一个简短的注释,说明 $block 变量的用途:

    $block: &;
+   // 用于在嵌套规则中引用父选择器

89-109: 新增级联选择器栏和面板样式,增强组件功能

新增的级联选择器栏和面板样式很好地增强了组件的布局和外观。使用 flexbox 布局栏目和处理面板的溢出都是恰当的做法。

为了与其他组件保持一致,建议将固定的高度值改为使用变量。这样可以提高组件的可定制性:

-    height: 342px;
+    height: $cascader-pane-height;

请确保在文件顶部或相应的变量文件中定义 $cascader-pane-height 变量。

packages/nutui/components/calendaritem/calendaritem.ts (1)

Line range hint 5-87: 建议保留属性注释

虽然删除个别属性的注释可以使代码看起来更简洁,但这可能会降低组件的可读性和可维护性。建议为每个属性保留注释,特别是对于那些用途可能不是立即明显的属性。这将有助于其他开发人员更容易理解和使用该组件。

考虑为每个属性添加简短的注释,例如:

export const calendaritemProps = {
  ...commonProps,
  visible: Boolean, // 是否可见
  type: makeStringProp<'one' | 'range' | 'multiple' | 'week'>('one'), // 选择类型
  poppable: truthProp, // 是否弹窗状态展示
  // ... 其他属性
}
packages/nutui/components/calendar/calendar.ts (1)

96-106: 新属性增强了组件的灵活性和用户体验

新增的 popStylelockScroll 属性很好地增强了日历组件的功能:

  1. popStyle 允许自定义弹出窗口样式,提高了组件的灵活性。
  2. lockScroll 控制遮罩显示时是否锁定背景,改善了用户体验。

这些更改符合PR的目标,即重构DOM结构和改进功能。

建议更新组件文档,详细说明这些新属性的用法和效果,以便开发者能够充分利用这些新功能。

docs/components/basic/popup.md (1)

176-176: 新增的 click-overlay 事件很有用,但建议稍作调整以保持一致性。

新增的 click-overlay 事件为开发者提供了更细粒度的控制,这是一个很好的改进。然而,为了保持文档的一致性,建议将事件描述调整为与其他事件保持一致的格式。

建议将描述略作修改:

-| click-overlay    | 点击遮罩触发      | `event: Event` |
+| click-overlay    | 点击遮罩时触发     | `event: Event` |

这样可以与其他事件描述(如"点击弹出层时触发","点击关闭图标时触发")的格式保持一致。

docs/components/dentry/calendar.md (1)

787-808: 属性表格更新正确,建议小改进

新增的 pop-style 属性及其描述准确反映了组件的新功能。表格格式的调整提高了可读性。

建议:

  • 为保持一致性,考虑为 pop-style 属性添加版本标记,如 pop-style `1.8.0`
packages/nutui/components/calendaritem/calendaritem.vue (8)

1-31: 代码结构良好,建议小幅改进以提高可读性。

代码使用了 Vue 3 的组合式 API,导入和设置看起来组织得当。为了进一步提高可读性,可以考虑在导入语句之间添加一个空行,将不同类型的导入分组。例如:

 import type { ScrollViewOnScrollEvent } from '@uni-helper/uni-app-types'
 import { computed, defineComponent, onMounted, reactive, ref, useSlots, watch } from 'vue'
 import { CHOOSE_EVENT, PREFIX, SELECT_EVENT } from '../_constants'
+
 import {
   compareDate,
   date2Str,
   // ... other utility functions
 } from '../_utils'
+
 import requestAniFrame from '../_utils/raf'
 import { useTranslate } from '../../locale'
 import { calendaritemEmits, calendaritemProps } from './calendaritem'
 import type { CalendarDateProp, CalendarTaroState, Day, MonthInfo, StringArr } from './types'

这样可以使不同来源和用途的导入更容易区分。


Line range hint 95-168: 工具函数结构良好,建议小幅改进以保持一致性。

这些工具函数设计合理,每个函数都专注于特定任务,遵循了单一职责原则。为了保持代码风格的一致性,建议统一使用箭头函数或传统函数声明。例如:

-function splitDate(date: string) {
+const splitDate = (date: string) => {
   return date.split('-')
 }

-function isStart(currDate: string) {
+const isStart = (currDate: string) => {
   return isEqual(state.currDate[0], currDate)
 }

这样可以使代码风格更加统一,提高可读性。


Line range hint 170-274: 建议重构 confirm 和 chooseDay 函数以提高可维护性。

这两个函数虽然功能正常,但都比较长且复杂,处理了多个职责。为了提高可维护性和可测试性,建议将它们拆分成更小的函数。例如:

  1. 对于 confirm 函数,可以将不同类型的日期处理逻辑抽取为单独的函数。

  2. 对于 chooseDay 函数,可以将不同选择类型(multiple、range、week)的逻辑分离为独立的函数。

示例重构:

const handleRangeSelection = (days: string[]) => {
  // 处理范围选择逻辑
}

const handleMultipleSelection = (day: string) => {
  // 处理多选逻辑
}

const handleWeekSelection = (day: string) => {
  // 处理周选择逻辑
}

function chooseDay(day: Day, month: MonthInfo, isFirst = false) {
  if (getClass(day, month).includes(`${state.dayPrefix}--disabled`)) return

  const { type } = props
  const selectedDate = formatSelectedDate(day, month)

  switch (type) {
    case 'multiple':
      handleMultipleSelection(selectedDate)
      break
    case 'range':
      handleRangeSelection(selectedDate)
      break
    case 'week':
      handleWeekSelection(selectedDate)
      break
    default:
      handleSingleSelection(selectedDate)
  }

  if (!isFirst) {
    emitSelectEvent()
    if (props.isAutoBackFill || !props.poppable) confirm()
  }
}

这样的重构可以使每个函数更加专注,更易于理解和测试。


Line range hint 321-340: getPreDaysStatus 函数中的日期计算可能存在问题,建议修正。

getPreDaysStatus 函数中的日期计算逻辑可能会导致错误的结果。当 props.firstDayOfWeek 不为 0 时,days 的计算可能会得到负值,这可能会导致意外的行为。建议修改计算逻辑以确保 days 始终为非负值。

可以考虑使用以下逻辑:

const getPreDaysStatus = (days: number, type: string, dateInfo: CalendarDateProp, preCurrMonthDays: number) => {
  // 确保 days 为非负值
  days = (days - props.firstDayOfWeek + 7) % 7
  
  // 其余代码保持不变
  // ...
}

这样可以确保 days 始终在 0 到 6 之间,无论 props.firstDayOfWeek 的值如何。


Line range hint 342-421: 建议重构 getMonth 函数以提高可读性和可维护性。

getMonth 函数虽然功能完整,但较为复杂。为了提高可读性和可维护性,建议将其拆分为几个更小的函数,每个函数负责特定的任务。例如:

  1. 创建一个计算月份标题的函数
  2. 创建一个生成月份数据的函数
  3. 创建一个计算 CSS 高度的函数
  4. 创建一个处理月份数据添加逻辑的函数

重构后的结构可能如下:

const getMonthTitle = (year: string, month: string) => {
  return translate('monthTitle', year, month)
}

const generateMonthData = (curData: string[], preMonthDays: number, currMonthDays: number) => {
  // 生成月份数据的逻辑
}

const calculateCSSHeight = (monthInfo: MonthInfo) => {
  // 计算 CSS 高度的逻辑
}

const addMonthData = (monthInfo: MonthInfo, type: string) => {
  // 处理月份数据添加的逻辑
}

function getMonth(curData: string[], type: string) {
  const monthInfo: MonthInfo = {
    curData,
    title: getMonthTitle(curData[0], curData[1]),
    monthData: generateMonthData(curData, preMonthDays, currMonthDays),
    cssHeight: 0,
    cssScrollHeight: 0,
  }

  calculateCSSHeight(monthInfo)
  addMonthData(monthInfo, type)

  return monthInfo
}

这样的重构可以使 getMonth 函数更加清晰,每个子函数都专注于特定的任务,提高了代码的可读性和可维护性。


Line range hint 423-573: 建议将 initData 函数拆分为更小的、更专注的函数。

initData 函数当前承担了多个责任,包括日期范围计算、默认值处理和初始渲染设置等。这使得函数变得庞大且复杂,不利于理解和维护。建议将其拆分为几个更小的函数,每个函数负责特定的初始化任务。例如:

  1. 初始化日期范围
  2. 处理默认值
  3. 计算月份数量
  4. 生成月份数据
  5. 设置默认选中日期
  6. 计算容器高度和滚动位置

重构后的结构可能如下:

const initDateRange = () => {
  // 初始化开始结束日期
}

const processDefaultValue = () => {
  // 处理默认值逻辑
}

const calculateMonthsNum = () => {
  // 计算月份数量
}

const generateMonthsData = () => {
  // 生成月份数据
}

const setDefaultSelectedDate = () => {
  // 设置默认选中日期
}

const calculateContainerDimensions = () => {
  // 计算容器高度和滚动位置
}

function initData() {
  initDateRange()
  processDefaultValue()
  const monthsNum = calculateMonthsNum()
  generateMonthsData(monthsNum)
  setDefaultSelectedDate()
  calculateContainerDimensions()
}

这样的重构可以使每个函数更加专注于单一任务,提高代码的可读性和可维护性。同时,它也使得单元测试变得更加容易,因为可以独立测试每个小函数。


Line range hint 574-723: 整体结构良好,建议对部分函数进行小幅改进。

这部分代码包含了多个工具函数和事件处理器,总体结构清晰。但是,有些函数可以进行小幅改进以提高可读性。例如,mothsViewScroll 函数可以通过提取一些逻辑到单独的函数来简化:

const calculateCurrentIndex = (scrollTop: number) => {
  let current = Math.floor(scrollTop / state.avgHeight)
  if (current === 0) {
    if (scrollTop >= state.monthsData[current + 1].cssScrollHeight) current += 1
  } else if (current > 0 && current < state.monthsNum - 1) {
    if (scrollTop >= state.monthsData[current + 1].cssScrollHeight) current += 1
    if (scrollTop < state.monthsData[current].cssScrollHeight) current -= 1
  }
  return current
}

function mothsViewScroll(e: ScrollViewOnScrollEvent) {
  if (state.monthsData.length <= 1) return

  const currentScrollTop = e.detail.scrollTop
  const current = calculateCurrentIndex(currentScrollTop)

  if (state.currentIndex !== current) {
    state.currentIndex = current
    setDefaultRange(state.monthsNum, current)
  }
  state.yearMonthTitle = state.monthsData[current].title
}

这样可以使主函数更加简洁,逻辑更清晰。其他函数如 scrollToDatesetDefaultRange 等都结构良好,无需大幅修改。


Line range hint 737-860: 模板结构良好,建议小幅改进以提高可访问性。

模板使用了 Vue 指令和组件,结构清晰,通过插槽提供了良好的自定义性。为了进一步提高可访问性,建议在一些关键元素上添加 ARIA 属性。例如:

- <view :class="classes" :style="props.customStyle">
+ <view :class="classes" :style="props.customStyle" role="region" aria-label="日历">

- <view class="nut-calendar__header-title">
+ <view class="nut-calendar__header-title" role="heading" aria-level="1">

- <scroll-view
+ <scroll-view
+   role="grid"
+   aria-label="日历内容"
    ref="months"
    class="nut-calendar__content"
    :scroll-y="true"
    :scroll-top="state.scrollTop"
    :scroll-with-animation="scrollWithAnimation"
    @scroll="mothsViewScroll"
  >

- <view
+ <view
+   role="gridcell"
+   :aria-selected="getClass(day, month).includes('nut-calendar__day--active')"
    class="nut-calendar__day"
    :class="getClass(day, month, i)"
    @click="chooseDay(day, month)"
  >

这些改进可以增强日历组件的可访问性,使其更易于被辅助技术识别和使用。

packages/nutui/components/calendaritem/index.scss (4)

3-3: 建议:为变量 $block 添加注释

在第3行使用了 $block: &; 定义,但未对其作用进行说明。为提高代码可读性,建议为 $block 变量添加注释,解释其用途。


103-103: 建议:优化嵌套结构

在第103行,选择器 #{$block}__weekday 下再嵌套 &.weekend,可以直接合并为 #{$block}__weekday.weekend,以简化代码。


Line range hint 190-197: 问题:类名不一致

在第190行,使用了 #{$block}__day-tip,而在其他地方使用的是 #{$block}__day-tips。请确认这是有意为之还是笔误,避免混淆。


244-247: 建议:添加注释说明

在定义 #{$block}__day-value 时,建议添加注释,说明此选择器的作用,增强代码可读性。

packages/nutui/components/calendar/calendar.vue (1)

38-51: 优化计算属性的命名和逻辑

popClassespopStylesoverlayClasses 等计算属性的命名可以更加语义化,明确其用途。同时,可以考虑将样式对象合并或简化,提高代码的可读性。

packages/nutui/components/cascaderitem/cascaderitem.vue (2)

260-260: 请完成TODO注释中的任务

在第260行存在一个TODO注释:“// TODO: value为空时,保留上次选择记录,修复单元测试问题”。在合并之前,请确保完成此任务,以避免遗留未解决的问题和可能的单元测试错误。

我可以协助您实现此功能,或者为此创建一个新的GitHub issue,您需要我这样做吗?


137-139: 优化isSelected方法的可读性

isSelected方法可以通过解构参数和简化条件判断来提高可读性。

建议的修改:

  isSelected(pane: CascaderPane, node: CascaderOption) {
-   return pane?.selectedNode?.value === node.value
+   const selectedValue = pane?.selectedNode?.value
+   return selectedValue === node.value
  },
Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 40c1e3e and 73316e6.

Files selected for processing (24)
  • docs/components/basic/popup.md (1 hunks)
  • docs/components/dentry/calendar.md (1 hunks)
  • docs/components/dentry/cascader.md (1 hunks)
  • packages/nutui/components/calendar/calendar.ts (2 hunks)
  • packages/nutui/components/calendar/calendar.vue (2 hunks)
  • packages/nutui/components/calendar/index.scss (1 hunks)
  • packages/nutui/components/calendar/index.ts (1 hunks)
  • packages/nutui/components/calendaritem/calendaritem.ts (2 hunks)
  • packages/nutui/components/calendaritem/calendaritem.vue (18 hunks)
  • packages/nutui/components/calendaritem/index.scss (9 hunks)
  • packages/nutui/components/calendaritem/types.ts (2 hunks)
  • packages/nutui/components/cascader/cascader.ts (2 hunks)
  • packages/nutui/components/cascader/cascader.vue (3 hunks)
  • packages/nutui/components/cascader/helper.ts (2 hunks)
  • packages/nutui/components/cascader/index.scss (2 hunks)
  • packages/nutui/components/cascader/index.ts (1 hunks)
  • packages/nutui/components/cascader/types.ts (2 hunks)
  • packages/nutui/components/cascaderitem/cascaderitem.ts (1 hunks)
  • packages/nutui/components/cascaderitem/cascaderitem.vue (7 hunks)
  • packages/nutui/components/cascaderitem/index.scss (1 hunks)
  • packages/nutui/components/cascaderitem/index.ts (1 hunks)
  • packages/nutui/components/popup/index.scss (1 hunks)
  • packages/nutui/components/popup/popup.ts (3 hunks)
  • packages/nutui/components/popup/popup.vue (3 hunks)
Files skipped from review due to trivial changes (5)
  • packages/nutui/components/calendar/index.scss
  • packages/nutui/components/cascader/types.ts
  • packages/nutui/components/cascaderitem/index.scss
  • packages/nutui/components/cascaderitem/index.ts
  • packages/nutui/components/popup/index.scss
Additional comments not posted (38)
packages/nutui/components/calendar/index.ts (1)

1-1: 导出语句的更改看起来符合预期。

这个更改将从 './calendar' 模块导出所有实体,而不仅仅是类型。这与重构 DOM 结构和添加新事件的 PR 目标相一致。

建议运行以下脚本来验证这个更改对代码库其他部分的影响:

另外,请确保更新相关文档以反映这一变化,特别是如果有任何公共 API 文档提到了从这个模块导入类型。

Verification successful

导出语句的更改已验证,未发现其他文件依赖于仅导出类型的行为。

该更改符合PR的目标,不会影响代码库的其他部分。建议更新相关文档以反映这一变化。

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 描述:检查是否有其他文件依赖于之前仅导出类型的行为

# 测试:搜索可能受影响的导入语句
rg --type typescript "import.*type.*from.*['\"].*calendar['\"]"

Length of output: 104


Script:

#!/bin/bash
# 描述:重新检查是否有其他文件依赖于之前仅导出类型的行为

# 测试:搜索可能受影响的导入语句,使用正确的文件匹配模式
rg --glob '*.ts' "import\s+type\s+.*\s+from\s+['\"]\./calendar['\"]"

Length of output: 74


Script:

#!/bin/bash
# 描述:检查是否有其他文件以任何方式导入 './calendar' 模块

# 测试:搜索所有TypeScript文件中导入 './calendar' 的语句
rg --glob '*.ts' "import\s+.*\s+from\s+['\"]\./calendar['\"]"

Length of output: 67

packages/nutui/components/cascader/index.ts (1)

1-1: 请验证是否需要导出所有实体

此更改将从 './cascader' 模块导出所有实体,而不仅仅是类型。

这可能会:

  1. 扩大模块的 API 表面积
  2. 潜在地暴露更多内部实现细节
  3. 可能导致命名冲突

如果这是有意为之的更改,请考虑:

  1. 验证是否确实需要导出所有实体
  2. 在文档中说明此更改的原因和影响
  3. 检查是否有任何不应该被导出的内部实体
packages/nutui/components/calendaritem/types.ts (2)

36-36: 代码结构改进

这个空行的添加提高了代码的可读性,有助于分隔不同的接口定义。


61-61: 代码结构微调

这个空行的添加进一步改善了代码的结构,有助于分隔不同的接口定义,提高了整体的可读性。

packages/nutui/components/cascaderitem/cascaderitem.ts (4)

45-47: 新增 titleType 属性,增强了自定义能力

新增的 titleType 属性为标题显示提供了更多的自定义选项,这是一个很好的改进。

请确保更新组件文档,详细说明 'line'、'card' 和 'smile' 这三个选项的视觉效果和使用场景。


49-51: 新增 titleSize 属性,提供了字体大小选项

新增的 titleSize 属性允许自定义标题字体大小,这增加了组件的灵活性。

建议在组件文档中详细说明 'large'、'normal' 和 'small' 这三个选项对应的具体字体大小,以便开发者更好地使用这个新特性。


64-70: emit 事件验证逻辑简化,需注意类型安全

UPDATE_MODEL_EVENTCHANGE_EVENT 的验证函数被简化为始终返回 true,这可能影响类型安全性。

建议在组件内部逻辑中添加必要的类型检查,以确保类型安全。可以使用以下脚本检查是否存在相关的类型检查:

#!/bin/bash
# 描述:检查 CascaderItem 组件中是否存在 emit 事件相关的类型检查

# 测试:搜索与 emit 事件相关的类型检查。预期:找到类型检查或验证逻辑。
rg --type typescript -i '(typeof|instanceof|Array\.isArray).*emit' packages/nutui/components/cascaderitem

另外,请确保更新组件文档,明确说明这些事件的参数类型,以便开发者正确使用。


19-19: 注意类型更改可能带来的影响

options 的类型从 { [key: string]: string } 更改为 any 提高了灵活性,但可能引入类型相关的问题。

建议添加类型守卫或验证逻辑,以确保传入的 options 符合预期结构。可以考虑使用以下脚本来检查组件中是否有相关的类型检查:

packages/nutui/components/popup/popup.vue (2)

2-2: 新增的计算属性提高了类型安全性和一致性

这些更改通过引入 computed 和新的计算属性 innerDuration 增强了代码的健壮性:

  1. 导入 computed 使得可以创建响应式计算属性。
  2. innerDuration 计算属性确保 duration 始终为数字类型,这有助于防止类型相关的错误,并提高了代码的一致性。

这是一个很好的改进,有助于提高组件的可靠性和可维护性。

Also applies to: 27-29


61-62: NutTransition 组件的属性更新需要进一步说明

NutTransition 组件的更改包括:

  1. style 改为 custom-styleclass 改为 custom-class
  2. 使用 innerDuration 替代直接使用 props.duration

使用 innerDuration 是一个很好的改进,确保了类型一致性。然而,关于 custom- 前缀的添加:

能否解释一下为什么将 styleclass 属性改为 custom-stylecustom-class?这是否是组件 API 的一个全局性变更?如果是,我们是否需要更新相关文档或其他使用这些属性的地方?

Also applies to: 64-64

Verification successful

确认 custom-stylecustom-class 的全局一致性

在代码库的多个组件中,custom-stylecustom-class 已被一致地应用,包括 popup.vue。这种命名方式有助于避免与原生属性的冲突,并增强了自定义样式和类的管理。

这些更改是合理且一致的,无需进一步修改。

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 搜索其他文件中是否有类似的更改
rg --type vue 'custom-(style|class)' -C 3

Length of output: 71


Script:

#!/bin/bash
# 搜索其他文件中是否有类似的更改
rg -g '*.vue' 'custom-(style|class)' -C 3

Length of output: 68661

packages/nutui/components/cascader/helper.ts (3)

1-1: 导入语句的类型名称更改是一个良好的实践

convertConfig 重命名为 ConvertConfig 符合 TypeScript 中类型名称首字母大写的惯例。这种改变虽小,但有助于提高代码的一致性和可读性。


Line range hint 1-46: 总体评价:类型一致性的改进

本次更改主要涉及类型名称的统一,将 convertConfig 改为 ConvertConfig。这种改变虽然看似微小,但对于保持代码库的一致性和遵循 TypeScript 的最佳实践非常重要。这些修改不会影响代码的功能,但会提高代码的可读性和可维护性。

建议在合并这些更改之前,确保在整个代码库中没有遗漏任何使用旧类型名称的地方,以避免潜在的类型错误。


46-46: 函数签名更新与导入语句保持一致

convertListToOptions 函数的参数类型从 convertConfig 更新为 ConvertConfig,与导入语句的修改保持一致。这是一个好的改变,确保了类型声明的一致性。

为确保这个改变不会影响其他地方的代码,请运行以下脚本来验证 convertListToOptions 函数的使用情况:

Verification successful

需要重新验证 convertListToOptions 函数的使用情况

之前使用的 rg 命令未能识别 typescript 类型。请运行以下脚本以正确搜索 convertListToOptions 函数的使用:


确认 convertListToOptions 函数的使用情况

未发现 convertListToOptions 函数在其他文件中的使用,这表明类型签名的更新不会影响其他地方的代码。

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 描述:验证 convertListToOptions 函数的使用是否与新的签名一致

# 测试:搜索 convertListToOptions 函数的使用。预期:只有新签名的出现。
rg --type typescript -A 5 $'convertListToOptions'

Length of output: 83


Script:

#!/bin/bash
# 描述:验证 convertListToOptions 函数的使用是否与新的签名一致

# 使用文件扩展名搜索 convertListToOptions 函数的调用
rg --glob '**/*.{ts,tsx}' -A 5 'convertListToOptions'

Length of output: 512

packages/nutui/components/popup/popup.ts (2)

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

导入语句中添加了 truthProp,这与后续的属性更改相符。


62-62: ESLint 注释移除正确

移除 ESLint 禁用/启用注释表明未使用的导入问题已得到解决,这提高了代码质量。

Also applies to: 77-77

packages/nutui/components/calendaritem/calendaritem.ts (2)

3-3: 导入更改看起来不错!

新增的工具函数导入有助于提高代码的可重用性和组织性。这是一个很好的改进。


88-88: 类型导出是个好做法

添加 CalendarItemProps 类型导出是一个很好的做法。这有助于在其他地方使用这些 props 时提供类型检查和自动完成功能,从而提高代码的可维护性和开发效率。

packages/nutui/components/calendar/calendar.ts (3)

1-10: 导入更新符合PR目标

新增的 CLOSED_EVENTOPEN_EVENT 常量导入与PR的目标一致,为日历组件添加了打开和关闭事件的支持。这些更改增强了组件的交互能力。


123-123: ESLint规则重新启用

重新启用了 unused-imports/no-unused-vars ESLint 规则,这有助于保持代码质量和一致性。

建议:

  1. 检查是否仍然需要在此处禁用和重新启用该规则。
  2. 如果不再需要,考虑移除相关的 eslint-disable 和 eslint-enable 注释。

请运行以下脚本来验证是否存在未使用的导入或变量:

#!/bin/bash
# 描述:检查是否存在未使用的导入或变量

# 测试:在当前文件中搜索未使用的导入或变量。预期:不应找到未使用的导入或变量。
eslint packages/nutui/components/calendar/calendar.ts --rule 'unused-imports/no-unused-vars: error'

111-121: 事件发射更新增强了功能,但可能影响类型安全

事件发射的更新包括:

  1. 简化了事件验证逻辑,所有事件现在都返回 true
  2. 新增了 OPEN_EVENTOPENED_EVENTCLOSE_EVENTCLOSED_EVENT 事件。

这些更改符合PR的目标,增加了打开和关闭相关的事件。然而,简化验证可能会降低类型安全性。

建议:

  1. 更新组件文档,详细说明新增事件的用法和触发时机。
  2. 考虑是否需要为某些关键事件保留更严格的类型检查。

请运行以下脚本来验证新事件的使用情况:

Verification successful

事件发射更新已通过验证

通过验证,新增的 OPEN_EVENTOPENED_EVENTCLOSE_EVENTCLOSED_EVENT 在整个代码库中被广泛使用,确认了这些变更的必要性和有效性。

建议:

  1. 更新组件文档,详细说明新增事件的用法和触发时机。
  2. 考虑是否需要为某些关键事件保留更严格的类型检查,以提升类型安全性。
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 描述:验证新增事件在代码库中的使用情况

# 测试:搜索新增事件的使用。预期:找到这些事件的使用实例。
rg --type vue -e "OPEN_EVENT|OPENED_EVENT|CLOSE_EVENT|CLOSED_EVENT" packages/

Length of output: 175


Script:

#!/bin/bash
# 描述:验证新增事件在代码库中的使用情况

# 测试:搜索新增事件的使用。预期:找到这些事件的使用实例。
grep -r -E "OPEN_EVENT|OPENED_EVENT|CLOSE_EVENT|CLOSED_EVENT" packages/

Length of output: 10149

docs/components/basic/popup.md (1)

Line range hint 1-190: 文档更新符合预期,增强了 Popup 组件的功能。

本次更新添加了 click-overlay 事件,这与 PR 的目标一致,增强了组件的交互能力。文档的整体结构和内容保持了良好的一致性和清晰度。建议采纳之前提到的小改进,以进一步提高文档质量。

docs/components/dentry/cascader.md (3)

347-367: Props 部分更新得当,新增属性描述清晰

Props 表格的格式调整提高了可读性。新增的 pop-style 属性(版本 1.8.0)为开发者提供了自定义弹窗样式的能力,这是一个有用的补充。

建议:

  1. 考虑为 pop-style 属性添加一个简单的示例,以帮助开发者更好地理解其用法。
  2. 确保在组件的使用示例中展示 pop-style 的实际应用。

370-377: 事件部分更新合理,新增事件丰富了组件的生命周期钩子

新增的 openopenedcloseclosed 事件(版本 1.8.0)为开发者提供了更细粒度的控制,有助于实现更复杂的交互逻辑。

建议:

  1. 考虑在文档中添加一个小节,专门说明这些新事件的使用场景和最佳实践。
  2. 在组件的使用示例中展示如何监听和处理这些新事件,以便开发者更好地理解它们的应用。

Line range hint 1-403: 文档更新全面,新增功能描述清晰

本次更新主要涉及 Cascader 组件的 Props 和 Events 部分,新增了 pop-style 属性和多个生命周期事件。这些变更增强了组件的可定制性和可控性,有利于开发者实现更复杂的交互逻辑。

总体建议:

  1. 考虑在文档中添加新属性和事件的使用示例,以帮助开发者更好地理解和应用这些新功能。
  2. 确保组件的其他部分(如基础用法、自定义属性名称等示例)与新增的功能保持一致,可能需要更新这些示例以展示新功能的使用。
  3. 建议在文档顶部的更新日志或版本说明中,简要列出 1.8.0 版本的这些新增功能,方便用户快速了解组件的演进。
docs/components/dentry/calendar.md (3)

812-821: 事件表格更新正确且完整

新增的 openopenedclosed 事件及其描述准确反映了组件的新功能,提供了更多的生命周期钩子,有助于开发者更精细地控制日历组件的行为。


825-832: 插槽表格更新正确

footer 插槽的版本信息更新为 1.4.0 是正确的,这为开发者提供了准确的特性引入时间信息。


837-840: 方法表格更新需要澄清

initPosition 方法的版本信息被移除了。这简化了文档,但可能会对依赖版本特定信息的用户造成困惑。

请确认:

  1. 移除版本信息是否是有意为之?
  2. 如果是,是否考虑在文档中说明这个改动的原因,以帮助用户理解?
packages/nutui/components/calendaritem/calendaritem.vue (2)

69-93: 计算属性和 ref 定义合理,无需修改。

这部分代码定义了类名的计算属性、周日期数组,以及一些与 UI 相关的 ref。使用 translate 函数进行本地化是一个很好的做法,有助于国际化。代码结构清晰,易于理解和维护。


Line range hint 276-319: handleWeekDate 和 getCurrData 函数设计合理,无需修改。

这两个函数都很好地专注于各自的任务。handleWeekDate 处理周相关的日期信息,而 getCurrData 获取当前月份数据。它们的实现简洁明了,易于理解和维护。代码结构良好,无需进行修改。

packages/nutui/components/cascader/cascader.vue (4)

1-12: 引入新事件常量:符合需求

代码正确引入了新的事件常量(CLOSE_EVENTCLOSED_EVENTOPEN_EVENTOPENED_EVENT),为组件增加了打开和关闭事件的支持。


48-53: 重命名函数以提高命名一致性

将函数名从 onChange 重命名为 handleChange,符合命名惯例,增强了代码的可读性和一致性。


56-59: 重命名函数以提高命名一致性

将函数名从 onPathChange 重命名为 handlePathChange,与其他处理函数的命名形式保持一致。


97-165: 模板更新正确:事件绑定与属性传递无误

模板中正确地使用了 NutPopup 组件,并绑定了新的事件处理函数。属性传递和插槽的使用也符合预期,代码清晰明了。

packages/nutui/components/calendaritem/index.scss (1)

117-128: 建议:检查未使用的选择器

#{$block}__panel 内部定义了 #{$block}__body#{$block}__month,请确认这些选择器在模板中是否被使用,避免定义未使用的样式。

packages/nutui/components/calendar/calendar.vue (3)

73-75: 确认 select() 函数的参数类型

select(param: string) 函数的参数类型为 string,请确保在调用该函数时,传入的 param 参数类型一致,避免类型不匹配的问题。


138-160: 检查 NutPopup 组件的属性传递和事件绑定

在使用 NutPopup 组件时,传递了多个自定义的 class 和 style,以及事件绑定。请确保所有属性和事件在 NutPopup 组件中均有对应处理,避免属性未生效或事件未触发的问题。


161-208: 确保 NutCalendarItem 组件的属性和事件正确

NutCalendarItem 组件接收了许多属性和插槽,请确认所有属性名和插槽名与组件定义一致,防止因拼写错误或属性名不匹配导致的问题。

packages/nutui/components/cascaderitem/cascaderitem.vue (1)

296-304: 检查ARIA属性的正确性以提升无障碍性

在模板中使用了ARIA属性role="menuitemradio":aria-checked:aria-disabled。请确保这些ARIA属性符合无障碍标准,提供良好的用户体验。

您可以运行以下脚本来验证ARIA属性的使用是否正确:

Verification successful

ARIA属性使用正确,符合无障碍标准。

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 描述:检查模板中ARIA属性的使用情况

# 搜索所有包含role="menuitemradio"的元素,并显示上下文
rg --type vue 'role="menuitemradio"' -A 3 -B 3

Length of output: 76


Script:

#!/bin/bash
# 描述:检查模板中ARIA属性的使用情况

# 搜索所有包含role="menuitemradio"的.vue文件中的元素,并显示上下文
rg 'role="menuitemradio"' --glob '*.vue' -A 3 -B 3

Length of output: 823

Comment on lines +63 to +65
* @description 选中底部展示样式 可选值: 'line', 'smile'
*/
closeable: Boolean,

titleType: makeStringProp<'line' | 'card' | 'smile'>('line'),
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

属性描述与代码不一致

titleType属性的描述中,提到了可选值为'line'和'smile',但在代码中,可选值为'line'、'card'、'smile'。请更新属性描述,添加缺少的'card'选项,以确保描述与代码一致。

@nutui-uniapp nutui-uniapp deleted a comment from coderabbitai bot Sep 24, 2024
@nutui-uniapp nutui-uniapp deleted a comment from coderabbitai bot Sep 24, 2024
@nutui-uniapp nutui-uniapp deleted a comment from coderabbitai bot Sep 24, 2024
@nutui-uniapp nutui-uniapp deleted a comment from coderabbitai bot Sep 24, 2024
@nutui-uniapp nutui-uniapp deleted a comment from coderabbitai bot Sep 24, 2024
@nutui-uniapp nutui-uniapp deleted a comment from coderabbitai bot Sep 24, 2024
@nutui-uniapp nutui-uniapp deleted a comment from coderabbitai bot Sep 24, 2024
@nutui-uniapp nutui-uniapp deleted a comment from coderabbitai bot Sep 24, 2024
@nutui-uniapp nutui-uniapp deleted a comment from coderabbitai bot Sep 24, 2024
@nutui-uniapp nutui-uniapp deleted a comment from coderabbitai bot Sep 24, 2024
@xiaohe0601 xiaohe0601 merged commit e7c5b18 into nutui-uniapp:main Sep 24, 2024
5 checks passed
@xiaohe0601 xiaohe0601 deleted the feat/events branch September 24, 2024 06:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant