@xuda.io/runtime-bundle 1.0.1426 → 1.0.1427

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.
@@ -5888,6 +5888,58 @@ func.datasource.update = async function (SESSION_ID, datasource_changes, update_
5888
5888
  var datasource_changed = [];
5889
5889
  let client_datasource_changes = {};
5890
5890
  let server_datasource_changes = {};
5891
+ const mark_field_changed = async function (dataSource, field_id) {
5892
+ if (!fields_changed.includes(field_id)) {
5893
+ fields_changed.push(field_id);
5894
+
5895
+ // Refresh dependent in-parameters that reference this field.
5896
+ for (const [_dsSession, _ds] of Object.entries(_session.DS_GLB)) {
5897
+ if (_ds.args.parameters_raw_obj) {
5898
+ for (const [key, exp] of Object.entries(_ds.args.parameters_raw_obj)) {
5899
+ if (exp.includes(field_id)) {
5900
+ let ret = await func.expression.get(SESSION_ID, exp, _dsSession, 'parameters');
5901
+ _ds.in_parameters[key].value = ret.result;
5902
+ }
5903
+ }
5904
+ }
5905
+ }
5906
+ }
5907
+ if (!datasource_changed.includes(dataSource)) {
5908
+ datasource_changed.push(dataSource);
5909
+ }
5910
+ };
5911
+ const queue_remote_change = async function (dataSource, record_id, field_id, value, _ds) {
5912
+ if (update_local_scope_only) {
5913
+ return;
5914
+ }
5915
+
5916
+ let tree_ret = await func.utils.TREE_OBJ.get(SESSION_ID, _ds.prog_id);
5917
+ if (glb.IS_WORKER) {
5918
+ if (tree_ret.menuType === 'globals' || tree_ret.menuType === 'component') {
5919
+ const _progFields = await func.datasource.get_progFields(SESSION_ID, dataSource);
5920
+ let view_field_obj = func.common.find_item_by_key(_progFields, 'field_id', field_id);
5921
+ if (!view_field_obj?.data?.serverField && record_id !== 'data_system') {
5922
+ if (!client_datasource_changes[dataSource]) {
5923
+ client_datasource_changes[dataSource] = {};
5924
+ }
5925
+ if (!client_datasource_changes[dataSource][record_id]) {
5926
+ client_datasource_changes[dataSource][record_id] = {};
5927
+ }
5928
+ client_datasource_changes[dataSource][record_id][field_id] = value;
5929
+ }
5930
+ }
5931
+ } else {
5932
+ if ((tree_ret.menuType === 'component' && _ds._run_at !== 'client') || tree_ret.menuType === 'globals') {
5933
+ if (!server_datasource_changes[dataSource]) {
5934
+ server_datasource_changes[dataSource] = {};
5935
+ }
5936
+ if (!server_datasource_changes[dataSource][record_id]) {
5937
+ server_datasource_changes[dataSource][record_id] = {};
5938
+ }
5939
+ server_datasource_changes[dataSource][record_id][field_id] = value;
5940
+ }
5941
+ }
5942
+ };
5891
5943
 
5892
5944
  const update_xu_ref = function (dataSource) {
5893
5945
  let ret;
@@ -5958,6 +6010,18 @@ func.datasource.update = async function (SESSION_ID, datasource_changes, update_
5958
6010
  continue;
5959
6011
  }
5960
6012
 
6013
+ const dynamic_field = _ds?.dynamic_fields?.[field_id];
6014
+ if (dynamic_field) {
6015
+ if (!xu_isEqual(dynamic_field.value, value)) {
6016
+ dynamic_field.value = value;
6017
+ await set_fieldComputed_dependencies(dataSource, field_id, null);
6018
+ update_xu_ref(dataSource);
6019
+ await queue_remote_change(dataSource, record_id, field_id, value, _ds);
6020
+ await mark_field_changed(dataSource, field_id);
6021
+ }
6022
+ continue;
6023
+ }
6024
+
5961
6025
  try {
5962
6026
  const row_idx = func.common.find_ROWID_idx(_ds, record_id);
5963
6027
  // if (_ds.data_feed.rows[row_idx][field_id] !== value) {
@@ -5968,55 +6032,8 @@ func.datasource.update = async function (SESSION_ID, datasource_changes, update_
5968
6032
  // search the field in refs
5969
6033
  update_xu_ref(dataSource);
5970
6034
 
5971
- if (!update_local_scope_only) {
5972
- let tree_ret = await func.utils.TREE_OBJ.get(SESSION_ID, _ds.prog_id);
5973
- if (glb.IS_WORKER) {
5974
- // RUN AT SERVER
5975
- if (tree_ret.menuType === 'globals' || tree_ret.menuType === 'component') {
5976
- const _progFields = await func.datasource.get_progFields(SESSION_ID, dataSource);
5977
- let view_field_obj = func.common.find_item_by_key(_progFields, 'field_id', field_id);
5978
- if (!view_field_obj?.data?.serverField && record_id !== 'data_system') {
5979
- if (!client_datasource_changes[dataSource]) {
5980
- client_datasource_changes[dataSource] = {};
5981
- }
5982
- if (!client_datasource_changes[dataSource][record_id]) {
5983
- client_datasource_changes[dataSource][record_id] = {};
5984
- }
5985
- client_datasource_changes[dataSource][record_id][field_id] = value;
5986
- }
5987
- }
5988
- } else {
5989
- // RUN AT CLIENT
5990
- if ((tree_ret.menuType === 'component' && _ds._run_at !== 'client') || tree_ret.menuType === 'globals') {
5991
- if (!server_datasource_changes[dataSource]) {
5992
- server_datasource_changes[dataSource] = {};
5993
- }
5994
- if (!server_datasource_changes[dataSource][record_id]) {
5995
- server_datasource_changes[dataSource][record_id] = {};
5996
- }
5997
- server_datasource_changes[dataSource][record_id][field_id] = value;
5998
- }
5999
- }
6000
- }
6001
-
6002
- if (!fields_changed.includes(field_id)) {
6003
- fields_changed.push(field_id);
6004
-
6005
- ///// REFRESH PARAMETERS IN
6006
- for (const [_dsSession, _ds] of Object.entries(_session.DS_GLB)) {
6007
- if (_ds.args.parameters_raw_obj) {
6008
- for (const [key, exp] of Object.entries(_ds.args.parameters_raw_obj)) {
6009
- if (exp.includes(field_id)) {
6010
- let ret = await func.expression.get(SESSION_ID, exp, _dsSession, 'parameters');
6011
- _ds.in_parameters[key].value = ret.result;
6012
- }
6013
- }
6014
- }
6015
- }
6016
- }
6017
- if (!datasource_changed.includes(dataSource)) {
6018
- datasource_changed.push(dataSource);
6019
- }
6035
+ await queue_remote_change(dataSource, record_id, field_id, value, _ds);
6036
+ await mark_field_changed(dataSource, field_id);
6020
6037
 
6021
6038
  if (!_ds.data_feed.rows_changed) {
6022
6039
  _ds.data_feed.rows_changed = [];
@@ -6559,6 +6576,10 @@ func.datasource.get_value = async function (SESSION_ID, fieldIdP, dsSessionP, ro
6559
6576
  if (_ds.alias) _field_id = _ds.alias[fieldIdP];
6560
6577
  }
6561
6578
 
6579
+ if (typeof _ds?.dynamic_fields?.[_field_id] !== 'undefined') {
6580
+ return await return_dynamic_value(_field_id, _ds.dynamic_fields[_field_id]);
6581
+ }
6582
+
6562
6583
  if (!org_dsSessionP && recordId) {
6563
6584
  try {
6564
6585
  const row_idx = func.common.find_ROWID_idx(_ds, recordId);
@@ -6584,10 +6605,6 @@ func.datasource.get_value = async function (SESSION_ID, fieldIdP, dsSessionP, ro
6584
6605
  }
6585
6606
  } catch (error) {}
6586
6607
 
6587
- if (typeof _ds?.dynamic_fields?.[_field_id] !== 'undefined') {
6588
- return await return_dynamic_value(_field_id, _ds.dynamic_fields[_field_id]);
6589
- }
6590
-
6591
6608
  return await search_in_parameters(fieldIdP);
6592
6609
  };
6593
6610
 
@@ -5814,6 +5814,58 @@ func.datasource.update = async function (SESSION_ID, datasource_changes, update_
5814
5814
  var datasource_changed = [];
5815
5815
  let client_datasource_changes = {};
5816
5816
  let server_datasource_changes = {};
5817
+ const mark_field_changed = async function (dataSource, field_id) {
5818
+ if (!fields_changed.includes(field_id)) {
5819
+ fields_changed.push(field_id);
5820
+
5821
+ // Refresh dependent in-parameters that reference this field.
5822
+ for (const [_dsSession, _ds] of Object.entries(_session.DS_GLB)) {
5823
+ if (_ds.args.parameters_raw_obj) {
5824
+ for (const [key, exp] of Object.entries(_ds.args.parameters_raw_obj)) {
5825
+ if (exp.includes(field_id)) {
5826
+ let ret = await func.expression.get(SESSION_ID, exp, _dsSession, 'parameters');
5827
+ _ds.in_parameters[key].value = ret.result;
5828
+ }
5829
+ }
5830
+ }
5831
+ }
5832
+ }
5833
+ if (!datasource_changed.includes(dataSource)) {
5834
+ datasource_changed.push(dataSource);
5835
+ }
5836
+ };
5837
+ const queue_remote_change = async function (dataSource, record_id, field_id, value, _ds) {
5838
+ if (update_local_scope_only) {
5839
+ return;
5840
+ }
5841
+
5842
+ let tree_ret = await func.utils.TREE_OBJ.get(SESSION_ID, _ds.prog_id);
5843
+ if (glb.IS_WORKER) {
5844
+ if (tree_ret.menuType === 'globals' || tree_ret.menuType === 'component') {
5845
+ const _progFields = await func.datasource.get_progFields(SESSION_ID, dataSource);
5846
+ let view_field_obj = func.common.find_item_by_key(_progFields, 'field_id', field_id);
5847
+ if (!view_field_obj?.data?.serverField && record_id !== 'data_system') {
5848
+ if (!client_datasource_changes[dataSource]) {
5849
+ client_datasource_changes[dataSource] = {};
5850
+ }
5851
+ if (!client_datasource_changes[dataSource][record_id]) {
5852
+ client_datasource_changes[dataSource][record_id] = {};
5853
+ }
5854
+ client_datasource_changes[dataSource][record_id][field_id] = value;
5855
+ }
5856
+ }
5857
+ } else {
5858
+ if ((tree_ret.menuType === 'component' && _ds._run_at !== 'client') || tree_ret.menuType === 'globals') {
5859
+ if (!server_datasource_changes[dataSource]) {
5860
+ server_datasource_changes[dataSource] = {};
5861
+ }
5862
+ if (!server_datasource_changes[dataSource][record_id]) {
5863
+ server_datasource_changes[dataSource][record_id] = {};
5864
+ }
5865
+ server_datasource_changes[dataSource][record_id][field_id] = value;
5866
+ }
5867
+ }
5868
+ };
5817
5869
 
5818
5870
  const update_xu_ref = function (dataSource) {
5819
5871
  let ret;
@@ -5884,6 +5936,18 @@ func.datasource.update = async function (SESSION_ID, datasource_changes, update_
5884
5936
  continue;
5885
5937
  }
5886
5938
 
5939
+ const dynamic_field = _ds?.dynamic_fields?.[field_id];
5940
+ if (dynamic_field) {
5941
+ if (!xu_isEqual(dynamic_field.value, value)) {
5942
+ dynamic_field.value = value;
5943
+ await set_fieldComputed_dependencies(dataSource, field_id, null);
5944
+ update_xu_ref(dataSource);
5945
+ await queue_remote_change(dataSource, record_id, field_id, value, _ds);
5946
+ await mark_field_changed(dataSource, field_id);
5947
+ }
5948
+ continue;
5949
+ }
5950
+
5887
5951
  try {
5888
5952
  const row_idx = func.common.find_ROWID_idx(_ds, record_id);
5889
5953
  // if (_ds.data_feed.rows[row_idx][field_id] !== value) {
@@ -5894,55 +5958,8 @@ func.datasource.update = async function (SESSION_ID, datasource_changes, update_
5894
5958
  // search the field in refs
5895
5959
  update_xu_ref(dataSource);
5896
5960
 
5897
- if (!update_local_scope_only) {
5898
- let tree_ret = await func.utils.TREE_OBJ.get(SESSION_ID, _ds.prog_id);
5899
- if (glb.IS_WORKER) {
5900
- // RUN AT SERVER
5901
- if (tree_ret.menuType === 'globals' || tree_ret.menuType === 'component') {
5902
- const _progFields = await func.datasource.get_progFields(SESSION_ID, dataSource);
5903
- let view_field_obj = func.common.find_item_by_key(_progFields, 'field_id', field_id);
5904
- if (!view_field_obj?.data?.serverField && record_id !== 'data_system') {
5905
- if (!client_datasource_changes[dataSource]) {
5906
- client_datasource_changes[dataSource] = {};
5907
- }
5908
- if (!client_datasource_changes[dataSource][record_id]) {
5909
- client_datasource_changes[dataSource][record_id] = {};
5910
- }
5911
- client_datasource_changes[dataSource][record_id][field_id] = value;
5912
- }
5913
- }
5914
- } else {
5915
- // RUN AT CLIENT
5916
- if ((tree_ret.menuType === 'component' && _ds._run_at !== 'client') || tree_ret.menuType === 'globals') {
5917
- if (!server_datasource_changes[dataSource]) {
5918
- server_datasource_changes[dataSource] = {};
5919
- }
5920
- if (!server_datasource_changes[dataSource][record_id]) {
5921
- server_datasource_changes[dataSource][record_id] = {};
5922
- }
5923
- server_datasource_changes[dataSource][record_id][field_id] = value;
5924
- }
5925
- }
5926
- }
5927
-
5928
- if (!fields_changed.includes(field_id)) {
5929
- fields_changed.push(field_id);
5930
-
5931
- ///// REFRESH PARAMETERS IN
5932
- for (const [_dsSession, _ds] of Object.entries(_session.DS_GLB)) {
5933
- if (_ds.args.parameters_raw_obj) {
5934
- for (const [key, exp] of Object.entries(_ds.args.parameters_raw_obj)) {
5935
- if (exp.includes(field_id)) {
5936
- let ret = await func.expression.get(SESSION_ID, exp, _dsSession, 'parameters');
5937
- _ds.in_parameters[key].value = ret.result;
5938
- }
5939
- }
5940
- }
5941
- }
5942
- }
5943
- if (!datasource_changed.includes(dataSource)) {
5944
- datasource_changed.push(dataSource);
5945
- }
5961
+ await queue_remote_change(dataSource, record_id, field_id, value, _ds);
5962
+ await mark_field_changed(dataSource, field_id);
5946
5963
 
5947
5964
  if (!_ds.data_feed.rows_changed) {
5948
5965
  _ds.data_feed.rows_changed = [];
@@ -6485,6 +6502,10 @@ func.datasource.get_value = async function (SESSION_ID, fieldIdP, dsSessionP, ro
6485
6502
  if (_ds.alias) _field_id = _ds.alias[fieldIdP];
6486
6503
  }
6487
6504
 
6505
+ if (typeof _ds?.dynamic_fields?.[_field_id] !== 'undefined') {
6506
+ return await return_dynamic_value(_field_id, _ds.dynamic_fields[_field_id]);
6507
+ }
6508
+
6488
6509
  if (!org_dsSessionP && recordId) {
6489
6510
  try {
6490
6511
  const row_idx = func.common.find_ROWID_idx(_ds, recordId);
@@ -6510,10 +6531,6 @@ func.datasource.get_value = async function (SESSION_ID, fieldIdP, dsSessionP, ro
6510
6531
  }
6511
6532
  } catch (error) {}
6512
6533
 
6513
- if (typeof _ds?.dynamic_fields?.[_field_id] !== 'undefined') {
6514
- return await return_dynamic_value(_field_id, _ds.dynamic_fields[_field_id]);
6515
- }
6516
-
6517
6534
  return await search_in_parameters(fieldIdP);
6518
6535
  };
6519
6536