@@ -5,6 +5,7 @@ import { later } from "../util";
55
66describe ( "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