///////////////////////////////////////////////////////////// // // pgAdmin 4 - PostgreSQL Tools // // Copyright (C) 2013 - 2022, The pgAdmin Development Team // This software is released under the PostgreSQL Licence // ////////////////////////////////////////////////////////////// define(['jquery', 'sources/gettext', 'sources/selection/column_selector', 'sources/selection/row_selector', 'sources/selection/range_selection_helper', 'sources/url_for', ], function ($, gettext, ColumnSelector, RowSelector, RangeSelectionHelper, url_for) { return function (columnDefinitions) { var Slick = window.Slick, rowSelector = new RowSelector(columnDefinitions), columnSelector = new ColumnSelector(columnDefinitions), onBeforeGridSelectAll = new Slick.Event(), onGridSelectAll = new Slick.Event(), onBeforeGridColumnSelectAll = columnSelector.onBeforeColumnSelectAll, onGridColumnSelectAll = columnSelector.onColumnSelectAll; var init = function (grid) { this.grid = grid; grid.onHeaderClick.subscribe(function (event, eventArguments) { if (eventArguments.column.selectAllOnClick && !$(event.target).hasClass('slick-resizable-handle')) { toggleSelectAll(grid, event, eventArguments); } }); grid.getSelectionModel().onSelectedRangesChanged .subscribe(handleSelectedRangesChanged.bind(null, grid)); grid.registerPlugin(rowSelector); grid.registerPlugin(columnSelector); onGridSelectAll.subscribe(function(e, args) { RangeSelectionHelper.selectAll(args.grid); }); }; var getColumnDefinitions = function (columnDefinition) { columnDefinition = columnSelector.getColumnDefinitions(columnDefinition); columnDefinition = rowSelector.getColumnDefinitions(columnDefinition); columnDefinition[0].selectAllOnClick = true; columnDefinition[0].name = '' + '
' + columnDefinition[0].name + '' + '
'; return columnDefinition; }; function handleSelectedRangesChanged(grid) { if(RangeSelectionHelper.isEntireGridSelected(grid)) { $('[data-id=\'select-all\']').addClass('selected'); } else { $('[data-id=\'select-all\']').removeClass('selected'); } } function toggleSelectAll(grid, event, eventArguments) { if (RangeSelectionHelper.isEntireGridSelected(grid)) { selectNone(grid); } else { onBeforeGridSelectAll.notify(eventArguments, event); if (!(event.isPropagationStopped() || event.isImmediatePropagationStopped())) { RangeSelectionHelper.selectAll(grid); } } } function selectNone(grid) { var selectionModel = grid.getSelectionModel(); selectionModel.setSelectedRanges([]); } $.extend(this, { 'init': init, 'getColumnDefinitions': getColumnDefinitions, 'onBeforeGridSelectAll': onBeforeGridSelectAll, 'onGridSelectAll': onGridSelectAll, 'onBeforeGridColumnSelectAll': onBeforeGridColumnSelectAll, 'onGridColumnSelectAll': onGridColumnSelectAll, }); }; });