dataflux 1.9.0 → 1.9.3
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/ObserverStore.js +53 -3
- package/dist/PersistentStore.js +33 -15
- package/dist/Store.js +108 -116
- package/dist/dataflux.min.js +1 -1
- package/dist/dataflux.min.js.map +1 -1
- package/package.json +9 -9
package/dist/ObserverStore.js
CHANGED
|
@@ -83,6 +83,8 @@ var _propagateChange = /*#__PURE__*/new WeakMap();
|
|
|
83
83
|
|
|
84
84
|
var _subscribeToObjects = /*#__PURE__*/new WeakMap();
|
|
85
85
|
|
|
86
|
+
var _merge = /*#__PURE__*/new WeakMap();
|
|
87
|
+
|
|
86
88
|
var _propagateInsertChange = /*#__PURE__*/new WeakSet();
|
|
87
89
|
|
|
88
90
|
var ObserverStore = /*#__PURE__*/function (_PersistentStore) {
|
|
@@ -288,8 +290,56 @@ var ObserverStore = /*#__PURE__*/function (_PersistentStore) {
|
|
|
288
290
|
}
|
|
289
291
|
});
|
|
290
292
|
|
|
293
|
+
_defineProperty(_assertThisInitialized(_this), "refresh", function (type) {
|
|
294
|
+
var refreshByType = function refreshByType(type) {
|
|
295
|
+
_this.pubSub.publish("refresh", {
|
|
296
|
+
status: "start",
|
|
297
|
+
model: type
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
return _this.refreshObjectByType(type).then(function (_ref4) {
|
|
301
|
+
var _ref5 = _slicedToArray(_ref4, 3),
|
|
302
|
+
inserted = _ref5[0],
|
|
303
|
+
updated = _ref5[1],
|
|
304
|
+
deleted = _ref5[2];
|
|
305
|
+
|
|
306
|
+
var item = _this.models[type];
|
|
307
|
+
return Promise.all([_classPrivateMethodGet(_assertThisInitialized(_this), _propagateInsertChange, _propagateInsertChange2).call(_assertThisInitialized(_this), type, inserted), _classPrivateFieldGet(_assertThisInitialized(_this), _propagateChange).call(_assertThisInitialized(_this), updated), _classPrivateFieldGet(_assertThisInitialized(_this), _propagateChange).call(_assertThisInitialized(_this), deleted)]).then(function () {
|
|
308
|
+
_this.pubSub.publish("refresh", {
|
|
309
|
+
status: "end",
|
|
310
|
+
model: type
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
return item.promise;
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
if (type) {
|
|
319
|
+
return refreshByType(type);
|
|
320
|
+
} else {
|
|
321
|
+
return Promise.all(Object.keys(_this.models).map(refreshByType));
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
_classPrivateFieldInitSpec(_assertThisInitialized(_this), _merge, {
|
|
326
|
+
writable: true,
|
|
327
|
+
value: function value(originalObject, newObject) {
|
|
328
|
+
for (var key in newObject) {
|
|
329
|
+
originalObject[key] = newObject[key];
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
originalObject.update();
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
|
|
291
336
|
_this._subscribed = {};
|
|
292
337
|
_this._multipleSubscribed = {};
|
|
338
|
+
|
|
339
|
+
if (options.autoRefresh && typeof options.autoRefresh === "number") {
|
|
340
|
+
setInterval(_this.refresh, options.autoRefresh);
|
|
341
|
+
}
|
|
342
|
+
|
|
293
343
|
return _this;
|
|
294
344
|
}
|
|
295
345
|
|
|
@@ -362,9 +412,9 @@ function _propagateInsertChange2(type, newObjects) {
|
|
|
362
412
|
}
|
|
363
413
|
|
|
364
414
|
var possibleSubs = Object.values(uniqueSubs);
|
|
365
|
-
(0, _batchPromises["default"])(10, possibleSubs, function (
|
|
366
|
-
var callback =
|
|
367
|
-
filterFunction =
|
|
415
|
+
(0, _batchPromises["default"])(10, possibleSubs, function (_ref6) {
|
|
416
|
+
var callback = _ref6.callback,
|
|
417
|
+
filterFunction = _ref6.filterFunction;
|
|
368
418
|
var objectsToSubscribe = filterFunction ? newObjects.filter(filterFunction) : newObjects;
|
|
369
419
|
|
|
370
420
|
if (objectsToSubscribe.length) {
|
package/dist/PersistentStore.js
CHANGED
|
@@ -152,17 +152,33 @@ var PersistentStore = /*#__PURE__*/function (_Store) {
|
|
|
152
152
|
});
|
|
153
153
|
|
|
154
154
|
_defineProperty(_assertThisInitialized(_this), "delayedSave", function () {
|
|
155
|
-
|
|
156
|
-
if (_this.
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
return new Promise(function (resolve, reject) {
|
|
156
|
+
if (_this.options.autoSave) {
|
|
157
|
+
if (_this._delayedSaveTimer) {
|
|
158
|
+
if (_this._delayedSavePromise) {
|
|
159
|
+
_this._delayedSavePromise();
|
|
159
160
|
|
|
160
|
-
|
|
161
|
-
|
|
161
|
+
_this._delayedSavePromise = null;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
clearTimeout(_this._delayedSaveTimer);
|
|
165
|
+
_this._delayedSaveTimer = null;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
_this._delayedSavePromise = resolve;
|
|
169
|
+
_this._delayedSaveTimer = setTimeout(function () {
|
|
170
|
+
resolve(_this.save());
|
|
171
|
+
_this._delayedSavePromise = null;
|
|
172
|
+
}, _this.options.saveDelay);
|
|
173
|
+
} else {
|
|
174
|
+
resolve();
|
|
175
|
+
}
|
|
176
|
+
});
|
|
162
177
|
});
|
|
163
178
|
|
|
164
179
|
_this._busy = false;
|
|
165
180
|
_this._delayedSaveTimer = null;
|
|
181
|
+
_this._delayedSavePromise = null;
|
|
166
182
|
|
|
167
183
|
if (typeof _this.options.autoSave === "number") {
|
|
168
184
|
setInterval(function () {
|
|
@@ -191,9 +207,9 @@ var PersistentStore = /*#__PURE__*/function (_Store) {
|
|
|
191
207
|
var _this3 = this;
|
|
192
208
|
|
|
193
209
|
return _get(_getPrototypeOf(PersistentStore.prototype), "insert", this).call(this, type, objects).then(function (data) {
|
|
194
|
-
_this3.delayedSave()
|
|
195
|
-
|
|
196
|
-
|
|
210
|
+
return _this3.delayedSave().then(function () {
|
|
211
|
+
return data;
|
|
212
|
+
});
|
|
197
213
|
});
|
|
198
214
|
}
|
|
199
215
|
}, {
|
|
@@ -207,9 +223,9 @@ var PersistentStore = /*#__PURE__*/function (_Store) {
|
|
|
207
223
|
var _this4 = this;
|
|
208
224
|
|
|
209
225
|
return _get(_getPrototypeOf(PersistentStore.prototype), "delete", this).call(this, typeOrObjects, filterFunction).then(function (data) {
|
|
210
|
-
_this4.delayedSave()
|
|
211
|
-
|
|
212
|
-
|
|
226
|
+
return _this4.delayedSave().then(function () {
|
|
227
|
+
return data;
|
|
228
|
+
});
|
|
213
229
|
});
|
|
214
230
|
}
|
|
215
231
|
}, {
|
|
@@ -233,11 +249,13 @@ var PersistentStore = /*#__PURE__*/function (_Store) {
|
|
|
233
249
|
} finally {
|
|
234
250
|
_iterator.f();
|
|
235
251
|
}
|
|
252
|
+
|
|
253
|
+
return objects;
|
|
236
254
|
} else {
|
|
237
|
-
_this5.delayedSave()
|
|
255
|
+
return _this5.delayedSave().then(function () {
|
|
256
|
+
return objects;
|
|
257
|
+
});
|
|
238
258
|
}
|
|
239
|
-
|
|
240
|
-
return objects;
|
|
241
259
|
});
|
|
242
260
|
}
|
|
243
261
|
}]);
|
package/dist/Store.js
CHANGED
|
@@ -43,8 +43,6 @@ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(
|
|
|
43
43
|
|
|
44
44
|
var objectStatuses = ["new", "old", "mock", "deleted"];
|
|
45
45
|
|
|
46
|
-
var _refreshObjectByType = /*#__PURE__*/new WeakMap();
|
|
47
|
-
|
|
48
46
|
var _merge = /*#__PURE__*/new WeakMap();
|
|
49
47
|
|
|
50
48
|
var _error = /*#__PURE__*/new WeakSet();
|
|
@@ -55,7 +53,7 @@ var _deleteByFilter = /*#__PURE__*/new WeakSet();
|
|
|
55
53
|
|
|
56
54
|
var _getPromise = /*#__PURE__*/new WeakSet();
|
|
57
55
|
|
|
58
|
-
var _insertObject = /*#__PURE__*/new
|
|
56
|
+
var _insertObject = /*#__PURE__*/new WeakMap();
|
|
59
57
|
|
|
60
58
|
var _loadObjects = /*#__PURE__*/new WeakSet();
|
|
61
59
|
|
|
@@ -71,8 +69,6 @@ var Store = /*#__PURE__*/function () {
|
|
|
71
69
|
|
|
72
70
|
_classPrivateMethodInitSpec(this, _loadObjects);
|
|
73
71
|
|
|
74
|
-
_classPrivateMethodInitSpec(this, _insertObject);
|
|
75
|
-
|
|
76
72
|
_classPrivateMethodInitSpec(this, _getPromise);
|
|
77
73
|
|
|
78
74
|
_classPrivateMethodInitSpec(this, _deleteByFilter);
|
|
@@ -83,80 +79,80 @@ var Store = /*#__PURE__*/function () {
|
|
|
83
79
|
return Object.keys(_this.models);
|
|
84
80
|
});
|
|
85
81
|
|
|
86
|
-
_defineProperty(this, "
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
82
|
+
_defineProperty(this, "refreshObjectByType", function (type) {
|
|
83
|
+
return _classPrivateMethodGet(_this, _getPromise, _getPromise2).call(_this, type).then(function () {
|
|
84
|
+
var item = _this.models[type];
|
|
85
|
+
var inserted = [];
|
|
86
|
+
var deleted = [];
|
|
87
|
+
var updated = [];
|
|
88
|
+
item.promise = item.model.retrieveAll()["catch"](function () {
|
|
89
|
+
var objects = Object.values(_this.models[type].storedObjects);
|
|
90
|
+
var list = [];
|
|
91
|
+
return (0, _batchPromises["default"])(4, objects, function (object) {
|
|
92
|
+
return item.model.factory(object.object).then(function (items) {
|
|
93
|
+
list = list.concat(items);
|
|
94
|
+
});
|
|
95
|
+
}).then(function () {
|
|
96
|
+
return list;
|
|
97
|
+
});
|
|
98
|
+
}).then(function (objects) {
|
|
99
|
+
var _iterator = _createForOfIteratorHelper(objects),
|
|
100
|
+
_step;
|
|
93
101
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
var item = _this.models[type];
|
|
102
|
+
try {
|
|
103
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
104
|
+
var object = _step.value;
|
|
105
|
+
var wrapper = new _Obj["default"](object, item.model);
|
|
99
106
|
|
|
100
|
-
|
|
101
|
-
status: "start",
|
|
102
|
-
model: type
|
|
103
|
-
});
|
|
107
|
+
var _id = wrapper.getId();
|
|
104
108
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
var wrapper = new _Obj["default"](object, item.model);
|
|
123
|
-
var id = wrapper.getId();
|
|
124
|
-
var currentObject = item === null || item === void 0 ? void 0 : item.storedObjects[id]; // console.log("currentObject", item);
|
|
125
|
-
|
|
126
|
-
if (currentObject) {
|
|
127
|
-
var newFingerprint = wrapper.getFingerprint();
|
|
128
|
-
var oldFingerprint = currentObject.fingerprint;
|
|
129
|
-
|
|
130
|
-
if (oldFingerprint !== newFingerprint) {
|
|
131
|
-
// Nothing to do otherwise
|
|
132
|
-
if (_this.hasChanged(type, currentObject.object)) {// Was the object edited locally?
|
|
133
|
-
// Nothing for now
|
|
134
|
-
} else {
|
|
135
|
-
// Update with the new object
|
|
136
|
-
// console.log("merge", wrapper);
|
|
137
|
-
_classPrivateFieldGet(_this, _merge).call(_this, _this.models[type].storedObjects[id].object, wrapper.toJSON());
|
|
138
|
-
|
|
139
|
-
_this.models[type].storedObjects[id].fingerprint = newFingerprint;
|
|
140
|
-
}
|
|
109
|
+
var currentObject = item === null || item === void 0 ? void 0 : item.storedObjects[_id];
|
|
110
|
+
|
|
111
|
+
if (currentObject) {
|
|
112
|
+
currentObject.deleted = false;
|
|
113
|
+
var newFingerprint = wrapper.getFingerprint();
|
|
114
|
+
var oldFingerprint = currentObject.fingerprint;
|
|
115
|
+
|
|
116
|
+
if (oldFingerprint !== newFingerprint) {
|
|
117
|
+
// Nothing to do otherwise
|
|
118
|
+
if (_this.hasChanged(type, currentObject.object)) {// Was the object edited locally?
|
|
119
|
+
// Nothing for now
|
|
120
|
+
} else {
|
|
121
|
+
// Update with the new object
|
|
122
|
+
_classPrivateFieldGet(_this, _merge).call(_this, currentObject.object, wrapper.toJSON());
|
|
123
|
+
|
|
124
|
+
currentObject.fingerprint = newFingerprint;
|
|
125
|
+
updated.push(currentObject.object);
|
|
141
126
|
}
|
|
142
|
-
} else {
|
|
143
|
-
_classPrivateMethodGet(_this, _insertObject, _insertObject2).call(_this, type, object, "old");
|
|
144
127
|
}
|
|
128
|
+
} else {
|
|
129
|
+
var newObject = _classPrivateFieldGet(_this, _insertObject).call(_this, type, object, "old");
|
|
130
|
+
|
|
131
|
+
item.storedObjects[newObject.getId()].deleted = false;
|
|
132
|
+
inserted.push(newObject);
|
|
145
133
|
}
|
|
146
|
-
} catch (err) {
|
|
147
|
-
_iterator.e(err);
|
|
148
|
-
} finally {
|
|
149
|
-
_iterator.f();
|
|
150
134
|
}
|
|
135
|
+
} catch (err) {
|
|
136
|
+
_iterator.e(err);
|
|
137
|
+
} finally {
|
|
138
|
+
_iterator.f();
|
|
139
|
+
}
|
|
151
140
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
141
|
+
for (var id in item === null || item === void 0 ? void 0 : item.storedObjects) {
|
|
142
|
+
var obj = item.storedObjects[id];
|
|
143
|
+
|
|
144
|
+
if (obj.deleted === undefined) {
|
|
145
|
+
deleted.push(obj.object);
|
|
146
|
+
delete item.storedObjects[id];
|
|
147
|
+
} else {
|
|
148
|
+
delete obj.deleted;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return [inserted, updated, deleted];
|
|
158
153
|
});
|
|
159
|
-
|
|
154
|
+
return item.promise;
|
|
155
|
+
});
|
|
160
156
|
});
|
|
161
157
|
|
|
162
158
|
_classPrivateFieldInitSpec(this, _merge, {
|
|
@@ -164,9 +160,8 @@ var Store = /*#__PURE__*/function () {
|
|
|
164
160
|
value: function value(originalObject, newObject) {
|
|
165
161
|
for (var key in newObject) {
|
|
166
162
|
originalObject[key] = newObject[key];
|
|
167
|
-
}
|
|
163
|
+
} // originalObject.update();
|
|
168
164
|
|
|
169
|
-
originalObject.update();
|
|
170
165
|
}
|
|
171
166
|
});
|
|
172
167
|
|
|
@@ -183,6 +178,41 @@ var Store = /*#__PURE__*/function () {
|
|
|
183
178
|
}
|
|
184
179
|
});
|
|
185
180
|
|
|
181
|
+
_classPrivateFieldInitSpec(this, _insertObject, {
|
|
182
|
+
writable: true,
|
|
183
|
+
value: function value(type, item, status) {
|
|
184
|
+
var model = _this.models[type].model;
|
|
185
|
+
var wrapper = new _Obj["default"](item, model);
|
|
186
|
+
var id = wrapper.getId();
|
|
187
|
+
|
|
188
|
+
if (_this.models[type].storedObjects[id]) {
|
|
189
|
+
throw new Error("The IDs provided for the model ".concat(type, " are not unique"));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (!objectStatuses.includes(status)) {
|
|
193
|
+
throw new Error("The provided status is not valid");
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (status === "mock") {
|
|
197
|
+
wrapper.insert = function () {
|
|
198
|
+
_this.models[type].storedObjects[id].status = "new";
|
|
199
|
+
|
|
200
|
+
_this.update([wrapper]);
|
|
201
|
+
|
|
202
|
+
delete wrapper.insert;
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
_this.models[type].storedObjects[id] = {
|
|
207
|
+
id: id,
|
|
208
|
+
fingerprint: wrapper.getFingerprint(),
|
|
209
|
+
object: wrapper,
|
|
210
|
+
status: status
|
|
211
|
+
};
|
|
212
|
+
return wrapper;
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
|
|
186
216
|
this.options = {
|
|
187
217
|
autoSave: (_options$autoSave = options.autoSave) !== null && _options$autoSave !== void 0 ? _options$autoSave : true,
|
|
188
218
|
saveDelay: options.saveDelay || 1000,
|
|
@@ -191,10 +221,6 @@ var Store = /*#__PURE__*/function () {
|
|
|
191
221
|
};
|
|
192
222
|
this.models = {};
|
|
193
223
|
this.pubSub = new _PubSub["default"]();
|
|
194
|
-
|
|
195
|
-
if (this.options.autoRefresh && typeof this.options.autoRefresh === "number") {
|
|
196
|
-
setInterval(this.refresh, this.options.autoRefresh);
|
|
197
|
-
}
|
|
198
224
|
}
|
|
199
225
|
|
|
200
226
|
_createClass(Store, [{
|
|
@@ -274,7 +300,7 @@ var Store = /*#__PURE__*/function () {
|
|
|
274
300
|
|
|
275
301
|
return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
|
|
276
302
|
return objects.map(function (object) {
|
|
277
|
-
return
|
|
303
|
+
return _classPrivateFieldGet(_this3, _insertObject).call(_this3, type, object, "new");
|
|
278
304
|
});
|
|
279
305
|
});
|
|
280
306
|
}
|
|
@@ -285,7 +311,7 @@ var Store = /*#__PURE__*/function () {
|
|
|
285
311
|
|
|
286
312
|
return _classPrivateMethodGet(this, _getPromise, _getPromise2).call(this, type).then(function () {
|
|
287
313
|
return objects.map(function (object) {
|
|
288
|
-
return
|
|
314
|
+
return _classPrivateFieldGet(_this4, _insertObject).call(_this4, type, object, "mock");
|
|
289
315
|
});
|
|
290
316
|
});
|
|
291
317
|
}
|
|
@@ -438,7 +464,7 @@ var Store = /*#__PURE__*/function () {
|
|
|
438
464
|
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
439
465
|
var _item = _step4.value;
|
|
440
466
|
|
|
441
|
-
|
|
467
|
+
_classPrivateFieldGet(_this9, _insertObject).call(_this9, type, _item, "old");
|
|
442
468
|
}
|
|
443
469
|
} catch (err) {
|
|
444
470
|
_iterator4.e(err);
|
|
@@ -510,42 +536,8 @@ function _getPromise2(type) {
|
|
|
510
536
|
}
|
|
511
537
|
}
|
|
512
538
|
|
|
513
|
-
function _insertObject2(type, item, status) {
|
|
514
|
-
var _this12 = this;
|
|
515
|
-
|
|
516
|
-
var model = this.models[type].model;
|
|
517
|
-
var wrapper = new _Obj["default"](item, model);
|
|
518
|
-
var id = wrapper.getId();
|
|
519
|
-
|
|
520
|
-
if (this.models[type].storedObjects[id]) {
|
|
521
|
-
throw new Error("The IDs provided for the model ".concat(type, " are not unique"));
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
if (!objectStatuses.includes(status)) {
|
|
525
|
-
throw new Error("The provided status is not valid");
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
if (status === "mock") {
|
|
529
|
-
wrapper.insert = function () {
|
|
530
|
-
_this12.models[type].storedObjects[id].status = "new";
|
|
531
|
-
|
|
532
|
-
_this12.update([wrapper]);
|
|
533
|
-
|
|
534
|
-
delete wrapper.insert;
|
|
535
|
-
};
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
this.models[type].storedObjects[id] = {
|
|
539
|
-
id: id,
|
|
540
|
-
fingerprint: wrapper.getFingerprint(),
|
|
541
|
-
object: wrapper,
|
|
542
|
-
status: status
|
|
543
|
-
};
|
|
544
|
-
return wrapper;
|
|
545
|
-
}
|
|
546
|
-
|
|
547
539
|
function _loadObjects2(type) {
|
|
548
|
-
var
|
|
540
|
+
var _this12 = this;
|
|
549
541
|
|
|
550
542
|
var item = this.models[type];
|
|
551
543
|
this.pubSub.publish("loading", {
|
|
@@ -560,7 +552,7 @@ function _loadObjects2(type) {
|
|
|
560
552
|
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
561
553
|
var _item2 = _step6.value;
|
|
562
554
|
|
|
563
|
-
|
|
555
|
+
_classPrivateFieldGet(_this12, _insertObject).call(_this12, type, _item2, "old");
|
|
564
556
|
}
|
|
565
557
|
} catch (err) {
|
|
566
558
|
_iterator6.e(err);
|
|
@@ -568,7 +560,7 @@ function _loadObjects2(type) {
|
|
|
568
560
|
_iterator6.f();
|
|
569
561
|
}
|
|
570
562
|
|
|
571
|
-
|
|
563
|
+
_this12.pubSub.publish("loading", {
|
|
572
564
|
status: "end",
|
|
573
565
|
model: type
|
|
574
566
|
});
|