diff --git a/src/cellmanager.js b/src/cellmanager.js index d4de87e..e251534 100644 --- a/src/cellmanager.js +++ b/src/cellmanager.js @@ -615,7 +615,7 @@ export default class CellManager { if (!this.columnmanager.isFilterShown) { // put focus back on cell - this.$focusedCell.focus(); + this.$focusedCell && this.$focusedCell.focus(); } } diff --git a/src/columnmanager.js b/src/columnmanager.js index 4e6fd75..d443dd9 100644 --- a/src/columnmanager.js +++ b/src/columnmanager.js @@ -34,7 +34,7 @@ export default class ColumnManager { // refresh html $('thead', this.header).innerHTML = this.getHeaderHTML(columns); - this.$filterRow = $('.dt-row[data-is-filter]', this.header); + this.$filterRow = $('.dt-row-filter', this.header); if (this.$filterRow) { $.style(this.$filterRow, { display: 'none' }); } @@ -263,7 +263,7 @@ export default class ColumnManager { focusFilter(colIndex) { if (!this.isFilterShown) return; - const $filterInput = $(`[data-col-index="${colIndex}"] .dt-filter`, this.$filterRow); + const $filterInput = $(`.dt-cell--col-${colIndex} .dt-filter`, this.$filterRow); $filterInput.focus(); } diff --git a/src/datamanager.js b/src/datamanager.js index d73cbaa..44487a1 100644 --- a/src/datamanager.js +++ b/src/datamanager.js @@ -11,6 +11,7 @@ export default class DataManager { this.sortRows = nextTick(this.sortRows, this); this.switchColumn = nextTick(this.switchColumn, this); this.removeColumn = nextTick(this.removeColumn, this); + this.options.filterRows = nextTick(this.options.filterRows, this); } init(data, columns) { @@ -423,27 +424,29 @@ export default class DataManager { filterRows(keyword, colIndex) { const cells = this.rows.map(row => row[colIndex]); - let result = this.options.filterRows(keyword, cells, colIndex); - if (!result) { - result = this.getAllRowIndices(); - } + return this.options.filterRows(keyword, cells, colIndex) + .then(result => { + if (!result) { + result = this.getAllRowIndices(); + } - if (!result.then) { - result = Promise.resolve(result); - } + if (!result.then) { + result = Promise.resolve(result); + } - return result.then(rowsToShow => { - this._filteredRows = rowsToShow; + return result.then(rowsToShow => { + this._filteredRows = rowsToShow; - const rowsToHide = this.getAllRowIndices() - .filter(index => !rowsToShow.includes(index)); + const rowsToHide = this.getAllRowIndices() + .filter(index => !rowsToShow.includes(index)); - return { - rowsToHide, - rowsToShow - }; - }); + return { + rowsToHide, + rowsToShow + }; + }); + }); } getFilteredRowIndices() { diff --git a/src/rowmanager.js b/src/rowmanager.js index 5bb710d..2615b9b 100644 --- a/src/rowmanager.js +++ b/src/rowmanager.js @@ -40,7 +40,7 @@ export default class RowManager { // map of checked rows this.checkMap = []; - $.on(this.wrapper, 'click', '.dt-cell[data-col-index="0"] [type="checkbox"]', (e, $checkbox) => { + $.on(this.wrapper, 'click', '.dt-cell--col-0 [type="checkbox"]', (e, $checkbox) => { const $cell = $checkbox.closest('.dt-cell'); const { rowIndex, @@ -92,8 +92,7 @@ export default class RowManager { checkRow(rowIndex, toggle) { const value = toggle ? 1 : 0; - const selector = rowIndex => - `.dt-cell[data-row-index="${rowIndex}"][data-col-index="0"] [type="checkbox"]`; + const selector = rowIndex => `.dt-cell--0-${rowIndex} [type="checkbox"]`; // update internal map this.checkMap[rowIndex] = value; // set checkbox value explicitly @@ -117,7 +116,7 @@ export default class RowManager { this.checkMap = []; } // set checkbox value - $.each('.dt-cell[data-col-index="0"] [type="checkbox"]', this.bodyScrollable) + $.each('.dt-cell--col-0 [type="checkbox"]', this.bodyScrollable) .map(input => { input.checked = toggle; }); @@ -255,6 +254,7 @@ export default class RowManager { getRowHTML(row, props) { const dataAttr = makeDataAttributeString(props); + let rowIdentifier = props.rowIndex; if (props.isFilter) { row = row.map(cell => (Object.assign({}, cell, { @@ -265,10 +265,16 @@ export default class RowManager { isHeader: undefined, editable: false }))); + + rowIdentifier = 'filter'; + } + + if (props.isHeader) { + rowIdentifier = 'header'; } return ` -