UNPKG

bootstrap-table

Version:

An extended table to integration with some of the most widely used CSS frameworks. (Supports Bootstrap, Semantic UI, Bulma, Material Design, Foundation)

144 lines (117 loc) 3.9 kB
/** * @author: Dennis Hernández * @update zhixin wen <wenzhixin2010@gmail.com> */ const rowAttr = (row, index) => ({ id: `customId_${index}` }) Object.assign($.fn.bootstrapTable.defaults, { reorderableRows: false, onDragStyle: null, onDropStyle: null, onDragClass: 'reorder-rows-on-drag-class', dragHandle: '>tbody>tr>td:not(.bs-checkbox)', useRowAttrFunc: false, // eslint-disable-next-line no-unused-vars onReorderRowsDrag (row) { return false }, // eslint-disable-next-line no-unused-vars onReorderRowsDrop (row) { return false }, // eslint-disable-next-line no-unused-vars onReorderRow (newData) { return false }, onDragStop () {}, onAllowDrop () { return true } }) Object.assign($.fn.bootstrapTable.events, { 'reorder-row.bs.table': 'onReorderRow' }) $.BootstrapTable = class extends $.BootstrapTable { init (...args) { if (!this.options.reorderableRows) { super.init(...args) return } if (this.options.useRowAttrFunc) { this.options.rowAttributes = rowAttr } const onPostBody = this.options.onPostBody this.options.onPostBody = () => { setTimeout(() => { this.makeRowsReorderable() onPostBody.call(this.options, this.options.data) }, 1) } super.init(...args) } makeRowsReorderable () { this.$el.tableDnD({ onDragStyle: this.options.onDragStyle, onDropStyle: this.options.onDropStyle, onDragClass: this.options.onDragClass, onAllowDrop: (hoveredRow, draggedRow) => this.onAllowDrop(hoveredRow, draggedRow), onDragStop: (table, draggedRow) => this.onDragStop(table, draggedRow), onDragStart: (table, droppedRow) => this.onDropStart(table, droppedRow), onDrop: (table, droppedRow) => this.onDrop(table, droppedRow), dragHandle: this.options.dragHandle }) } onDropStart (table, draggingTd) { this.$draggingTd = $(draggingTd).css('cursor', 'move') this.draggingIndex = $(this.$draggingTd.parent()).data('index') // Call the user defined function this.options.onReorderRowsDrag(this.data[this.draggingIndex]) } onDragStop (table, draggedRow) { const rowIndexDraggedRow = $(draggedRow).data('index') const draggedRowItem = this.data[rowIndexDraggedRow] this.options.onDragStop(table, draggedRowItem, draggedRow) } onAllowDrop (hoveredRow, draggedRow) { const rowIndexDraggedRow = $(draggedRow).data('index') const rowIndexHoveredRow = $(hoveredRow).data('index') const draggedRowItem = this.data[rowIndexDraggedRow] const hoveredRowItem = this.data[rowIndexHoveredRow] return this.options.onAllowDrop(hoveredRowItem, draggedRowItem, hoveredRow, draggedRow) } onDrop (table) { this.$draggingTd.css('cursor', '') const newData = [] for (let i = 0; i < table.tBodies[0].rows.length; i++) { const $tr = $(table.tBodies[0].rows[i]) newData.push(this.data[$tr.data('index')]) $tr.data('index', i) } const draggingRow = this.data[this.draggingIndex] const droppedIndex = newData.indexOf(this.data[this.draggingIndex]) const droppedRow = this.data[droppedIndex] const index = this.options.data.indexOf(this.data[droppedIndex]) this.options.data.splice(this.options.data.indexOf(draggingRow), 1) this.options.data.splice(index, 0, draggingRow) this.initSearch() if (this.options.sidePagination === 'server') { this.data = [...this.options.data] } // Call the user defined function this.options.onReorderRowsDrop(droppedRow) // Call the event reorder-row this.trigger('reorder-row', newData, draggingRow, droppedRow) } initSearch () { this.ignoreInitSort = true super.initSearch() } initSort () { if (this.ignoreInitSort) { this.ignoreInitSort = false return } super.initSort() } }