-
Notifications
You must be signed in to change notification settings - Fork 273
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
fix(drawer): [drawer] modify demo and icon #2465
Conversation
WalkthroughThe changes involve modifications to two Vue components, Changes
Possibly related PRs
Suggested labels
Suggested reviewers
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: 4
🧹 Outside diff range and nitpick comments (1)
examples/sites/demos/pc/app/drawer/use-through-method.vue (1)
52-57
: Move inline styles to CSS class
While the implementation works, inline styles should be avoided for better maintainability.
Consider moving the styles to a CSS class:
-headerRight: () => <IconHelp style="width:20px;height:20px"></IconHelp>,
+headerRight: () => <IconHelp class="drawer-icon-help"></IconHelp>,
And add this to your component's style section:
<style>
.drawer-icon-help {
width: 20px;
height: 20px;
}
</style>
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (2)
- examples/sites/demos/pc/app/drawer/use-through-method-composition-api.vue (2 hunks)
- examples/sites/demos/pc/app/drawer/use-through-method.vue (3 hunks)
🔇 Additional comments (3)
examples/sites/demos/pc/app/drawer/use-through-method-composition-api.vue (2)
9-9
: LGTM! Good enhancement to user feedback
The addition of Notify
import improves the user experience by providing visual feedback instead of silent console logs.
Line range hint 1-58
: Verify documentation coverage
As this is a demo component showcasing drawer functionality, ensure that:
- The changes are reflected in the component's documentation
- The new notification behavior is documented
- Usage examples are updated
✅ Verification successful
Documentation is properly maintained
The demo component's notification behavior is already well documented in the drawer.js configuration:
- Events section clearly documents all events including 'open' and 'close' events
- The 'use-through-method' demo (which is the file in question) is properly documented with description of Drawer.service usage
- Both Chinese and English documentation is maintained
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Check if documentation exists and contains relevant information
rg -l "drawer.*notification" "docs/"
rg -l "抽屉.*通知" "docs/"
Length of output: 151
Script:
#!/bin/bash
# Let's first find where documentation might be located
fd -t d "doc|docs"
# Also check for README files that might contain documentation
fd -t f "README|readme"
# Check if this is part of examples documentation
fd -t f ".*\.md$" examples/
Length of output: 59975
Script:
#!/bin/bash
# Let's check the drawer documentation content
cat examples/sites/demos/pc/app/drawer/webdoc/drawer.cn.md
cat examples/sites/demos/pc/app/drawer/webdoc/drawer.en.md
# Also check if there are any other drawer demo files that might contain documentation
fd -t f ".*drawer.*" examples/sites/demos/pc/app/drawer/
Length of output: 513
Script:
#!/bin/bash
# Let's check the drawer.js file for demo documentation
cat examples/sites/demos/pc/app/drawer/webdoc/drawer.js
# Also check if there are any demo files in the drawer directory
fd -t f ".*\.vue$" examples/sites/demos/pc/app/drawer/
Length of output: 8520
examples/sites/demos/pc/app/drawer/use-through-method.vue (1)
8-8
: LGTM: Import changes are appropriate
The addition of Notify
import is well-placed and properly utilized in the component.
}, | ||
// 通过属性 customSlots 设置插槽, 插槽内容可以是 string | VNode | ({h, $drawer}) => VNode | ||
customSlots: { | ||
// 使用 h 函数 | ||
default: (h) => h('p', { class: '' }, '抽屉主体内容。'), | ||
// 返回 VNode 节点的方法, 可通过参数中 $drawer 访问到组件实例 | ||
headerRight: () => <IconHelp></IconHelp>, | ||
headerRight: () => <IconHelp style="width:20px;height:20px"></IconHelp>, |
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.
🛠️ Refactor suggestion
Consider using CSS classes instead of inline styles
While the current implementation works, using inline styles reduces maintainability and reusability. Consider moving the styles to a CSS class.
Here's a suggested implementation:
- headerRight: () => <IconHelp style="width:20px;height:20px"></IconHelp>,
+ headerRight: () => <IconHelp class="drawer-header-icon"></IconHelp>,
Add this CSS to your component's style section:
<style>
.drawer-header-icon {
width: 20px;
height: 20px;
}
</style>
open: (instance) => | ||
Notify({ | ||
type: 'info', | ||
title: 'open 事件', | ||
message: `${instance.title}`, | ||
position: 'top-right' | ||
}), | ||
close: () => | ||
Notify({ | ||
type: 'info', | ||
title: 'close 事件', | ||
position: 'top-right' | ||
}) |
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.
🛠️ Refactor suggestion
Consider enhancing notification configuration
While the implementation is good, consider these improvements:
- Add error handling for the instance title access
- Use different notification types to better distinguish between open/close events
Here's a suggested implementation:
open: (instance) =>
Notify({
- type: 'info',
+ type: 'success',
title: 'open 事件',
- message: `${instance.title}`,
+ message: instance?.title || '抽屉已打开',
position: 'top-right'
}),
close: () =>
Notify({
type: 'info',
title: 'close 事件',
+ message: '抽屉已关闭',
position: 'top-right'
})
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
open: (instance) => | |
Notify({ | |
type: 'info', | |
title: 'open 事件', | |
message: `${instance.title}`, | |
position: 'top-right' | |
}), | |
close: () => | |
Notify({ | |
type: 'info', | |
title: 'close 事件', | |
position: 'top-right' | |
}) | |
open: (instance) => | |
Notify({ | |
type: 'success', | |
title: 'open 事件', | |
message: instance?.title || '抽屉已打开', | |
position: 'top-right' | |
}), | |
close: () => | |
Notify({ | |
type: 'info', | |
title: 'close 事件', | |
message: '抽屉已关闭', | |
position: 'top-right' | |
}) |
closeDrawer() { | ||
this.drawerInstance.close() | ||
}, |
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.
Add error handling to closeDrawer method
The method should handle cases where drawerInstance
might be null to prevent potential runtime errors.
Consider adding a null check:
closeDrawer() {
+ if (!this.drawerInstance) {
+ return
+ }
this.drawerInstance.close()
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
closeDrawer() { | |
this.drawerInstance.close() | |
}, | |
closeDrawer() { | |
if (!this.drawerInstance) { | |
return | |
} | |
this.drawerInstance.close() | |
}, |
open: (instance) => | ||
Notify({ | ||
type: 'info', | ||
title: 'open 事件', | ||
message: `${instance.title}`, | ||
position: 'top-right' | ||
}), | ||
close: () => | ||
Notify({ | ||
type: 'info', | ||
title: 'close 事件', | ||
position: 'top-right' | ||
}) |
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.
🛠️ Refactor suggestion
Consider improving notification implementation
While the notifications provide good user feedback, consider these improvements:
- Extract repeated position config
- Make messages more user-friendly
Consider this refactoring:
+const NOTIFICATION_CONFIG = {
+ position: 'top-right',
+ type: 'info'
+}
events: {
open: (instance) =>
Notify({
- type: 'info',
- title: 'open 事件',
+ ...NOTIFICATION_CONFIG,
+ title: '抽屉已打开',
message: `${instance.title}`,
- position: 'top-right'
}),
close: () =>
Notify({
- type: 'info',
- title: 'close 事件',
- position: 'top-right'
+ ...NOTIFICATION_CONFIG,
+ title: '抽屉已关闭'
})
}
Committable suggestion was skipped due to low confidence.
@@ -6,7 +6,7 @@ | |||
|
|||
<script lang="tsx" setup> | |||
import { ref } from 'vue' | |||
import { TinyDrawer, TinyButton } from '@opentiny/vue' | |||
import { TinyDrawer, TinyButton, Notify } from '@opentiny/vue' |
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.
建议改成使用Tiny前缀的导出吧~
PR
PR Checklist
Please check if your PR fulfills the following requirements:
PR Type
What kind of change does this PR introduce?
What is the current behavior?
Issue Number: N/A
What is the new behavior?
Does this PR introduce a breaking change?
Other information
Summary by CodeRabbit
New Features
Bug Fixes
Refactor
Button
component withTinyButton
for consistency in naming conventions.