Add 'filter'-event to Tree.vue

pull/4874/head
Maximilian Röttgen 2023-11-23 16:48:14 +01:00
parent 1100647eee
commit 2603b7a140
3 changed files with 38 additions and 4 deletions

View File

@ -120,6 +120,21 @@ export interface TreeSelectionKeys {
[key: string]: any;
}
/**
* Custom filter event.
* @see {@link TreeEmits.filter}
*/
export interface TreeFilterEvent {
/**
* Original event
*/
originalEvent: Event;
/**
* Filter value
*/
value: string;
}
/**
* Custom passthrough(pt) options.
* @see {@link TreeProps.pt}
@ -424,7 +439,7 @@ export interface TreeEmits {
* Emitted when the selection keys change.
* @param {TreeSelectionKeys} value - New selection keys.
*/
'update:selectionKeys'(event: TreeSelectionKeys): void;
'update:selectionKeys'(value: TreeSelectionKeys): void;
/**
* Callback to invoke when a node is selected.
* @param {TreeNode} node - Node instance.
@ -445,6 +460,11 @@ export interface TreeEmits {
* @param {TreeNode} node - Node instance.
*/
'node-collapse'(node: TreeNode): void;
/**
* Callback to invoke on filter input.
* @param {TreeFilterEvent} event - Custom filter event.
*/
'filter'(event: TreeFilterEvent): void;
}
/**

View File

@ -1,6 +1,4 @@
import { mount } from '@vue/test-utils';
import PrimeVue from 'primevue/config';
import { nextTick } from 'vue';
import Tree from './Tree.vue';
describe('Tree.vue', () => {
@ -42,4 +40,18 @@ describe('Tree.vue', () => {
expect(wrapper.emitted('keydown')).toBeFalsy();
});
it('emits update:filterValue on filter input', async () => {
wrapper = mount(Tree, {
props: {
filter: true,
},
});
let searchField = wrapper.find('input.p-tree-filter');
await searchField.trigger('keydown.space');
expect(wrapper.emitted('filter')).toBeTruthy();
})
});

View File

@ -47,7 +47,7 @@ import TreeNode from './TreeNode.vue';
export default {
name: 'Tree',
extends: BaseTree,
emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect'],
emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect', 'filter'],
data() {
return {
d_expandedKeys: this.expandedKeys || {},
@ -166,6 +166,8 @@ export default {
if (event.code === 'Enter') {
event.preventDefault();
}
this.$emit('filter', { originalEvent: event, value: event.target.value });
},
findFilteredNodes(node, paramsWithoutNode) {
if (node) {