Fixes in value revert logic

pull/35/head
Ondřej Hruška 6 years ago
parent 2cadbdcd31
commit 9ec5a151cc
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 15
      app/Tables/Changeset.php
  2. 14
      resources/assets/js/components/RowsEditor.vue

@ -178,7 +178,7 @@ class Changeset
*/ */
public function transformRow($row, $decorate) public function transformRow($row, $decorate)
{ {
if ($row instanceof Row) $row = (object)$row->getAttributes(); if ($row instanceof Row) $row = (object)$row->getAttributes(); // row must be in the rowData() format
if ($decorate) { if ($decorate) {
$row->_remove = false; $row->_remove = false;
@ -220,7 +220,12 @@ class Changeset
if ($decorate) { if ($decorate) {
$row->_changed = array_keys($newVals); $row->_changed = array_keys($newVals);
$row->_orig = array_only((array)$row, $row->_changed); $row->_orig = array_diff((array)$row, []);
unset($row->_orig['_id']);
unset($row->_orig['_new']);
unset($row->_orig['_remove']);
unset($row->_orig['_changed']);
unset($row->_orig['_orig']);
} }
$row = (object)array_merge((array)$row, $newVals); $row = (object)array_merge((array)$row, $newVals);
@ -231,6 +236,7 @@ class Changeset
if (!$decorate) { if (!$decorate) {
foreach ($this->removedColumns as $colId) { foreach ($this->removedColumns as $colId) {
unset($row->$colId); unset($row->$colId);
unset($row->_orig[$colId]);
} }
} }
@ -456,9 +462,10 @@ class Changeset
$col = $cols[$colId]; $col = $cols[$colId];
$value = $col->cast($value); $value = $col->cast($value);
$origValue = $col->cast(isset($origRow->$colId) ? $origRow->$colId : null); $origValue = isset($origRow->$colId) ? $origRow->$colId : null;
$origValueCast = $col->cast($origValue);
if ($value !== $origValue) { if ($value !== $origValueCast && !($origValue===null&&$value==="")) { // fix for null in numeric cols being forcibly populated and sticking as change
$updateObj[$colId] = $value; $updateObj[$colId] = $value;
} }
} }

@ -290,9 +290,17 @@ Rows are identified by row._id, columns by col.id
let wasDirty = this.isRowChanged(row, true) let wasDirty = this.isRowChanged(row, true)
let changes = [] let changes = []
_.each(row._orig, (v, k) => { _.each(this.columns, (col) => {
if (row[k] != v) { let val = row[col.id];
changes.push(k) let orig = row._orig[col.id];
if (_.isUndefined(orig)) {
// null in DB
if (val !== '' && val !== 0) {
changes.push(col.id)
console.log('is dirty', JSON.stringify(val))
}
} else if (val != orig) {
changes.push(col.id)
} }
}) })

Loading…
Cancel
Save