@integec/grid-tools
Version:
Integ Grid Tools
198 lines (170 loc) • 7.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.applyEdits = exports.apply = exports.isDirty = exports.undo = exports.updateRow = exports.addRow = exports.removeRow = exports.generateInitialEditInfo = undefined;
var _map = require('ramda/src/map');
var _map2 = _interopRequireDefault(_map);
var _compose = require('ramda/src/compose');
var _compose2 = _interopRequireDefault(_compose);
var _filter = require('ramda/src/filter');
var _filter2 = _interopRequireDefault(_filter);
var _isNil = require('ramda/src/isNil');
var _isNil2 = _interopRequireDefault(_isNil);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
var generateInitialEditInfo = exports.generateInitialEditInfo = function generateInitialEditInfo() {
return {
updated: [],
added: [],
removed: [],
// originalRow => editedRow
updatedMap: new Map(),
// editedRow => orignalRow
dirtyMap: new Map(),
history: []
};
};
var immutableOp = function immutableOp(op) {
return function (map) {
return op(new Map(map));
};
};
var immutableSet = function immutableSet(key, value) {
return immutableOp(function (m) {
m.set(key, value);
return m;
});
};
var removeRow = function removeRow(_ref) {
var _ref$editInfo = _ref.editInfo,
editInfo = _ref$editInfo === undefined ? generateInitialEditInfo() : _ref$editInfo,
mutation = _ref.mutation;
var added = editInfo.added,
updated = editInfo.updated,
dirtyMap = editInfo.dirtyMap,
updatedMap = editInfo.updatedMap,
removed = editInfo.removed,
history = editInfo.history,
rest = _objectWithoutProperties(editInfo, ['added', 'updated', 'dirtyMap', 'updatedMap', 'removed', 'history']);
var originalRow = dirtyMap.get(currentRow);
var isUpdated = dirtyMap.has(currentRow);
var isAdded = added.includes(currentRow);
return _extends({
removed: isAdded ? removed : [].concat(_toConsumableArray(removed), [isUpdated ? originalRow : currentRow]),
added: isAdded ? added.filter(function (row) {
return row !== currentRow;
}) : added,
updated: isUpdated ? updated.filter(function (row) {
return row !== currentRow;
}) : updated,
dirtyMap: isUpdated ? immutableOp(function (m) {
m.delete(currentRow);
return m;
})(dirtyMap) : dirtyMap,
updatedMap: isUpdated ? immutableOp(function (m) {
m.delete(originalRow);
return m;
})(updatedMap) : updatedMap,
history: [].concat(_toConsumableArray(history), [editInfo])
}, rest);
};
exports.removeRow = removeRow;
var addRow = exports.addRow = function addRow(_ref2) {
var _ref2$editInfo = _ref2.editInfo,
editInfo = _ref2$editInfo === undefined ? generateInitialEditInfo() : _ref2$editInfo,
editedRow = _ref2.editedRow;
return updateRow({ editInfo: editInfo, editedRow: editedRow });
};
var updateRow = function updateRow(_ref3) {
var _ref3$editInfo = _ref3.editInfo,
editInfo = _ref3$editInfo === undefined ? generateInitialEditInfo() : _ref3$editInfo,
currentRow = _ref3.currentRow,
editedRow = _ref3.editedRow;
if (currentRow === undefined && !(0, _isNil2.default)(editedRow)) {
var added = editInfo.added,
history = editInfo.history,
rest = _objectWithoutProperties(editInfo, ['added', 'history']);
return _extends({
added: [].concat(_toConsumableArray(added), [editedRow]),
// dirtyMap: immutableSet(editedRow, undefined)(dirtyMap),
history: [editInfo].concat(_toConsumableArray(history))
}, rest);
} else if (currentRow !== editedRow) {
var _added = editInfo.added,
dirtyMap = editInfo.dirtyMap,
updatedMap = editInfo.updatedMap,
updated = editInfo.updated,
_history = editInfo.history,
_rest = _objectWithoutProperties(editInfo, ['added', 'dirtyMap', 'updatedMap', 'updated', 'history']);
if (_added.includes(currentRow)) {
return _extends({
added: [].concat(_toConsumableArray(_added.filter(function (row) {
return row !== currentRow;
})), [editedRow]),
dirtyMap: dirtyMap,
// dirtyMap: immutableOp(m => {
// // remove transitive row
// m.delete(currentRow)
// // add new edited row
// m.set(editedRow, undefined)
// return m
// })(dirtyMap),
updatedMap: updatedMap,
updated: updated,
history: [editInfo].concat(_toConsumableArray(_history))
}, _rest);
// editing data that has been editted before
} else if (dirtyMap.has(currentRow)) {
var originalRow = dirtyMap.get(currentRow);
return _extends({
added: _added,
dirtyMap: immutableOp(function (m) {
// remove transitive row
m.delete(currentRow);
// add new edited row
m.set(editedRow, originalRow);
return m;
})(dirtyMap),
updatedMap: immutableSet(originalRow, editedRow)(updatedMap),
updated: [].concat(_toConsumableArray((0, _filter2.default)(function (row) {
return row !== currentRow;
}, updated)), [editedRow]),
history: [editInfo].concat(_toConsumableArray(_history))
}, _rest);
} else {
return _extends({
added: _added,
dirtyMap: immutableSet(editedRow, currentRow)(dirtyMap),
updatedMap: immutableSet(currentRow, editedRow)(updatedMap),
updated: [].concat(_toConsumableArray(updated), [editedRow]),
history: [editInfo].concat(_toConsumableArray(_history))
}, _rest);
}
}
return editInfo;
};
exports.updateRow = updateRow;
var undo = exports.undo = function undo() {
var editInfo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : generateInitialEditInfo();
return editInfo.history[0] || generateInitialEditInfo();
};
var isDirty = exports.isDirty = function isDirty() {
var editInfo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : generateInitialEditInfo();
return editInfo.added.length > 0 || editInfo.removed.length > 0 || editInfo.updated.length > 0;
};
var apply = exports.apply = function apply(editInfo) {
return (0, _compose2.default)((0, _filter2.default)(function (row) {
return !editInfo.removed.includes(row);
}), (0, _map2.default)(function (row) {
return editInfo.updatedMap.get(row) || row;
}));
};
var applyEdits = exports.applyEdits = function applyEdits(_ref4) {
var data = _ref4.data,
editInfo = _ref4.editInfo;
return isDirty(editInfo) ? [].concat(_toConsumableArray(apply(editInfo)(data)), _toConsumableArray(editInfo.added)) : data;
};
//# sourceMappingURL=batchEditEngine.js.map