|
1 | 1 | <template> |
2 | | - <tr ref="vbt_row" v-bind:style='{"background": (rowHiglighted) ? highlightRowHoverColor : ""}' :class='{"vbt-row-selected":rowSelected}' v-on="rowsSelectable ? { click: ($event) => handleRowSelect($event) } : {}"> |
| 2 | + <tr ref="vbt_row" v-bind:style='{"background": (rowHiglighted) ? highlightRowHoverColor : ""}' :class='rowClasses' v-on="rowsSelectable ? { click: ($event) => handleRowSelect($event) } : {}"> |
3 | 3 | <CheckBox v-if="checkboxRows" |
4 | 4 | :rowsSelectable="rowsSelectable" |
5 | 5 | :row-selected="rowSelected" |
6 | 6 | @add-row="addRow" |
7 | 7 | @remove-row="removeRow"/> |
8 | 8 |
|
9 | | - <td v-for="(column, key, hindex) in columns" :key="hindex" :class="rowClasses(column)"> |
| 9 | + <td v-for="(column, key, hindex) in columns" :key="hindex" :class="cellClasses(column)"> |
10 | 10 | <slot :name="'vbt-'+getCellSlotName(column)"> |
11 | 11 |
|
12 | 12 | </slot> |
|
16 | 16 |
|
17 | 17 | <script> |
18 | 18 | import has from "lodash/has"; |
| 19 | + import get from "lodash/get"; |
19 | 20 | import differenceWith from "lodash/differenceWith"; |
20 | 21 | import isEqual from "lodash/isEqual"; |
21 | 22 | import includes from "lodash/includes"; |
|
33 | 34 | type: Object, |
34 | 35 | required:true |
35 | 36 | }, |
| 37 | + propRowClasses: { |
| 38 | + type: Object | String, |
| 39 | + required:false |
| 40 | + }, |
| 41 | + propCellClasses: { |
| 42 | + type: Object | String, |
| 43 | + required:false |
| 44 | + }, |
36 | 45 | columns: { |
37 | 46 | type: Array, |
38 | 47 | default: function() { |
|
113 | 122 | rowHover(state) { |
114 | 123 | this.rowHiglighted = state; |
115 | 124 | }, |
116 | | - rowClasses(column) { |
| 125 | + getValueFromRow(row, name) { |
| 126 | + return get(row, name); |
| 127 | + }, |
| 128 | + cellClasses(column) { |
117 | 129 | let classes = ""; |
118 | 130 |
|
119 | 131 | let default_text_alignment = "text-center"; |
|
128 | 140 | //decide text alignment class - ends here |
129 | 141 |
|
130 | 142 | // adding user defined classes to rows - starts here |
131 | | - if (has(column, "row_classes")) { |
132 | | - classes = classes + " " + column.row_classes; |
133 | | - } |
| 143 | + // if (has(column, "row_classes")) { |
| 144 | + // classes = classes + " " + column.row_classes; |
| 145 | + // } |
134 | 146 | // adding user defined classes to rows - ends here |
135 | 147 |
|
| 148 | +
|
| 149 | + if (typeof this.propCellClasses == "string") { |
| 150 | + return this.propCellClasses; |
| 151 | + } else if (typeof this.propCellClasses == "object") { |
| 152 | + Object.entries(this.propCellClasses).forEach(([key, value]) => { |
| 153 | + if (typeof value == "boolean" && value) { |
| 154 | + classes += (" " + key); |
| 155 | + } else if (typeof value == "function") { |
| 156 | + let truth = value(this.row,column,this.getValueFromRow(this.row,column.name)); |
| 157 | + if (typeof truth == "boolean" && truth) { |
| 158 | + classes += " "; |
| 159 | + classes += key; |
| 160 | + } |
| 161 | + } |
| 162 | + }); |
| 163 | + } |
| 164 | +
|
136 | 165 | return classes; |
137 | 166 | }, |
138 | 167 | getCellSlotName(column) { |
139 | 168 | if (has(column,"slot_name")) { |
140 | 169 | return column.slot_name; |
141 | 170 | } |
142 | 171 | return column.name.replace('.','_'); |
| 172 | + } |
| 173 | + }, |
| 174 | + computed: { |
| 175 | + rowClasses() { |
| 176 | + let classes = this.userRowClasses; |
| 177 | +
|
| 178 | + if (this.rowSelected) { |
| 179 | + classes += " "; |
| 180 | + classes += "vbt-row-selected"; |
| 181 | + } |
| 182 | +
|
| 183 | + return classes; |
| 184 | +
|
143 | 185 | }, |
| 186 | + userRowClasses() { |
| 187 | + let classes = ""; |
| 188 | + if (typeof this.propRowClasses == "string") { |
| 189 | + return this.propRowClasses; |
| 190 | + } else if (typeof this.propRowClasses == "object") { |
| 191 | + Object.entries(this.propRowClasses).forEach(([key, value]) => { |
| 192 | + if (typeof value == "boolean" && value) { |
| 193 | + classes += key; |
| 194 | + } else if (typeof value == "function") { |
| 195 | + let truth = value(this.row); |
| 196 | + if (typeof truth == "boolean" && truth) { |
| 197 | + classes += " "; |
| 198 | + classes += key; |
| 199 | + } |
| 200 | + } |
| 201 | + }); |
| 202 | + } |
| 203 | +
|
| 204 | + return classes; |
| 205 | + } |
144 | 206 | }, |
145 | 207 | watch: { |
146 | 208 | row: { |
|
0 commit comments