@@ -30,26 +30,18 @@ const Table = {
3030 hasResetBtn: Boolean ,
3131 sortable: Boolean ,
3232 expandable: Boolean ,
33- draggable: Boolean ,
33+ draggableRows: Boolean ,
34+ draggableColumns: Boolean ,
3435 editable: Boolean
3536 },
3637
3738 setup (props , { emit }) {
38- // general state
39+ // datagrid instance reference
3940 const data = ref (props .data )
40- const columnProperties = ref (props .data .columns )
41-
42- // pagination state
4341 const pagination = ref (props .pagination )
4442 const rowsPerPage = ref (props .rowsPerPage )
4543 const currentPage = ref (0 )
46-
47- for (const colName in props .data .columns ) {
48- columnProperties .value [colName].ascendant = true
49- }
50-
5144 const search = reactive ({})
52-
5345 const expanded = ref (new Set ())
5446
5547 // whenever pagination props changes, update the class state accordingly
@@ -74,9 +66,9 @@ const Table = {
7466 props .data .switchPage ()
7567 }
7668
77- const sortColumn = colName => {
78- props .data .sortByColumn (colName, columnProperties . value [colName] .ascendant )
79- columnProperties . value [colName]. ascendant = ! columnProperties . value [colName] .ascendant
69+ const sortColumn = column => {
70+ props .data .sortByColumn (column . name , column .ascendant )
71+ column . ascendant = ! column .ascendant
8072 }
8173
8274 const toggleExpanded = rowId => {
@@ -101,7 +93,7 @@ const Table = {
10193
10294 const countColumns = computed (() => {
10395 return (
104- Object . keys ( data .value .getColumns () ).length +
96+ data .value .getColumns ().length +
10597 (props .checkable ? 1 : 0 ) +
10698 (props .expandable ? 1 : 0 )
10799 )
@@ -119,7 +111,6 @@ const Table = {
119111
120112 return {
121113 props,
122- columnProperties,
123114 data,
124115 search,
125116 sortColumn,
@@ -157,14 +148,20 @@ export default Table
157148 <td v-if =" checkable" />
158149 <td v-if =" expandable" />
159150 <th
160- v-for =" column in data.getColumns()"
161- :key =" column"
162- :class =" column.style"
163- @click =" sortable ? sortColumn(column.name) : null"
151+ v-for =" (column, idx) in data.getColumns()"
152+ :key =" idx"
153+ :class =" { ...column.style, 'has-text-primary': column.selected }"
154+ @click =" sortable ? sortColumn(column) : null"
155+ :draggable =" draggableColumns"
156+ @dragstart =" data.onDragStartColumn($event, row, idx)"
157+ @dragend =" data.onDragEndColumn($event, column, idx)"
158+ @drop =" data.onDropColumn($event, column, idx)"
159+ @dragover =" data.onDragOverColumn($event, column, idx)"
160+ @dragleave =" data.onDragLeaveColumn($event, column, idx)"
164161 >
165162 {{ column.caption }}
166163 <span v-if =" sortable" >
167- {{ columnProperties[ column.name] .ascendant ? '&darr ; ' : ' &uarr ; ' }}
164+ {{ column.ascendant ? '&darr ; ' : ' &uarr ; ' }}
168165 </span >
169166 </th >
170167 </tr >
@@ -186,12 +183,12 @@ export default Table
186183 </tr >
187184 <template v-for =" (row , idx ) in data .rows " :key =" idx " >
188185 <tr
189- :draggable =" draggable "
190- @dragstart =" data.onDragStart ($event, row, idx)"
191- @dragend =" data.onDragEnd ($event, row, idx)"
192- @drop =" data.onDrop ($event, row, idx)"
193- @dragover =" data.onDragOver ($event, row, idx)"
194- @dragleave =" data.onDragLeave ($event, row, idx)"
186+ :draggable =" draggableRows "
187+ @dragstart =" data.onDragStartRow ($event, row, idx)"
188+ @dragend =" data.onDragEndRow ($event, row, idx)"
189+ @drop =" data.onDropRow ($event, row, idx)"
190+ @dragover =" data.onDragOverRow ($event, row, idx)"
191+ @dragleave =" data.onDragLeaveRow ($event, row, idx)"
195192 :class =" { 'has-background-primary': row.selected, 'has-text-white': row.selected }"
196193 >
197194 <td v-if =" checkable" >
0 commit comments