all files / grid/actions/ normal-edit.js

94.09% Statements 239/254
88.15% Branches 119/135
80% Functions 24/30
94.84% Lines 239/252
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369   41× 41× 41× 41× 41×   18× 18× 18×               21× 21×   12×   12×   12×       12×             40× 40× 40× 40× 40× 40× 37×   40× 40× 40×         40× 40× 40× 40×   39× 39× 31×   39×   39× 39× 39× 39× 39× 39× 39×                         50× 50×   11×   39× 39×       39× 39×         39× 27× 27× 27×   26× 26×     12× 12× 12× 12× 12× 12×       37× 37× 37× 37×   26× 26×       26×             26×   38× 37× 37× 37×       26× 26×   26× 26× 26× 26× 26× 26× 26× 26×   26× 23×     26×         33× 33× 33× 33× 31× 31× 31× 31×               14×   12× 12×     12× 12×   12× 12× 12× 12×   12×     12×   12×   20× 20× 20× 20×       19×   18× 18× 18× 167× 167×     18×         18× 18×   17× 17× 14×   17× 17× 17× 17× 17× 17×   11× 11×         11×         49× 49× 49× 49× 49×       49× 11×   49× 49× 28×     41×     41× 41× 41× 41× 41× 41× 41×   39× 36×     39× 39×        
define(["require", "exports", "@syncfusion/ej2-base", "@syncfusion/ej2-base", "../base/util", "../base/constant", "../renderer/row-renderer"], function (require, exports, ej2_base_1, ej2_base_2, util_1, events, row_renderer_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var NormalEdit = (function () {
        function NormalEdit(parent, serviceLocator, renderer) {
            this.args = {};
            this.parent = parent;
            this.renderer = renderer;
            this.serviceLocator = serviceLocator;
            this.addEventListener();
        }
        NormalEdit.prototype.clickHandler = function (e) {
            var target = e.target;
            var gObj = this.parent;
            if ((((util_1.parentsUntil(target, 'e-gridcontent') &&
                util_1.parentsUntil(util_1.parentsUntil(target, 'e-gridcontent'), 'e-grid').id === gObj.element.id)) || (gObj.frozenRows
                && util_1.parentsUntil(target, 'e-headercontent'))) && !util_1.parentsUntil(target, 'e-unboundcelldiv')) {
                this.rowIndex = util_1.parentsUntil(target, 'e-rowcell') ? parseInt(target.parentElement.getAttribute('aria-rowindex'), 10) : -1;
                if (gObj.isEdit) {
                    gObj.editModule.endEdit();
                }
            }
        };
        NormalEdit.prototype.dblClickHandler = function (e) {
            if (util_1.parentsUntil(e.target, 'e-rowcell') && this.parent.editSettings.allowEditOnDblClick) {
                this.parent.editModule.startEdit(util_1.parentsUntil(e.target, 'e-row'));
            }
        };
        NormalEdit.prototype.editComplete = function (e) {
            this.parent.isEdit = false;
            switch (e.requestType) {
                case 'save':
                    Eif (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')
                        || (!this.parent.isPersistSelection)) {
                        this.parent.selectRow(0);
                    }
                    this.parent.trigger(events.actionComplete, ej2_base_1.extend(e, {
                        requestType: 'save',
                        type: events.actionComplete
                    }));
                    break;
                case 'delete':
                    this.parent.trigger(events.actionComplete, ej2_base_1.extend(e, {
                        requestType: 'delete',
                        type: events.actionComplete
                    }));
                    this.parent.selectRow(this.editRowIndex);
                    break;
            }
        };
        NormalEdit.prototype.startEdit = function (tr) {
            var gObj = this.parent;
            var primaryKeys = gObj.getPrimaryKeyFieldNames();
            var primaryKeyValues = [];
            this.rowIndex = this.editRowIndex = parseInt(tr.getAttribute('aria-rowindex'), 10);
            this.previousData = gObj.getCurrentViewRecords()[this.rowIndex];
            for (var i = 0; i < primaryKeys.length; i++) {
                primaryKeyValues.push(this.previousData[primaryKeys[i]]);
            }
            this.uid = tr.getAttribute('data-uid');
            var rowObj = gObj.getRowObjectFromUID(this.uid);
            var args = {
                row: tr, primaryKey: primaryKeys, primaryKeyValue: primaryKeyValues, requestType: 'beginEdit',
                rowData: this.previousData, rowIndex: this.rowIndex, type: 'edit', cancel: false,
                foreignKeyData: rowObj && rowObj.foreignKeyData
            };
            gObj.trigger(events.beginEdit, args);
            args.type = 'actionBegin';
            gObj.trigger(events.actionBegin, args);
            if (args.cancel) {
                return;
            }
            gObj.isEdit = true;
            if (gObj.editSettings.mode !== 'Dialog') {
                gObj.clearSelection();
            }
            if (gObj.editSettings.mode === 'Dialog') {
                gObj.selectionModule.preventFocus = true;
                args.row.classList.add('e-dlgeditrow');
            }
            this.renderer.update(args);
            this.uid = tr.getAttribute('data-uid');
            gObj.editModule.applyFormValidation();
            args.type = 'actionComplete';
            gObj.trigger(events.actionComplete, args);
            this.args = args;
            Iif (this.parent.allowTextWrap) {
                this.parent.notify(events.freezeRender, { case: 'textwrap' });
            }
        };
        NormalEdit.prototype.updateRow = function (index, data) {
            var gObj = this.parent;
            var args = {
                requestType: 'save', type: events.actionBegin, data: data, cancel: false,
                previousData: gObj.getCurrentViewRecords()[index]
            };
            gObj.showSpinner();
            gObj.notify(events.updateData, args);
            gObj.refresh();
        };
        NormalEdit.prototype.endEdit = function () {
            var gObj = this.parent;
            if (!this.parent.isEdit || !gObj.editModule.formObj.validate() ||
                (gObj.editModule.mFormObj && !gObj.editModule.mFormObj.validate())) {
                return;
            }
            var editedData = ej2_base_1.extend({}, {}, this.previousData, true);
            var args = ej2_base_1.extend(this.args, {
                requestType: 'save', type: events.actionBegin, data: editedData, cancel: false,
                previousData: this.previousData, selectedRow: gObj.selectedRowIndex, foreignKeyData: {}
            });
            editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-gridform'), editedData);
            if (gObj.getFrozenColumns() && gObj.editSettings.mode === 'Normal') {
                var mForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');
                if (gObj.frozenRows && mForm) {
                    editedData = gObj.editModule.getCurrentEditedData(mForm, editedData);
                }
                else {
                    editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform'), editedData);
                }
            }
            if (gObj.element.querySelectorAll('.e-editedrow').length) {
                args.action = 'edit';
                gObj.trigger(events.actionBegin, args);
                if (args.cancel) {
                    return;
                }
                gObj.showSpinner();
                gObj.notify(events.updateData, args);
            }
            else {
                args.action = 'add';
                args.selectedRow = 0;
                args.index = this.addedRowIndex;
                gObj.notify(events.modelChanged, args);
                this.addedRowIndex = null;
                if (args.cancel) {
                    return;
                }
            }
        };
        NormalEdit.prototype.destroyElements = function () {
            var gObj = this.parent;
            gObj.editModule.destroyWidgets();
            gObj.editModule.destroyForm();
            this.parent.notify(events.dialogDestroy, {});
        };
        NormalEdit.prototype.editHandler = function (args) {
            var _this = this;
            Iif (args.promise) {
                args.promise.then(function (e) { return _this.edSucc(e, args); }).catch(function (e) { return _this.edFail(e); });
            }
            else {
                this.editSuccess(args.data, args);
            }
        };
        NormalEdit.prototype.edSucc = function (e, args) {
            this.editSuccess(e, args);
        };
        NormalEdit.prototype.edFail = function (e) {
            this.editFailure(e);
        };
        NormalEdit.prototype.updateCurrentViewData = function (data) {
            this.parent.getCurrentViewRecords()[this.editRowIndex] = data;
        };
        NormalEdit.prototype.requestSuccess = function (args) {
            if (this.parent.editModule.formObj && !this.parent.editModule.formObj.isDestroyed) {
                this.destroyElements();
                this.stopEditStatus();
                if (this.parent.editSettings.mode === 'Dialog' && args.action !== 'add') {
                    this.parent.element.querySelector('.e-dlgeditrow').classList.remove('e-dlgeditrow');
                }
            }
        };
        NormalEdit.prototype.editSuccess = function (e, args) {
            Eif (!ej2_base_2.isNullOrUndefined(e)) {
                args.data = e;
            }
            this.requestSuccess(args);
            this.parent.trigger(events.beforeDataBound, args);
            args.type = events.actionComplete;
            this.parent.isEdit = false;
            this.refreshRow(args.data);
            this.updateCurrentViewData(args.data);
            this.parent.trigger(events.actionComplete, args);
            Eif (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')
                || (!this.parent.isPersistSelection)) {
                if (this.parent.editSettings.mode !== 'Dialog') {
                    this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);
                }
            }
            this.parent.hideSpinner();
        };
        NormalEdit.prototype.editFailure = function (e) {
            this.parent.trigger(events.actionFailure, e);
            this.parent.hideSpinner();
        };
        NormalEdit.prototype.refreshRow = function (data) {
            var frzCols = this.parent.getFrozenColumns();
            var row = new row_renderer_1.RowRenderer(this.serviceLocator, null, this.parent);
            var rowObj = this.parent.getRowObjectFromUID(this.uid);
            if (rowObj) {
                rowObj.changes = data;
                util_1.refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);
                row.refresh(rowObj, this.parent.getColumns(), true);
                if (frzCols) {
                    var uid = void 0;
                    var tr = this.parent.element.querySelector('[data-uid=' + rowObj.uid + ']');
                    Eif ((util_1.parentsUntil(tr, 'e-frozencontent')) || (util_1.parentsUntil(tr, 'e-frozenheader'))) {
                        uid = this.parent.getMovableRows()[rowObj.index].getAttribute('data-uid');
                    }
                    else {
                        uid = this.parent.getRows()[rowObj.index].getAttribute('data-uid');
                    }
                    rowObj = this.parent.getRowObjectFromUID(uid);
                    rowObj.changes = data;
                    row.refresh(rowObj, this.parent.columns, true);
                }
            }
        };
        NormalEdit.prototype.closeEdit = function () {
            if (!this.parent.isEdit) {
                return;
            }
            var gObj = this.parent;
            var args = ej2_base_1.extend(this.args, {
                requestType: 'cancel', type: events.actionBegin, data: this.previousData, selectedRow: gObj.selectedRowIndex
            });
            gObj.trigger(events.actionBegin, args);
            if (this.parent.editSettings.mode === 'Dialog') {
                this.parent.notify(events.dialogDestroy, {});
            }
            gObj.isEdit = false;
            this.stopEditStatus();
            args.type = events.actionComplete;
            if (gObj.editSettings.mode !== 'Dialog') {
                this.refreshRow(args.data);
            }
            if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&
                !gObj.getContentTable().querySelector('tr.e-row')) {
                gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');
            }
            if (gObj.editSettings.mode !== 'Dialog') {
                gObj.selectRow(this.rowIndex);
            }
            gObj.trigger(events.actionComplete, args);
        };
        NormalEdit.prototype.addRecord = function (data, index) {
            var _this = this;
            var gObj = this.parent;
            this.addedRowIndex = index = !ej2_base_2.isNullOrUndefined(index) ? index : 0;
            if (data) {
                gObj.notify(events.modelChanged, {
                    requestType: 'save', type: events.actionBegin, data: data, selectedRow: 0, action: 'add', index: index
                });
                return;
            }
            if (gObj.isEdit) {
                return;
            }
            this.previousData = {};
            this.uid = '';
            gObj.columns.forEach(function (col) {
                Eif (col.field) {
                    ej2_base_1.setValue(col.field, ej2_base_1.isUndefined(col.defaultValue) ? null : col.defaultValue, _this.previousData);
                }
            });
            var args = {
                cancel: false, foreignKeyData: {},
                requestType: 'add', data: this.previousData, type: events.actionBegin, index: index,
                rowData: this.previousData
            };
            gObj.trigger(events.actionBegin, args);
            if (args.cancel) {
                return;
            }
            gObj.isEdit = true;
            if (gObj.editSettings.mode !== 'Dialog') {
                gObj.clearSelection();
            }
            this.renderer.addNew(args);
            gObj.editModule.applyFormValidation();
            args.type = events.actionComplete;
            args.row = gObj.element.querySelector('.e-addedrow');
            gObj.trigger(events.actionComplete, args);
            this.args = args;
        };
        NormalEdit.prototype.deleteRecord = function (fieldname, data) {
            this.editRowIndex = this.parent.selectedRowIndex;
            if (data) {
                data = (data instanceof Array) ? data : [data];
                var gObj = this.parent;
                var index = 0;
                var dataLen = Object.keys(data).length;
                fieldname = fieldname || this.parent.getPrimaryKeyFieldNames()[0];
                var _loop_1 = function (i) {
                    var tmpRecord;
                    var contained = gObj.currentViewData.some(function (record) {
                        tmpRecord = record;
                        return data[i] === util_1.getObject(fieldname, record) || data[i] === record;
                    });
                    data[i] = contained ? tmpRecord : (_a = {}, _a[fieldname] = data[i], _a);
                    var _a;
                };
                for (var i = 0; i < dataLen; i++) {
                    _loop_1(i);
                }
            }
            this.parent.notify(events.modelChanged, {
                requestType: 'delete', type: events.actionBegin, foreignKeyData: {},
                data: data ? data : this.parent.getSelectedRecords(), tr: this.parent.getSelectedRows(), cancel: false
            });
        };
        NormalEdit.prototype.stopEditStatus = function () {
            var gObj = this.parent;
            var elem = gObj.element.querySelector('.e-addedrow');
            var mElem;
            var editMElem;
            if (gObj.getFrozenColumns()) {
                mElem = gObj.element.querySelectorAll('.e-addedrow')[1];
                editMElem = gObj.element.querySelectorAll('.e-editedrow')[1];
                if (mElem) {
                    ej2_base_2.remove(mElem);
                }
                if (editMElem) {
                    editMElem.classList.remove('e-editedrow');
                }
            }
            if (elem) {
                ej2_base_2.remove(elem);
            }
            elem = gObj.element.querySelector('.e-editedrow');
            if (elem) {
                elem.classList.remove('e-editedrow');
            }
        };
        NormalEdit.prototype.addEventListener = function () {
            Iif (this.parent.isDestroyed) {
                return;
            }
            this.parent.on(events.crudAction, this.editHandler, this);
            this.parent.on(events.doubleTap, this.dblClickHandler, this);
            this.parent.on(events.click, this.clickHandler, this);
            this.parent.on(events.recordAdded, this.requestSuccess, this);
            this.parent.on(events.dblclick, this.dblClickHandler, this);
            this.parent.on(events.deleteComplete, this.editComplete, this);
            this.parent.on(events.saveComplete, this.editComplete, this);
        };
        NormalEdit.prototype.removeEventListener = function () {
            if (this.parent.isDestroyed) {
                return;
            }
            this.parent.off(events.crudAction, this.editHandler);
            this.parent.off(events.doubleTap, this.dblClickHandler);
            this.parent.off(events.click, this.clickHandler);
            this.parent.off(events.recordAdded, this.requestSuccess);
            this.parent.off(events.dblclick, this.dblClickHandler);
            this.parent.off(events.deleteComplete, this.editComplete);
            this.parent.off(events.saveComplete, this.editComplete);
        };
        NormalEdit.prototype.destroy = function () {
            this.removeEventListener();
            this.renderer.destroy();
        };
        return NormalEdit;
    }());
    exports.NormalEdit = NormalEdit;
});