@syncfusion/ej2-gantt
Version:
Essential JS 2 Gantt Component
817 lines • 58.4 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';
var UndoRedo = /** @class */ (function () {
function UndoRedo(parent) {
this.isUndoRedoPerformed = false;
this.changedRecords = [];
this.getRedoCollection = [];
this.getUndoCollection = [];
this.redoEnabled = false;
this.previousSortedColumns = [];
this.searchString = '';
this.isFromUndoRedo = false;
this.undoActionDetails = {};
this.canUpdateIndex = true;
this.sortedColumnsLength = 0;
this.isZoomingUndoRedoProgress = false;
this.isPreventRowDeselectOnUndoRedo = false;
// Initialize a collection to store only unique top-level deleted records
this.uniqueDeletedRecords = [];
this.parent = parent;
}
// Check if a record is a descendant (child or sub-child) of a potential parent record. This avoids re-adding nested tasks if the parent is already handled.
UndoRedo.prototype.isInHierarchyOf = function (record, potentialParent) {
var parent = record.parentItem;
while (parent) {
if (parent.taskId === (potentialParent.ganttProperties.taskId).toString()) {
return true;
}
parent = parent.parentItem;
}
return false;
};
// Determines if a record is already covered by any of the records in uniqueRecords. This includes direct children and deep descendants.
UndoRedo.prototype.isPartOfExistingHierarchy = function (record) {
/* eslint-disable-next-line */
return this.uniqueDeletedRecords.some(function (uniRecord) {
// Case 1: Record is a descendant of a parent already added
if (this.isInHierarchyOf(record.data, uniRecord.data)) {
return true;
}
// Case 2: Record is directly present as a child of a parent already added
if (uniRecord.data && uniRecord.data.childRecords && uniRecord.data.childRecords.some(function (subtask) {
return subtask.ganttProperties.taskId === record.data.ganttProperties.taskId;
})) {
return true;
}
return false;
}.bind(this));
};
/**
*Initiates an undo action to revert the most recent change performed.
*
* @returns {void}
* @public
*/
UndoRedo.prototype.undoAction = function () {
var _this = this;
if (this.getUndoCollection.length > 0) {
var updateAction = this.getUndoCollection[this.getUndoCollection.length - 1];
var previousActions = {};
if (updateAction['action'] === 'ZoomIn' || updateAction['action'] === 'ZoomOut' || updateAction['action'] === 'ZoomToFit') {
previousActions['action'] = updateAction['action'];
previousActions['previousZoomingLevel'] = extend({}, {}, this.parent.currentZoomingLevel, true);
}
else if (updateAction['action'] === 'NextTimeSpan' || updateAction['action'] === 'PreviousTimeSpan') {
previousActions['action'] = updateAction['action'];
previousActions['previousTimelineStartDate'] = extend([], [this.parent.timelineModule.timelineStartDate], [], true)[0];
previousActions['previousTimelineEndDate'] = extend([], [this.parent.timelineModule.timelineEndDate], [], true)[0];
}
else if (updateAction['action'] === 'Sorting') {
previousActions['action'] = 'Sorting';
previousActions['sortColumns'] = this.previousSortedColumns;
}
else if (updateAction['action'] === 'Filtering') {
previousActions['action'] = 'Filtering';
previousActions['filteredColumns'] = updateAction['filteredColumns'];
}
else if (updateAction['action'] === 'ColumnReorder') {
previousActions['action'] = updateAction['action'];
previousActions['toColumn'] = updateAction['fromColumn'];
previousActions['fromColumn'] = updateAction['toColumn'];
previousActions['fromIndex'] = updateAction['toIndex'];
previousActions['toIndex'] = updateAction['fromIndex'];
}
else if (updateAction['action'] === 'Search') {
previousActions['action'] = updateAction['action'];
previousActions['searchString'] = this.searchString;
}
else if (updateAction['action'] === 'ColumnState') {
previousActions['action'] = updateAction['action'];
previousActions['showhideColumns'] = updateAction['showhideColumns'];
}
else if (updateAction['action'] === 'ColumnResize') {
previousActions['action'] = updateAction['action'];
previousActions['resizedColumn'] = __assign({}, this.parent.treeGrid.columns[updateAction['resizedColumn'].index]);
}
else if (updateAction['action'] === 'RowDragAndDrop' || updateAction['action'] === 'TaskbarDragAndDrop') {
var rowItems = [];
for (var i = 0; i < updateAction['beforeDrop'].length; i++) {
if (this.parent.viewType === 'ProjectView') {
rowItems.push(this.parent.getRecordByID(updateAction['beforeDrop'][i]['data'].ganttProperties.taskId));
}
else {
rowItems.push(this.parent.flatData[this.getResourceViewRowIndex(updateAction['beforeDrop'][i]['data'])]);
}
}
previousActions['action'] = updateAction['action'];
previousActions['beforeDrop'] = [];
var previousDetails = {};
var dropRecord = extend([], [], [this.parent.getRecordByID(updateAction['afterDrop'].dropRecord.ganttProperties.taskId)], true)[0];
previousDetails['data'] = [];
for (var i = 0; i < updateAction['afterDrop'].data.length; i++) {
if (this.parent.viewType === 'ProjectView') {
previousDetails['data'].push(extend([], [], [this.parent.getRecordByID(updateAction['afterDrop'].data[i].ganttProperties.taskId)], true)[0]);
}
else {
previousDetails['data'].push(extend([], [], [this.parent.flatData[this.getResourceViewRowIndex(updateAction['afterDrop'].data[i])]], true)[0]);
}
}
previousDetails['dropRecord'] = extend([], [], [dropRecord], true)[0];
previousDetails['dropPosition'] = updateAction['afterDrop'].dropPosition;
previousActions['afterDrop'] = previousDetails;
this['findPosition'](rowItems, previousActions, 'beforeDrop');
}
else if (updateAction['action'] === 'Indent' || updateAction['action'] === 'Outdent') {
previousActions['selectedRowIndexes'] = updateAction['selectedRowIndexes'];
previousActions['droppedRecord'] = extend([], [], [this.parent.flatData[this.parent.ids.indexOf(updateAction['droppedRecord'].ganttProperties.taskId.toString())]], true)[0];
previousActions['modifiedRecord'] = [];
this.findPosition(extend([], [], [this.parent.flatData[this.parent.ids.indexOf(updateAction['modifiedRecord'][0].data.ganttProperties.taskId.toString())]], true), previousActions, 'modifiedRecord');
previousActions['action'] = updateAction['action'];
}
else if (updateAction['action'] === 'Delete') {
previousActions['action'] = 'Delete';
previousActions['deleteRecords'] = [];
for (var i = 0; i < updateAction['deletedRecordsDetails'].length; i++) {
var currentDeletedItem = updateAction['deletedRecordsDetails'][i];
// Check if the current record is already part of an existing hierarchy in the uniqueRecords array
var isRecordAlreadyPresent = this.isPartOfExistingHierarchy(currentDeletedItem);
// Add the record to the uniqueRecords array only if it hasn't already been added or doesn't belong to the same hierarchy
if (!isRecordAlreadyPresent) {
this.uniqueDeletedRecords.push(currentDeletedItem);
}
}
// Update the deletedRecordsDetails with the cleaned-up unique records list
updateAction['deletedRecordsDetails'] = this.uniqueDeletedRecords;
// Map the records data and store it in previousActions for future reference
previousActions['deleteRecords'] = this.uniqueDeletedRecords.map(function (record) { return record.data; });
// Clear the uniqueRecords array for future iterations
this.uniqueDeletedRecords = [];
}
else if (updateAction['action'] === 'Add') {
previousActions['action'] = 'Add';
previousActions['deletedRecordsDetails'] = [];
var rowItems = updateAction['addedRecords'];
this.findPosition(rowItems, previousActions, 'deletedRecordsDetails');
}
else {
previousActions['action'] = updateAction['action'];
previousActions['modifiedRecords'] = [];
for (var i = 0; i < updateAction['modifiedRecords'].length; i++) {
var index = void 0;
if (this.parent.viewType === 'ProjectView') {
index = this.findTaskRowIndex(updateAction['modifiedRecords'][i].ganttProperties.taskId.toString());
}
else {
index = this.parent.undoRedoModule['getResourceViewRowIndex'](updateAction['modifiedRecords'][i]);
}
previousActions['modifiedRecords'].push(extend([], [this.parent.flatData[index]], [], true)[0]);
}
}
this.getRedoCollection.push(previousActions);
this.isUndoRedoPerformed = true;
this.changedRecords = [];
this.currentAction = updateAction;
if (updateAction['action'] === 'ZoomIn' || updateAction['action'] === 'ZoomOut' || updateAction['action'] === 'ZoomToFit') {
this.parent.timelineSettings.timelineViewMode = updateAction['previousZoomingLevel'].timelineViewMode;
this.parent.timelineSettings.timelineUnitSize = updateAction['previousZoomingLevel'].timelineUnitSize;
this.parent.timelineSettings.updateTimescaleView = updateAction['previousZoomingLevel'].updateTimescaleView;
this.parent.timelineSettings.topTier.unit = updateAction['previousZoomingLevel'].topTier.unit;
this.parent.timelineSettings.topTier.count = updateAction['previousZoomingLevel'].topTier.count;
this.parent.timelineSettings.topTier.format = updateAction['previousZoomingLevel'].topTier.format;
this.parent.timelineSettings.bottomTier.unit = updateAction['previousZoomingLevel'].bottomTier.unit;
this.parent.timelineSettings.bottomTier.count = updateAction['previousZoomingLevel'].bottomTier.count;
this.parent.timelineSettings.bottomTier.format = updateAction['previousZoomingLevel'].bottomTier.format;
this.parent.timelineSettings.weekStartDay = updateAction['previousZoomingLevel'].weekStartDay;
this.parent.timelineSettings.weekendBackground = updateAction['previousZoomingLevel'].weekendBackground;
this.isZoomingUndoRedoProgress = true;
if (updateAction['action'] === 'ZoomToFit') {
this.parent.timelineModule.refreshTimeline();
}
this.isUndoRedoPerformed = false;
}
else if (updateAction['action'] === 'NextTimeSpan' || updateAction['action'] === 'PreviousTimeSpan') {
this.parent.updateProjectDates(updateAction['previousTimelineStartDate'], updateAction['previousTimelineEndDate'], false);
this.isUndoRedoPerformed = false;
}
else if (updateAction['action'] === 'Sorting') {
this.isFromUndoRedo = true;
this.sortedColumnsLength = 0;
if (updateAction['sortColumns'].length > 0) {
for (var i = 0; i < updateAction['sortColumns'].length; i++) {
this.parent.treeGrid.sortByColumn(updateAction['sortColumns'][i]['field'], updateAction['sortColumns'][i]['direction'], i > 0 ? true : false);
}
}
else {
this.parent.clearSorting();
}
}
else if (updateAction['action'] === 'Filtering') {
this.isFromUndoRedo = true;
for (var i = this.getUndoCollection.length - 1; i >= 0; i--) {
if (this.getUndoCollection[i]['filteredColumns']) {
var columnsArray = [];
for (var j = 0; j < this.getUndoCollection[i]['filteredColumns'].length; j++) {
columnsArray.push(this.getUndoCollection[i]['filteredColumns'][j].field);
}
this.parent.clearFiltering(columnsArray);
}
}
}
else if (updateAction['action'] === 'ColumnReorder') {
this.isFromUndoRedo = true;
var fromColumn = this.parent.treeGrid.columns[updateAction['fromIndex']]['field'];
var toColumn = this.parent.treeGrid.columns[updateAction['toIndex']]['field'];
this.parent.reorderColumns(fromColumn, toColumn);
}
else if (updateAction['action'] === 'Search') {
this.isFromUndoRedo = true;
this.parent.search(updateAction['searchString']);
}
else if (updateAction['action'] === 'ColumnState') {
this.isFromUndoRedo = true;
for (var i = 0; i < updateAction['showhideColumns'].length; i++) {
if (updateAction['showhideColumns'][i].visible) {
this.parent.hideColumn(updateAction['showhideColumns'][i].field, 'field');
}
else {
this.parent.showColumn(updateAction['showhideColumns'][i].field, 'field');
}
}
this.isUndoRedoPerformed = false;
}
else if (updateAction['action'] === 'ColumnResize') {
this.parent.treeGrid.columns[updateAction['resizedColumn'].index]['width'] = updateAction['resizedColumn'].width;
this.parent.treeGrid.refreshColumns();
}
else if (updateAction['action'] === 'RowDragAndDrop' || updateAction['action'] === 'TaskbarDragAndDrop') {
for (var i = 0; i < updateAction['beforeDrop'].length; i++) {
var fromIndex = this.findTaskRowIndex(updateAction['beforeDrop'][i].data.ganttProperties.taskId.toString());
var toIndex = this.findTaskRowIndex(updateAction['beforeDrop'][i]['id'].toString());
this.parent.reorderRows([fromIndex], toIndex, updateAction['beforeDrop'][i].position);
}
}
else if (updateAction['action'] === 'Indent' || updateAction['action'] === 'Outdent') {
this.parent.selectRow(this.findTaskRowIndex(updateAction['modifiedRecord'][0].data.ganttProperties.taskId.toString()));
if (updateAction['action'] === 'Indent') {
this.parent.outdent();
}
else {
this.parent.indent();
}
}
else if (updateAction['action'] === 'Delete') {
for (var i = 0; i < updateAction['deletedRecordsDetails'].length; i++) {
var rowIndex = this.findTaskRowIndex(updateAction['deletedRecordsDetails'][i].id.toString());
var position = void 0;
if (updateAction['deletedRecordsDetails'][i].position === 'above') {
position = 'Above';
}
if (updateAction['deletedRecordsDetails'][i].position === 'below') {
position = 'Below';
}
if (updateAction['deletedRecordsDetails'][i].position === 'child') {
position = 'Child';
}
if (isNullOrUndefined(position)) {
var deletePosition = updateAction['deletedRecordsDetails'][i].position;
position = deletePosition.charAt(0).toUpperCase() + deletePosition.slice(1);
}
if (updateAction['deletedRecordsDetails'][i].data.ganttProperties.predecessor &&
updateAction['deletedRecordsDetails'][i].data.ganttProperties.predecessor.length > 0) {
updateAction['deletedRecordsDetails'][i].data.ganttProperties.predecessor.forEach(function (predecessor) {
var restoredToRecord = _this.parent.connectorLineModule.getRecordByID(predecessor.to);
if (restoredToRecord) {
restoredToRecord.ganttProperties.predecessor.push(predecessor);
var predecessorStringValue = _this.parent.predecessorModule.getPredecessorStringValue(restoredToRecord);
restoredToRecord.ganttProperties.predecessorsName = predecessorStringValue;
}
});
}
this.parent.addRecord(updateAction['deletedRecordsDetails'][i].data, position, rowIndex);
}
}
else if (updateAction['action'] === 'Add') {
var isShowDeleteConfirmDialog = extend([], [this.parent.editSettings.showDeleteConfirmDialog], [], true)[0];
this.parent.editSettings.showDeleteConfirmDialog = false;
var deleteRec = updateAction['addedRecords'];
if (this.parent.viewType === 'ResourceView' && updateAction['addedRecords'].length === 1 && updateAction['addedRecords'][0].parentItem) {
var parentRec = this.parent.getTaskByUniqueID(updateAction['addedRecords'][0].parentItem.uniqueID);
if (parentRec.childRecords.length === 1 && parentRec.ganttProperties.taskName === 'Unassigned Task') {
deleteRec = parentRec;
}
}
this.parent.deleteRecord(deleteRec);
if (this.parent.enableVirtualization && this.parent.treeGrid['virtualScrollModule'] &&
!isNullOrUndefined(this.parent.treeGrid['virtualScrollModule'].ganttEndIndex)) {
this.parent.treeGrid['virtualScrollModule'].ganttEndIndex = this.parent.flatData.length;
}
this.parent.editSettings.showDeleteConfirmDialog = isShowDeleteConfirmDialog;
}
else {
this.parent.updateRecordByID(this.getUndoCollection[this.getUndoCollection.length - 1]['modifiedRecords'][0]);
if (updateAction['connectedRecords'] && this.parent.viewType === 'ProjectView') {
for (var i = 0; i < updateAction['connectedRecords'].length; i++) {
this.parent.updateRecordByID(updateAction['connectedRecords'][i]);
}
}
this.isUndoRedoPerformed = false;
}
var args = {};
args = extend([], [], [this.getUndoCollection[this.getUndoCollection.length - 1]], true)[0];
args['requestType'] = 'afterUndoAction';
this.parent.trigger('onAfterUndo', args);
if ((updateAction['action'] === 'RowDragAndDrop' || updateAction['action'] === 'TaskbarDragAndDrop') ||
(updateAction['action'] === 'Indent' || updateAction['action'] === 'Outdent')) {
this.undoActionDetails = this.getUndoCollection[this.getUndoCollection.length - 1];
}
if (this.getRedoCollection.length > 0) {
if (this.parent.toolbarModule) {
this.parent.toolbarModule.enableItems([this.parent.controlId + '_redo'], true);
}
this.redoEnabled = true;
}
this.getUndoCollection.splice(this.getUndoCollection.length - 1, 1);
if (this.getUndoCollection.length === 0 && this.parent.toolbarModule) {
this.parent.toolbarModule.enableItems([this.parent.controlId + '_undo'], false);
}
}
else {
this.getUndoCollection.splice(this.getUndoCollection.length - 1, 1);
if (this.getUndoCollection.length === 0 && this.parent.toolbarModule) {
this.parent.toolbarModule.enableItems([this.parent.controlId + '_undo'], false);
}
}
};
/**
*Initiates an redo action to reapply the most recent undone change performed.
*
* @returns {void}
* @public
*/
UndoRedo.prototype.redoAction = function () {
if (this.getRedoCollection.length > 0) {
var updateAction = this.getRedoCollection[this.getRedoCollection.length - 1];
var previousActions = {};
if (updateAction['action'] === 'ZoomIn' || updateAction['action'] === 'ZoomOut' || updateAction['action'] === 'ZoomToFit') {
previousActions['action'] = updateAction['action'];
previousActions['previousZoomingLevel'] = extend({}, {}, this.parent.currentZoomingLevel, true);
previousActions['previousZoomingLevel'].bottomTier.format = this.parent.timelineModule.customTimelineSettings.bottomTier.format;
previousActions['previousZoomingLevel'].topTier.format = this.parent.timelineModule.customTimelineSettings.topTier.format;
}
else if (updateAction['action'] === 'NextTimeSpan' || updateAction['action'] === 'PreviousTimeSpan') {
previousActions['action'] = updateAction['action'];
previousActions['previousTimelineStartDate'] = extend([], [this.parent.timelineModule.timelineStartDate], [], true)[0];
previousActions['previousTimelineEndDate'] = extend([], [this.parent.timelineModule.timelineEndDate], [], true)[0];
}
else if (updateAction['action'] === 'Sorting') {
previousActions['action'] = 'Sorting';
previousActions['sortColumns'] = extend([], this.parent.sortSettings.columns, [], true);
}
else if (updateAction['action'] === 'Filtering') {
previousActions['action'] = 'Filtering';
previousActions['filteredColumns'] = updateAction['filteredColumns'];
}
else if (updateAction['action'] === 'ColumnReorder') {
previousActions['action'] = updateAction['action'];
previousActions['toColumn'] = updateAction['fromColumn'];
previousActions['fromColumn'] = updateAction['toColumn'];
previousActions['fromIndex'] = updateAction['toIndex'];
previousActions['toIndex'] = updateAction['fromIndex'];
}
else if (updateAction['action'] === 'Search') {
previousActions['action'] = updateAction['action'];
previousActions['searchString'] = extend([], [this.parent.searchSettings.key], [], true)[0];
}
else if (updateAction['action'] === 'ColumnState') {
previousActions['action'] = updateAction['action'];
previousActions['showhideColumns'] = updateAction['showhideColumns'];
}
else if (updateAction['action'] === 'ColumnResize') {
previousActions['action'] = updateAction['action'];
previousActions['resizedColumn'] = __assign({}, this.parent.treeGrid.columns[updateAction['resizedColumn'].index]);
}
else if (updateAction['action'] === 'RowDragAndDrop' || updateAction['action'] === 'TaskbarDragAndDrop') {
var rowItems = [];
for (var i = 0; i < updateAction['beforeDrop'].length; i++) {
if (this.parent.viewType === 'ProjectView') {
rowItems.push(this.parent.getRecordByID(updateAction['beforeDrop'][i]['data'].ganttProperties.taskId));
}
else {
rowItems.push(this.parent.flatData[this.getResourceViewRowIndex(updateAction['beforeDrop'][i]['data'])]);
}
}
previousActions['action'] = updateAction['action'];
previousActions['beforeDrop'] = [];
var previousDetails = {};
var dropRecord = void 0;
if (updateAction['afterDrop'].dropRecord) {
dropRecord = extend([], [], [this.parent.getRecordByID(updateAction['afterDrop'].dropRecord.ganttProperties.taskId)], true)[0];
}
previousDetails['data'] = [];
for (var i = 0; i < updateAction['afterDrop'].data.length; i++) {
if (this.parent.viewType === 'ProjectView') {
previousDetails['data'].push(extend([], [], [this.parent.getRecordByID(updateAction['afterDrop'].data[i].ganttProperties.taskId)], true)[0]);
}
else {
if (updateAction['afterDrop'].data[i] !== undefined) {
previousDetails['data'].push(extend([], [], [this.parent.flatData[this.getResourceViewRowIndex(updateAction['afterDrop'].data[i])]], true)[0]);
}
}
}
previousDetails['dropRecord'] = extend([], [], [dropRecord], true)[0];
previousDetails['dropPosition'] = updateAction['afterDrop'].dropPosition;
previousActions['afterDrop'] = previousDetails;
this['findPosition'](rowItems, previousActions, 'beforeDrop');
}
else if (updateAction['action'] === 'Indent' || updateAction['action'] === 'Outdent') {
previousActions['selectedRowIndexes'] = updateAction['selectedRowIndexes'];
previousActions['droppedRecord'] = extend([], [], [this.parent.flatData[this.parent.ids.indexOf(updateAction['droppedRecord'].ganttProperties.taskId.toString())]], true)[0];
previousActions['modifiedRecord'] = [];
this.findPosition(extend([], [], [this.parent.flatData[this.parent.ids.indexOf(updateAction['modifiedRecord'][0].data.ganttProperties.taskId.toString())]], true), previousActions, 'modifiedRecord');
previousActions['action'] = updateAction['action'];
}
else if (updateAction['action'] === 'Delete') {
previousActions['action'] = 'Delete';
previousActions['deletedRecordsDetails'] = [];
this['findPosition'](extend([], [], updateAction['deleteRecords'], true), previousActions, 'deletedRecordsDetails');
}
else if (updateAction['action'] === 'Add') {
previousActions['action'] = 'Add';
previousActions['addedRecords'] = [updateAction['deletedRecordsDetails'][0].data];
}
else {
previousActions['action'] = updateAction['action'];
previousActions['modifiedRecords'] = [];
for (var i = 0; i < updateAction['modifiedRecords'].length; i++) {
var index = this.findTaskRowIndex(updateAction['modifiedRecords'][i].ganttProperties.taskId.toString());
previousActions['modifiedRecords'].push(extend([], [this.parent.flatData[index]], [], true)[0]);
}
}
this.getUndoCollection.push(previousActions);
this.isUndoRedoPerformed = true;
this.currentAction = updateAction;
if (updateAction['action'] === 'ZoomIn' || updateAction['action'] === 'ZoomOut' || updateAction['action'] === 'ZoomToFit') {
if (updateAction['action'] === 'ZoomToFit') {
this.parent.fitToProject();
}
else {
this.parent.timelineSettings.timelineViewMode = updateAction['previousZoomingLevel'].timelineViewMode;
this.parent.timelineSettings.timelineUnitSize = updateAction['previousZoomingLevel'].timelineUnitSize;
this.parent.timelineSettings.updateTimescaleView = updateAction['previousZoomingLevel'].updateTimescaleView;
this.parent.timelineSettings.topTier.unit = updateAction['previousZoomingLevel'].topTier.unit;
this.parent.timelineSettings.topTier.count = updateAction['previousZoomingLevel'].topTier.count;
this.parent.timelineSettings.topTier.format = updateAction['previousZoomingLevel'].topTier.format;
this.parent.timelineSettings.bottomTier.unit = updateAction['previousZoomingLevel'].bottomTier.unit;
this.parent.timelineSettings.bottomTier.count = updateAction['previousZoomingLevel'].bottomTier.count;
this.parent.timelineSettings.bottomTier.format = updateAction['previousZoomingLevel'].bottomTier.format;
this.parent.timelineSettings.weekStartDay = updateAction['previousZoomingLevel'].weekStartDay;
this.parent.timelineSettings.weekendBackground = updateAction['previousZoomingLevel'].weekendBackground;
this.isZoomingUndoRedoProgress = true;
}
this.isUndoRedoPerformed = false;
}
else if (updateAction['action'] === 'NextTimeSpan' || updateAction['action'] === 'PreviousTimeSpan') {
this.parent.updateProjectDates(updateAction['previousTimelineStartDate'], updateAction['previousTimelineEndDate'], false);
this.isUndoRedoPerformed = false;
}
else if (updateAction['action'] === 'Sorting') {
this.isFromUndoRedo = true;
this.sortedColumnsLength = 0;
if (updateAction['sortColumns'].length === 0) {
this.parent.clearSorting();
}
else {
for (var i = 0; i < updateAction['sortColumns'].length; i++) {
this.parent.treeGrid.sortByColumn(updateAction['sortColumns'][i]['field'], updateAction['sortColumns'][i]['direction'], (updateAction['sortColumns'].length > 1 ? true : false));
}
}
}
else if (updateAction['action'] === 'ColumnState') {
this.isFromUndoRedo = true;
for (var i = 0; i < updateAction['showhideColumns'].length; i++) {
if (updateAction['showhideColumns'][i].visible) {
this.parent.hideColumn(updateAction['showhideColumns'][i].field, 'field');
}
else {
this.parent.showColumn(updateAction['showhideColumns'][i].field, 'field');
}
}
this.isUndoRedoPerformed = false;
}
else if (updateAction['action'] === 'Filtering') {
for (var j = 0; j < updateAction['filteredColumns'].length; j++) {
this.isFromUndoRedo = true;
this.parent.filterByColumn(updateAction['filteredColumns'][j].field, updateAction['filteredColumns'][j].operator, updateAction['filteredColumns'][j].value, updateAction['filteredColumns'][j].predicate, updateAction['filteredColumns'][j].matchCase, updateAction['filteredColumns'][j].ignoreAccent);
}
}
else if (updateAction['action'] === 'ColumnReorder') {
this.isFromUndoRedo = true;
var fromColumn = this.parent.treeGrid.columns[updateAction['fromIndex']]['field'];
var toColumn = this.parent.treeGrid.columns[updateAction['toIndex']]['field'];
this.parent.reorderColumns(fromColumn, toColumn);
}
else if (updateAction['action'] === 'Search') {
this.isFromUndoRedo = true;
this.parent.search(updateAction['searchString']);
}
else if (updateAction['action'] === 'ColumnResize') {
this.parent.treeGrid.columns[updateAction['resizedColumn'].index]['width'] = updateAction['resizedColumn'].width;
this.parent.treeGrid.refreshColumns();
}
else if (updateAction['action'] === 'RowDragAndDrop' || updateAction['action'] === 'TaskbarDragAndDrop') {
for (var i = 0; i < updateAction['beforeDrop'].length; i++) {
var fromIndex = this.findTaskRowIndex(updateAction['beforeDrop'][i].data.ganttProperties.taskId.toString());
var toIndex = this.findTaskRowIndex(updateAction['beforeDrop'][i]['id'].toString());
this.parent.reorderRows([fromIndex], toIndex, updateAction['beforeDrop'][i].position);
}
}
else if (updateAction['action'] === 'Indent' || updateAction['action'] === 'Outdent') {
this.parent.selectRow(updateAction['selectedRowIndexes'][0]);
if (updateAction['action'] === 'Indent') {
this.parent.indent();
}
if (updateAction['action'] === 'Outdent') {
this.parent.outdent();
}
}
else if (updateAction['action'] === 'Delete') {
var isShowDeleteConfirmDialog = extend([], [this.parent.editSettings.showDeleteConfirmDialog], [], true)[0];
this.parent.editSettings.showDeleteConfirmDialog = false;
this.parent.deleteRecord(updateAction['deleteRecords']);
this.parent.editSettings.showDeleteConfirmDialog = isShowDeleteConfirmDialog;
}
else if (updateAction['action'] === 'Add') {
if (this.parent.viewType === 'ResourceView' && updateAction['deletedRecordsDetails'].length > 1) {
this.parent.editModule.addRecord(extend([], [], updateAction['deletedRecordsDetails'], true));
}
else {
for (var i = 0; i < updateAction['deletedRecordsDetails'].length; i++) {
var rowIndex = this.findTaskRowIndex(updateAction['deletedRecordsDetails'][i].id.toString());
var position = void 0;
if (updateAction['deletedRecordsDetails'][i].position === 'above') {
position = 'Above';
}
if (updateAction['deletedRecordsDetails'][i].position === 'below') {
position = 'Below';
}
if (updateAction['deletedRecordsDetails'][i].position === 'child') {
position = 'Child';
}
if (updateAction['deletedRecordsDetails'][i].position === 'bottom') {
position = 'Bottom';
}
this.parent.editModule.addRecord(updateAction['deletedRecordsDetails'][i].data, position, rowIndex);
}
}
}
else {
this.parent.updateRecordByID(updateAction['modifiedRecords'][0]);
this.isUndoRedoPerformed = false;
}
if (this.getUndoCollection.length > 0 && this.parent.toolbarModule) {
this.parent.toolbarModule.enableItems([this.parent.controlId + '_undo'], true);
}
this.getRedoCollection.splice(this.getRedoCollection.length - 1, 1);
if (this.getRedoCollection.length === 0 && this.parent.toolbarModule) {
this.redoEnabled = false;
this.parent.toolbarModule.enableItems([this.parent.controlId + '_redo'], false);
}
}
};
UndoRedo.prototype.findTaskRowIndex = function (taskId) {
var _this = this;
return this.parent.updatedRecords.findIndex(function (data) {
var dataTaskId = data.ganttProperties.taskId.toString();
if (_this.parent.viewType === 'ProjectView') {
return dataTaskId === taskId;
}
else {
var prefixedId = ((data.level === 0 || data.ganttProperties.taskName === 'Unassigned Task') ? 'R' : 'T') + dataTaskId;
// Support both prefixed and raw taskId for ResourceView
return dataTaskId === taskId || prefixedId === taskId;
}
});
};
UndoRedo.prototype.getResourceViewRowIndex = function (data) {
if (data) {
var prefix = data.level === 0 ? 'R' : 'T';
return this.parent.taskIds.indexOf(prefix + data.ganttProperties.taskId.toString());
}
return -1;
};
UndoRedo.prototype.createUndoCollection = function () {
if (this.parent['totalUndoAction'] + 1 > this.parent.undoRedoStepsCount && this.getUndoCollection.length === this.parent['totalUndoAction']) {
this.getUndoCollection.splice(0, 1);
this.disableRedo();
}
if (this.parent.toolbarModule) {
this.parent.toolbarModule.enableItems([this.parent.controlId + '_undo'], true);
}
if (this.getUndoCollection.length === 0) {
this.getUndoCollection[0] = [];
if (this.parent['totalUndoAction'] + 1 <= this.parent.undoRedoStepsCount) {
this.parent['totalUndoAction']++;
}
}
else if (Object.keys(this['getUndoCollection'][this['getUndoCollection'].length - 1])['length'] > 0) {
this.getUndoCollection[this.getUndoCollection.length] = [];
if (this.parent['totalUndoAction'] + 1 <= this.parent.undoRedoStepsCount) {
this.parent['totalUndoAction']++;
}
}
};
UndoRedo.prototype.disableRedo = function () {
this.redoEnabled = false;
this.getRedoCollection = [];
if (this.parent.toolbarModule) {
this.parent.toolbarModule.enableItems([this.parent.controlId + '_redo'], false);
}
};
UndoRedo.prototype.findPosition = function (rowItems, records, detail) {
var _loop_1 = function (i) {
var record = {};
record['data'] = rowItems[i];
if (this_1.parent.viewType === 'ProjectView') {
if (!rowItems[i].hasChildRecords && rowItems[i].parentItem) {
var parentItem = this_1.parent.getRecordByID(rowItems[i].parentItem.taskId);
if (parentItem.childRecords.length > 1) {
var recIndex = this_1.parent.ids.indexOf(rowItems[i].ganttProperties.taskId.toString());
var previousRecord = this_1.parent.flatData[recIndex - 1];
if (previousRecord.parentItem &&
previousRecord.parentItem.taskId.toString() === parentItem.ganttProperties.taskId.toString()) {
record['position'] = 'below';
record['id'] = extend([], [this_1.parent.flatData[this_1.parent.ids.indexOf(rowItems[i].ganttProperties.taskId.toString()) - 1].ganttProperties.taskId], [], true)[0];
}
else {
record['position'] = 'above';
var currentData = this_1.parent.flatData[this_1.parent.ids.indexOf(rowItems[i].ganttProperties.taskId.toString()) + 1];
var index = this_1.parent.ids.indexOf(rowItems[i].ganttProperties.taskId.toString()) + 1;
var rowIndex = i;
do {
var rowData = rowItems[rowIndex + 1];
if (!rowData ||
(rowData && currentData.ganttProperties.taskId.toString() !==
rowData.ganttProperties.taskId.toString())) {
if (currentData && currentData.parentItem) {
record['id'] = extend([], [currentData.ganttProperties.taskId], [], true)[0];
}
else {
record['id'] = extend([], [rowItems[i].parentItem.taskId], [], true)[0];
record['position'] = 'child';
}
}
else {
rowIndex++;
index++;
currentData = this_1.parent.flatData[index];
}
} while (!record['id']);
}
}
else {
record['position'] = 'child';
record['id'] = extend([], [parentItem.ganttProperties.taskId], [], true)[0];
}
}
else if (!rowItems[i].hasChildRecords && !rowItems[i].parentItem) {
if (this_1.parent.ids.indexOf(rowItems[i].ganttProperties.taskId.toString()) === this_1.parent.ids.length - 1) {
record['position'] = 'below';
}
else {
record['position'] = 'above';
}
var parentIndex = void 0;
var currentData = void 0;
var prevInd = void 0;
for (var k = 0; k < this_1.parent.treeGrid.parentData.length; k++) {
if (this_1.parent.treeGrid.parentData[k]['ganttProperties'].taskId.toString() === rowItems[i].ganttProperties.taskId.toString()) {
parentIndex = k;
currentData = this_1.parent.treeGrid.parentData[k + 1];
prevInd = k + 1;
break;
}
}
var rowIndex = i;
do {
var rowData = rowItems[rowIndex + 1];
if (!rowData || (rowData && currentData['ganttProperties'].taskId.toString() !== rowData.ganttProperties.taskId.toString())) {
if (currentData) {
record['id'] = extend([], [currentData['ganttProperties'].taskId], [], true)[0];
}
else {
currentData = this_1.parent.treeGrid.parentData[parentIndex - 1];
if (!currentData) {
currentData = this_1.parent.treeGrid.parentData[parentIndex];
}
record['id'] = extend([], [currentData['ganttProperties'].taskId], [], true)[0];
}
}
else {
rowIndex++;
prevInd++;
currentData = this_1.parent.treeGrid.parentData[prevInd];
}
} while (!record['id']);
}
else if (rowItems[i].hasChildRecords && !rowItems[i].parentItem) {
var parentIndex = void 0;
var currentData = void 0;
var prevInd = void 0;
for (var k = 0; k < this_1.parent.treeGrid.parentData.length; k++) {
if (this_1.parent.treeGrid.parentData[k]['ganttProperties'].taskId.toString() === rowItems[i].ganttProperties.taskId.toString()) {
parentIndex = k;
currentData = this_1.parent.treeGrid.parentData[k + 1];
prevInd = k + 1;
break;
}
}
if (parentIndex !== -1) {
if (parentIndex === 0) {
record['position'] = 'above';
var rowIndex = i;
do {
var rowData = rowItems[rowIndex + 1];
if (!rowData || (rowData && currentData['ganttProperties'].taskId.toString() !== rowData.ganttProperties.taskId.toString())) {
if (!currentData) {
currentData = this_1.parent.treeGrid.parentData[parentIndex];
}
record['id'] = extend([], [currentData['ganttProperties'].taskId], [], true)[0];
}
else {
rowIndex++;
prevInd++;
currentData = this_1.parent.treeGrid.parentData[prevInd];
}
} while (!record['id']);
}
else {
record['position'] = 'below';
record['id'] = extend([], [this_1.parent.treeGrid.parentData[parentIndex - 1].ganttProperties.taskId], [], true)[0];
}
}
}
else if (rowItems[i].hasChildRecords && rowItems[i].parentItem) {
var parentItem = this_1.parent.getRecordByID(rowItems[i].parentItem.taskId);
var childRecords = parentItem.childRecords;
var childCount = childRecords.length;
var currentTaskId_1 = rowItems[i].ganttProperties.taskId.toString();
if (childCount === 1) {
record['position'] = 'child';
record['id'] = extend([], [parentItem.ganttProperties.taskId], [], true)[0];
}
else {
var childIndex = childRecords.findIndex(function (child) {
return child.ganttProperties.taskId.toString() === currentTaskId_1;
});
if (childIndex !== -1) {
if (childIndex === 0) {
record['position'] = 'above';
record['id'] = childRecords[1].ganttProperties.taskId;
}
else {
record['position'] = 'below';
record['id'] = childRecords[childIndex - 1].ganttProperties.taskId;
}
}
}
}
}
else {
if (rowItems[i].parentItem) {
var parentRecord = void 0;
if (rowItems[i].parentItem.index) {
parentRecord = this_1.parent.flatData[rowItems[i].parentItem.index];
}
else {
parentRecord = this_1.parent.flatData[this_1.parent.ids.indexOf(rowItems[i].parentItem.taskId)];
}
if (parentRecord.childRecords.length === 1) {
record['position'] = 'child';
record['id'] = 'R' + parentRecord.ganttProperties.taskId;
if (detail === 'deletedIndexes') {
record['position'] = 'child';
record['index'] = parentRecord.index;
}
}
else {
var currentIndex = void 0;
for (var j = 0; j < parentRecord.childRecords.length; j++) {
if (parentRecord.childRecords[j].ganttProperties.taskId.toString() ===
rowItems[i].ganttProperties.taskId.toString()) {
currentIndex = j;
break;
}
}
var previousRecord = parentRecord.childRecords[currentIndex - 1];
if (previousRecord && previousRecord.par