From 1a04a05b79dccd0ee923cbbf7a014c5b259db97e Mon Sep 17 00:00:00 2001 From: Netfan Date: Sat, 11 Jan 2025 10:56:54 +0800 Subject: [PATCH] perf: modal and drawer api support chain calls (#5351) * perf: modal and drawer api support chain calls * fix: typo --- docs/src/components/common-ui/vben-drawer.md | 8 ++-- docs/src/components/common-ui/vben-modal.md | 6 +-- docs/src/demos/vben-drawer/dynamic/index.vue | 3 +- .../demos/vben-drawer/shared-data/index.vue | 11 ++--- docs/src/demos/vben-modal/dynamic/index.vue | 3 +- .../demos/vben-modal/shared-data/index.vue | 11 ++--- .../ui-kit/popup-ui/src/drawer/drawer-api.ts | 2 + .../ui-kit/popup-ui/src/modal/modal-api.ts | 2 + .../src/views/examples/drawer/index.vue | 41 +++++++++---------- playground/src/views/examples/modal/index.vue | 25 +++++------ 10 files changed, 57 insertions(+), 55 deletions(-) diff --git a/docs/src/components/common-ui/vben-drawer.md b/docs/src/components/common-ui/vben-drawer.md index e2409daa4..43cb9889c 100644 --- a/docs/src/components/common-ui/vben-drawer.md +++ b/docs/src/components/common-ui/vben-drawer.md @@ -133,13 +133,13 @@ const [Drawer, drawerApi] = useVbenDrawer({ | close-icon | 关闭按钮图标 | | extra | 额外内容(标题右侧) | -### modalApi +### drawerApi -| 事件名 | 描述 | 类型 | +| 方法 | 描述 | 类型 | | --- | --- | --- | -| setState | 动态设置弹窗状态属性 | `setState(props) \| setState((prev)=>(props))` | +| setState | 动态设置弹窗状态属性 | `(((prev: ModalState) => Partial)\| Partial)=>drawerApi` | | open | 打开弹窗 | `()=>void` | | close | 关闭弹窗 | `()=>void` | -| setData | 设置共享数据 | `(data:T)=>void` | +| setData | 设置共享数据 | `(data:T)=>drawerApi` | | getData | 获取共享数据 | `()=>T` | | useStore | 获取可响应式状态 | - | diff --git a/docs/src/components/common-ui/vben-modal.md b/docs/src/components/common-ui/vben-modal.md index 9e422d182..45204bffa 100644 --- a/docs/src/components/common-ui/vben-modal.md +++ b/docs/src/components/common-ui/vben-modal.md @@ -143,11 +143,11 @@ const [Modal, modalApi] = useVbenModal({ ### modalApi -| 事件名 | 描述 | 类型 | +| 方法 | 描述 | 类型 | | --- | --- | --- | -| setState | 动态设置弹窗状态属性 | `setState(props) \| setState((prev)=>(props))` | +| setState | 动态设置弹窗状态属性 | `(((prev: ModalState) => Partial)\| Partial)=>modalApi` | | open | 打开弹窗 | `()=>void` | | close | 关闭弹窗 | `()=>void` | -| setData | 设置共享数据 | `(data:T)=>void` | +| setData | 设置共享数据 | `(data:T)=>modalApi` | | getData | 获取共享数据 | `()=>T` | | useStore | 获取可响应式状态 | - | diff --git a/docs/src/demos/vben-drawer/dynamic/index.vue b/docs/src/demos/vben-drawer/dynamic/index.vue index ad7e6565d..95464023a 100644 --- a/docs/src/demos/vben-drawer/dynamic/index.vue +++ b/docs/src/demos/vben-drawer/dynamic/index.vue @@ -13,8 +13,7 @@ function open() { } function handleUpdateTitle() { - drawerApi.setState({ title: '外部动态标题' }); - drawerApi.open(); + drawerApi.setState({ title: '外部动态标题' }).open(); } diff --git a/docs/src/demos/vben-drawer/shared-data/index.vue b/docs/src/demos/vben-drawer/shared-data/index.vue index 04885f157..fef6cb058 100644 --- a/docs/src/demos/vben-drawer/shared-data/index.vue +++ b/docs/src/demos/vben-drawer/shared-data/index.vue @@ -9,11 +9,12 @@ const [Drawer, drawerApi] = useVbenDrawer({ }); function open() { - drawerApi.setData({ - content: '外部传递的数据 content', - payload: '外部传递的数据 payload', - }); - drawerApi.open(); + drawerApi + .setData({ + content: '外部传递的数据 content', + payload: '外部传递的数据 payload', + }) + .open(); } diff --git a/docs/src/demos/vben-modal/dynamic/index.vue b/docs/src/demos/vben-modal/dynamic/index.vue index 718e532bc..1b0255459 100644 --- a/docs/src/demos/vben-modal/dynamic/index.vue +++ b/docs/src/demos/vben-modal/dynamic/index.vue @@ -13,8 +13,7 @@ function openModal() { } function handleUpdateTitle() { - modalApi.setState({ title: '外部动态标题' }); - modalApi.open(); + modalApi.setState({ title: '外部动态标题' }).open(); } diff --git a/docs/src/demos/vben-modal/shared-data/index.vue b/docs/src/demos/vben-modal/shared-data/index.vue index 58c35e24d..91afeb70d 100644 --- a/docs/src/demos/vben-modal/shared-data/index.vue +++ b/docs/src/demos/vben-modal/shared-data/index.vue @@ -9,11 +9,12 @@ const [Modal, modalApi] = useVbenModal({ }); function openModal() { - modalApi.setData({ - content: '外部传递的数据 content', - payload: '外部传递的数据 payload', - }); - modalApi.open(); + modalApi + .setData({ + content: '外部传递的数据 content', + payload: '外部传递的数据 payload', + }) + .open(); } diff --git a/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts b/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts index ffb585f92..398e4f907 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts +++ b/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts @@ -141,6 +141,7 @@ export class DrawerApi { setData(payload: T) { this.sharedData.payload = payload; + return this; } setState( @@ -153,5 +154,6 @@ export class DrawerApi { } else { this.store.setState((prev) => ({ ...prev, ...stateOrFn })); } + return this; } } diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts b/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts index 037a09096..cc08260d5 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts @@ -151,6 +151,7 @@ export class ModalApi { setData(payload: T) { this.sharedData.payload = payload; + return this; } setState( @@ -163,5 +164,6 @@ export class ModalApi { } else { this.store.setState((prev) => ({ ...prev, ...stateOrFn })); } + return this; } } diff --git a/playground/src/views/examples/drawer/index.vue b/playground/src/views/examples/drawer/index.vue index 308b386bc..d50aeb227 100644 --- a/playground/src/views/examples/drawer/index.vue +++ b/playground/src/views/examples/drawer/index.vue @@ -1,5 +1,5 @@ diff --git a/playground/src/views/examples/modal/index.vue b/playground/src/views/examples/modal/index.vue index 4176f14eb..7c6cdf487 100644 --- a/playground/src/views/examples/modal/index.vue +++ b/playground/src/views/examples/modal/index.vue @@ -63,24 +63,25 @@ function openDynamicModal() { } function openSharedModal() { - sharedModalApi.setData({ - content: '外部传递的数据 content', - payload: '外部传递的数据 payload', - }); - sharedModalApi.open(); + sharedModalApi + .setData({ + content: '外部传递的数据 content', + payload: '外部传递的数据 payload', + }) + .open(); } function handleUpdateTitle() { - dynamicModalApi.setState({ title: '外部动态标题' }); - dynamicModalApi.open(); + dynamicModalApi.setState({ title: '外部动态标题' }).open(); } function openFormModal() { - formModalApi.setData({ - // 表单值 - values: { field1: 'abc' }, - }); - formModalApi.open(); + formModalApi + .setData({ + // 表单值 + values: { field1: 'abc' }, + }) + .open(); }