1
0
Fork 0

Cmatch: Extract show/hide marking into own method

This is to give us a fairly easy means of testing this logic for a bugfix.

This refactoring also obviates a pretty nasty bug; see docblock.

* src/client/Cmatch.js (_handleClassMatch): Extract show/hide marking.
  (markShowHide): New method.
master
Mike Gerwitz 2018-02-09 11:03:21 -05:00
parent 4b114d0137
commit 0a50b22496
1 changed files with 36 additions and 11 deletions

View File

@ -300,17 +300,7 @@ module.exports = Class( 'Cmatch',
( ( vis[ i ] ) ? show : hide ).push( i );
}
if ( show.length )
{
visq[ field ] = { event_id: 'show', name: field, indexes: show };
this._mergeCmatchHidden( field, show, false );
}
if ( hide.length )
{
visq[ field ] = { event_id: 'hide', name: field, indexes: hide };
this._mergeCmatchHidden( field, hide, true );
}
this.markShowHide( field, visq, show, hide );
}
// it's important to do this before showing/hiding fields, since
@ -339,6 +329,41 @@ module.exports = Class( 'Cmatch',
},
/**
* Mark fields to be shown/hidden
*
* This also updates the cached visibility of field FIELD.
*
* XXX: This method makes very obvious a nasty bug where hides override
* shows if both are set.
*
* @param {string} field field name
* @param {Array} show indexes to show
* @param {Array} hide indexes to hide
*
* @return {undefined}
*/
'protected markShowHide'( field, visq, show, hide )
{
if ( !( show.length || hide.length ) )
{
return;
}
if ( show.length )
{
this._mergeCmatchHidden( field, show, false );
visq[ field ] = { event_id: 'show', name: field, indexes: show };
}
if ( hide.length )
{
this._mergeCmatchHidden( field, hide, true );
visq[ field ] = { event_id: 'hide', name: field, indexes: hide };
}
},
/**
* Trigger DataApi event for field FIELD
*