Skip to content

Commit 4591d32

Browse files
committed
custom filter add beforeVisibleChange callbacl method
1 parent d102a1b commit 4591d32

File tree

2 files changed

+133
-0
lines changed

2 files changed

+133
-0
lines changed

packages/ve-table/src/header/header-filter-custom-content.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ export default {
8686
isCustomContent: true,
8787
isControlled: true,
8888
visible: this.internalVisible,
89+
beforeVisibleChange:
90+
this.column.filterCustom.beforeVisibleChange,
8991
},
9092
on: {
9193
"on-dropdown-visible-change": this.visibleChange,

tests/unit/specs/ve-table-header-filter-custom.spec.js

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { later } from "../util";
55

66
describe("veTable header filter custom", () => {
77
const mockFilterFn = jest.fn((closeFn) => closeFn());
8+
const mockBeforeVisibleChangeFn = jest.fn();
89

910
const TABLE_DATA = [
1011
{
@@ -263,4 +264,134 @@ describe("veTable header filter custom", () => {
263264
expect(mockFilterFn).toBeCalled();
264265
expect(mockFilterFn).toHaveBeenCalledWith(expect.any(Function));
265266
});
267+
268+
it("beforeVisibleChange callback method", async () => {
269+
const wrapper = mount(
270+
{
271+
render() {
272+
return (
273+
<veTable
274+
columns={this.columns}
275+
tableData={this.tableData}
276+
/>
277+
);
278+
},
279+
data() {
280+
return {
281+
searchValue: "",
282+
columns: [
283+
{
284+
field: "name",
285+
key: "a",
286+
title: "Name",
287+
align: "left",
288+
width: "15%",
289+
// filter custom
290+
filterCustom: {
291+
defaultVisible: false,
292+
beforeVisibleChange: ({ nextVisible }) => {
293+
mockBeforeVisibleChangeFn({
294+
nextVisible,
295+
});
296+
},
297+
render: ({ showFn, closeFn }, h) => {
298+
return (
299+
<div class="custom-name-filter">
300+
<input
301+
value={this.searchValue}
302+
on-input={(e) =>
303+
(this.searchValue =
304+
e.target.value)
305+
}
306+
placeholder="Search name"
307+
/>
308+
<div class="custom-name-filter-operation">
309+
<span
310+
class="name-filter-cancel"
311+
on-click={() =>
312+
mockFilterFn(
313+
closeFn,
314+
)
315+
}
316+
>
317+
取消
318+
</span>
319+
<span
320+
class="name-filter-confirm"
321+
on-click={() =>
322+
mockFilterFn(
323+
closeFn,
324+
)
325+
}
326+
>
327+
查询
328+
</span>
329+
</div>
330+
</div>
331+
);
332+
},
333+
},
334+
},
335+
{
336+
field: "date",
337+
key: "b",
338+
title: "Date",
339+
align: "left",
340+
width: "15%",
341+
},
342+
{
343+
field: "hobby",
344+
key: "c",
345+
title: "Hobby",
346+
align: "center",
347+
width: "30%",
348+
},
349+
{
350+
field: "address",
351+
key: "d",
352+
title: "Address",
353+
align: "left",
354+
width: "40%",
355+
},
356+
],
357+
tableData: TABLE_DATA,
358+
};
359+
},
360+
},
361+
{
362+
attachTo: document.body,
363+
},
364+
);
365+
366+
// default icon
367+
expect(wrapper.find(".icon-vet-filter").exists()).toBe(true);
368+
369+
wrapper.find(".ve-table-filter-icon").trigger("click");
370+
// 延迟展示
371+
await later(100);
372+
373+
expect(mockBeforeVisibleChangeFn).toBeCalled();
374+
expect(mockBeforeVisibleChangeFn).toHaveBeenCalledWith({
375+
nextVisible: true,
376+
});
377+
378+
const showDropdownPopper = document.querySelector(
379+
".ve-dropdown-popper > .ve-dropdown-dd",
380+
);
381+
382+
expect(showDropdownPopper.textContent.length).toBeGreaterThan(1);
383+
384+
const cancelClickEvent = new MouseEvent("click", {
385+
view: window, // window
386+
bubbles: true,
387+
cancelable: true,
388+
});
389+
390+
await later();
391+
392+
expect(mockBeforeVisibleChangeFn).toBeCalled();
393+
expect(mockBeforeVisibleChangeFn).toHaveBeenCalledWith({
394+
nextVisible: false,
395+
});
396+
});
266397
});

0 commit comments

Comments
 (0)