@@ -153,6 +153,8 @@ export default class DataBrowser extends React.Component {
153153contextMenuX :null ,
154154contextMenuY :null ,
155155contextMenuItems :null ,
156+ panelCheckboxDragging :false ,
157+ draggedPanelSelection :false ,
156158} ;
157159
158160this . handleResizeDiv = this . handleResizeDiv . bind ( this ) ;
@@ -186,6 +188,9 @@ export default class DataBrowser extends React.Component {
186188this . handlePanelScroll = this . handlePanelScroll . bind ( this ) ;
187189this . handlePanelHeaderContextMenu = this . handlePanelHeaderContextMenu . bind ( this ) ;
188190this . handleWrapperWheel = this . handleWrapperWheel . bind ( this ) ;
191+ this . onMouseDownPanelCheckBox = this . onMouseDownPanelCheckBox . bind ( this ) ;
192+ this . onMouseUpPanelCheckBox = this . onMouseUpPanelCheckBox . bind ( this ) ;
193+ this . onMouseEnterPanelCheckBox = this . onMouseEnterPanelCheckBox . bind ( this ) ;
189194this . saveOrderTimeout = null ;
190195this . aggregationPanelRef = React . createRef ( ) ;
191196this . panelColumnRefs = [ ] ;
@@ -265,6 +270,7 @@ export default class DataBrowser extends React.Component {
265270async componentDidMount ( ) {
266271document . body . addEventListener ( 'keydown' , this . handleKey ) ;
267272window . addEventListener ( 'resize' , this . updateMaxWidth ) ;
273+ window . addEventListener ( 'mouseup' , this . onMouseUpPanelCheckBox ) ;
268274
269275// Load keyboard shortcuts from server
270276try {
@@ -279,6 +285,7 @@ export default class DataBrowser extends React.Component {
279285componentWillUnmount ( ) {
280286document . body . removeEventListener ( 'keydown' , this . handleKey ) ;
281287window . removeEventListener ( 'resize' , this . updateMaxWidth ) ;
288+ window . removeEventListener ( 'mouseup' , this . onMouseUpPanelCheckBox ) ;
282289if ( this . multiPanelWrapperElement ) {
283290this . multiPanelWrapperElement . removeEventListener ( 'wheel' , this . handleWrapperWheel ) ;
284291}
@@ -1136,6 +1143,30 @@ export default class DataBrowser extends React.Component {
11361143} ) ;
11371144}
11381145
1146+ onMouseDownPanelCheckBox ( objectId , checked ) {
1147+ const newSelectionState = ! checked ;
1148+ this . props . selectRow ( objectId , newSelectionState ) ;
1149+ this . setState ( {
1150+ panelCheckboxDragging :true ,
1151+ draggedPanelSelection :newSelectionState ,
1152+ } ) ;
1153+ }
1154+
1155+ onMouseUpPanelCheckBox ( ) {
1156+ if ( this . state . panelCheckboxDragging ) {
1157+ this . setState ( {
1158+ panelCheckboxDragging :false ,
1159+ draggedPanelSelection :false ,
1160+ } ) ;
1161+ }
1162+ }
1163+
1164+ onMouseEnterPanelCheckBox ( objectId ) {
1165+ if ( this . state . panelCheckboxDragging ) {
1166+ this . props . selectRow ( objectId , this . state . draggedPanelSelection ) ;
1167+ }
1168+ }
1169+
11391170handleWrapperWheel ( event ) {
11401171if ( ! this . state . syncPanelScroll || this . state . panelCount <= 1 ) {
11411172return ;
@@ -1734,12 +1765,12 @@ export default class DataBrowser extends React.Component {
17341765{ this . state . showPanelCheckbox && (
17351766< div
17361767className = { styles . panelHeader }
1737- onClick = { ( ) => {
1738- this . props . selectRow ( objectId , ! isRowSelected ) ;
1739- } }
17401768onMouseDown = { ( e ) => {
17411769e . preventDefault ( ) ;
1770+ this . onMouseDownPanelCheckBox ( objectId , isRowSelected ) ;
17421771} }
1772+ onMouseUp = { this . onMouseUpPanelCheckBox }
1773+ onMouseEnter = { ( ) => this . onMouseEnterPanelCheckBox ( objectId ) }
17431774onContextMenu = { ( e ) => {
17441775e . preventDefault ( ) ;
17451776this . handlePanelHeaderContextMenu ( e , objectId ) ;