-
Notifications
You must be signed in to change notification settings - Fork 71
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
Conversation
✅ Deploy Preview for nutui-uniapp ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
Walkthrough此次更改涉及多个组件的文档和代码更新,包括弹出框、日历、级联选择器和日历项等。主要更新包括新增事件、属性和方法的定义,以及现有属性的重组和简化。文档部分则增强了对新特性的描述,提升了可读性和一致性,确保开发者能够更好地理解和使用这些组件。 Changes
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? TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this 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
: 接口重构和命名优化
新增了
CalendarDateProp
接口,替代了之前的Dateprop
接口。这个命名更加具体和清晰,有助于提高代码的可读性。
Day
接口被移动到了新的位置,但其内容基本保持不变。这种重组可能是为了改善代码的逻辑结构。这些更改提高了代码的组织性和命名规范,有利于长期的代码维护。
建议:
- 考虑为
CalendarDateProp
和Day
接口添加简短的注释,说明它们的用途,以进一步提高代码的可读性。
Line range hint
1-66
: 总体评价这次更改主要集中在改进代码结构和命名规范上,包括:
- 重命名
Dateprop
接口为CalendarDateProp
,提高了命名的特异性。- 重新组织了
Day
接口的位置。- 通过添加空行来改善代码的可读性。
这些修改与PR的目标(重构日历组件)保持一致,有助于提高代码的可维护性和可读性。没有观察到重大的功能变更,这表明这次更新主要关注于代码质量的提升。
建议:
- 考虑为新的和修改过的接口添加简短的注释,以进一步提高代码的可读性和可理解性。
packages/nutui/components/popup/popup.vue (1)
48-49
: 模板绑定的改进增强了代码的清晰度NutOverlay 组件的更改提高了代码的可读性和一致性:
- 显式绑定
:overlay-class
和:overlay-style
使属性传递更加明确。- 使用
innerDuration
确保了类型一致性。- 显式绑定
:close-on-click-overlay
增加了代码的清晰度。这些更改都是积极的改进。为了保持一致性,建议也将
visible
、z-index
、lock-scroll
和destroy-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
: 属性重组和文档更新正确,建议进一步优化
closeable
和closeIconPosition
属性的重组和文档更新提高了代码的可读性和使用性。建议为
closeIconPosition
属性添加默认值说明:* @description 关闭按钮位置(top-left,top-right,bottom-left,bottom-right) + * @default 'top-right'
Also applies to: 38-41
62-65
: 事件处理逻辑简化和一致性改进事件处理逻辑的简化和
CLOSE_EVENT
与CLOSED_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
: 新属性增强了组件的灵活性和用户体验新增的
popStyle
和lockScroll
属性很好地增强了日历组件的功能:
popStyle
允许自定义弹出窗口样式,提高了组件的灵活性。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 函数以提高可维护性。这两个函数虽然功能正常,但都比较长且复杂,处理了多个职责。为了提高可维护性和可测试性,建议将它们拆分成更小的函数。例如:
对于
confirm
函数,可以将不同类型的日期处理逻辑抽取为单独的函数。对于
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
函数虽然功能完整,但较为复杂。为了提高可读性和可维护性,建议将其拆分为几个更小的函数,每个函数负责特定的任务。例如:
- 创建一个计算月份标题的函数
- 创建一个生成月份数据的函数
- 创建一个计算 CSS 高度的函数
- 创建一个处理月份数据添加逻辑的函数
重构后的结构可能如下:
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
函数当前承担了多个责任,包括日期范围计算、默认值处理和初始渲染设置等。这使得函数变得庞大且复杂,不利于理解和维护。建议将其拆分为几个更小的函数,每个函数负责特定的初始化任务。例如:
- 初始化日期范围
- 处理默认值
- 计算月份数量
- 生成月份数据
- 设置默认选中日期
- 计算容器高度和滚动位置
重构后的结构可能如下:
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 }这样可以使主函数更加简洁,逻辑更清晰。其他函数如
scrollToDate
、setDefaultRange
等都结构良好,无需大幅修改。
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
: 优化计算属性的命名和逻辑
popClasses
、popStyles
、overlayClasses
等计算属性的命名可以更加语义化,明确其用途。同时,可以考虑将样式对象合并或简化,提高代码的可读性。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
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' 模块导出所有实体,而不仅仅是类型。
这可能会:
- 扩大模块的 API 表面积
- 潜在地暴露更多内部实现细节
- 可能导致命名冲突
如果这是有意为之的更改,请考虑:
- 验证是否确实需要导出所有实体
- 在文档中说明此更改的原因和影响
- 检查是否有任何不应该被导出的内部实体
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_EVENT
和CHANGE_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
增强了代码的健壮性:
- 导入
computed
使得可以创建响应式计算属性。innerDuration
计算属性确保duration
始终为数字类型,这有助于防止类型相关的错误,并提高了代码的一致性。这是一个很好的改进,有助于提高组件的可靠性和可维护性。
Also applies to: 27-29
61-62
: NutTransition 组件的属性更新需要进一步说明NutTransition 组件的更改包括:
- 将
style
改为custom-style
,class
改为custom-class
。- 使用
innerDuration
替代直接使用props.duration
。使用
innerDuration
是一个很好的改进,确保了类型一致性。然而,关于custom-
前缀的添加:能否解释一下为什么将
style
和class
属性改为custom-style
和custom-class
?这是否是组件 API 的一个全局性变更?如果是,我们是否需要更新相关文档或其他使用这些属性的地方?Also applies to: 64-64
Verification successful
确认
custom-style
和custom-class
的全局一致性在代码库的多个组件中,
custom-style
和custom-class
已被一致地应用,包括popup.vue
。这种命名方式有助于避免与原生属性的冲突,并增强了自定义样式和类的管理。这些更改是合理且一致的,无需进一步修改。
Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # 搜索其他文件中是否有类似的更改 rg --type vue 'custom-(style|class)' -C 3Length of output: 71
Script:
#!/bin/bash # 搜索其他文件中是否有类似的更改 rg -g '*.vue' 'custom-(style|class)' -C 3Length 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_EVENT
和OPEN_EVENT
常量导入与PR的目标一致,为日历组件添加了打开和关闭事件的支持。这些更改增强了组件的交互能力。
123-123
: ESLint规则重新启用重新启用了
unused-imports/no-unused-vars
ESLint 规则,这有助于保持代码质量和一致性。建议:
- 检查是否仍然需要在此处禁用和重新启用该规则。
- 如果不再需要,考虑移除相关的 eslint-disable 和 eslint-enable 注释。
请运行以下脚本来验证是否存在未使用的导入或变量:
#!/bin/bash # 描述:检查是否存在未使用的导入或变量 # 测试:在当前文件中搜索未使用的导入或变量。预期:不应找到未使用的导入或变量。 eslint packages/nutui/components/calendar/calendar.ts --rule 'unused-imports/no-unused-vars: error'
111-121
: 事件发射更新增强了功能,但可能影响类型安全事件发射的更新包括:
- 简化了事件验证逻辑,所有事件现在都返回
true
。- 新增了
OPEN_EVENT
、OPENED_EVENT
、CLOSE_EVENT
和CLOSED_EVENT
事件。这些更改符合PR的目标,增加了打开和关闭相关的事件。然而,简化验证可能会降低类型安全性。
建议:
- 更新组件文档,详细说明新增事件的用法和触发时机。
- 考虑是否需要为某些关键事件保留更严格的类型检查。
请运行以下脚本来验证新事件的使用情况:
Verification successful
事件发射更新已通过验证
通过验证,新增的
OPEN_EVENT
、OPENED_EVENT
、CLOSE_EVENT
和CLOSED_EVENT
在整个代码库中被广泛使用,确认了这些变更的必要性和有效性。建议:
- 更新组件文档,详细说明新增事件的用法和触发时机。
- 考虑是否需要为某些关键事件保留更严格的类型检查,以提升类型安全性。
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)为开发者提供了自定义弹窗样式的能力,这是一个有用的补充。建议:
- 考虑为
pop-style
属性添加一个简单的示例,以帮助开发者更好地理解其用法。- 确保在组件的使用示例中展示
pop-style
的实际应用。
370-377
: 事件部分更新合理,新增事件丰富了组件的生命周期钩子新增的
open
、opened
、close
和closed
事件(版本 1.8.0)为开发者提供了更细粒度的控制,有助于实现更复杂的交互逻辑。建议:
- 考虑在文档中添加一个小节,专门说明这些新事件的使用场景和最佳实践。
- 在组件的使用示例中展示如何监听和处理这些新事件,以便开发者更好地理解它们的应用。
Line range hint
1-403
: 文档更新全面,新增功能描述清晰本次更新主要涉及 Cascader 组件的 Props 和 Events 部分,新增了
pop-style
属性和多个生命周期事件。这些变更增强了组件的可定制性和可控性,有利于开发者实现更复杂的交互逻辑。总体建议:
- 考虑在文档中添加新属性和事件的使用示例,以帮助开发者更好地理解和应用这些新功能。
- 确保组件的其他部分(如基础用法、自定义属性名称等示例)与新增的功能保持一致,可能需要更新这些示例以展示新功能的使用。
- 建议在文档顶部的更新日志或版本说明中,简要列出 1.8.0 版本的这些新增功能,方便用户快速了解组件的演进。
docs/components/dentry/calendar.md (3)
812-821
: 事件表格更新正确且完整新增的
open
、opened
和closed
事件及其描述准确反映了组件的新功能,提供了更多的生命周期钩子,有助于开发者更精细地控制日历组件的行为。
825-832
: 插槽表格更新正确
footer
插槽的版本信息更新为 1.4.0 是正确的,这为开发者提供了准确的特性引入时间信息。
837-840
: 方法表格更新需要澄清
initPosition
方法的版本信息被移除了。这简化了文档,但可能会对依赖版本特定信息的用户造成困惑。请确认:
- 移除版本信息是否是有意为之?
- 如果是,是否考虑在文档中说明这个改动的原因,以帮助用户理解?
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_EVENT
、CLOSED_EVENT
、OPEN_EVENT
、OPENED_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 3Length of output: 76
Script:
#!/bin/bash # 描述:检查模板中ARIA属性的使用情况 # 搜索所有包含role="menuitemradio"的.vue文件中的元素,并显示上下文 rg 'role="menuitemradio"' --glob '*.vue' -A 3 -B 3Length of output: 823
* @description 选中底部展示样式 可选值: 'line', 'smile' | ||
*/ | ||
closeable: Boolean, | ||
|
||
titleType: makeStringProp<'line' | 'card' | 'smile'>('line'), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
属性描述与代码不一致
titleType
属性的描述中,提到了可选值为'line'和'smile',但在代码中,可选值为'line'、'card'、'smile'。请更新属性描述,添加缺少的'card'选项,以确保描述与代码一致。
关联 #426