-
Notifications
You must be signed in to change notification settings - Fork 267
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: [config-provider] optimize global configuration component documentation #2578
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,26 +1,64 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<template> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<tiny-config-provider :design="design"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<tiny-alert type="warning" description="type 为 warning"></tiny-alert> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div class="demo-form"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<tiny-alert type="warning" description="全局配置组件的默认行为"></tiny-alert> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance the alert description to better document the config-provider capabilities. The current description "全局配置组件的默认行为" (default behavior of global configuration component) is too generic. Consider expanding it to highlight key features and use cases. -<tiny-alert type="warning" description="全局配置组件的默认行为"></tiny-alert>
+<tiny-alert type="warning" description="通过 ConfigProvider 组件,你可以全局配置组件的默认属性、样式主题和行为。本示例展示了表单组件的自定义配置。"></tiny-alert> 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<tiny-form ref="ruleFormRef" :model="formData"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<tiny-form-item label="年龄" prop="age" required> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<tiny-numeric v-model="formData.age"></tiny-numeric> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</tiny-form-item> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<tiny-form-item label="姓名" prop="name" required> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<tiny-input v-model="formData.name"></tiny-input> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</tiny-form-item> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<tiny-form-item> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<tiny-button @click="handleSubmitPromise" type="primary"> 校验 </tiny-button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</tiny-form-item> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</tiny-form> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</tiny-config-provider> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</template> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<script> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { TinyConfigProvider, TinyAlert, TinyModal } from '@opentiny/vue' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyConfigProvider, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyAlert, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyModal, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyForm, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyFormItem, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyInput, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyNumeric, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyButton | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} from '@opentiny/vue' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { iconWarningTriangle } from '@opentiny/vue-icon' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
export default { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
components: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyConfigProvider, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyAlert | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyAlert, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyForm, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyFormItem, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyInput, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyNumeric, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TinyButton | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
data() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
design: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'smb', // 设计规范名称 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: 'x-design', // 设计规范名称 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
version: '1.0.0', // 设计规范版本号 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
components: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Form: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
props: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hideRequiredAsterisk: true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Button: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
props: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
resetTime: 0, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
round: true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+48
to
+61
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Add documentation for configuration options. The design configuration lacks proper documentation explaining the purpose and impact of each setting. Consider adding detailed comments for better understanding. design: {
- name: 'x-design', // 设计规范名称
+ name: 'x-design', // 设计规范名称,用于指定全局样式主题
version: '1.0.0', // 设计规范版本号
components: {
Form: {
+ // Form 组件的全局配置
props: {
+ // 隐藏表单项必填字段的星号标记
hideRequiredAsterisk: true
}
},
Button: {
+ // Button 组件的全局配置
props: {
+ // 设置按钮点击后的重置时间(毫秒)
resetTime: 0,
+ // 设置按钮为圆角样式
round: true
}
}, 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alert: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
icons: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
warning: iconWarningTriangle() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -44,8 +82,23 @@ export default { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
formData: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: '', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
age: '' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
methods: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
handleSubmitPromise() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
this.$refs.ruleFormRef.validate() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Improve form validation handling and user feedback. The current validation implementation doesn't handle the validation result or provide user feedback. handleSubmitPromise() {
- this.$refs.ruleFormRef.validate()
+ this.$refs.ruleFormRef.validate((valid) => {
+ if (valid) {
+ TinyModal.message({ type: 'success', message: '验证通过' })
+ } else {
+ TinyModal.message({ type: 'error', message: '请检查表单填写是否正确' })
+ }
+ })
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</script> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<style scoped> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.demo-form { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
width: 380px; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</style> |
Original file line number | Diff line number | Diff line change | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -3,7 +3,23 @@ import { test, expect } from '@playwright/test' | |||||||||||||||
test('测试自定义事件', async ({ page }) => { | ||||||||||||||||
page.on('pageerror', (exception) => expect(exception).toBeNull()) | ||||||||||||||||
await page.goto('config-provider#base') | ||||||||||||||||
await page.locator('.tiny-config-provider > .tiny-alert > .tiny-svg').nth(1).click() | ||||||||||||||||
|
||||||||||||||||
// 验证自定义方法 | ||||||||||||||||
const demo = page.locator('#base') | ||||||||||||||||
await demo.locator('.tiny-config-provider .tiny-alert > .tiny-alert__close').click() | ||||||||||||||||
await page.waitForTimeout(500) | ||||||||||||||||
await expect(page.locator('.tiny-modal > .tiny-modal__box').nth(1)).toHaveText('触发自定方法') | ||||||||||||||||
|
||||||||||||||||
Comment on lines
+7
to
+12
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Improve test reliability and maintainability Consider the following improvements:
- // 验证自定义方法
+ // Verify custom method
const demo = page.locator('#base')
await demo.locator('.tiny-config-provider .tiny-alert > .tiny-alert__close').click()
- await page.waitForTimeout(500)
+ await page.waitForSelector('.tiny-modal > .tiny-modal__box')
await expect(page.locator('.tiny-modal > .tiny-modal__box').nth(1)).toHaveText('触发自定方法')
|
||||||||||||||||
// 验证必填星号 | ||||||||||||||||
await expect(demo.locator('.tiny-form')).toBeVisible() | ||||||||||||||||
const beforeElement = await page.evaluate(() => { | ||||||||||||||||
const labelBefore = document.querySelector('.tiny-form .tiny-form-item__label') | ||||||||||||||||
const { display, content } = window.getComputedStyle(labelBefore, '::before') | ||||||||||||||||
return { display, content } | ||||||||||||||||
}) | ||||||||||||||||
expect(beforeElement.content).toBe('none') | ||||||||||||||||
|
||||||||||||||||
// 验证按钮点击禁用时间 | ||||||||||||||||
await demo.locator('.tiny-button').click() | ||||||||||||||||
await expect(demo.locator('.tiny-button')).not.toBeDisabled({ timeout: 300 }) | ||||||||||||||||
Comment on lines
+22
to
+24
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Improve button state test reliability and clarity The current test uses a fixed timeout and lacks clear documentation of the expected behavior. - // 验证按钮点击禁用时间
+ // Verify button state after click
await demo.locator('.tiny-button').click()
- await expect(demo.locator('.tiny-button')).not.toBeDisabled({ timeout: 300 })
+ // Wait for button to become enabled and verify its state
+ await expect(demo.locator('.tiny-button')).toBeEnabled() Additionally, consider adding a comment explaining the expected behavior and why we're testing this specific interaction. 📝 Committable suggestion
Suggested change
|
||||||||||||||||
}) |
This file was deleted.
This file was deleted.
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,18 +13,27 @@ import type { IButtonRenderlessParams, IButtonState } from '@/types' | |
import { xss } from '../common/xss' | ||
|
||
export const handleClick = | ||
({ emit, props, state }: Pick<IButtonRenderlessParams, 'emit' | 'props' | 'state'>) => | ||
({ emit, props, state, designConfig }: Pick<IButtonRenderlessParams, 'emit' | 'props' | 'state' | 'designConfig'>) => | ||
(event: MouseEvent): void => { | ||
const urlHref = xss.filterUrl(props.href) | ||
const DEFAULT_RESETTIME = 1000 | ||
|
||
let resetTime = DEFAULT_RESETTIME | ||
|
||
if (props.resetTime !== DEFAULT_RESETTIME) { | ||
resetTime = props.resetTime | ||
} else { | ||
resetTime = designConfig?.props?.resetTime ?? props.resetTime | ||
} | ||
Comment on lines
+19
to
+27
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Simplify reset time logic The current implementation can be simplified for better maintainability and readability. Consider these improvements:
+ const DEFAULT_RESETTIME = 1000;
export const handleClick =
({ emit, props, state, designConfig }: Pick<IButtonRenderlessParams, 'emit' | 'props' | 'state' | 'designConfig'>) =>
(event: MouseEvent): void => {
- const DEFAULT_RESETTIME = 1000
- let resetTime = DEFAULT_RESETTIME
-
- if (props.resetTime !== DEFAULT_RESETTIME) {
- resetTime = props.resetTime
- } else {
- resetTime = designConfig?.props?.resetTime ?? props.resetTime
- }
+ const resetTime = props.resetTime === DEFAULT_RESETTIME
+ ? (designConfig?.props?.resetTime ?? DEFAULT_RESETTIME)
+ : props.resetTime;
|
||
|
||
if (urlHref) { | ||
location.href = urlHref | ||
} else if (props.nativeType === 'button' && props.resetTime > 0) { | ||
} else if (props.nativeType === 'button' && resetTime > 0) { | ||
state.disabled = true | ||
|
||
state.timer = window.setTimeout(() => { | ||
state.disabled = false | ||
}, props.resetTime) | ||
}, resetTime) | ||
} | ||
|
||
emit('click', event) | ||
|
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.
Improve form validation handling and data initialization
The current implementation has two issues:
📝 Committable suggestion