red-redux-class
Version:
Use objects and composition for creating complex reducers which can be easily maintained.
149 lines • 5.45 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var ReduxClass_class_1 = require("./ReduxClass.class");
var ReduxClass_constants_1 = require("./ReduxClass.constants");
var reflection_utils_1 = require("./reflection.utils");
var immutableMethods = [
'includes',
'indexOf',
'keys',
'entries',
'forEach',
'every',
'some',
'reduce',
'reduceRight',
'toString',
'toLocaleString',
'join',
'reverse',
'lastIndexOf',
'find',
'findIndex',
'values',
'slice',
'filter',
'map',
];
var mutableMethods = [
'pop',
'push',
'shift',
'unshift',
'reverse',
'copyWithin',
'fill',
'sort',
'splice',
];
var ReduxClassArray = (function (_super) {
tslib_1.__extends(ReduxClassArray, _super);
function ReduxClassArray(initialState, attributes) {
if (initialState === void 0) { initialState = []; }
if (attributes === void 0) { attributes = {}; }
var _this = this;
var _a = ReduxClassArray.initialData(initialState, attributes), state = _a.state, array = _a.array;
_this = _super.call(this, state) || this;
_this.initArray(array);
return _this;
}
ReduxClassArray.isReduxClassArray = function (object) {
var _object = object;
return ReduxClass_class_1.ReduxClass.isReduxClass(_object) && Array.isArray(_object[ReduxClass_constants_1.ARRAY_KEY]);
};
ReduxClassArray.initialData = function (initialState, attributes) {
if (attributes === void 0) { attributes = {}; }
var array;
var state = {};
if (ReduxClass_class_1.ReduxClass.isReduxClass(initialState)) {
array = initialState.getArray();
state = tslib_1.__assign(tslib_1.__assign({}, initialState), attributes);
}
else if (Array.isArray(initialState)) {
array = tslib_1.__spread(initialState);
state = tslib_1.__assign({}, attributes);
}
else {
array = [];
state = initialState;
}
return {
array: array,
state: state,
};
};
ReduxClassArray.prototype.initialize = function (initialState) {
var _a = ReduxClassArray.initialData(initialState), state = _a.state, array = _a.array;
this.set(ReduxClass_constants_1.ARRAY_KEY, array);
_super.prototype.initialize.call(this, state);
};
ReduxClassArray.prototype.initArray = function (_array) {
var arrayType = this.constructor.types[0];
if (arrayType && arrayType.constructor) {
_array = _array.map(function (el) {
return el instanceof arrayType ? el : new arrayType(el);
});
}
this._initHiddenProperty(ReduxClass_constants_1.ARRAY_KEY, _array);
};
ReduxClassArray.prototype.get = function (key) {
if (typeof key === 'number' ||
parseInt(key.toString(), 10).toString() === key) {
return this.getArrayElement(key);
}
return this[key];
};
ReduxClassArray.prototype.getArrayElement = function (key) {
return this[ReduxClass_constants_1.ARRAY_KEY][key];
};
ReduxClassArray.prototype.getArray = function () {
return this[ReduxClass_constants_1.ARRAY_KEY];
};
ReduxClassArray.prototype.getFullArray = function () {
return this.getArray();
};
ReduxClassArray.prototype.getLength = function () {
return this[ReduxClass_constants_1.ARRAY_KEY].length;
};
ReduxClassArray.prototype.set = function (key, value) {
var _key = key + '';
if (parseInt(_key, 10) + '' === _key) {
this.setArrayElement(parseInt(_key, 10), value);
return this;
}
_super.prototype.set.call(this, _key, value);
return this;
};
ReduxClassArray.prototype.setArray = function (_array) {
this._shouldBeNew();
var arrayType = this.constructor.types[0];
this[ReduxClass_constants_1.ARRAY_KEY] = _array.map(function (value) {
if (arrayType && !(value instanceof arrayType)) {
value = new arrayType(value);
}
return value;
});
return this;
};
ReduxClassArray.prototype.setArrayElement = function (key, value) {
this._shouldBeNew();
var arrayType = this.constructor.types[0];
if (arrayType && !(value instanceof arrayType)) {
value = new arrayType(value);
}
this[ReduxClass_constants_1.ARRAY_KEY][key] = value;
return this;
};
ReduxClassArray.prototype.isEmpty = function () {
return this[ReduxClass_constants_1.ARRAY_KEY].length === 0;
};
ReduxClassArray.prototype.toJSON = function () {
return this[ReduxClass_constants_1.ARRAY_KEY];
};
return ReduxClassArray;
}(ReduxClass_class_1.ReduxClass));
exports.ReduxClassArray = ReduxClassArray;
reflection_utils_1.bindMethods(ReduxClassArray, Array, immutableMethods, false, reflection_utils_1.bindPrototype);
reflection_utils_1.bindMethods(ReduxClassArray, Array, mutableMethods, true, reflection_utils_1.bindPrototype);
//# sourceMappingURL=ReduxClassArray.class.js.map