Skip to content

feat: add mouse event parameter #69

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

Merged
merged 1 commit into from
Aug 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,9 @@ import '@wsfe/vue-tree/style.css'
| select | 选中时触发(单选) | 被选中的节点信息 |
| unselect | 取消选中时触发(单选) | 被取消选中的节点信息 |
| selected-change | 选中/取消选中时触发(单选) | 被选中节点 |
| click | 点击节点时触发 | 节点信息 |
| node-dblclick | 双击节点时触发 | 节点信息 |
| node-right-click | 右击节点时触发 | 节点信息 |
| click | 点击节点时触发 | 节点信息, 鼠标事件 |
| node-dblclick | 双击节点时触发 | 节点信息, 鼠标事件 |
| node-right-click | 右击节点时触发 | 节点信息, 鼠标事件 |
| node-dragstart | 开始拖拽节点时触发 | 节点信息, 拖拽事件对象 |
| node-dragenter | dragenter 时触发 | 节点信息 , 拖拽事件对象, 事件触发的节点部位 `'before' \| 'body' \| 'after'` |
| node-dragover | dragover 时触发 | 节点信息 , 拖拽事件对象, 事件触发的节点部位 `'before' \| 'body' \| 'after'` |
Expand Down
20 changes: 20 additions & 0 deletions examples/Feature.vue
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
ref="basicTreeRef"
:data="basicUsage"
:nodeClassName="node => `generated-class-${node.id}`"
@click="handleClick"
@node-dblclick="handleDblClick"
@node-right-click="handleRightClick"
/>
</div>
</div>
Expand Down Expand Up @@ -268,10 +271,27 @@ export default defineComponent({
basicTreeRef.value.scrollTo(basicUsage.value[0].id, 0)
}

const handleClick = (node: TreeNode, e: MouseEvent) => {
console.log('click', node, e)
console.log('click mouse position', e.x, e.y)
}
const handleDblClick = (node: TreeNode, e: MouseEvent) => {
console.log('node-dblclick', node, e)
console.log('node-dblclick mouse position', e.x, e.y)
}
const handleRightClick = (node: TreeNode, e: MouseEvent) => {
e.preventDefault()
console.log('node-right-click', node, e)
console.log('node-right-click mouse position', e.x, e.y)
}

return {
// 基本用法
basicUsage,
basicTreeRef,
handleClick,
handleDblClick,
handleRightClick,
handleExpandAll,
handleCollapseAll,

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@wsfe/vue-tree",
"version": "3.0.10",
"version": "3.1.0",
"types": "./types",
"description": "A vue tree component using virtual list.",
"main": "./dist/v3/vue-tree.umd.js",
Expand Down
12 changes: 6 additions & 6 deletions src/components/TreeNode.vue
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,8 @@ export default defineComponent({
emit('check', fullData.value)
}

function handleSelect(): void {
emit('click', fullData.value)
function handleSelect(e: MouseEvent): void {
emit('click', fullData.value, e)
if (props.selectable) {
if (props.disableAll || props.data?.disabled) return
if (props.data?.selected && !props.unselectOnClick) return
Expand All @@ -232,12 +232,12 @@ export default defineComponent({
}
}

function handleDblclick(): void {
emit('node-dblclick', fullData.value)
function handleDblclick(e: MouseEvent): void {
emit('node-dblclick', fullData.value, e)
}

function handleRightClick(): void {
emit('node-right-click', fullData.value)
function handleRightClick(e: MouseEvent): void {
emit('node-right-click', fullData.value, e)
}

//#region Drag handlers
Expand Down
29 changes: 29 additions & 0 deletions tests/unit/tree.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -611,3 +611,32 @@ describe('节点拖拽测试', () => {
})
})
})

describe('节点鼠标事件', () => {
it('点击、双击与右键', done => {
const data = genData().data
const wrapper = mount(VTree as any, {
propsData: {
data,
}
})
const vm = wrapper.vm

vm.$nextTick(() => {
const treeNodes: any[] = wrapper.findAllComponents({ name: 'CTreeNode' })

treeNodes[0].find('.ctree-tree-node__title').trigger('click')
treeNodes[0].find('.ctree-tree-node__title').trigger('dblclick')
treeNodes[0].find('.ctree-tree-node__title').trigger('contextmenu')
vm.$nextTick(() => {
expect(wrapper.emitted('click')).toHaveLength(1)
expect((wrapper.emitted('click')?.[0] as any)?.[1]).toBeInstanceOf(MouseEvent)
expect(wrapper.emitted('node-dblclick')).toHaveLength(1)
expect((wrapper.emitted('node-dblclick')?.[0] as any)?.[1]).toBeInstanceOf(MouseEvent)
expect(wrapper.emitted('node-right-click')).toHaveLength(1)
expect((wrapper.emitted('node-right-click')?.[0] as any)?.[1]).toBeInstanceOf(MouseEvent)
done()
})
})
})
})