2020 :columns =" columns"
2121 :dir =" tableProps.dir"
2222 :sortOrders =" sortOrders"
23- :table-classes =" classes .table"
24- :table-head-classes =" classes ['th']"
25- :table-header-classes =" classes ['t-head']"
26- :table-row-classes =" classes ['t-head-tr']"
27- :table-container-classes =" classes ['table-container']" >
23+ :table-classes =" computedClasses .table"
24+ :table-head-classes =" computedClasses ['th']"
25+ :table-header-classes =" computedClasses ['t-head']"
26+ :table-row-classes =" computedClasses ['t-head-tr']"
27+ :table-container-classes =" computedClasses ['table-container']" >
2828 <!-- Table Header -->
2929 <template
3030 slot="header"
4646 <template slot="body" v-else >
4747 <tbody
4848 v-if =" columns"
49- :class =" classes ['t-body']"
49+ :class =" computedClasses ['t-body']"
5050 class =" laravel-vue-datatable-tbody" >
5151 <tr
5252 :key =" item.id"
53- :class =" classes ['t-body-tr']"
53+ :class =" computedClasses ['t-body-tr']"
5454 v-for =" (item, rowIndex) in tableData.data"
5555 @click =" $emit('row-clicked', item)"
5656 class =" laravel-vue-datatable-tbody-tr" >
5757 <td
5858 :key =" column.name"
59- :class =" classes.td "
59+ :class =" bodyCellClasses(column) "
6060 v-for =" (column, columnIndex) in columns"
6161 class =" laravel-vue-datatable-td" >
6262 <laravel-vue-data-table-cell
102102import axios from ' axios' ;
103103import VueTable from ' ./Table.vue' ;
104104import UrlFilters from ' ../mixins/UrlFilters' ;
105+ import MergeClasses from " ../mixins/MergeClasses" ;
105106import DataTableCell from ' ./DataTableCell.vue' ;
106107import DataTableFilters from ' ./DataTableFilters.vue' ;
107108
@@ -113,8 +114,26 @@ export default {
113114 this .getData (this .url , this .getRequestPayload );
114115 }
115116
117+ const defaults = require (" lodash.defaultsdeep" );
118+ this .computedClasses = defaults (this .classes ,(window .LaravelVueDatatable || {}).classes || {},
119+ {
120+ " table-container" : {
121+ " table-responsive" : true
122+ },
123+ table: {
124+ table: true ,
125+ " table-striped" : true ,
126+ border: true
127+ },
128+ " t-head" : {},
129+ " t-body" : {},
130+ td: {},
131+ th: {}
132+ }
133+ );
134+
116135 if (this .theme == " dark" ) {
117- this .classes [' table' ][' table-dark' ] = true ;
136+ this .computedClasses [' table' ][' table-dark' ] = true ;
118137 }
119138
120139 let debounce = require (' lodash.debounce' );
@@ -126,7 +145,7 @@ export default {
126145 this .sortOrders [column .name ] = - 1 ;
127146 });
128147 },
129- mixins: [UrlFilters],
148+ mixins: [UrlFilters, MergeClasses ],
130149 watch: {
131150 url: {
132151 handler : function (newUrl ) {
@@ -173,6 +192,7 @@ export default {
173192 filters: this .filters ,
174193 length: this .perPage [0 ],
175194 },
195+ computedClasses: {},
176196 };
177197 },
178198 methods: {
@@ -240,6 +260,11 @@ export default {
240260 this .getData ();
241261 }
242262 },
263+ bodyCellClasses (column ) {
264+ return this .mergeClasses (
265+ typeof column .columnClasses === " object" && column .columnClasses [" !override" ] ? {} : this .computedClasses .td ,
266+ column .columnClasses || {}, (column .columnClasses || {}).td || {});
267+ }
243268 },
244269 components: {
245270 ' laravel-vue-table' : VueTable,
@@ -339,32 +364,19 @@ export default {
339364 },
340365 classes: {
341366 type: Object ,
342- default : () => ({
343- " table-container" : {
344- " table-responsive" : true ,
345- },
346- " table" : {
347- " table" : true ,
348- " table-striped" : true ,
349- " border" : true ,
350- },
351- " t-head" : {},
352- " t-body" : {},
353- " td" : {},
354- " th" : {},
355- }),
367+ default : () => ({}),
356368 },
357369 headers: {
358370 type: Object ,
359371 default : () => ({})
360372 },
361373 translate: {
362374 type: Object ,
363- default : () => ( {
375+ default : () => Object . assign ({}, {
364376 nextButton: ' Next' ,
365377 previousButton: ' Previous' ,
366378 placeholderSearch: ' Search Table' ,
367- })
379+ }, ( window . LaravelVueDatatable || {}). translate || {} )
368380 }
369381 },
370382}
0 commit comments