|
3 | 3 | <hot-table
|
4 | 4 | :colHeaders="columnHeaders"
|
5 | 5 | :columns="columnFields"
|
6 |
| - :data="rows.records" |
| 6 | + :data="dataset.props.rows" |
7 | 7 | :columnSorting="true"
|
8 | 8 | :fixedColumnsLeft="3"
|
9 | 9 | :autoWrapCol="true"
|
|
30 | 30 | >
|
31 | 31 | </hot-table>
|
32 | 32 | </client-only>
|
33 |
| - <RowFieldSideBar :row="rows.records[currentRowIndex]" :field="currentRowField" v-model="sidebarVisible" /> |
| 33 | + <RowFieldSideBar :row="dataset.props.rows[currentRowIndex]" :field="currentRowField" v-model="sidebarVisible" /> |
34 | 34 |
|
35 | 35 | </template>
|
36 | 36 |
|
|
47 | 47 | const sidebarVisible = ref(false);
|
48 | 48 |
|
49 | 49 | const props = defineProps({
|
50 |
| - rows: Object, |
51 | 50 | dataset: Object,
|
52 | 51 | });
|
53 | 52 |
|
|
109 | 108 | const promises = [];
|
110 | 109 | for (let change of changes) {
|
111 | 110 | if (rowPos != change[0]) {
|
112 |
| - promises.push(saveRow(row)); |
| 111 | + saveRow(row); |
113 | 112 | rowPos = change[0];
|
114 | 113 |
|
115 | 114 | tableRow = hotInstance.getSourceDataAtRow(
|
116 | 115 | hotInstance.toPhysicalRow(rowPos)
|
117 | 116 | );
|
118 |
| - row = props.rows.find(tableRow.props.id); |
| 117 | + row = props.dataset.props.rows.find(r => r.id == tableRow.id); |
119 | 118 | }
|
120 |
| - let field = dropProps(change[1]); |
| 119 | + let field = change[1]; |
121 | 120 | if (field == 'name') {
|
122 | 121 | validateName(row, change[2]);
|
123 | 122 | } else if (field == 'quantity') {
|
|
126 | 125 | // do nothing
|
127 | 126 | } else {
|
128 | 127 | field = getFieldName(field);
|
129 |
| - row.props = versionFieldHistory(row.props, [field]); |
| 128 | + row = versionFieldHistory(row, [field]); |
130 | 129 | }
|
131 | 130 | }
|
132 |
| - promises.push(saveRow(row)); |
133 |
| - await Promise.all(promises); |
| 131 | + saveRow(row); |
| 132 | + console.log(JSON.stringify(props.dataset.props.rows)); |
| 133 | +
|
| 134 | + await props.dataset.save('rows'); |
134 | 135 | resumeHotRender();
|
135 | 136 | }
|
136 | 137 |
|
137 | 138 | const dropProps = (path) => path.replace(/^props\.(.*)/, '$1');
|
138 | 139 | const getFieldName = (path) => path.replace(/fields\.(.*)\.userValue/, '$1');
|
139 | 140 |
|
140 | 141 | const validateName = (row, was) => {
|
141 |
| - if (row.props.name == '') { |
| 142 | + if (row.name == '') { |
142 | 143 | notify.error('You must give the row a name.');
|
143 | 144 | return;
|
144 | 145 | }
|
145 | 146 | let error = false;
|
146 |
| - for (let other of props.rows.records) { |
147 |
| - if (other.props.name == row.props.name && other.props.id != row.props.id) { |
| 147 | + for (let other of props.dataset.props.rows) { |
| 148 | + if (other.name == row.name && other.id != row.id) { |
148 | 149 | error = true;
|
149 | 150 | }
|
150 | 151 | }
|
151 | 152 | if (error) {
|
152 |
| - notify.error('You already have another row named ' + row.props.name + '.'); |
153 |
| - row.props.name = was; |
| 153 | + notify.error('You already have another row named ' + row.name + '.'); |
| 154 | + row.name = was; |
154 | 155 | }
|
155 | 156 | }
|
156 | 157 |
|
157 | 158 | const saveRow = (row) => {
|
158 | 159 | if (row) {
|
159 |
| - row.props = recalcRow(row.props, props.dataset.props.rowSchema); |
160 |
| - return row.update(); |
| 160 | + row = recalcRow(row, props.dataset.props.rowSchema); |
| 161 | + //const index = props.dataset.props.rows.findIndex(r => r.id == row.id); |
| 162 | + //if (index > -1) { |
| 163 | + // props.dataset.props.rows[index] = row; |
| 164 | + //} |
161 | 165 | }
|
162 |
| - return Promise.resolve(); |
163 | 166 | }
|
164 | 167 |
|
165 | 168 | const rowControlsRenderer = (instance, td, rowIndex) => {
|
|
183 | 186 | instance.toPhysicalRow(rowIndex)
|
184 | 187 | );
|
185 | 188 | const row = util.findObject(tableRow.id, self.rows);
|
186 |
| - let newRow = await self.$store.dispatch('duplicateRow', row); |
187 |
| - self.$store.dispatch('addRowToServer', newRow); |
188 |
| - await props.rows.create(newRow); |
| 189 | + await duplicateRow(row); |
189 | 190 | });
|
190 | 191 | td.appendChild(dupButton);
|
191 | 192 | return td;
|
|
194 | 195 | const currentRowIndex = ref(null);
|
195 | 196 | const currentRowField = ref(null);
|
196 | 197 |
|
197 |
| - const openRowFieldSideBar = (row, name) => { |
198 |
| - currentRowIndex.value = props.rows.findIndex(row.props.id); |
199 |
| - currentRowField.value = name; |
| 198 | + const openRowFieldSideBar = (row, fieldName) => { |
| 199 | + console.log('row',row ) |
| 200 | + console.log('name',fieldName) |
| 201 | + currentRowIndex.value = props.dataset.props.rows.findIndex((r) => r.id === row.id); |
| 202 | + //currentRowIndex.value = row; |
| 203 | + currentRowField.value = fieldName; |
200 | 204 | sidebarVisible.value = true;
|
201 | 205 | }
|
202 | 206 |
|
203 | 207 | const columnFields = computed(() => {
|
204 | 208 | const columns = [
|
205 | 209 | {
|
206 |
| - data: 'props.id', |
| 210 | + data: 'id', |
207 | 211 | type: 'text',
|
208 | 212 | readOnly: true,
|
209 | 213 | renderer: rowControlsRenderer,
|
210 | 214 | },
|
211 |
| - { data: 'props.quantity', type: 'numeric' }, |
| 215 | + { data: 'quantity', type: 'numeric' }, |
212 | 216 | {
|
213 |
| - data: 'props.name', |
| 217 | + data: 'name', |
214 | 218 | type: 'text',
|
215 | 219 | columnSorting: {
|
216 | 220 | compareFunctionFactory(sortOrder) {
|
|
230 | 234 |
|
231 | 235 | for (let field of props.dataset.props.rowFieldOrder || []) {
|
232 | 236 | columns.push({
|
233 |
| - data: 'props.fields.' + field + '.userValue', |
| 237 | + data: 'fields.' + field + '.userValue', |
234 | 238 | type: 'text',
|
235 | 239 | renderer(instance, td, row) {
|
236 | 240 | //, , col, prop, value, cellProperties)
|
|
245 | 249 | let tableRow = instance.getSourceDataAtRow(rowIndex);
|
246 | 250 | if (
|
247 | 251 | tableRow
|
248 |
| - && tableRow.props |
249 |
| - && tableRow.props.fields |
250 |
| - && tableRow.props.fields[field] |
251 |
| - && tableRow.props.fields[field].hasError |
| 252 | + && tableRow |
| 253 | + && tableRow.fields |
| 254 | + && tableRow.fields[field] |
| 255 | + && tableRow.fields[field].hasError |
252 | 256 | ) {
|
253 | 257 | td.className = 'border-1 border-red-500';
|
254 | 258 | }
|
|
258 | 262 | image.style.height = '30px';
|
259 | 263 | image.style.maxWidth = '100px';
|
260 | 264 | image.style.verticalAlign = 'top';
|
261 |
| - if (tableRow && tableRow.props && tableRow.props.fields && tableRow.props.fields[field]) { |
262 |
| - image.src = tableRow.props.fields[field].calcValue; |
| 265 | + if (tableRow && tableRow.fields && tableRow.fields[field]) { |
| 266 | + image.src = tableRow.fields[field].calcValue; |
263 | 267 | }
|
264 | 268 | image.classList.add('border', 'rounded');
|
265 | 269 | div.appendChild(image);
|
|
273 | 277 | color.style.margin = 0;
|
274 | 278 | color.style.display = 'inline-block';
|
275 | 279 | color.style.verticalAlign = 'top';
|
276 |
| - if (tableRow && tableRow.props && tableRow.props.fields && tableRow.props.fields[field]) { |
| 280 | + if (tableRow && tableRow.fields && tableRow.fields[field]) { |
277 | 281 | color.style.backgroundColor =
|
278 |
| - '#' + tableRow.props.fields[field].calcValue; |
| 282 | + '#' + tableRow.fields[field].calcValue; |
279 | 283 | }
|
280 | 284 | color.classList.add('border-1', 'border-round');
|
281 | 285 | div.appendChild(color);
|
|
364 | 368 | const deleteRows = async (rows) => {
|
365 | 369 | let rowNames = [];
|
366 | 370 | for (let row of rows) {
|
367 |
| - rowNames.push(row.props.name); |
| 371 | + rowNames.push(row.name); |
368 | 372 | }
|
369 | 373 | if (
|
370 | 374 | confirm(
|
|
373 | 377 | '?'
|
374 | 378 | )
|
375 | 379 | ) {
|
376 |
| - exportRows(props.dataset, props.rows); |
| 380 | + exportRows(props.dataset); |
| 381 | + let ids = []; |
377 | 382 | for (let row of rows) {
|
378 |
| - row.delete({skipConfirm:true}); |
| 383 | + ids.push(row.id); |
379 | 384 | }
|
| 385 | + props.dataset.props.rows = props.dataset.props.rows.filter((r) => !ids.includes(r.id)) |
| 386 | + await props.dataset.save('rows'); |
380 | 387 | }
|
381 | 388 | }
|
382 | 389 |
|
|
0 commit comments