@azrico/webobject 1.0.9 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/src/WebObjects/ParentWebObject.js +15 -1
- package/dist/src/WebObjects/WebObject.js +195 -4
- package/dist/src/index.js +6 -1
- package/dist/src/structs/EventfulObject.js +143 -5
- package/dist/src/structs/MapableObject.js +72 -2
- package/dist/src/structs/MetaObject.js +35 -1
- package/dist/src/structs/ObjectArray.js +43 -1
- package/dist/src/structs/SimpleObject.d.ts +2 -2
- package/dist/src/structs/SimpleObject.js +276 -11
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export * from "./src/index";
|
|
@@ -1 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
import WebObject from "./WebObject";
|
|
2
|
+
/**
|
|
3
|
+
* This web object contains some more webobjects
|
|
4
|
+
*/
|
|
5
|
+
export class ParentWebObject extends WebObject {
|
|
6
|
+
__parent__table_id = "";
|
|
7
|
+
#children_items = undefined;
|
|
8
|
+
get __children() {
|
|
9
|
+
return this.#children_items;
|
|
10
|
+
}
|
|
11
|
+
set __children(val) {
|
|
12
|
+
this.#children_items = val;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export default ParentWebObject;
|
|
@@ -1,16 +1,207 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports["default"]=exports.WebObject=void 0;var _global=require("@azrico/global"),_object=require("@azrico/object"),_EventfulObject2=_interopRequireDefault(require("../structs/EventfulObject"));function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _regeneratorRuntime(){"use strict";/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */function a(a,b,c){return Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}),a[b]}function b(a,b,e,f){var g=b&&b.prototype instanceof d?b:d,h=Object.create(g.prototype),j=new l(f||[]);return h._invoke=function(a,b,d){var e="suspendedStart";return function(f,g){if("executing"===e)throw new Error("Generator is already running");if("completed"===e){if("throw"===f)throw g;return n()}for(d.method=f,d.arg=g;;){var h=d.delegate;if(h){var j=i(h,d);if(j){if(j===v)continue;return j}}if("next"===d.method)d.sent=d._sent=d.arg;else if("throw"===d.method){if("suspendedStart"===e)throw e="completed",d.arg;d.dispatchException(d.arg)}else"return"===d.method&&d.abrupt("return",d.arg);e="executing";var k=c(a,b,d);if("normal"===k.type){if(e=d.done?"completed":"suspendedYield",k.arg===v)continue;return{value:k.arg,done:d.done}}"throw"===k.type&&(e="completed",d.method="throw",d.arg=k.arg)}}}(a,e,j),h}function c(a,b,c){try{return{type:"normal",arg:a.call(b,c)}}catch(a){return{type:"throw",arg:a}}}function d(){}function e(){}function f(){}function g(b){["next","throw","return"].forEach(function(c){a(b,c,function(a){return this._invoke(c,a)})})}function h(a,b){function d(e,f,g,h){var i=c(a[e],a,f);if("throw"!==i.type){var j=i.arg,k=j.value;return k&&"object"==_typeof(k)&&q.call(k,"__await")?b.resolve(k.__await).then(function(a){d("next",a,g,h)},function(a){d("throw",a,g,h)}):b.resolve(k).then(function(a){j.value=a,g(j)},function(a){return d("throw",a,g,h)})}h(i.arg)}var e;this._invoke=function(a,c){function f(){return new b(function(b,e){d(a,c,b,e)})}return e=e?e.then(f,f):f()}}function i(a,b){var d=a.iterator[b.method];if(void 0===d){if(b.delegate=null,"throw"===b.method){if(a.iterator["return"]&&(b.method="return",b.arg=void 0,i(a,b),"throw"===b.method))return v;b.method="throw",b.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var e=c(d,a.iterator,b.arg);if("throw"===e.type)return b.method="throw",b.arg=e.arg,b.delegate=null,v;var f=e.arg;return f?f.done?(b[a.resultName]=f.value,b.next=a.nextLoc,"return"!==b.method&&(b.method="next",b.arg=void 0),b.delegate=null,v):f:(b.method="throw",b.arg=new TypeError("iterator result is not an object"),b.delegate=null,v)}function j(a){var b={tryLoc:a[0]};1 in a&&(b.catchLoc=a[1]),2 in a&&(b.finallyLoc=a[2],b.afterLoc=a[3]),this.tryEntries.push(b)}function k(a){var b=a.completion||{};b.type="normal",delete b.arg,a.completion=b}function l(a){this.tryEntries=[{tryLoc:"root"}],a.forEach(j,this),this.reset(!0)}function m(a){if(a){var b=a[s];if(b)return b.call(a);if("function"==typeof a.next)return a;if(!isNaN(a.length)){var c=-1,d=function b(){for(;++c<a.length;)if(q.call(a,c))return b.value=a[c],b.done=!1,b;return b.value=void 0,b.done=!0,b};return d.next=d}}return{next:n}}function n(){return{value:void 0,done:!0}}_regeneratorRuntime=function(){return o};var o={},p=Object.prototype,q=p.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},s=r.iterator||"@@iterator",t=r.asyncIterator||"@@asyncIterator",u=r.toStringTag||"@@toStringTag";try{a({},"")}catch(b){a=function(a,b,c){return a[b]=c}}o.wrap=b;var v={},w={};a(w,s,function(){return this});var x=Object.getPrototypeOf,y=x&&x(x(m([])));y&&y!==p&&q.call(y,s)&&(w=y);var z=f.prototype=d.prototype=Object.create(w);return e.prototype=f,a(z,"constructor",f),a(f,"constructor",e),e.displayName=a(f,u,"GeneratorFunction"),o.isGeneratorFunction=function(a){var b="function"==typeof a&&a.constructor;return!!b&&(b===e||"GeneratorFunction"===(b.displayName||b.name))},o.mark=function(b){return Object.setPrototypeOf?Object.setPrototypeOf(b,f):(b.__proto__=f,a(b,u,"GeneratorFunction")),b.prototype=Object.create(z),b},o.awrap=function(a){return{__await:a}},g(h.prototype),a(h.prototype,t,function(){return this}),o.AsyncIterator=h,o.async=function(a,c,d,e,f){void 0===f&&(f=Promise);var g=new h(b(a,c,d,e),f);return o.isGeneratorFunction(c)?g:g.next().then(function(a){return a.done?a.value:g.next()})},g(z),a(z,u,"Generator"),a(z,s,function(){return this}),a(z,"toString",function(){return"[object Generator]"}),o.keys=function(a){var b=[];for(var c in a)b.push(c);return b.reverse(),function c(){for(;b.length;){var d=b.pop();if(d in a)return c.value=d,c.done=!1,c}return c.done=!0,c}},o.values=m,l.prototype={constructor:l,reset:function reset(a){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(k),!a)for(var b in this)"t"===b.charAt(0)&&q.call(this,b)&&!isNaN(+b.slice(1))&&(this[b]=void 0)},stop:function stop(){this.done=!0;var a=this.tryEntries[0].completion;if("throw"===a.type)throw a.arg;return this.rval},dispatchException:function dispatchException(a){function b(b,d){return f.type="throw",f.arg=a,c.next=b,d&&(c.method="next",c.arg=void 0),!!d}if(this.done)throw a;for(var c=this,d=this.tryEntries.length-1;0<=d;--d){var e=this.tryEntries[d],f=e.completion;if("root"===e.tryLoc)return b("end");if(e.tryLoc<=this.prev){var g=q.call(e,"catchLoc"),h=q.call(e,"finallyLoc");if(g&&h){if(this.prev<e.catchLoc)return b(e.catchLoc,!0);if(this.prev<e.finallyLoc)return b(e.finallyLoc)}else if(!g){if(!h)throw new Error("try statement without catch or finally");if(this.prev<e.finallyLoc)return b(e.finallyLoc)}else if(this.prev<e.catchLoc)return b(e.catchLoc,!0)}}},abrupt:function abrupt(a,b){for(var c,d=this.tryEntries.length-1;0<=d;--d)if(c=this.tryEntries[d],c.tryLoc<=this.prev&&q.call(c,"finallyLoc")&&this.prev<c.finallyLoc){var e=c;break}e&&("break"===a||"continue"===a)&&e.tryLoc<=b&&b<=e.finallyLoc&&(e=null);var f=e?e.completion:{};return f.type=a,f.arg=b,e?(this.method="next",this.next=e.finallyLoc,v):this.complete(f)},complete:function complete(a,b){if("throw"===a.type)throw a.arg;return"break"===a.type||"continue"===a.type?this.next=a.arg:"return"===a.type?(this.rval=this.arg=a.arg,this.method="return",this.next="end"):"normal"===a.type&&b&&(this.next=b),v},finish:function finish(a){for(var b,c=this.tryEntries.length-1;0<=c;--c)if(b=this.tryEntries[c],b.finallyLoc===a)return this.complete(b.completion,b.afterLoc),k(b),v},catch:function _catch(a){for(var b,c=this.tryEntries.length-1;0<=c;--c)if(b=this.tryEntries[c],b.tryLoc===a){var d=b.completion;if("throw"===d.type){var e=d.arg;k(b)}return e}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(a,b,c){return this.delegate={iterator:m(a),resultName:b,nextLoc:c},"next"===this.method&&(this.arg=void 0),v}},o}function asyncGeneratorStep(a,b,c,d,e,f,g){try{var h=a[f](g),i=h.value}catch(a){return void c(a)}h.done?b(i):Promise.resolve(i).then(d,e)}function _asyncToGenerator(a){return function(){var b=this,c=arguments;return new Promise(function(d,e){function f(a){asyncGeneratorStep(h,d,e,f,g,"next",a)}function g(a){asyncGeneratorStep(h,d,e,f,g,"throw",a)}var h=a.apply(b,c);f(void 0)})}}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,c.key,c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _inherits(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function");a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,writable:!0,configurable:!0}}),Object.defineProperty(a,"prototype",{writable:!1}),b&&_setPrototypeOf(a,b)}function _setPrototypeOf(a,b){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,b){return a.__proto__=b,a},_setPrototypeOf(a,b)}function _createSuper(a){var b=_isNativeReflectConstruct();return function(){var c,d=_getPrototypeOf(a);if(b){var e=_getPrototypeOf(this).constructor;c=Reflect.construct(d,arguments,e)}else c=d.apply(this,arguments);return _possibleConstructorReturn(this,c)}}function _possibleConstructorReturn(a,b){if(b&&("object"===_typeof(b)||"function"==typeof b))return b;if(void 0!==b)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(a)}function _assertThisInitialized(a){if(void 0===a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return a}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(a){return!1}}function _getPrototypeOf(a){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},_getPrototypeOf(a)}function _defineProperty(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}var WebObject=/*#__PURE__*/function(a){function b(){var a,d=!(0<arguments.length&&void 0!==arguments[0])||arguments[0],e=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1];return _classCallCheck(this,b),a=c.call(this,d,e),_defineProperty(_assertThisInitialized(a),"__saveResultObject",void 0),_defineProperty(_assertThisInitialized(a),"__saveResultIsSuccess",void 0),_defineProperty(_assertThisInitialized(a),"__saveResultType",void 0),_defineProperty(_assertThisInitialized(a),"meta_data",void 0),a}/* -------------------------------------------------------------------------- */ /* Meta data */ /* -------------------------------------------------------------------------- */ /**
|
|
1
|
+
import { gfunc } from "@azrico/global";
|
|
2
|
+
import { getInArray, object_equals, object_isEmpty, setInArray, } from "@azrico/object";
|
|
3
|
+
import EventfulObject from "../structs/EventfulObject";
|
|
4
|
+
export class WebObject extends EventfulObject {
|
|
5
|
+
__saveResultObject;
|
|
6
|
+
__saveResultIsSuccess;
|
|
7
|
+
__saveResultType;
|
|
8
|
+
static __web_path = "";
|
|
9
|
+
static __web_type = "";
|
|
10
|
+
meta_data;
|
|
11
|
+
constructor(isEditMode = true, is_readonly = false) {
|
|
12
|
+
super(isEditMode, is_readonly);
|
|
13
|
+
}
|
|
14
|
+
/* -------------------------------------------------------------------------- */
|
|
15
|
+
/* Meta data */
|
|
16
|
+
/* -------------------------------------------------------------------------- */
|
|
17
|
+
/**
|
|
2
18
|
* Update meta value of this object , meta data is stored in meta_data variable
|
|
3
19
|
* @param key
|
|
4
20
|
* @param value
|
|
5
21
|
* @param createIfNotExists should we create a new meta if key does not exist
|
|
6
22
|
* @param sendChange
|
|
7
23
|
* @returns
|
|
8
|
-
*/
|
|
24
|
+
*/
|
|
25
|
+
setMetaValue(key, value, createIfNotExists = true, sendChange = "auto") {
|
|
26
|
+
return WebObject.setMetaValue(this, key, value, createIfNotExists, sendChange);
|
|
27
|
+
}
|
|
28
|
+
getMeta(key) {
|
|
29
|
+
return WebObject.getMeta(this, key);
|
|
30
|
+
}
|
|
31
|
+
getMetaValue(key) {
|
|
32
|
+
return WebObject.getMetaValue(this, key);
|
|
33
|
+
}
|
|
34
|
+
/* -------------------------------------------------------------------------- */
|
|
35
|
+
static setMetaValue(o, key, value, createIfNotExists = true, sendChange = "auto") {
|
|
36
|
+
if (!o)
|
|
37
|
+
return false;
|
|
38
|
+
if (!o.canModify) {
|
|
39
|
+
WebObject.addError(o, "Readonly mode is set to true", `Cant use setMetaValue on ${key} when on readonly mode`, true);
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const old_value = WebObject.getMetaValue(o, key);
|
|
43
|
+
if (object_equals(old_value, value))
|
|
44
|
+
return false;
|
|
45
|
+
o.setValue("meta_data", setInArray(o.meta_data, "key", key, "value", value, createIfNotExists));
|
|
46
|
+
if (sendChange !== false)
|
|
47
|
+
o.notifyChanged("meta", key, value);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
static getMeta(o, key) {
|
|
51
|
+
if (o == null)
|
|
52
|
+
return null;
|
|
53
|
+
return getInArray(o.getValue("meta_data"), "key", key);
|
|
54
|
+
}
|
|
55
|
+
static getMetaValue(o, key) {
|
|
56
|
+
return WebObject.getMeta(o, key)?.value;
|
|
57
|
+
}
|
|
58
|
+
/* -------------------------------------------------------------------------- */
|
|
59
|
+
/* Save */
|
|
60
|
+
/* -------------------------------------------------------------------------- */
|
|
61
|
+
async SaveWeb(putAction, putAddress, deltaObject, clearErrors = true, checkResult = true) {
|
|
62
|
+
try {
|
|
63
|
+
this.setSaveResult(null, "nothing");
|
|
64
|
+
if (clearErrors)
|
|
65
|
+
WebObject.clearErrors(this);
|
|
66
|
+
if (!object_isEmpty(deltaObject)) {
|
|
67
|
+
const canSaveResult = this.canSave(deltaObject);
|
|
68
|
+
if (canSaveResult !== true) {
|
|
69
|
+
this.addError("Save not allowed", String(canSaveResult), true);
|
|
70
|
+
this.setSaveResult(false, "canceled");
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
const resultObject = await gfunc.run_action(putAction, putAddress, deltaObject);
|
|
74
|
+
let validResult = this.constructor["isResultValid"](resultObject);
|
|
75
|
+
if (validResult || checkResult === false) {
|
|
76
|
+
this.setSaveResult(resultObject, "normal");
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.setSaveResult(null, "error");
|
|
80
|
+
WebObject.addError(this, "Save result is not valid", "the response from website was not a valid saveresult object !", true);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
/* nothing to save */
|
|
85
|
+
this.setSaveResult(this, "nothing");
|
|
86
|
+
}
|
|
87
|
+
if (this.isSaved) {
|
|
88
|
+
return this.getSaveResult();
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
catch (ex) {
|
|
93
|
+
this.setSaveResult(null, "error");
|
|
94
|
+
WebObject.addError(this, "Error when saving ! ", String(ex), true);
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
canSave(deltaObj) {
|
|
99
|
+
const deltaRes = this.deltaIsValid(deltaObj);
|
|
100
|
+
if (deltaRes !== true)
|
|
101
|
+
return deltaRes;
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
deltaIsValid(d) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
/* -------------------------------------------------------------------------- */
|
|
108
|
+
/* Default Events */
|
|
109
|
+
/* -------------------------------------------------------------------------- */
|
|
110
|
+
/**
|
|
9
111
|
* Use this when you load data to the object
|
|
10
112
|
* @param p
|
|
11
113
|
* @returns
|
|
12
|
-
*/
|
|
114
|
+
*/
|
|
115
|
+
async onLoad(...p) {
|
|
116
|
+
if (this.isEditMode) {
|
|
117
|
+
this.setOriginal();
|
|
118
|
+
}
|
|
119
|
+
return await Promise.resolve(true);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
13
122
|
* Use this after succesful save to Database
|
|
14
123
|
* @param p
|
|
15
124
|
* @returns
|
|
16
|
-
*/
|
|
125
|
+
*/
|
|
126
|
+
async onSave(...p) {
|
|
127
|
+
if (this.isSaved) {
|
|
128
|
+
this.apply_changes();
|
|
129
|
+
//var srObject = this.getSaveResult();
|
|
130
|
+
//this.loadValues(srObject);
|
|
131
|
+
}
|
|
132
|
+
return await Promise.resolve(true);
|
|
133
|
+
}
|
|
134
|
+
/* -------------------------------------------------------------------------- */
|
|
135
|
+
getID() {
|
|
136
|
+
return this.__data_id || -1;
|
|
137
|
+
}
|
|
138
|
+
static getID(o) {
|
|
139
|
+
if (o == null || o == undefined)
|
|
140
|
+
return -1;
|
|
141
|
+
if (o instanceof WebObject)
|
|
142
|
+
return o.getID() ?? -1;
|
|
143
|
+
switch (typeof o) {
|
|
144
|
+
case "object":
|
|
145
|
+
return o.__data_id || o.id || o.ID || -1;
|
|
146
|
+
case "number":
|
|
147
|
+
return o;
|
|
148
|
+
}
|
|
149
|
+
return -1;
|
|
150
|
+
}
|
|
151
|
+
/* -------------------------------------------------------------------------- */
|
|
152
|
+
/* Save Results */
|
|
153
|
+
/* -------------------------------------------------------------------------- */
|
|
154
|
+
static isResultValid(result_object) {
|
|
155
|
+
if (object_isEmpty(result_object))
|
|
156
|
+
return false;
|
|
157
|
+
switch (typeof result_object) {
|
|
158
|
+
case "string":
|
|
159
|
+
try {
|
|
160
|
+
result_object = JSON.parse(result_object);
|
|
161
|
+
return this.isResultValid(result_object);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
case "object":
|
|
167
|
+
if (result_object.expected && result_object.result) {
|
|
168
|
+
return object_equals(result_object.expected, result_object.result);
|
|
169
|
+
}
|
|
170
|
+
return Number(this.getID(result_object)) >= 0;
|
|
171
|
+
case "number":
|
|
172
|
+
return result_object > 0;
|
|
173
|
+
case "boolean":
|
|
174
|
+
return result_object === true;
|
|
175
|
+
}
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
get isSaved() {
|
|
179
|
+
return Boolean(this.__saveResultIsSuccess ?? false);
|
|
180
|
+
}
|
|
181
|
+
setSaveResult(toObj, type) {
|
|
182
|
+
this.__saveResultType = type;
|
|
183
|
+
if (toObj === true) {
|
|
184
|
+
}
|
|
185
|
+
else if (toObj === false) {
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
if (toObj) {
|
|
189
|
+
this.setSaveResultObject(toObj);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
this.setSaveResultObject(null);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
this.__saveResultIsSuccess =
|
|
196
|
+
(type === "normal" || type === "nothing") && toObj != null;
|
|
197
|
+
}
|
|
198
|
+
setSaveResultObject(toObj) {
|
|
199
|
+
this.__saveResultObject = toObj;
|
|
200
|
+
}
|
|
201
|
+
getSaveResult() {
|
|
202
|
+
if (this.isSaved)
|
|
203
|
+
return this.__saveResultObject;
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
export default WebObject;
|
package/dist/src/index.js
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
export * from "./structs/SimpleObject";
|
|
2
|
+
export * from "./structs/EventfulObject";
|
|
3
|
+
export * from "./structs/ObjectArray";
|
|
4
|
+
export * from "./structs/MapableObject";
|
|
5
|
+
export * from "./structs/MetaObject";
|
|
6
|
+
export * from "./WebObjects/WebObject";
|
|
@@ -1,21 +1,159 @@
|
|
|
1
|
-
"use strict";function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}Object.defineProperty(exports,"__esModule",{value:!0}),exports["default"]=exports.EventfulObject=void 0;var _global=require("@azrico/global"),_object=require("@azrico/object"),_event=require("@azrico/event"),_SimpleObject2=_interopRequireDefault(require("./SimpleObject")),_string=require("@azrico/string");function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}function _regeneratorRuntime(){"use strict";/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */function a(a,b,c){return Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}),a[b]}function b(a,b,e,f){var g=b&&b.prototype instanceof d?b:d,h=Object.create(g.prototype),j=new l(f||[]);return h._invoke=function(a,b,d){var e="suspendedStart";return function(f,g){if("executing"===e)throw new Error("Generator is already running");if("completed"===e){if("throw"===f)throw g;return n()}for(d.method=f,d.arg=g;;){var h=d.delegate;if(h){var j=i(h,d);if(j){if(j===v)continue;return j}}if("next"===d.method)d.sent=d._sent=d.arg;else if("throw"===d.method){if("suspendedStart"===e)throw e="completed",d.arg;d.dispatchException(d.arg)}else"return"===d.method&&d.abrupt("return",d.arg);e="executing";var k=c(a,b,d);if("normal"===k.type){if(e=d.done?"completed":"suspendedYield",k.arg===v)continue;return{value:k.arg,done:d.done}}"throw"===k.type&&(e="completed",d.method="throw",d.arg=k.arg)}}}(a,e,j),h}function c(a,b,c){try{return{type:"normal",arg:a.call(b,c)}}catch(a){return{type:"throw",arg:a}}}function d(){}function e(){}function f(){}function g(b){["next","throw","return"].forEach(function(c){a(b,c,function(a){return this._invoke(c,a)})})}function h(a,b){function d(e,f,g,h){var i=c(a[e],a,f);if("throw"!==i.type){var j=i.arg,k=j.value;return k&&"object"==_typeof(k)&&q.call(k,"__await")?b.resolve(k.__await).then(function(a){d("next",a,g,h)},function(a){d("throw",a,g,h)}):b.resolve(k).then(function(a){j.value=a,g(j)},function(a){return d("throw",a,g,h)})}h(i.arg)}var e;this._invoke=function(a,c){function f(){return new b(function(b,e){d(a,c,b,e)})}return e=e?e.then(f,f):f()}}function i(a,b){var d=a.iterator[b.method];if(void 0===d){if(b.delegate=null,"throw"===b.method){if(a.iterator["return"]&&(b.method="return",b.arg=void 0,i(a,b),"throw"===b.method))return v;b.method="throw",b.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var e=c(d,a.iterator,b.arg);if("throw"===e.type)return b.method="throw",b.arg=e.arg,b.delegate=null,v;var f=e.arg;return f?f.done?(b[a.resultName]=f.value,b.next=a.nextLoc,"return"!==b.method&&(b.method="next",b.arg=void 0),b.delegate=null,v):f:(b.method="throw",b.arg=new TypeError("iterator result is not an object"),b.delegate=null,v)}function j(a){var b={tryLoc:a[0]};1 in a&&(b.catchLoc=a[1]),2 in a&&(b.finallyLoc=a[2],b.afterLoc=a[3]),this.tryEntries.push(b)}function k(a){var b=a.completion||{};b.type="normal",delete b.arg,a.completion=b}function l(a){this.tryEntries=[{tryLoc:"root"}],a.forEach(j,this),this.reset(!0)}function m(a){if(a){var b=a[s];if(b)return b.call(a);if("function"==typeof a.next)return a;if(!isNaN(a.length)){var c=-1,d=function b(){for(;++c<a.length;)if(q.call(a,c))return b.value=a[c],b.done=!1,b;return b.value=void 0,b.done=!0,b};return d.next=d}}return{next:n}}function n(){return{value:void 0,done:!0}}_regeneratorRuntime=function(){return o};var o={},p=Object.prototype,q=p.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},s=r.iterator||"@@iterator",t=r.asyncIterator||"@@asyncIterator",u=r.toStringTag||"@@toStringTag";try{a({},"")}catch(b){a=function(a,b,c){return a[b]=c}}o.wrap=b;var v={},w={};a(w,s,function(){return this});var x=Object.getPrototypeOf,y=x&&x(x(m([])));y&&y!==p&&q.call(y,s)&&(w=y);var z=f.prototype=d.prototype=Object.create(w);return e.prototype=f,a(z,"constructor",f),a(f,"constructor",e),e.displayName=a(f,u,"GeneratorFunction"),o.isGeneratorFunction=function(a){var b="function"==typeof a&&a.constructor;return!!b&&(b===e||"GeneratorFunction"===(b.displayName||b.name))},o.mark=function(b){return Object.setPrototypeOf?Object.setPrototypeOf(b,f):(b.__proto__=f,a(b,u,"GeneratorFunction")),b.prototype=Object.create(z),b},o.awrap=function(a){return{__await:a}},g(h.prototype),a(h.prototype,t,function(){return this}),o.AsyncIterator=h,o.async=function(a,c,d,e,f){void 0===f&&(f=Promise);var g=new h(b(a,c,d,e),f);return o.isGeneratorFunction(c)?g:g.next().then(function(a){return a.done?a.value:g.next()})},g(z),a(z,u,"Generator"),a(z,s,function(){return this}),a(z,"toString",function(){return"[object Generator]"}),o.keys=function(a){var b=[];for(var c in a)b.push(c);return b.reverse(),function c(){for(;b.length;){var d=b.pop();if(d in a)return c.value=d,c.done=!1,c}return c.done=!0,c}},o.values=m,l.prototype={constructor:l,reset:function reset(a){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(k),!a)for(var b in this)"t"===b.charAt(0)&&q.call(this,b)&&!isNaN(+b.slice(1))&&(this[b]=void 0)},stop:function stop(){this.done=!0;var a=this.tryEntries[0].completion;if("throw"===a.type)throw a.arg;return this.rval},dispatchException:function dispatchException(a){function b(b,d){return f.type="throw",f.arg=a,c.next=b,d&&(c.method="next",c.arg=void 0),!!d}if(this.done)throw a;for(var c=this,d=this.tryEntries.length-1;0<=d;--d){var e=this.tryEntries[d],f=e.completion;if("root"===e.tryLoc)return b("end");if(e.tryLoc<=this.prev){var g=q.call(e,"catchLoc"),h=q.call(e,"finallyLoc");if(g&&h){if(this.prev<e.catchLoc)return b(e.catchLoc,!0);if(this.prev<e.finallyLoc)return b(e.finallyLoc)}else if(!g){if(!h)throw new Error("try statement without catch or finally");if(this.prev<e.finallyLoc)return b(e.finallyLoc)}else if(this.prev<e.catchLoc)return b(e.catchLoc,!0)}}},abrupt:function abrupt(a,b){for(var c,d=this.tryEntries.length-1;0<=d;--d)if(c=this.tryEntries[d],c.tryLoc<=this.prev&&q.call(c,"finallyLoc")&&this.prev<c.finallyLoc){var e=c;break}e&&("break"===a||"continue"===a)&&e.tryLoc<=b&&b<=e.finallyLoc&&(e=null);var f=e?e.completion:{};return f.type=a,f.arg=b,e?(this.method="next",this.next=e.finallyLoc,v):this.complete(f)},complete:function complete(a,b){if("throw"===a.type)throw a.arg;return"break"===a.type||"continue"===a.type?this.next=a.arg:"return"===a.type?(this.rval=this.arg=a.arg,this.method="return",this.next="end"):"normal"===a.type&&b&&(this.next=b),v},finish:function finish(a){for(var b,c=this.tryEntries.length-1;0<=c;--c)if(b=this.tryEntries[c],b.finallyLoc===a)return this.complete(b.completion,b.afterLoc),k(b),v},catch:function _catch(a){for(var b,c=this.tryEntries.length-1;0<=c;--c)if(b=this.tryEntries[c],b.tryLoc===a){var d=b.completion;if("throw"===d.type){var e=d.arg;k(b)}return e}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(a,b,c){return this.delegate={iterator:m(a),resultName:b,nextLoc:c},"next"===this.method&&(this.arg=void 0),v}},o}function asyncGeneratorStep(a,b,c,d,e,f,g){try{var h=a[f](g),i=h.value}catch(a){return void c(a)}h.done?b(i):Promise.resolve(i).then(d,e)}function _asyncToGenerator(a){return function(){var b=this,c=arguments;return new Promise(function(d,e){function f(a){asyncGeneratorStep(h,d,e,f,g,"next",a)}function g(a){asyncGeneratorStep(h,d,e,f,g,"throw",a)}var h=a.apply(b,c);f(void 0)})}}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,c.key,c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _get(){return _get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(a,b,c){var d=_superPropBase(a,b);if(d){var e=Object.getOwnPropertyDescriptor(d,b);return e.get?e.get.call(3>arguments.length?a:c):e.value}},_get.apply(this,arguments)}function _superPropBase(a,b){for(;!Object.prototype.hasOwnProperty.call(a,b)&&(a=_getPrototypeOf(a),null!==a););return a}function _inherits(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function");a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,writable:!0,configurable:!0}}),Object.defineProperty(a,"prototype",{writable:!1}),b&&_setPrototypeOf(a,b)}function _setPrototypeOf(a,b){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,b){return a.__proto__=b,a},_setPrototypeOf(a,b)}function _createSuper(a){var b=_isNativeReflectConstruct();return function(){var c,d=_getPrototypeOf(a);if(b){var e=_getPrototypeOf(this).constructor;c=Reflect.construct(d,arguments,e)}else c=d.apply(this,arguments);return _possibleConstructorReturn(this,c)}}function _possibleConstructorReturn(a,b){if(b&&("object"===_typeof(b)||"function"==typeof b))return b;if(void 0!==b)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(a)}function _assertThisInitialized(a){if(void 0===a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return a}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(a){return!1}}function _getPrototypeOf(a){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},_getPrototypeOf(a)}function _defineProperty(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}/**
|
|
1
|
+
import { gfunc } from "@azrico/global";
|
|
2
|
+
import { object_equals_loose } from "@azrico/object";
|
|
3
|
+
import { EventManager } from "@azrico/event";
|
|
4
|
+
import SimpleObject from "./SimpleObject";
|
|
5
|
+
import { combine_if_not_blank } from "@azrico/string";
|
|
6
|
+
/**
|
|
2
7
|
* this object supports onChange events
|
|
3
|
-
*/
|
|
8
|
+
*/
|
|
9
|
+
export class EventfulObject extends SimpleObject {
|
|
10
|
+
__errors;
|
|
11
|
+
__options;
|
|
12
|
+
__showErrors;
|
|
13
|
+
__eventList;
|
|
14
|
+
__eventPrefix;
|
|
15
|
+
__sendEvents = true;
|
|
16
|
+
constructor(...p) {
|
|
17
|
+
super(...p);
|
|
18
|
+
this.__eventList = {};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
4
21
|
*
|
|
5
22
|
* @param key
|
|
6
23
|
* @param value
|
|
7
24
|
* @param subvalue
|
|
8
25
|
* @returns true if changed , false if not changed
|
|
9
|
-
*/
|
|
26
|
+
*/
|
|
27
|
+
setValue(key, value, sendChange = "auto") {
|
|
28
|
+
const isValueChanged = super.setValue(key, value);
|
|
29
|
+
if (sendChange === true || (isValueChanged && sendChange === "auto")) {
|
|
30
|
+
this.notifyChanged("", key, value, undefined);
|
|
31
|
+
}
|
|
32
|
+
return isValueChanged;
|
|
33
|
+
}
|
|
34
|
+
setSubValue(key, subkey, subvalue, sendChange = "auto") {
|
|
35
|
+
const isValueChanged = super.setSubValue(key, subkey, subvalue);
|
|
36
|
+
if (sendChange === true || (isValueChanged && sendChange === "auto")) {
|
|
37
|
+
this.notifyChanged(key, subkey, subvalue, undefined);
|
|
38
|
+
}
|
|
39
|
+
return isValueChanged;
|
|
40
|
+
}
|
|
41
|
+
pushValue(key, value, sendChange = "auto") {
|
|
42
|
+
const isValueChanged = super.setValue(key, value);
|
|
43
|
+
if (sendChange === true || (isValueChanged && sendChange === "auto")) {
|
|
44
|
+
this.notifyChanged("", key, value, undefined);
|
|
45
|
+
}
|
|
46
|
+
return isValueChanged;
|
|
47
|
+
}
|
|
48
|
+
/* -------------------------------------------------------------------------- */
|
|
49
|
+
notifyChanged(type, key, value, subvalue) {
|
|
50
|
+
if (value === undefined)
|
|
51
|
+
value = this.getValue(key);
|
|
52
|
+
super.notifyChanged(type, key, value, subvalue);
|
|
53
|
+
const typestr = (type ? `$${type}$` : "") + key;
|
|
54
|
+
this.event_run("on_change", typestr, value);
|
|
55
|
+
}
|
|
56
|
+
/* -------------------------------------------------------------------------- */
|
|
57
|
+
/* Events */
|
|
58
|
+
/* -------------------------------------------------------------------------- */
|
|
59
|
+
async event_run(eventName, ...params) {
|
|
60
|
+
if (!this.__sendEvents)
|
|
61
|
+
return;
|
|
62
|
+
await EventManager.run(this, eventName, ...params);
|
|
63
|
+
}
|
|
64
|
+
event_use(name, runEvent, onlyOn = null, runOnce = false) {
|
|
65
|
+
return EventManager.use(this, name, runEvent, onlyOn, runOnce);
|
|
66
|
+
}
|
|
67
|
+
async event_add(name, uname, runEvent, onlyOn = null, runOnce = false) {
|
|
68
|
+
await EventManager.add(this, name, uname, runEvent, onlyOn, runOnce);
|
|
69
|
+
}
|
|
70
|
+
events_stop() {
|
|
71
|
+
this.__sendEvents = false;
|
|
72
|
+
}
|
|
73
|
+
events_clear() {
|
|
74
|
+
EventfulObject.events_clear(this);
|
|
75
|
+
}
|
|
76
|
+
static events_clear(obj) {
|
|
77
|
+
EventManager.removeAll(obj);
|
|
78
|
+
}
|
|
79
|
+
/* -------------------------------------------------------------------------- */
|
|
80
|
+
/* Options */
|
|
81
|
+
/* -------------------------------------------------------------------------- */
|
|
82
|
+
/**
|
|
10
83
|
* Set an option to some value, if its already equal to the value it will be deleted instead
|
|
11
84
|
* @param key
|
|
12
85
|
* @param value
|
|
13
86
|
* @returns
|
|
14
|
-
*/
|
|
87
|
+
*/
|
|
88
|
+
toggleOption(key, value) {
|
|
89
|
+
var oldval = this.getOption(key);
|
|
90
|
+
if (object_equals_loose(oldval, value)) {
|
|
91
|
+
this.setOption(key, null);
|
|
92
|
+
}
|
|
93
|
+
else
|
|
94
|
+
this.setOption(key, value);
|
|
95
|
+
}
|
|
96
|
+
setOption(key, value) {
|
|
97
|
+
if (this.__options == null)
|
|
98
|
+
this.__options = {};
|
|
99
|
+
if (value == null) {
|
|
100
|
+
delete this.__options[key];
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this.__options[key] = value;
|
|
104
|
+
}
|
|
105
|
+
return this.event_run("on_option_change", key, value);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
15
108
|
* Sets an option then does an action,
|
|
16
109
|
* after the action is run, updates the option again
|
|
17
110
|
* @param key
|
|
18
111
|
* @param value
|
|
19
112
|
* @param nextvalue
|
|
20
113
|
* @param action
|
|
21
|
-
*/
|
|
114
|
+
*/
|
|
115
|
+
async holdOption(key, value, nextvalue, action) {
|
|
116
|
+
try {
|
|
117
|
+
this.setOption(key, value);
|
|
118
|
+
if (typeof action === "function")
|
|
119
|
+
await action();
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
this.setOption(key, nextvalue);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
getOption(key) {
|
|
126
|
+
if (this.__options == null)
|
|
127
|
+
return undefined;
|
|
128
|
+
return this.__options[key];
|
|
129
|
+
}
|
|
130
|
+
/* -------------------------------------------------------------------------- */
|
|
131
|
+
/* Errors */
|
|
132
|
+
/* -------------------------------------------------------------------------- */
|
|
133
|
+
addError(title, msg = "", sendToRegister = false) {
|
|
134
|
+
EventfulObject.addError(this, title, msg, sendToRegister);
|
|
135
|
+
}
|
|
136
|
+
static addError(o, title, message, sendToRegister = false) {
|
|
137
|
+
if (!Array.isArray(o.__errors))
|
|
138
|
+
o.__errors = [];
|
|
139
|
+
const errStr = combine_if_not_blank(title, " : ", message);
|
|
140
|
+
console.error("[ERR]", errStr);
|
|
141
|
+
o.__errors.push(errStr);
|
|
142
|
+
if (o.__showErrors !== false && sendToRegister) {
|
|
143
|
+
gfunc.run_action("add_error", {
|
|
144
|
+
title: title,
|
|
145
|
+
message: message,
|
|
146
|
+
type: "error",
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return o.__errors;
|
|
150
|
+
}
|
|
151
|
+
static getErrors(o) {
|
|
152
|
+
return o.__errors || [];
|
|
153
|
+
}
|
|
154
|
+
static clearErrors(o) {
|
|
155
|
+
o.__errors = [];
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
export default EventfulObject;
|
|
@@ -1,3 +1,73 @@
|
|
|
1
|
-
|
|
1
|
+
import ObjectArray from "./ObjectArray";
|
|
2
|
+
import { object_first } from "@azrico/object";
|
|
3
|
+
import { string_equals_ignorecase } from "@azrico/string";
|
|
4
|
+
import { uid } from "@azrico/uid";
|
|
5
|
+
/**
|
|
2
6
|
* This object can be mapped and converted
|
|
3
|
-
*/
|
|
7
|
+
*/
|
|
8
|
+
export class MapableObject {
|
|
9
|
+
__uid;
|
|
10
|
+
__data_id;
|
|
11
|
+
__table_id;
|
|
12
|
+
__row_number;
|
|
13
|
+
constructor() {
|
|
14
|
+
this.__uid = uid.localuid();
|
|
15
|
+
}
|
|
16
|
+
static mapto(maptoType, objectlist, isEditMode = true, ...p) {
|
|
17
|
+
if (objectlist === undefined) {
|
|
18
|
+
if (maptoType === undefined)
|
|
19
|
+
return [];
|
|
20
|
+
if (maptoType instanceof Object)
|
|
21
|
+
return [];
|
|
22
|
+
objectlist = maptoType;
|
|
23
|
+
maptoType = this;
|
|
24
|
+
}
|
|
25
|
+
if (objectlist == null)
|
|
26
|
+
return [];
|
|
27
|
+
if (objectlist instanceof ObjectArray)
|
|
28
|
+
objectlist = objectlist.getObjects();
|
|
29
|
+
if (typeof objectlist != "object")
|
|
30
|
+
objectlist = [objectlist];
|
|
31
|
+
if (!Array.isArray(objectlist)) {
|
|
32
|
+
return [this.ensure(maptoType, objectlist, isEditMode, ...p)];
|
|
33
|
+
}
|
|
34
|
+
return objectlist.map((r) => this.ensure(maptoType, r, isEditMode, ...p));
|
|
35
|
+
}
|
|
36
|
+
static ensure(maptoType, object, isEditMode, ...p) {
|
|
37
|
+
if (object === undefined) {
|
|
38
|
+
object = maptoType;
|
|
39
|
+
maptoType = this;
|
|
40
|
+
}
|
|
41
|
+
if (Array.isArray(object))
|
|
42
|
+
object = object_first(object);
|
|
43
|
+
return object instanceof maptoType
|
|
44
|
+
? object
|
|
45
|
+
: new maptoType(object, isEditMode, ...p);
|
|
46
|
+
}
|
|
47
|
+
/* -------------------------------------------------------------------------- */
|
|
48
|
+
static map_rowindex(objectlist) {
|
|
49
|
+
let index = 0;
|
|
50
|
+
return (objectlist?.map((r, i) => {
|
|
51
|
+
r.__row_number = ++index;
|
|
52
|
+
return r;
|
|
53
|
+
}) ?? []);
|
|
54
|
+
}
|
|
55
|
+
static map_tableid(objectlist) {
|
|
56
|
+
let index = 0;
|
|
57
|
+
return (objectlist?.map((r, i) => {
|
|
58
|
+
r.__table_id = r.__uid ?? String(++index);
|
|
59
|
+
return r;
|
|
60
|
+
}) ?? []);
|
|
61
|
+
}
|
|
62
|
+
static equals(a, b) {
|
|
63
|
+
console.warn("Dont use the default equals method !");
|
|
64
|
+
if (a == undefined || b == undefined)
|
|
65
|
+
return false;
|
|
66
|
+
if (typeof a === "object")
|
|
67
|
+
a = a.__uid;
|
|
68
|
+
if (typeof b === "object")
|
|
69
|
+
b = b.__uid;
|
|
70
|
+
return string_equals_ignorecase(a, b);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export default MapableObject;
|
|
@@ -1 +1,35 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports["default"]=exports.MetaObject=void 0;var _object=require("@azrico/object"),_SimpleObject2=_interopRequireDefault(require("./SimpleObject"));function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}function _regeneratorRuntime(){"use strict";/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */function a(a,b,c){return Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}),a[b]}function b(a,b,e,f){var g=b&&b.prototype instanceof d?b:d,h=Object.create(g.prototype),j=new l(f||[]);return h._invoke=function(a,b,d){var e="suspendedStart";return function(f,g){if("executing"===e)throw new Error("Generator is already running");if("completed"===e){if("throw"===f)throw g;return n()}for(d.method=f,d.arg=g;;){var h=d.delegate;if(h){var j=i(h,d);if(j){if(j===v)continue;return j}}if("next"===d.method)d.sent=d._sent=d.arg;else if("throw"===d.method){if("suspendedStart"===e)throw e="completed",d.arg;d.dispatchException(d.arg)}else"return"===d.method&&d.abrupt("return",d.arg);e="executing";var k=c(a,b,d);if("normal"===k.type){if(e=d.done?"completed":"suspendedYield",k.arg===v)continue;return{value:k.arg,done:d.done}}"throw"===k.type&&(e="completed",d.method="throw",d.arg=k.arg)}}}(a,e,j),h}function c(a,b,c){try{return{type:"normal",arg:a.call(b,c)}}catch(a){return{type:"throw",arg:a}}}function d(){}function e(){}function f(){}function g(b){["next","throw","return"].forEach(function(c){a(b,c,function(a){return this._invoke(c,a)})})}function h(a,b){function d(e,f,g,h){var i=c(a[e],a,f);if("throw"!==i.type){var j=i.arg,k=j.value;return k&&"object"==_typeof(k)&&q.call(k,"__await")?b.resolve(k.__await).then(function(a){d("next",a,g,h)},function(a){d("throw",a,g,h)}):b.resolve(k).then(function(a){j.value=a,g(j)},function(a){return d("throw",a,g,h)})}h(i.arg)}var e;this._invoke=function(a,c){function f(){return new b(function(b,e){d(a,c,b,e)})}return e=e?e.then(f,f):f()}}function i(a,b){var d=a.iterator[b.method];if(void 0===d){if(b.delegate=null,"throw"===b.method){if(a.iterator["return"]&&(b.method="return",b.arg=void 0,i(a,b),"throw"===b.method))return v;b.method="throw",b.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var e=c(d,a.iterator,b.arg);if("throw"===e.type)return b.method="throw",b.arg=e.arg,b.delegate=null,v;var f=e.arg;return f?f.done?(b[a.resultName]=f.value,b.next=a.nextLoc,"return"!==b.method&&(b.method="next",b.arg=void 0),b.delegate=null,v):f:(b.method="throw",b.arg=new TypeError("iterator result is not an object"),b.delegate=null,v)}function j(a){var b={tryLoc:a[0]};1 in a&&(b.catchLoc=a[1]),2 in a&&(b.finallyLoc=a[2],b.afterLoc=a[3]),this.tryEntries.push(b)}function k(a){var b=a.completion||{};b.type="normal",delete b.arg,a.completion=b}function l(a){this.tryEntries=[{tryLoc:"root"}],a.forEach(j,this),this.reset(!0)}function m(a){if(a){var b=a[s];if(b)return b.call(a);if("function"==typeof a.next)return a;if(!isNaN(a.length)){var c=-1,d=function b(){for(;++c<a.length;)if(q.call(a,c))return b.value=a[c],b.done=!1,b;return b.value=void 0,b.done=!0,b};return d.next=d}}return{next:n}}function n(){return{value:void 0,done:!0}}_regeneratorRuntime=function(){return o};var o={},p=Object.prototype,q=p.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},s=r.iterator||"@@iterator",t=r.asyncIterator||"@@asyncIterator",u=r.toStringTag||"@@toStringTag";try{a({},"")}catch(b){a=function(a,b,c){return a[b]=c}}o.wrap=b;var v={},w={};a(w,s,function(){return this});var x=Object.getPrototypeOf,y=x&&x(x(m([])));y&&y!==p&&q.call(y,s)&&(w=y);var z=f.prototype=d.prototype=Object.create(w);return e.prototype=f,a(z,"constructor",f),a(f,"constructor",e),e.displayName=a(f,u,"GeneratorFunction"),o.isGeneratorFunction=function(a){var b="function"==typeof a&&a.constructor;return!!b&&(b===e||"GeneratorFunction"===(b.displayName||b.name))},o.mark=function(b){return Object.setPrototypeOf?Object.setPrototypeOf(b,f):(b.__proto__=f,a(b,u,"GeneratorFunction")),b.prototype=Object.create(z),b},o.awrap=function(a){return{__await:a}},g(h.prototype),a(h.prototype,t,function(){return this}),o.AsyncIterator=h,o.async=function(a,c,d,e,f){void 0===f&&(f=Promise);var g=new h(b(a,c,d,e),f);return o.isGeneratorFunction(c)?g:g.next().then(function(a){return a.done?a.value:g.next()})},g(z),a(z,u,"Generator"),a(z,s,function(){return this}),a(z,"toString",function(){return"[object Generator]"}),o.keys=function(a){var b=[];for(var c in a)b.push(c);return b.reverse(),function c(){for(;b.length;){var d=b.pop();if(d in a)return c.value=d,c.done=!1,c}return c.done=!0,c}},o.values=m,l.prototype={constructor:l,reset:function reset(a){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(k),!a)for(var b in this)"t"===b.charAt(0)&&q.call(this,b)&&!isNaN(+b.slice(1))&&(this[b]=void 0)},stop:function stop(){this.done=!0;var a=this.tryEntries[0].completion;if("throw"===a.type)throw a.arg;return this.rval},dispatchException:function dispatchException(a){function b(b,d){return f.type="throw",f.arg=a,c.next=b,d&&(c.method="next",c.arg=void 0),!!d}if(this.done)throw a;for(var c=this,d=this.tryEntries.length-1;0<=d;--d){var e=this.tryEntries[d],f=e.completion;if("root"===e.tryLoc)return b("end");if(e.tryLoc<=this.prev){var g=q.call(e,"catchLoc"),h=q.call(e,"finallyLoc");if(g&&h){if(this.prev<e.catchLoc)return b(e.catchLoc,!0);if(this.prev<e.finallyLoc)return b(e.finallyLoc)}else if(!g){if(!h)throw new Error("try statement without catch or finally");if(this.prev<e.finallyLoc)return b(e.finallyLoc)}else if(this.prev<e.catchLoc)return b(e.catchLoc,!0)}}},abrupt:function abrupt(a,b){for(var c,d=this.tryEntries.length-1;0<=d;--d)if(c=this.tryEntries[d],c.tryLoc<=this.prev&&q.call(c,"finallyLoc")&&this.prev<c.finallyLoc){var e=c;break}e&&("break"===a||"continue"===a)&&e.tryLoc<=b&&b<=e.finallyLoc&&(e=null);var f=e?e.completion:{};return f.type=a,f.arg=b,e?(this.method="next",this.next=e.finallyLoc,v):this.complete(f)},complete:function complete(a,b){if("throw"===a.type)throw a.arg;return"break"===a.type||"continue"===a.type?this.next=a.arg:"return"===a.type?(this.rval=this.arg=a.arg,this.method="return",this.next="end"):"normal"===a.type&&b&&(this.next=b),v},finish:function finish(a){for(var b,c=this.tryEntries.length-1;0<=c;--c)if(b=this.tryEntries[c],b.finallyLoc===a)return this.complete(b.completion,b.afterLoc),k(b),v},catch:function _catch(a){for(var b,c=this.tryEntries.length-1;0<=c;--c)if(b=this.tryEntries[c],b.tryLoc===a){var d=b.completion;if("throw"===d.type){var e=d.arg;k(b)}return e}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(a,b,c){return this.delegate={iterator:m(a),resultName:b,nextLoc:c},"next"===this.method&&(this.arg=void 0),v}},o}function asyncGeneratorStep(a,b,c,d,e,f,g){try{var h=a[f](g),i=h.value}catch(a){return void c(a)}h.done?b(i):Promise.resolve(i).then(d,e)}function _asyncToGenerator(a){return function(){var b=this,c=arguments;return new Promise(function(d,e){function f(a){asyncGeneratorStep(h,d,e,f,g,"next",a)}function g(a){asyncGeneratorStep(h,d,e,f,g,"throw",a)}var h=a.apply(b,c);f(void 0)})}}function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,c.key,c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _inherits(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function");a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,writable:!0,configurable:!0}}),Object.defineProperty(a,"prototype",{writable:!1}),b&&_setPrototypeOf(a,b)}function _setPrototypeOf(a,b){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,b){return a.__proto__=b,a},_setPrototypeOf(a,b)}function _createSuper(a){var b=_isNativeReflectConstruct();return function(){var c,d=_getPrototypeOf(a);if(b){var e=_getPrototypeOf(this).constructor;c=Reflect.construct(d,arguments,e)}else c=d.apply(this,arguments);return _possibleConstructorReturn(this,c)}}function _possibleConstructorReturn(a,b){if(b&&("object"===_typeof(b)||"function"==typeof b))return b;if(void 0!==b)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(a)}function _assertThisInitialized(a){if(void 0===a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return a}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(a){return!1}}function _getPrototypeOf(a){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},_getPrototypeOf(a)}function _defineProperty(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}var MetaObject=/*#__PURE__*/function(a){function b(a,d){var e;return _classCallCheck(this,b),e=c.call(this,!0,!1),_defineProperty(_assertThisInitialized(e),"id",void 0),_defineProperty(_assertThisInitialized(e),"key",""),_defineProperty(_assertThisInitialized(e),"value",void 0),"object"===_typeof(a)?(e.id=a.id,e.key=a.key,e.value=a.value):"string"==typeof a&&(e.key=a,e.value=d),e.setOriginal(),e}_inherits(b,a);var c=_createSuper(b);return _createClass(b,[{key:"get_saveObject",value:function(){function a(){return c.apply(this,arguments)}var c=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function a(){return _regeneratorRuntime().wrap(function c(a){for(;1;)switch(a.prev=a.next){case 0:return a.next=2,b.get_saveObject(this);case 2:return a.abrupt("return",a.sent);case 3:case"end":return a.stop();}},a,this)}));return a}()},{key:"Prepare",value:function(){function a(){return b.apply(this,arguments)}var b=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function a(){return _regeneratorRuntime().wrap(function b(a){for(;1;)switch(a.prev=a.next){case 0:return this.key+="",a.next=3,Promise.resolve(!0);case 3:return a.abrupt("return",a.sent);case 4:case"end":return a.stop();}},a,this)}));return a}()},{key:"isNew",get:function get(){return null==this.id||0>=+this.id}},{key:"isDeleted",get:function get(){return(0,_object.object_isExactlyEmpty)(this.value)}}],[{key:"get_saveObject",value:function(){function a(a){return b.apply(this,arguments)}var b=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function b(a){return _regeneratorRuntime().wrap(function b(a){for(;1;)switch(a.prev=a.next){case 0:case"end":return a.stop();}},b)}));return a}()}]),b}(_SimpleObject2["default"]);exports.MetaObject=MetaObject;var _default=MetaObject;exports["default"]=_default;
|
|
1
|
+
import { object_isExactlyEmpty } from "@azrico/object";
|
|
2
|
+
import SimpleObject from "./SimpleObject";
|
|
3
|
+
export class MetaObject extends SimpleObject {
|
|
4
|
+
id;
|
|
5
|
+
key = "";
|
|
6
|
+
value;
|
|
7
|
+
constructor(initObject, value) {
|
|
8
|
+
super(true, false);
|
|
9
|
+
if (typeof initObject === "object") {
|
|
10
|
+
this.id = initObject.id;
|
|
11
|
+
this.key = initObject.key;
|
|
12
|
+
this.value = initObject.value;
|
|
13
|
+
}
|
|
14
|
+
else if (typeof initObject === "string") {
|
|
15
|
+
this.key = initObject;
|
|
16
|
+
this.value = value;
|
|
17
|
+
}
|
|
18
|
+
this.setOriginal();
|
|
19
|
+
}
|
|
20
|
+
async get_saveObject() {
|
|
21
|
+
return await MetaObject.get_saveObject(this);
|
|
22
|
+
}
|
|
23
|
+
static async get_saveObject(obj) { }
|
|
24
|
+
async Prepare() {
|
|
25
|
+
this.key = String(this.key);
|
|
26
|
+
return await Promise.resolve(true);
|
|
27
|
+
}
|
|
28
|
+
get isNew() {
|
|
29
|
+
return this.id == null || Number(this.id) <= 0;
|
|
30
|
+
}
|
|
31
|
+
get isDeleted() {
|
|
32
|
+
return object_isExactlyEmpty(this.value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export default MetaObject;
|
|
@@ -1 +1,43 @@
|
|
|
1
|
-
|
|
1
|
+
export class ObjectArray {
|
|
2
|
+
/* -------------------------------------------------------------------------- */
|
|
3
|
+
/* Values */
|
|
4
|
+
/* -------------------------------------------------------------------------- */
|
|
5
|
+
objArray = [];
|
|
6
|
+
/* -------------------------------------------------------------------------- */
|
|
7
|
+
/* Base */
|
|
8
|
+
/* -------------------------------------------------------------------------- */
|
|
9
|
+
constructor(initObject, mapto_type) {
|
|
10
|
+
this.setObjects(initObject, mapto_type);
|
|
11
|
+
}
|
|
12
|
+
addObjects(initObject, mapto_type) {
|
|
13
|
+
if (initObject == null)
|
|
14
|
+
return false;
|
|
15
|
+
let resultObjects = ObjectArray.flattenWebObjects(initObject);
|
|
16
|
+
if (mapto_type)
|
|
17
|
+
resultObjects = resultObjects.map((r) => r instanceof mapto_type ? r : new mapto_type(r));
|
|
18
|
+
resultObjects.map((s) => this.objArray.push(s));
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
setObjects(initObject, mapto_type) {
|
|
22
|
+
this.objArray = [];
|
|
23
|
+
this.addObjects(initObject, mapto_type);
|
|
24
|
+
}
|
|
25
|
+
getObjects() {
|
|
26
|
+
return this.objArray;
|
|
27
|
+
}
|
|
28
|
+
static flattenWebObjects(inputData) {
|
|
29
|
+
if (inputData instanceof ObjectArray) {
|
|
30
|
+
return ObjectArray.flattenWebObjects(inputData.objArray);
|
|
31
|
+
}
|
|
32
|
+
else if (Array.isArray(inputData)) {
|
|
33
|
+
let final_result = [];
|
|
34
|
+
inputData.map((ind) => {
|
|
35
|
+
ObjectArray.flattenWebObjects(ind).map((s) => final_result.push(s));
|
|
36
|
+
});
|
|
37
|
+
return final_result;
|
|
38
|
+
}
|
|
39
|
+
else
|
|
40
|
+
return [inputData];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export default ObjectArray;
|
|
@@ -4,7 +4,7 @@ export declare class SimpleObject extends MapableObject {
|
|
|
4
4
|
__delta: Partial<this>;
|
|
5
5
|
__changed: boolean;
|
|
6
6
|
__lastChanged: string;
|
|
7
|
-
|
|
7
|
+
__is_readonly: boolean;
|
|
8
8
|
readonly __is_edit_mode: boolean;
|
|
9
9
|
static __cache_name: string;
|
|
10
10
|
constructor(isEditMode?: boolean, is_readonly?: boolean);
|
|
@@ -42,6 +42,7 @@ export declare class SimpleObject extends MapableObject {
|
|
|
42
42
|
* Apply the changes and empty the delta object
|
|
43
43
|
*/
|
|
44
44
|
apply_changes(): void;
|
|
45
|
+
static setReadonly(objs?: SimpleObject[] | SimpleObject, readonlyval?: boolean): void;
|
|
45
46
|
get isChanged(): boolean;
|
|
46
47
|
get isDeleted(): boolean;
|
|
47
48
|
get d(): Partial<this>;
|
|
@@ -49,7 +50,6 @@ export declare class SimpleObject extends MapableObject {
|
|
|
49
50
|
get isEditMode(): boolean;
|
|
50
51
|
get __cache_name(): string;
|
|
51
52
|
get_lastChanged(): boolean;
|
|
52
|
-
get_canModify(): boolean;
|
|
53
53
|
static isDeleted<T extends SimpleObject>(obj: T): boolean;
|
|
54
54
|
getOriginal(): this | undefined;
|
|
55
55
|
setOriginal(toObj?: null | 0 | any): this | undefined;
|
|
@@ -1,26 +1,291 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { gcache } from "@azrico/global";
|
|
2
|
+
import { object_clone, object_equals, object_isEmpty, object_removeKeys, prop_rn, } from "@azrico/object";
|
|
3
|
+
import { MapableObject } from "./MapableObject";
|
|
4
|
+
export class SimpleObject extends MapableObject {
|
|
5
|
+
__originalobject;
|
|
6
|
+
//changes
|
|
7
|
+
__delta;
|
|
8
|
+
__changed = false;
|
|
9
|
+
__lastChanged = "";
|
|
10
|
+
__is_readonly;
|
|
11
|
+
__is_edit_mode;
|
|
12
|
+
static __cache_name = "";
|
|
13
|
+
constructor(isEditMode = true, is_readonly = false) {
|
|
14
|
+
super();
|
|
15
|
+
this.__delta = {};
|
|
16
|
+
this.__is_edit_mode = isEditMode;
|
|
17
|
+
this.__is_readonly = is_readonly || !this.__is_edit_mode;
|
|
18
|
+
}
|
|
19
|
+
/* -------------------------------------------------------------------------- */
|
|
20
|
+
/* Load */
|
|
21
|
+
/* -------------------------------------------------------------------------- */
|
|
22
|
+
loadValues(initObject, fullUpdate = false) {
|
|
23
|
+
SimpleObject.loadValues(this, initObject, fullUpdate);
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
static loadValues(obj, initObject, fullUpdate = false) {
|
|
27
|
+
if (initObject == null) {
|
|
28
|
+
for (const key in obj) {
|
|
29
|
+
delete obj[key];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else if (typeof initObject == "object") {
|
|
33
|
+
for (const key in initObject) {
|
|
34
|
+
//if (fullUpdate != true) {
|
|
35
|
+
// if (key.startsWith("_")) continue;
|
|
36
|
+
//}
|
|
37
|
+
if (key.startsWith("__"))
|
|
38
|
+
continue;
|
|
39
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
40
|
+
obj[key] = initObject[key];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
/* -------------------------------------------------------------------------- */
|
|
47
|
+
static getValue(o, key, original = false) {
|
|
48
|
+
if (o instanceof SimpleObject && typeof o.getValue === "function")
|
|
49
|
+
return o.getValue(key, original);
|
|
50
|
+
if (!original && o.__delta[key])
|
|
51
|
+
return o.__delta[key];
|
|
52
|
+
return o[key];
|
|
53
|
+
}
|
|
54
|
+
getValue(key, original = false) {
|
|
55
|
+
if (!original && this.__delta[key])
|
|
56
|
+
return this.__delta[key];
|
|
57
|
+
return this[key];
|
|
58
|
+
}
|
|
59
|
+
get(key, original = false) {
|
|
60
|
+
if (!original && this.__delta[key])
|
|
61
|
+
return this.__delta[key];
|
|
62
|
+
return this[key];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
3
65
|
* set value
|
|
4
66
|
* @param key
|
|
5
67
|
* @param value
|
|
6
68
|
* @return true if changed , false otherwise
|
|
7
|
-
*/
|
|
69
|
+
*/
|
|
70
|
+
setValue(key, value) {
|
|
71
|
+
if (!this.canModify)
|
|
72
|
+
throw Error("Cant use setValue when on readonly mode");
|
|
73
|
+
let isValueChanged = false;
|
|
74
|
+
try {
|
|
75
|
+
const oldval = this.getValue(key);
|
|
76
|
+
if (!object_equals(oldval, value, { ignoredStartingWords: "_" })) {
|
|
77
|
+
this.__delta[key] = value;
|
|
78
|
+
isValueChanged = true;
|
|
79
|
+
}
|
|
80
|
+
else
|
|
81
|
+
isValueChanged = false;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
if (isValueChanged) {
|
|
85
|
+
this.notifyChanged("", key, value);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return isValueChanged;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
8
91
|
* set key of subObject
|
|
9
92
|
* @param key
|
|
10
93
|
* @param value
|
|
11
94
|
* @param subvalue
|
|
12
95
|
* @return true if changed , false otherwise
|
|
13
|
-
*/
|
|
14
|
-
|
|
96
|
+
*/
|
|
97
|
+
setSubValue(key, objKey, subvalue) {
|
|
98
|
+
if (!this.canModify)
|
|
99
|
+
throw Error("Cant use setValue when on readonly mode");
|
|
100
|
+
let isValueChanged = false;
|
|
101
|
+
try {
|
|
102
|
+
//if accessing subval of an object, make sure the object is not null
|
|
103
|
+
if (this.__delta[key] == null ||
|
|
104
|
+
typeof this.__delta[key] != "object")
|
|
105
|
+
this.__delta[key] = {};
|
|
106
|
+
const subval = this.__delta[key][objKey];
|
|
107
|
+
if (!object_equals(subval, subvalue, {
|
|
108
|
+
ignoredStartingWords: "_",
|
|
109
|
+
})) {
|
|
110
|
+
this.__delta[key][objKey] = subvalue;
|
|
111
|
+
isValueChanged = true;
|
|
112
|
+
}
|
|
113
|
+
else
|
|
114
|
+
isValueChanged = false;
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
if (isValueChanged) {
|
|
118
|
+
this.notifyChanged("", key, objKey, subvalue);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return isValueChanged;
|
|
122
|
+
}
|
|
123
|
+
//Push value on array
|
|
124
|
+
pushValue(key, value) {
|
|
125
|
+
if (value == null)
|
|
126
|
+
return null;
|
|
127
|
+
if (!this.get_canModify())
|
|
128
|
+
throw Error("Cant use pushValue when on readonly mode");
|
|
129
|
+
if (this.__delta[key] == null) {
|
|
130
|
+
this.__delta[key] = this.getValue(key);
|
|
131
|
+
}
|
|
132
|
+
if (!Array.isArray(this.__delta[key]))
|
|
133
|
+
throw Error("Cant use pushValue on non Array keys");
|
|
134
|
+
let tempArray = this.__delta[key];
|
|
135
|
+
tempArray.push(value);
|
|
136
|
+
this.__delta[key] = tempArray;
|
|
137
|
+
this.__changed = true;
|
|
138
|
+
this.__lastChanged = `${key} : +${value}`;
|
|
139
|
+
return tempArray;
|
|
140
|
+
}
|
|
141
|
+
notifyChanged(type, key, value, subvalue) {
|
|
142
|
+
if (value === undefined)
|
|
143
|
+
value = this.getValue(key);
|
|
144
|
+
this.__changed = true;
|
|
145
|
+
let lc = "";
|
|
146
|
+
if (type)
|
|
147
|
+
lc += `[${type}] `;
|
|
148
|
+
if (subvalue) {
|
|
149
|
+
lc += `${key}->${value} = ${subvalue}`;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
lc += `${key} = ${value}`;
|
|
153
|
+
}
|
|
154
|
+
this.__lastChanged = lc;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
15
157
|
* Rename object property, mostly used to fix init_object to match legacy versions
|
|
16
158
|
* @param o
|
|
17
159
|
* @param f
|
|
18
160
|
* @param t
|
|
19
161
|
* @returns
|
|
20
|
-
*/
|
|
162
|
+
*/
|
|
163
|
+
rn(o, f, t) {
|
|
164
|
+
if (typeof o == "object") {
|
|
165
|
+
if (typeof f === "string" && typeof t === "string") {
|
|
166
|
+
return prop_rn(o, f, t);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (typeof o === "string" && typeof f === "string") {
|
|
170
|
+
return prop_rn(this, o, f);
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
/* -------------------------------------------------------------------------- */
|
|
175
|
+
/* Changes */
|
|
176
|
+
/* -------------------------------------------------------------------------- */
|
|
177
|
+
/**
|
|
21
178
|
* Apply the changes and empty the delta object
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
179
|
+
*/
|
|
180
|
+
apply_changes() {
|
|
181
|
+
if (!this.isChanged) {
|
|
182
|
+
console.warn("No changes to apply");
|
|
183
|
+
}
|
|
184
|
+
for (const key in this.__delta) {
|
|
185
|
+
const nv = this.__delta[key];
|
|
186
|
+
this[key] = nv;
|
|
187
|
+
}
|
|
188
|
+
this.__delta = {};
|
|
189
|
+
this.__changed = false;
|
|
190
|
+
}
|
|
191
|
+
static setReadonly(objs, readonlyval = true) {
|
|
192
|
+
let checkObjs = [];
|
|
193
|
+
if (!objs)
|
|
194
|
+
objs = [];
|
|
195
|
+
if (!Array.isArray(objs))
|
|
196
|
+
checkObjs = [objs];
|
|
197
|
+
else
|
|
198
|
+
checkObjs = objs;
|
|
199
|
+
for (let index = 0; index < checkObjs.length; index++) {
|
|
200
|
+
const element = checkObjs[index];
|
|
201
|
+
element.__is_readonly = readonlyval;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/* -------------------------------------------------------------------------- */
|
|
205
|
+
/* Get/Check */
|
|
206
|
+
/* -------------------------------------------------------------------------- */
|
|
207
|
+
get isChanged() {
|
|
208
|
+
return !object_isEmpty(this.__delta);
|
|
209
|
+
}
|
|
210
|
+
get isDeleted() {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
get d() {
|
|
214
|
+
return this.__delta;
|
|
215
|
+
}
|
|
216
|
+
get canModify() {
|
|
217
|
+
return !this.__is_readonly && this.isEditMode;
|
|
218
|
+
}
|
|
219
|
+
get isEditMode() {
|
|
220
|
+
return this.__is_edit_mode !== false;
|
|
221
|
+
}
|
|
222
|
+
get __cache_name() {
|
|
223
|
+
return this.constructor["__cache_name"];
|
|
224
|
+
}
|
|
225
|
+
get_lastChanged() {
|
|
226
|
+
return !this.__lastChanged;
|
|
227
|
+
}
|
|
228
|
+
static isDeleted(obj) {
|
|
229
|
+
if (obj instanceof SimpleObject)
|
|
230
|
+
return obj.isDeleted === true;
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
/* -------------------------------------------------------------------------- */
|
|
234
|
+
/* Original */
|
|
235
|
+
/* -------------------------------------------------------------------------- */
|
|
236
|
+
getOriginal() {
|
|
237
|
+
return this.__originalobject || undefined;
|
|
238
|
+
}
|
|
239
|
+
setOriginal(toObj = 0) {
|
|
240
|
+
if (toObj === null) {
|
|
241
|
+
delete this.__originalobject;
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (!this.isEditMode) {
|
|
245
|
+
console.warn("Cant use setOriginal on non original objects ! this will create an infinite loop");
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (this.__is_readonly) {
|
|
249
|
+
delete this.__originalobject;
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (toObj === 0) {
|
|
253
|
+
toObj = this;
|
|
254
|
+
}
|
|
255
|
+
const cloneObject = object_clone(toObj);
|
|
256
|
+
//this.__originalobject = cloneObject, ["__"];
|
|
257
|
+
this.__originalobject = object_removeKeys(cloneObject, ["__"]);
|
|
258
|
+
return this;
|
|
259
|
+
}
|
|
260
|
+
static setOriginal(obj, toObj = 0) {
|
|
261
|
+
if (!(obj instanceof SimpleObject))
|
|
262
|
+
return undefined;
|
|
263
|
+
return obj.setOriginal(toObj);
|
|
264
|
+
}
|
|
265
|
+
static getOriginal(obj) {
|
|
266
|
+
if (obj instanceof SimpleObject)
|
|
267
|
+
return obj.getOriginal();
|
|
268
|
+
return obj?.__originalobject;
|
|
269
|
+
}
|
|
270
|
+
/* -------------------------------------------------------------------------- */
|
|
271
|
+
/* statics */
|
|
272
|
+
/* -------------------------------------------------------------------------- */
|
|
273
|
+
static delete_cache() {
|
|
274
|
+
if (!this.__cache_name)
|
|
275
|
+
return;
|
|
276
|
+
gcache.delete_cache(this.__cache_name);
|
|
277
|
+
}
|
|
278
|
+
static get_canModify(o) {
|
|
279
|
+
if (o instanceof SimpleObject)
|
|
280
|
+
return o.canModify;
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
/* -------------------------------------------------------------------------- */
|
|
284
|
+
static equals(a, b) {
|
|
285
|
+
console.warn("Dont use the default equals method !");
|
|
286
|
+
if (a == undefined || b == undefined)
|
|
287
|
+
return false;
|
|
288
|
+
return a === b;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
export default SimpleObject;
|