diff --git a/src/drawer/__test__/__snapshots__/demo.test.jsx.snap b/src/drawer/__test__/__snapshots__/demo.test.jsx.snap index e3decdf38..f96eec14e 100644 --- a/src/drawer/__test__/__snapshots__/demo.test.jsx.snap +++ b/src/drawer/__test__/__snapshots__/demo.test.jsx.snap @@ -24,9 +24,8 @@ exports[`Drawer > Drawer baseVue demo works fine 1`] = `
- - - + +
@@ -34,7 +33,7 @@ exports[`Drawer > Drawer baseVue demo works fine 1`] = `
- +
@@ -44,7 +43,7 @@ exports[`Drawer > Drawer baseVue demo works fine 1`] = `
- +
@@ -54,7 +53,7 @@ exports[`Drawer > Drawer baseVue demo works fine 1`] = `
- +
@@ -64,7 +63,7 @@ exports[`Drawer > Drawer baseVue demo works fine 1`] = `
- +
@@ -74,7 +73,7 @@ exports[`Drawer > Drawer baseVue demo works fine 1`] = `
- +
@@ -84,7 +83,7 @@ exports[`Drawer > Drawer baseVue demo works fine 1`] = `
- +
@@ -93,11 +92,7 @@ exports[`Drawer > Drawer baseVue demo works fine 1`] = `
- +
@@ -146,9 +141,8 @@ exports[`Drawer > Drawer footerVue demo works fine 1`] = `
- - - + +
@@ -156,7 +150,7 @@ exports[`Drawer > Drawer footerVue demo works fine 1`] = `
- +
@@ -166,7 +160,7 @@ exports[`Drawer > Drawer footerVue demo works fine 1`] = `
- +
@@ -176,7 +170,7 @@ exports[`Drawer > Drawer footerVue demo works fine 1`] = `
- +
@@ -186,7 +180,7 @@ exports[`Drawer > Drawer footerVue demo works fine 1`] = `
- +
@@ -196,7 +190,7 @@ exports[`Drawer > Drawer footerVue demo works fine 1`] = `
- +
@@ -206,7 +200,7 @@ exports[`Drawer > Drawer footerVue demo works fine 1`] = `
- +
@@ -290,9 +284,8 @@ exports[`Drawer > Drawer iconVue demo works fine 1`] = `
- - - + +
@@ -449,11 +442,7 @@ exports[`Drawer > Drawer iconVue demo works fine 1`] = `
- +
@@ -538,9 +527,8 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- - - + +
@@ -548,7 +536,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -558,7 +546,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -568,7 +556,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -578,7 +566,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -588,7 +576,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -598,7 +586,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -607,11 +595,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -675,9 +659,8 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- - - + +
@@ -834,11 +817,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -911,8 +890,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = ` > 标题
- - +
@@ -920,7 +898,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -930,7 +908,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -940,7 +918,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -950,7 +928,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -960,7 +938,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -970,7 +948,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -979,11 +957,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -1046,9 +1020,8 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- - - + +
@@ -1056,7 +1029,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -1066,7 +1039,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -1076,7 +1049,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -1086,7 +1059,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -1096,7 +1069,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -1106,7 +1079,7 @@ exports[`Drawer > Drawer mobileVue demo works fine 1`] = `
- +
@@ -1258,8 +1231,7 @@ exports[`Drawer > Drawer titleVue demo works fine 1`] = ` > 标题
- - +
@@ -1267,7 +1239,7 @@ exports[`Drawer > Drawer titleVue demo works fine 1`] = `
- +
@@ -1277,7 +1249,7 @@ exports[`Drawer > Drawer titleVue demo works fine 1`] = `
- +
@@ -1287,7 +1259,7 @@ exports[`Drawer > Drawer titleVue demo works fine 1`] = `
- +
@@ -1297,7 +1269,7 @@ exports[`Drawer > Drawer titleVue demo works fine 1`] = `
- +
@@ -1307,7 +1279,7 @@ exports[`Drawer > Drawer titleVue demo works fine 1`] = `
- +
@@ -1317,7 +1289,7 @@ exports[`Drawer > Drawer titleVue demo works fine 1`] = `
- +
@@ -1326,11 +1298,7 @@ exports[`Drawer > Drawer titleVue demo works fine 1`] = `
- +
diff --git a/src/drawer/__test__/index.test.jsx b/src/drawer/__test__/index.test.jsx index 4ea6f006e..8a7857ad1 100644 --- a/src/drawer/__test__/index.test.jsx +++ b/src/drawer/__test__/index.test.jsx @@ -1,6 +1,6 @@ import { config, mount } from '@vue/test-utils'; import { describe, it, expect, vi } from 'vitest'; -import drawer from '../drawer.vue'; +import drawer from '../drawer'; import { ref, h } from 'vue'; import { AppIcon } from 'tdesign-icons-vue-next'; diff --git a/src/drawer/drawer.tsx b/src/drawer/drawer.tsx new file mode 100644 index 000000000..ef88b9d9b --- /dev/null +++ b/src/drawer/drawer.tsx @@ -0,0 +1,96 @@ +import { ref, watch, toRefs, defineComponent, h } from 'vue'; +import TPopup from '../popup'; +import config from '../config'; +import props from './props'; +import { DrawerItem } from './type'; +import { useTNodeJSX } from '@/hooks/tnode'; +import { usePrefixClass } from '@/hooks/useClass'; + +const { prefix } = config; +const name = `${prefix}-drawer`; + +export default defineComponent({ + name, + components: { TPopup }, + props, + emits: ['update:visible', 'itemClick', 'overlayClick'], + setup(props, context) { + const renderTNodeJSX = useTNodeJSX(); + const drawerClass = usePrefixClass('drawer'); + const { visible, showOverlay } = toRefs(props); + const open = ref(visible.value || false); + + watch(open, () => { + context.emit('update:visible', open.value); + }); + + watch(visible, () => { + open.value = visible.value; + }); + + const onItemClick = (index: number, item: DrawerItem, context: { e: MouseEvent }) => { + props.onItemClick?.(index, item, context); + }; + + const onVisibleChange = (visible: boolean) => { + if (showOverlay.value) { + props.onOverlayClick?.({ visible }); + } + }; + + const onClose = () => { + props.onClose?.('overlay'); + }; + + return () => { + const { attach, zIndex, closeOnOverlayClick, destroyOnClose, items, placement, showOverlay } = props; + const renderTitleNode = () => { + const titleNode = renderTNodeJSX('title'); + if (!titleNode) { + return null; + } + return
{titleNode}
; + }; + const renderFooterNode = () => { + const footerNode = renderTNodeJSX('footer'); + if (!footerNode) { + return null; + } + return
{footerNode}
; + }; + return ( + +
+ {renderTitleNode()} + {renderTNodeJSX('default')} + +
+ {(items || []).map((item, index) => ( +
onItemClick(index, item, { e })} + > + {item.icon && {item.icon(h)}} +
{item.title}
+
+ ))} +
+ + {renderFooterNode()} +
+
+ ); + }; + }, +}); diff --git a/src/drawer/drawer.vue b/src/drawer/drawer.vue deleted file mode 100644 index 6d773f0f0..000000000 --- a/src/drawer/drawer.vue +++ /dev/null @@ -1,99 +0,0 @@ - - - diff --git a/src/drawer/index.ts b/src/drawer/index.ts index 6993407e5..e45567a1f 100644 --- a/src/drawer/index.ts +++ b/src/drawer/index.ts @@ -1,4 +1,4 @@ -import _Drawer from './drawer.vue'; +import _Drawer from './drawer'; import { withInstall, WithInstallType } from '../shared'; import './style'; diff --git a/src/drawer/plugin.ts b/src/drawer/plugin.ts index d1aec43b1..fde3efc9b 100644 --- a/src/drawer/plugin.ts +++ b/src/drawer/plugin.ts @@ -1,5 +1,5 @@ import { createApp, App, h, ref, nextTick } from 'vue'; -import vueDrawer from './drawer.vue'; +import vueDrawer from './drawer'; import { WithInstallType, isBrowser } from '../shared'; import { TdDrawerProps } from './type';