@xuda.io/runtime-bundle 1.0.1277 → 1.0.1279

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.
@@ -28149,7 +28149,127 @@ func.UI.update_xu_ref = function (SESSION_ID, dsSessionP, ref_field_id, $elm) {
28149
28149
 
28150
28150
  const _ds = func.utils.clean_returned_datasource(SESSION_ID, dsSessionP);
28151
28151
 
28152
- let obj = { ds: _ds, data: {}, props: _ds.in_parameters || {} };
28152
+ //////////////
28153
+ // function createWatchedObject(obj, onChange) {
28154
+ // return new Proxy(obj, {
28155
+ // set(target, property, value) {
28156
+ // const oldValue = target[property];
28157
+ // target[property] = value;
28158
+
28159
+ // if (oldValue !== value) {
28160
+ // onChange({
28161
+ // property,
28162
+ // oldValue,
28163
+ // newValue: value,
28164
+ // timestamp: new Date(),
28165
+ // });
28166
+ // }
28167
+
28168
+ // return true;
28169
+ // },
28170
+
28171
+ // deleteProperty(target, property) {
28172
+ // const oldValue = target[property];
28173
+ // delete target[property];
28174
+
28175
+ // onChange({
28176
+ // property,
28177
+ // oldValue,
28178
+ // newValue: undefined,
28179
+ // deleted: true,
28180
+ // timestamp: new Date(),
28181
+ // });
28182
+
28183
+ // return true;
28184
+ // },
28185
+ // });
28186
+ // }
28187
+
28188
+ // // Usage
28189
+ // const watchedUser = createWatchedObject(
28190
+ // { name: "John", age: 25 },
28191
+ // (change) => console.log("Change detected:", change)
28192
+ // );
28193
+
28194
+ // watchedUser.age = 26; // Logs: Change detected: { property: "age", oldValue: 25, newValue: 26, ... }
28195
+
28196
+ function createWatchedObject(obj, onChange) {
28197
+ const watchers = new WeakMap();
28198
+
28199
+ function createProxy(target, path = []) {
28200
+ if (watchers.has(target)) {
28201
+ return watchers.get(target);
28202
+ }
28203
+
28204
+ const proxy = new Proxy(target, {
28205
+ set(obj, prop, value) {
28206
+ const oldValue = obj[prop];
28207
+ const currentPath = [...path, prop];
28208
+
28209
+ // Set the new value
28210
+ obj[prop] = value;
28211
+
28212
+ // If the new value is an object, make it observable too
28213
+ if (typeof value === 'object' && value !== null) {
28214
+ obj[prop] = createProxy(value, currentPath);
28215
+ }
28216
+
28217
+ // Notify of change
28218
+ if (oldValue !== value) {
28219
+ onChange({
28220
+ path: currentPath.join('.'),
28221
+ oldValue,
28222
+ newValue: value,
28223
+ type: 'set',
28224
+ timestamp: Date.now(),
28225
+ });
28226
+ }
28227
+
28228
+ return true;
28229
+ },
28230
+
28231
+ deleteProperty(obj, prop) {
28232
+ const oldValue = obj[prop];
28233
+ const currentPath = [...path, prop];
28234
+
28235
+ delete obj[prop];
28236
+
28237
+ onChange({
28238
+ path: currentPath.join('.'),
28239
+ oldValue,
28240
+ newValue: undefined,
28241
+ type: 'delete',
28242
+ timestamp: Date.now(),
28243
+ });
28244
+
28245
+ return true;
28246
+ },
28247
+ });
28248
+
28249
+ // Make nested objects observable
28250
+ for (const [key, value] of Object.entries(target)) {
28251
+ if (typeof value === 'object' && value !== null) {
28252
+ target[key] = createProxy(value, [...path, key]);
28253
+ }
28254
+ }
28255
+
28256
+ watchers.set(target, proxy);
28257
+ return proxy;
28258
+ }
28259
+
28260
+ return createProxy(obj);
28261
+ }
28262
+
28263
+ const watchedUser = createWatchedObject(_ds, (change) => {
28264
+ console.log('Change detected:', change);
28265
+ try {
28266
+ // _session.DS_GLB[dsSessionP][property] = newValue;
28267
+ } catch (error) {}
28268
+ });
28269
+
28270
+ //////////////
28271
+
28272
+ let obj = { ds: _ds, data: {}, props: _ds.in_parameters || {}, watcher: watchedUser };
28153
28273
  try {
28154
28274
  const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
28155
28275
  obj.data = _ds?.data_feed?.rows?.[row_idx];