@xuda.io/runtime-bundle 1.0.561 → 1.0.563
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
const _this={};export const init_module=async e=>{_this.func=e.func;_this.glb=e.glb;_this.SESSION_OBJ=e.SESSION_OBJ;_this.APP_OBJ=e.APP_OBJ;_this.IS_DOCKER=e.IS_DOCKER;_this.IS_API_SERVER=e.IS_API_SERVER;_this.IS_PROCESS_SERVER=e.IS_PROCESS_SERVER;if(!_this.xuda_dbs_plugin&&typeof _this.IS_DOCKER==="undefined"&&typeof _this.IS_PROCESS_SERVER==="undefined"&&typeof _this.IS_API_SERVER==="undefined"){await init_xuda_dbs_plugin(e.SESSION_ID)}_this.db_replication_store;_this.db_changes_store;_this.db_replication_from_stat=3;_this.db_replication_to_stat=3};export let _db={};_db.save_data=async function(SESSION_ID,dsSessionP,keyP){var db_driver=await this.get_db_driver(SESSION_ID,dsSessionP);if(db_driver==="pouchdb"&&_this.glb.IS_WORKER){var callback_id=_this.func.utils.set_callback_queue(SESSION_ID,callbackP);var obj=_this.func.utils.clean_returned_datasource(SESSION_ID,dsSessionP);return _this.func.utils.post_back_to_client(SESSION_ID,"execute_local_sava_data",_this.SESSION_OBJ[SESSION_ID].worker_id,{ds_obj:obj,dsSessionP:dsSessionP,keyP:keyP,callback_id:callback_id})}_db.save_indicator(SESSION_ID,true);var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];let _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);var dataSourceTableId=_view_obj?.progDataSource?.dataSourceTableId;if(!dataSourceTableId){_db.save_indicator(SESSION_ID,false);_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0105");return}var db_driver=await _db.get_db_driver(SESSION_ID,dsSessionP);let table_ret=await _this.func.utils.FILES_OBJ.get(SESSION_ID,dataSourceTableId);if(!table_ret.tableIndexes||_.isEmpty(table_ret.tableIndexes)){_db.save_indicator(SESSION_ID,false);_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0104");return}if(!_ds.data_feed.rows){return console.error("data_feed rows is empty")}const clean_virtual_fields=async function(table_id,data){let table_obj=await func.utils.VIEWS_OBJ.get(SESSION_ID,table_id);var data_obj={};for(const[key,val]of Object.entries(data)){const _tableFieldsObj=func.common.find_item_by_key(table_obj.tableFields,"field_id",key);if(_tableFieldsObj){data_obj[key]=val}}return data_obj};let save_ret;if(_view_obj.properties.menuType==="component"){if(_view_obj?.properties?.rwMode!=="U"){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0126")}let data={prog_id:_ds.prog_id};if(_ds.data_feed.rows_added?.length){if(!_view_obj?.properties?.allowCreate){_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0120")}_.forEach(_ds.data_feed.rows_added,function(val,key){data[key]=val});delete _ds.data_feed.rows_added["newRecord"];save_ret=await _this.func.common.db(SESSION_ID,"dbs_create",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data.id,table_id:dataSourceTableId});return save_ret}if(_ds.data_feed.rows_deleted?.length){let ids=[];for await(const[key,val]of Object.entries(_ds.data_feed.rows_deleted)){ids.push(val);try{const row_idx=func.common.find_ROWID_idx(_ds,val);delete _ds.data_feed.rows[row_idx]}catch(error){}}_ds.data_feed.rows_deleted=[];save_ret=await _this.func.common.db(SESSION_ID,"dbs_delete",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId});return save_ret}if(_ds.data_feed.rows_changed?.length){for await(const[key,row_id]of Object.entries(_ds.data_feed.rows_changed)){if(row_id==="datasource_main")continue;let data={prog_id:_ds.prog_id};try{const row_idx=func.common.find_ROWID_idx(_ds,row_id);data.table_data=await clean_virtual_fields(_ds._dataSourceTableId,_ds.data_feed.rows[row_idx])}catch(err){console.error(err)}data.table_id=_ds._dataSourceTableId;data.row_id=row_id;save_ret=await _this.func.common.db(SESSION_ID,"dbs_update",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId})}return save_ret}return}if(_view_obj.properties.menuType!=="set_data"){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0126")}var mode=_ds.set_mode;if(!mode||mode==="U"){let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;data.row_id=_ds.currentRecordId;data.table_data={};try{const row_idx=func.common.find_ROWID_idx(_ds,_ds.currentRecordId);data.table_data=await clean_virtual_fields(_ds._dataSourceTableId,_ds.data_feed.rows[row_idx])}catch(err){console.error(err)}save_ret=await _this.func.common.db(SESSION_ID,"dbs_update",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId})}if(mode==="D"){let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;data.ids=[_ds.currentRecordId];save_ret=await _this.func.common.db(SESSION_ID,"dbs_delete",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId});return save_ret}if(mode==="C"){if(_view_obj.properties.crudMode!=="C"&&_view_obj.properties.crudMode==="U"&&!_view_obj.properties.allowCreate){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0120")}let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;try{const row_idx=func.common.find_ROWID_idx(_ds,_ds.currentRecordId);data.table_data=_ds.data_feed.rows[row_idx];save_ret=await _this.func.common.db(SESSION_ID,"dbs_create",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data.id,table_id:dataSourceTableId});return save_ret}catch(err){console.error(err)}}};_db.get_db_driver=async function(SESSION_ID,dsSessionP){var db_driver;if(dsSessionP){var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];let _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);var dataSourceTableId=_view_obj?.progDataSource?.dataSourceTableId;if(!dataSourceTableId){_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0105");return}let file_ret=await _this.func.utils.FILES_OBJ.get(SESSION_ID,dataSourceTableId);db_driver=file_ret.properties.db_driver||"xuda"}if(_this.SESSION_OBJ[SESSION_ID].engine_mode==="live_preview"&&!db_driver&&_this.SESSION_OBJ[SESSION_ID].app_id==="temp"){db_driver="pouchdb"}return db_driver};_db.get_query=async function(SESSION_ID,table_id,queryP,dsSessionP,viewSourceDescP,sourceP,reduceP,skipP,limitP,countP,idsP,sortModel,sort_dir,filterModel={filterModelNative:filterModelNative,filterModelMongo:filterModelMongo,filterModelSql:filterModelSql,filterModelUserMongo:filterModelUserMongo,filterModelUserSql:filterModelUserSql},dataSourceFilterModelType="index",total_fields_info){const get_fields=async function(_ds){var fields=[];const _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);if(_view_obj.progFields){for(let val of _view_obj.progFields){if(val.data.type==="table"){fields.push(val.data.field_id)}}}return fields};const run_local=async function(){if(!_this.SESSION_OBJ[SESSION_ID])return;if(!_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP])return;var ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];var v=ds.v;var query_string;if(queryP.indexId){if(countP&&queryP.desc){query_string=`startkey=${JSON.stringify(queryP.endkey)}&endkey=${JSON.stringify(queryP.startkey)}`}else{query_string=`startkey=${JSON.stringify(queryP.startkey)}&endkey=${JSON.stringify(queryP.endkey)}&desc=${queryP.desc}`}}else{query_string="key="+queryP.table_id}var db_driver=await _db.get_db_driver(SESSION_ID,dsSessionP);var fields_arr=await get_fields(ds);const response={success:async function(json){if(dsSessionP&&!_this.SESSION_OBJ[SESSION_ID]?.DS_GLB?.[dsSessionP]){return}if(json.code<0){response.error(json.data);return}var data=json.data;if(dsSessionP)_this.func.utils.debug.log(SESSION_ID,ds._dataSourceTableId,{module:ds.viewModule,action:"read",prop:sourceP,details:query_string,result:data.rows?data.rows.length:0,error:null,source:viewSourceDescP,json:data,fields:_.assignIn(ds.locate_from,ds.locate_to),type:"file",dsSession:dsSessionP});return data},error:async function(err){if(dsSessionP&&!ds)return;if(dsSessionP){var err_msg=err&&err.data?err.data:err;_this.func.utils.debug.log(SESSION_ID,_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP]._dataSourceTableId,{module:ds.viewModule,action:"read",prop:sourceP,details:query_string,result:null,error:err_msg,source:viewSourceDescP,json:null,fields:_.assignIn(ds.locate_from,ds.locate_to),type:"file",dsSession:dsSessionP})}_this.func.utils.debug_report(SESSION_ID,"datasource couchDB query "+sourceP,err_msg,"E");return{rows:[],error:true}}};var data={desc:queryP.desc,indexId:queryP.indexId,key:queryP.table_id,reduce:reduceP,viewSourceDesc:viewSourceDescP,limit:limitP,skip:skipP,count:countP,ids:idsP,table_id:queryP.table_id,prog_id:ds.prog_id};data.filter_from=JSON.stringify(queryP.filter_from);data.filter_to=JSON.stringify(queryP.filter_to);data.sortOrder=queryP.sortOrder;data.table_id=queryP.table_id;data.startkey=JSON.stringify(queryP.startkey);data.endkey=JSON.stringify(queryP.endkey);if(countP&&queryP.desc){data.sortOrder="asc";data.startkey=JSON.stringify(queryP.endkey);data.endkey=JSON.stringify(queryP.startkey)}data.dataSourceFilterModelType=dataSourceFilterModelType;if(sortModel){data.sortModel=JSON.stringify(sortModel);data.sort_dir=sort_dir}if(!_.isEmpty(filterModel?.filterModelNative)){data.filterModelNative=JSON.stringify(filterModel.filterModelNative)}if(!_.isEmpty(filterModel?.filterModelMongo)){data.filterModelMongo=JSON.stringify(filterModel.filterModelMongo)}if(filterModel?.filterModelSql){data.filterModelSql=JSON.stringify(filterModel.filterModelSql)}if(!_.isEmpty(filterModel?.filterModelUserMongo)){data.filterModelUserMongo=JSON.stringify(filterModel.filterModelUserMongo)}if(filterModel?.filterModelUserSql){data.filterModelUserSql=JSON.stringify(filterModel.filterModelUserSql)}if(total_fields_info){data.total_fields_info=JSON.stringify(total_fields_info)}if(!reduceP&&!countP){data.fields=fields_arr}try{const json=await _this.func.common.db(SESSION_ID,"dbs_read",data,{node:true},dsSessionP);return await response.success(json)}catch(e){return await response.error(e?.message||e?.data||e)}};var db_driver=await this.get_db_driver(SESSION_ID,dsSessionP);if(db_driver==="pouchdb"&&_this.glb.IS_WORKER&&!_this.SESSION_OBJ[SESSION_ID].engine_mode==="live_preview"){var callback_id=_this.func.utils.set_callback_queue(SESSION_ID,callbackP);var obj=_this.func.utils.clean_returned_datasource(SESSION_ID,dsSessionP);return _this.func.utils.post_back_to_client(SESSION_ID,"execute_local_db_query",_this.SESSION_OBJ[SESSION_ID].worker_id,{ds_obj:obj,dsSessionP:dsSessionP,table_id:table_id,queryP:queryP,dsSessionP:dsSessionP,viewSourceDescP:viewSourceDescP,sourceP:sourceP,reduceP:reduceP,skipP:skipP,limitP:limitP,countP:countP,idsP:idsP,callback_id:callback_id})}return await run_local()};_db.utils={};_db.save_indicator=function(SESSION_ID,stateP){if(!_this.glb.IS_WORKER){_this.func.UI.utils.save(SESSION_ID,stateP)}};const init_xuda_dbs_plugin=async function(SESSION_ID){var _session=_this.SESSION_OBJ[SESSION_ID];const plugin_name="@xuda.io/xuda-dbs-plugin-xuda";const get_path=function(plugin_name,resource){var path=`https://${_session.domain}/plugins/${plugin_name}${resource?"/"+resource:""}?app_id=${_session.app_id}`;return path};try{_this.xuda_dbs_plugin=await import(get_path(plugin_name,"studio.mjs"));const db=await func.utils.connect_pouchdb(SESSION_ID);await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"create_design",{db:db})}catch(err){return console.error(err.message)}};_db.call_pouch_xuda_dbs_plugin=async function(SESSION_ID,method,params){return new Promise(async(resolve,reject)=>{try{if(params.e){params.table_obj=await func.utils.DOCS_OBJ.get(SESSION_ID,params.e.table_id)}await _this.xuda_dbs_plugin[method](params,resolve,reject)}catch(err){reject()}})};_db.pouch={};_db.pouch.dbs_read=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"read",{db:db,e:e})};_db.pouch.dbs_create=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"create",{db:db,e:e})};_db.pouch.dbs_delete=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"del",{db:db,e:e})};_db.pouch.dbs_update=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"update",{db:db,e:e})};_db.pouch.init_db_replication=async function(SESSION_ID){const db=await func.utils.connect_pouchdb(SESSION_ID);var _session=_this.SESSION_OBJ[SESSION_ID];if(_session.url_params.avoid_local||_session.engine_mode!=="live_preview"&&!_session.opt.enable_offline){return}const changes=db.changes({live:true,include_docs:true}).on("change",function(change){if(!change.doc.udfData)return;func.UI.screen.refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:change.id,table_id:change.doc.udfData.udffileid})}).on("complete",function(info){console.log("complete",info)}).on("error",function(err){console.error(err)});set_replication_stat(SESSION_ID,null,3);const db_name=APP_OBJ[_session.app_id].app_db_name;const rep=db.replicate.to(`https://${_session.domain}/db/${db_name}`,{selector:{docType:"database"},live:true,retry:true,fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}}).on("change",function(info){}).on("paused",function(err){if(err){return set_replication_stat(SESSION_ID,null,2)}set_replication_stat(SESSION_ID,null,3)}).on("active",function(){}).on("denied",function(err){set_replication_stat(SESSION_ID,null,2)}).on("complete",function(info){}).on("error",function(err){set_replication_stat(SESSION_ID,null,2)});_db.pouch.set_db_replication_from_server(SESSION_ID)};_db.pouch.set_db_replication_from_server=async function(SESSION_ID){const db=await func.utils.connect_pouchdb(SESSION_ID);const rep_docs=await _db.pouch.get_replications(SESSION_ID);const _session=_this.SESSION_OBJ[SESSION_ID];const db_name=APP_OBJ[_session.app_id].app_db_name;const remote_db_url=`https://${_session.domain}/db/${db_name}`;const remote_db=new PouchDB(remote_db_url,{fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}});if(_this.db_changes_store){_this.db_changes_store.cancel()}const write_stat=async function(rep_id,stat,reason){try{let doc=await db.get(rep_id);doc.stat=stat;doc.stat_reason=reason;try{db.put(doc)}catch(err){}}catch(err){}};const download_documents=async function(rep_doc){await write_stat(rep_doc._id,2);const remote_db=new PouchDB(remote_db_url,{fetch:function(url,opts){opts.headers.set("xu-prog_id",rep_doc.prog_id);if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}});const ret=await remote_db.find({selector:rep_doc.selector,fields:["_id"],limit:9999999999});if(ret?.code<0){return func.utils.debug_report(SESSION_ID,"download_documents",ret.data,"E")}try{var doc_ids=[];for await(let doc of ret.docs){doc_ids.push(doc._id)}db.replicate.from(remote_db_url,{doc_ids:doc_ids,retry:true,style:"main_only",fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}}).on("paused",async function(err){if(err){return}const read_ret=await _db.pouch.dbs_read(SESSION_ID,rep_doc.e);await write_stat(rep_doc._id,3)})}catch(err){await write_stat(rep_doc._id,2,err.message);console.error("replication from error",err)}};let filter_tables=[];for(let doc of rep_docs){if(!filter_tables.includes(doc.table_id))filter_tables.push(doc.table_id);if(doc.stat<3)await download_documents(doc)}try{_this.db_changes_store=remote_db.changes({since:"now",live:true,timeout:3e5,style:"main_only",include_docs:false}).on("change",async function(change){if(change.id.substr(0,4)!=="dbs-")return;if(_this.db_replication_from_stat!==3){set_replication_stat(SESSION_ID,3)}try{const existing_doc=await db.get(change.id);db.replicate.from(remote_db_url,{doc_ids:[change.id],retry:true,style:"main_only",fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}})}catch(err){try{const table_id=change.id.split("_")[0].substr(4);for(let doc of rep_docs){if(doc.table_id===table_id){download_documents(doc)}}}catch(err){console.warn(err)}}}).on("complete",function(info){}).on("error",function(err){console.error(err);set_replication_stat(SESSION_ID,2);_this.db_changes_store.cancel()})}catch(err){console.error(err)}return};_db.pouch.remove_db_replication_from_server=async function(SESSION_ID,rep_id){const db=await func.utils.connect_pouchdb(SESSION_ID);try{const doc=await db.get(rep_id);db.remove(doc)}catch(error){}};_db.pouch.get_replications=async function(SESSION_ID=Object.keys(SESSION_OBJ)[0]){const db=await func.utils.connect_pouchdb(SESSION_ID);let ret=await db.find({selector:{docType:"rep_request"}});return ret.docs};_db.pouch.get_replication_stat=async function(SESSION_ID){const _session=_this.SESSION_OBJ[SESSION_ID];return _session?.DS_GLB?.[0]?.data_system?.SYS_GLOBAL_BOL_REPLICATION_STAT};const set_replication_stat=async function(SESSION_ID,from_stat,to_stat){var _session=_this.SESSION_OBJ[SESSION_ID];if(!_session?.DS_GLB?.[0]){return setTimeout(function(){set_replication_stat(SESSION_ID,from_stat,to_stat)},1e3)}if(from_stat)_this.db_replication_from_stat=from_stat;if(to_stat)_this.db_replication_to_stat=to_stat;var data={};if(_this.db_replication_from_stat===3&&_this.db_replication_to_stat===3){data.SYS_GLOBAL_BOL_REPLICATION_STAT=1;console.info("Replication On")}else{data.SYS_GLOBAL_BOL_REPLICATION_STAT=0;console.info("Replication Off")}var datasource_changes={[0]:{["data_system"]:data}};await func.datasource.update(SESSION_ID,datasource_changes)};const refresh_document_changes_for_realtime_update=function(SESSION_ID,doc_change){var _session=_this.SESSION_OBJ[SESSION_ID];if(glb.IS_WORKER){return func.utils.post_back_to_client(SESSION_ID,"refresh_document_changes_for_realtime_update",_session.worker_id,{doc_change:doc_change})}func.UI.screen.refresh_document_changes_for_realtime_update(SESSION_ID,doc_change)};
|
|
1
|
+
const _this={};export const init_module=async e=>{_this.func=e.func;_this.glb=e.glb;_this.SESSION_OBJ=e.SESSION_OBJ;_this.APP_OBJ=e.APP_OBJ;_this.IS_DOCKER=e.IS_DOCKER;_this.IS_API_SERVER=e.IS_API_SERVER;_this.IS_PROCESS_SERVER=e.IS_PROCESS_SERVER;if(!_this.xuda_dbs_plugin&&typeof _this.IS_DOCKER==="undefined"&&typeof _this.IS_PROCESS_SERVER==="undefined"&&typeof _this.IS_API_SERVER==="undefined"){await init_xuda_dbs_plugin(e.SESSION_ID)}_this.db_replication_store;_this.db_changes_store;_this.db_replication_from_stat=3;_this.db_replication_to_stat=3};export let _db={};_db.save_data=async function(SESSION_ID,dsSessionP,keyP){var db_driver=await this.get_db_driver(SESSION_ID,dsSessionP);if(db_driver==="pouchdb"&&_this.glb.IS_WORKER){var callback_id=_this.func.utils.set_callback_queue(SESSION_ID,callbackP);var obj=_this.func.utils.clean_returned_datasource(SESSION_ID,dsSessionP);return _this.func.utils.post_back_to_client(SESSION_ID,"execute_local_sava_data",_this.SESSION_OBJ[SESSION_ID].worker_id,{ds_obj:obj,dsSessionP:dsSessionP,keyP:keyP,callback_id:callback_id})}_db.save_indicator(SESSION_ID,true);var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];let _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);var dataSourceTableId=_view_obj?.progDataSource?.dataSourceTableId;if(!dataSourceTableId){_db.save_indicator(SESSION_ID,false);_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0105");return}var db_driver=await _db.get_db_driver(SESSION_ID,dsSessionP);let table_ret=await _this.func.utils.FILES_OBJ.get(SESSION_ID,dataSourceTableId);if(!table_ret.tableIndexes||_.isEmpty(table_ret.tableIndexes)){_db.save_indicator(SESSION_ID,false);_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0104");return}if(!_ds.data_feed.rows){return console.error("data_feed rows is empty")}const clean_virtual_fields=async function(table_id,data){let table_obj=await func.utils.VIEWS_OBJ.get(SESSION_ID,table_id);var data_obj={};for(const[key,val]of Object.entries(data)){const _tableFieldsObj=func.common.find_item_by_key(table_obj.tableFields,"field_id",key);if(_tableFieldsObj){data_obj[key]=val}}return data_obj};let save_ret;if(_view_obj.properties.menuType==="component"){if(_view_obj?.properties?.rwMode!=="U"){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0126")}let data={prog_id:_ds.prog_id};if(_ds.data_feed.rows_added?.length){if(!_view_obj?.properties?.allowCreate){_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0120")}_.forEach(_ds.data_feed.rows_added,function(val,key){data[key]=val});delete _ds.data_feed.rows_added["newRecord"];save_ret=await _this.func.common.db(SESSION_ID,"dbs_create",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data.id,table_id:dataSourceTableId});return save_ret}if(_ds.data_feed.rows_deleted?.length){data.table_id=_ds._dataSourceTableId;data.ids=[];for await(const[key,val]of Object.entries(_ds.data_feed.rows_deleted)){data.ids.push(val);try{const row_idx=func.common.find_ROWID_idx(_ds,val);delete _ds.data_feed.rows[row_idx]}catch(error){}}_ds.data_feed.rows_deleted=[];save_ret=await _this.func.common.db(SESSION_ID,"dbs_delete",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId});return save_ret}if(_ds.data_feed.rows_changed?.length){for await(const[key,row_id]of Object.entries(_ds.data_feed.rows_changed)){if(row_id==="datasource_main")continue;let data={prog_id:_ds.prog_id};try{const row_idx=func.common.find_ROWID_idx(_ds,row_id);data.table_data=await clean_virtual_fields(_ds._dataSourceTableId,_ds.data_feed.rows[row_idx])}catch(err){console.error(err)}data.table_id=_ds._dataSourceTableId;data.row_id=row_id;save_ret=await _this.func.common.db(SESSION_ID,"dbs_update",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId})}return save_ret}return}if(_view_obj.properties.menuType!=="set_data"){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0126")}var mode=_ds.set_mode;if(!mode||mode==="U"){let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;data.row_id=_ds.currentRecordId;data.table_data={};try{const row_idx=func.common.find_ROWID_idx(_ds,_ds.currentRecordId);data.table_data=await clean_virtual_fields(_ds._dataSourceTableId,_ds.data_feed.rows[row_idx])}catch(err){console.error(err)}save_ret=await _this.func.common.db(SESSION_ID,"dbs_update",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId})}if(mode==="D"){let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;data.ids=[_ds.currentRecordId];save_ret=await _this.func.common.db(SESSION_ID,"dbs_delete",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId});return save_ret}if(mode==="C"){if(_view_obj.properties.crudMode!=="C"&&_view_obj.properties.crudMode==="U"&&!_view_obj.properties.allowCreate){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0120")}let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;try{const row_idx=func.common.find_ROWID_idx(_ds,_ds.currentRecordId);data.table_data=_ds.data_feed.rows[row_idx];save_ret=await _this.func.common.db(SESSION_ID,"dbs_create",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data.id,table_id:dataSourceTableId});return save_ret}catch(err){console.error(err)}}};_db.get_db_driver=async function(SESSION_ID,dsSessionP){var db_driver;if(dsSessionP){var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];let _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);var dataSourceTableId=_view_obj?.progDataSource?.dataSourceTableId;if(!dataSourceTableId){_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0105");return}let file_ret=await _this.func.utils.FILES_OBJ.get(SESSION_ID,dataSourceTableId);db_driver=file_ret.properties.db_driver||"xuda"}if(_this.SESSION_OBJ[SESSION_ID].engine_mode==="live_preview"&&!db_driver&&_this.SESSION_OBJ[SESSION_ID].app_id==="temp"){db_driver="pouchdb"}return db_driver};_db.get_query=async function(SESSION_ID,table_id,queryP,dsSessionP,viewSourceDescP,sourceP,reduceP,skipP,limitP,countP,idsP,sortModel,sort_dir,filterModel={filterModelNative:filterModelNative,filterModelMongo:filterModelMongo,filterModelSql:filterModelSql,filterModelUserMongo:filterModelUserMongo,filterModelUserSql:filterModelUserSql},dataSourceFilterModelType="index",total_fields_info){const get_fields=async function(_ds){var fields=[];const _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);if(_view_obj.progFields){for(let val of _view_obj.progFields){if(val.data.type==="table"){fields.push(val.data.field_id)}}}return fields};const run_local=async function(){if(!_this.SESSION_OBJ[SESSION_ID])return;if(!_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP])return;var ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];var v=ds.v;var query_string;if(queryP.indexId){if(countP&&queryP.desc){query_string=`startkey=${JSON.stringify(queryP.endkey)}&endkey=${JSON.stringify(queryP.startkey)}`}else{query_string=`startkey=${JSON.stringify(queryP.startkey)}&endkey=${JSON.stringify(queryP.endkey)}&desc=${queryP.desc}`}}else{query_string="key="+queryP.table_id}var db_driver=await _db.get_db_driver(SESSION_ID,dsSessionP);var fields_arr=await get_fields(ds);const response={success:async function(json){if(dsSessionP&&!_this.SESSION_OBJ[SESSION_ID]?.DS_GLB?.[dsSessionP]){return}if(json.code<0){response.error(json.data);return}var data=json.data;if(dsSessionP)_this.func.utils.debug.log(SESSION_ID,ds._dataSourceTableId,{module:ds.viewModule,action:"read",prop:sourceP,details:query_string,result:data.rows?data.rows.length:0,error:null,source:viewSourceDescP,json:data,fields:_.assignIn(ds.locate_from,ds.locate_to),type:"file",dsSession:dsSessionP});return data},error:async function(err){if(dsSessionP&&!ds)return;if(dsSessionP){var err_msg=err&&err.data?err.data:err;_this.func.utils.debug.log(SESSION_ID,_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP]._dataSourceTableId,{module:ds.viewModule,action:"read",prop:sourceP,details:query_string,result:null,error:err_msg,source:viewSourceDescP,json:null,fields:_.assignIn(ds.locate_from,ds.locate_to),type:"file",dsSession:dsSessionP})}_this.func.utils.debug_report(SESSION_ID,"datasource couchDB query "+sourceP,err_msg,"E");return{rows:[],error:true}}};var data={desc:queryP.desc,indexId:queryP.indexId,key:queryP.table_id,reduce:reduceP,viewSourceDesc:viewSourceDescP,limit:limitP,skip:skipP,count:countP,ids:idsP,table_id:queryP.table_id,prog_id:ds.prog_id};data.filter_from=JSON.stringify(queryP.filter_from);data.filter_to=JSON.stringify(queryP.filter_to);data.sortOrder=queryP.sortOrder;data.table_id=queryP.table_id;data.startkey=JSON.stringify(queryP.startkey);data.endkey=JSON.stringify(queryP.endkey);if(countP&&queryP.desc){data.sortOrder="asc";data.startkey=JSON.stringify(queryP.endkey);data.endkey=JSON.stringify(queryP.startkey)}data.dataSourceFilterModelType=dataSourceFilterModelType;if(sortModel){data.sortModel=JSON.stringify(sortModel);data.sort_dir=sort_dir}if(!_.isEmpty(filterModel?.filterModelNative)){data.filterModelNative=JSON.stringify(filterModel.filterModelNative)}if(!_.isEmpty(filterModel?.filterModelMongo)){data.filterModelMongo=JSON.stringify(filterModel.filterModelMongo)}if(filterModel?.filterModelSql){data.filterModelSql=JSON.stringify(filterModel.filterModelSql)}if(!_.isEmpty(filterModel?.filterModelUserMongo)){data.filterModelUserMongo=JSON.stringify(filterModel.filterModelUserMongo)}if(filterModel?.filterModelUserSql){data.filterModelUserSql=JSON.stringify(filterModel.filterModelUserSql)}if(total_fields_info){data.total_fields_info=JSON.stringify(total_fields_info)}if(!reduceP&&!countP){data.fields=fields_arr}try{const json=await _this.func.common.db(SESSION_ID,"dbs_read",data,{node:true},dsSessionP);return await response.success(json)}catch(e){return await response.error(e?.message||e?.data||e)}};var db_driver=await this.get_db_driver(SESSION_ID,dsSessionP);if(db_driver==="pouchdb"&&_this.glb.IS_WORKER&&!_this.SESSION_OBJ[SESSION_ID].engine_mode==="live_preview"){var callback_id=_this.func.utils.set_callback_queue(SESSION_ID,callbackP);var obj=_this.func.utils.clean_returned_datasource(SESSION_ID,dsSessionP);return _this.func.utils.post_back_to_client(SESSION_ID,"execute_local_db_query",_this.SESSION_OBJ[SESSION_ID].worker_id,{ds_obj:obj,dsSessionP:dsSessionP,table_id:table_id,queryP:queryP,dsSessionP:dsSessionP,viewSourceDescP:viewSourceDescP,sourceP:sourceP,reduceP:reduceP,skipP:skipP,limitP:limitP,countP:countP,idsP:idsP,callback_id:callback_id})}return await run_local()};_db.utils={};_db.save_indicator=function(SESSION_ID,stateP){if(!_this.glb.IS_WORKER){_this.func.UI.utils.save(SESSION_ID,stateP)}};const init_xuda_dbs_plugin=async function(SESSION_ID){var _session=_this.SESSION_OBJ[SESSION_ID];const plugin_name="@xuda.io/xuda-dbs-plugin-xuda";const get_path=function(plugin_name,resource){var path=`https://${_session.domain}/plugins/${plugin_name}${resource?"/"+resource:""}?app_id=${_session.app_id}`;return path};try{_this.xuda_dbs_plugin=await import(get_path(plugin_name,"studio.mjs"));const db=await func.utils.connect_pouchdb(SESSION_ID);await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"create_design",{db:db})}catch(err){return console.error(err.message)}};_db.call_pouch_xuda_dbs_plugin=async function(SESSION_ID,method,params){return new Promise(async(resolve,reject)=>{try{if(params.e){params.table_obj=await func.utils.DOCS_OBJ.get(SESSION_ID,params.e.table_id)}await _this.xuda_dbs_plugin[method](params,resolve,reject)}catch(err){reject()}})};_db.pouch={};_db.pouch.dbs_read=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"read",{db:db,e:e})};_db.pouch.dbs_create=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"create",{db:db,e:e})};_db.pouch.dbs_delete=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"del",{db:db,e:e})};_db.pouch.dbs_update=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"update",{db:db,e:e})};_db.pouch.init_db_replication=async function(SESSION_ID){const db=await func.utils.connect_pouchdb(SESSION_ID);var _session=_this.SESSION_OBJ[SESSION_ID];if(_session.url_params.avoid_local||_session.engine_mode!=="live_preview"&&!_session.opt.enable_offline){return}const changes=db.changes({live:true,include_docs:true}).on("change",function(change){if(!change.doc.udfData)return;func.UI.screen.refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:change.id,table_id:change.doc.udfData.udffileid})}).on("complete",function(info){console.log("complete",info)}).on("error",function(err){console.error(err)});set_replication_stat(SESSION_ID,null,3);const db_name=APP_OBJ[_session.app_id].app_db_name;const rep=db.replicate.to(`https://${_session.domain}/db/${db_name}`,{selector:{docType:"database"},live:true,retry:true,fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}}).on("change",function(info){}).on("paused",function(err){if(err){return set_replication_stat(SESSION_ID,null,2)}set_replication_stat(SESSION_ID,null,3)}).on("active",function(){}).on("denied",function(err){set_replication_stat(SESSION_ID,null,2)}).on("complete",function(info){}).on("error",function(err){set_replication_stat(SESSION_ID,null,2)});_db.pouch.set_db_replication_from_server(SESSION_ID)};_db.pouch.set_db_replication_from_server=async function(SESSION_ID){const db=await func.utils.connect_pouchdb(SESSION_ID);const rep_docs=await _db.pouch.get_replications(SESSION_ID);const _session=_this.SESSION_OBJ[SESSION_ID];const db_name=APP_OBJ[_session.app_id].app_db_name;const remote_db_url=`https://${_session.domain}/db/${db_name}`;const remote_db=new PouchDB(remote_db_url,{fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}});if(_this.db_changes_store){_this.db_changes_store.cancel()}const write_stat=async function(rep_id,stat,reason){try{let doc=await db.get(rep_id);doc.stat=stat;doc.stat_reason=reason;try{db.put(doc)}catch(err){}}catch(err){}};const download_documents=async function(rep_doc){await write_stat(rep_doc._id,2);const remote_db=new PouchDB(remote_db_url,{fetch:function(url,opts){opts.headers.set("xu-prog_id",rep_doc.prog_id);if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}});const ret=await remote_db.find({selector:rep_doc.selector,fields:["_id"],limit:9999999999});if(ret?.code<0){return func.utils.debug_report(SESSION_ID,"download_documents",ret.data,"E")}try{var doc_ids=[];for await(let doc of ret.docs){doc_ids.push(doc._id)}db.replicate.from(remote_db_url,{doc_ids:doc_ids,retry:true,style:"main_only",fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}}).on("paused",async function(err){if(err){return}const read_ret=await _db.pouch.dbs_read(SESSION_ID,rep_doc.e);await write_stat(rep_doc._id,3)})}catch(err){await write_stat(rep_doc._id,2,err.message);console.error("replication from error",err)}};let filter_tables=[];for(let doc of rep_docs){if(!filter_tables.includes(doc.table_id))filter_tables.push(doc.table_id);if(doc.stat<3)await download_documents(doc)}try{_this.db_changes_store=remote_db.changes({since:"now",live:true,timeout:3e5,style:"main_only",include_docs:false}).on("change",async function(change){if(change.id.substr(0,4)!=="dbs-")return;if(_this.db_replication_from_stat!==3){set_replication_stat(SESSION_ID,3)}try{const existing_doc=await db.get(change.id);db.replicate.from(remote_db_url,{doc_ids:[change.id],retry:true,style:"main_only",fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}})}catch(err){try{const table_id=change.id.split("_")[0].substr(4);for(let doc of rep_docs){if(doc.table_id===table_id){download_documents(doc)}}}catch(err){console.warn(err)}}}).on("complete",function(info){}).on("error",function(err){console.error(err);set_replication_stat(SESSION_ID,2);_this.db_changes_store.cancel()})}catch(err){console.error(err)}return};_db.pouch.remove_db_replication_from_server=async function(SESSION_ID,rep_id){const db=await func.utils.connect_pouchdb(SESSION_ID);try{const doc=await db.get(rep_id);db.remove(doc)}catch(error){}};_db.pouch.get_replications=async function(SESSION_ID=Object.keys(SESSION_OBJ)[0]){const db=await func.utils.connect_pouchdb(SESSION_ID);let ret=await db.find({selector:{docType:"rep_request"}});return ret.docs};_db.pouch.get_replication_stat=async function(SESSION_ID){const _session=_this.SESSION_OBJ[SESSION_ID];return _session?.DS_GLB?.[0]?.data_system?.SYS_GLOBAL_BOL_REPLICATION_STAT};const set_replication_stat=async function(SESSION_ID,from_stat,to_stat){var _session=_this.SESSION_OBJ[SESSION_ID];if(!_session?.DS_GLB?.[0]){return setTimeout(function(){set_replication_stat(SESSION_ID,from_stat,to_stat)},1e3)}if(from_stat)_this.db_replication_from_stat=from_stat;if(to_stat)_this.db_replication_to_stat=to_stat;var data={};if(_this.db_replication_from_stat===3&&_this.db_replication_to_stat===3){data.SYS_GLOBAL_BOL_REPLICATION_STAT=1;console.info("Replication On")}else{data.SYS_GLOBAL_BOL_REPLICATION_STAT=0;console.info("Replication Off")}var datasource_changes={[0]:{["data_system"]:data}};await func.datasource.update(SESSION_ID,datasource_changes)};const refresh_document_changes_for_realtime_update=function(SESSION_ID,doc_change){var _session=_this.SESSION_OBJ[SESSION_ID];if(glb.IS_WORKER){return func.utils.post_back_to_client(SESSION_ID,"refresh_document_changes_for_realtime_update",_session.worker_id,{doc_change:doc_change})}func.UI.screen.refresh_document_changes_for_realtime_update(SESSION_ID,doc_change)};
|
|
@@ -8,12 +8,7 @@ export const init_module = async (e) => {
|
|
|
8
8
|
_this.IS_DOCKER = e.IS_DOCKER;
|
|
9
9
|
_this.IS_API_SERVER = e.IS_API_SERVER;
|
|
10
10
|
_this.IS_PROCESS_SERVER = e.IS_PROCESS_SERVER;
|
|
11
|
-
if (
|
|
12
|
-
!_this.xuda_dbs_plugin &&
|
|
13
|
-
typeof _this.IS_DOCKER === "undefined" &&
|
|
14
|
-
typeof _this.IS_PROCESS_SERVER === "undefined" &&
|
|
15
|
-
typeof _this.IS_API_SERVER === "undefined"
|
|
16
|
-
) {
|
|
11
|
+
if (!_this.xuda_dbs_plugin && typeof _this.IS_DOCKER === 'undefined' && typeof _this.IS_PROCESS_SERVER === 'undefined' && typeof _this.IS_API_SERVER === 'undefined') {
|
|
17
12
|
await init_xuda_dbs_plugin(e.SESSION_ID);
|
|
18
13
|
}
|
|
19
14
|
_this.db_replication_store;
|
|
@@ -28,26 +23,15 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
|
|
|
28
23
|
// const app_id = _this.SESSION_OBJ[SESSION_ID].app_id;
|
|
29
24
|
|
|
30
25
|
var db_driver = await this.get_db_driver(SESSION_ID, dsSessionP);
|
|
31
|
-
if (db_driver ===
|
|
32
|
-
var callback_id = _this.func.utils.set_callback_queue(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
);
|
|
40
|
-
return _this.func.utils.post_back_to_client(
|
|
41
|
-
SESSION_ID,
|
|
42
|
-
"execute_local_sava_data",
|
|
43
|
-
_this.SESSION_OBJ[SESSION_ID].worker_id,
|
|
44
|
-
{
|
|
45
|
-
ds_obj: obj,
|
|
46
|
-
dsSessionP: dsSessionP,
|
|
47
|
-
keyP: keyP,
|
|
48
|
-
callback_id: callback_id,
|
|
49
|
-
}
|
|
50
|
-
);
|
|
26
|
+
if (db_driver === 'pouchdb' && _this.glb.IS_WORKER) {
|
|
27
|
+
var callback_id = _this.func.utils.set_callback_queue(SESSION_ID, callbackP);
|
|
28
|
+
var obj = _this.func.utils.clean_returned_datasource(SESSION_ID, dsSessionP);
|
|
29
|
+
return _this.func.utils.post_back_to_client(SESSION_ID, 'execute_local_sava_data', _this.SESSION_OBJ[SESSION_ID].worker_id, {
|
|
30
|
+
ds_obj: obj,
|
|
31
|
+
dsSessionP: dsSessionP,
|
|
32
|
+
keyP: keyP,
|
|
33
|
+
callback_id: callback_id,
|
|
34
|
+
});
|
|
51
35
|
}
|
|
52
36
|
|
|
53
37
|
_db.save_indicator(SESSION_ID, true);
|
|
@@ -60,36 +44,29 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
|
|
|
60
44
|
|
|
61
45
|
if (!dataSourceTableId) {
|
|
62
46
|
_db.save_indicator(SESSION_ID, false);
|
|
63
|
-
_this.func.utils.alerts.invoke(SESSION_ID,
|
|
47
|
+
_this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0105'); //Table entry missing
|
|
64
48
|
return;
|
|
65
49
|
}
|
|
66
50
|
|
|
67
51
|
var db_driver = await _db.get_db_driver(SESSION_ID, dsSessionP);
|
|
68
52
|
|
|
69
|
-
let table_ret = await _this.func.utils.FILES_OBJ.get(
|
|
70
|
-
SESSION_ID,
|
|
71
|
-
dataSourceTableId
|
|
72
|
-
);
|
|
53
|
+
let table_ret = await _this.func.utils.FILES_OBJ.get(SESSION_ID, dataSourceTableId);
|
|
73
54
|
|
|
74
55
|
if (!table_ret.tableIndexes || _.isEmpty(table_ret.tableIndexes)) {
|
|
75
56
|
_db.save_indicator(SESSION_ID, false);
|
|
76
|
-
_this.func.utils.alerts.invoke(SESSION_ID,
|
|
57
|
+
_this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0104'); //index missing
|
|
77
58
|
return;
|
|
78
59
|
}
|
|
79
60
|
|
|
80
61
|
if (!_ds.data_feed.rows) {
|
|
81
|
-
return console.error(
|
|
62
|
+
return console.error('data_feed rows is empty');
|
|
82
63
|
}
|
|
83
64
|
|
|
84
65
|
const clean_virtual_fields = async function (table_id, data) {
|
|
85
66
|
let table_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, table_id);
|
|
86
67
|
var data_obj = {};
|
|
87
68
|
for (const [key, val] of Object.entries(data)) {
|
|
88
|
-
const _tableFieldsObj = func.common.find_item_by_key(
|
|
89
|
-
table_obj.tableFields,
|
|
90
|
-
"field_id",
|
|
91
|
-
key
|
|
92
|
-
);
|
|
69
|
+
const _tableFieldsObj = func.common.find_item_by_key(table_obj.tableFields, 'field_id', key);
|
|
93
70
|
if (_tableFieldsObj) {
|
|
94
71
|
data_obj[key] = val;
|
|
95
72
|
}
|
|
@@ -98,13 +75,9 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
|
|
|
98
75
|
};
|
|
99
76
|
let save_ret;
|
|
100
77
|
// component
|
|
101
|
-
if (_view_obj.properties.menuType ===
|
|
102
|
-
if (_view_obj?.properties?.rwMode !==
|
|
103
|
-
return _this.func.utils.alerts.invoke(
|
|
104
|
-
SESSION_ID,
|
|
105
|
-
"system_msg",
|
|
106
|
-
"SYS_MSG_0126"
|
|
107
|
-
); //Program Read Only
|
|
78
|
+
if (_view_obj.properties.menuType === 'component') {
|
|
79
|
+
if (_view_obj?.properties?.rwMode !== 'U') {
|
|
80
|
+
return _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0126'); //Program Read Only
|
|
108
81
|
}
|
|
109
82
|
|
|
110
83
|
// check if rows exist
|
|
@@ -114,25 +87,15 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
|
|
|
114
87
|
let data = { prog_id: _ds.prog_id };
|
|
115
88
|
if (_ds.data_feed.rows_added?.length) {
|
|
116
89
|
if (!_view_obj?.properties?.allowCreate) {
|
|
117
|
-
_this.func.utils.alerts.invoke(
|
|
118
|
-
SESSION_ID,
|
|
119
|
-
"system_msg",
|
|
120
|
-
"SYS_MSG_0120"
|
|
121
|
-
); //Create Mode Denied
|
|
90
|
+
_this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0120'); //Create Mode Denied
|
|
122
91
|
}
|
|
123
92
|
|
|
124
93
|
_.forEach(_ds.data_feed.rows_added, function (val, key) {
|
|
125
94
|
data[key] = val;
|
|
126
95
|
});
|
|
127
96
|
|
|
128
|
-
delete _ds.data_feed.rows_added[
|
|
129
|
-
save_ret = await _this.func.common.db(
|
|
130
|
-
SESSION_ID,
|
|
131
|
-
"dbs_create",
|
|
132
|
-
data,
|
|
133
|
-
{},
|
|
134
|
-
dsSessionP
|
|
135
|
-
);
|
|
97
|
+
delete _ds.data_feed.rows_added['newRecord'];
|
|
98
|
+
save_ret = await _this.func.common.db(SESSION_ID, 'dbs_create', data, {}, dsSessionP);
|
|
136
99
|
refresh_document_changes_for_realtime_update(SESSION_ID, {
|
|
137
100
|
row_id: save_ret.data.id,
|
|
138
101
|
table_id: dataSourceTableId,
|
|
@@ -143,26 +106,19 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
|
|
|
143
106
|
// delete
|
|
144
107
|
//===============
|
|
145
108
|
if (_ds.data_feed.rows_deleted?.length) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
ids.push(val);
|
|
109
|
+
data.table_id = _ds._dataSourceTableId;
|
|
110
|
+
data.ids = [];
|
|
111
|
+
for await (const [key, val] of Object.entries(_ds.data_feed.rows_deleted)) {
|
|
112
|
+
data.ids.push(val);
|
|
151
113
|
|
|
152
114
|
try {
|
|
153
115
|
const row_idx = func.common.find_ROWID_idx(_ds, val);
|
|
154
116
|
|
|
155
117
|
delete _ds.data_feed.rows[row_idx];
|
|
156
|
-
} catch (error) {
|
|
118
|
+
} catch (error) {}
|
|
157
119
|
}
|
|
158
120
|
_ds.data_feed.rows_deleted = [];
|
|
159
|
-
save_ret = await _this.func.common.db(
|
|
160
|
-
SESSION_ID,
|
|
161
|
-
"dbs_delete",
|
|
162
|
-
data,
|
|
163
|
-
{},
|
|
164
|
-
dsSessionP
|
|
165
|
-
);
|
|
121
|
+
save_ret = await _this.func.common.db(SESSION_ID, 'dbs_delete', data, {}, dsSessionP);
|
|
166
122
|
refresh_document_changes_for_realtime_update(SESSION_ID, {
|
|
167
123
|
row_id: save_ret.data?.id?.[0],
|
|
168
124
|
table_id: dataSourceTableId,
|
|
@@ -173,56 +129,40 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
|
|
|
173
129
|
// update
|
|
174
130
|
//===============
|
|
175
131
|
if (_ds.data_feed.rows_changed?.length) {
|
|
176
|
-
for await (const [key, row_id] of Object.entries(
|
|
177
|
-
|
|
178
|
-
)) {
|
|
179
|
-
if (row_id === "datasource_main") continue;
|
|
132
|
+
for await (const [key, row_id] of Object.entries(_ds.data_feed.rows_changed)) {
|
|
133
|
+
if (row_id === 'datasource_main') continue;
|
|
180
134
|
|
|
181
135
|
let data = { prog_id: _ds.prog_id };
|
|
182
136
|
|
|
183
137
|
try {
|
|
184
138
|
const row_idx = func.common.find_ROWID_idx(_ds, row_id);
|
|
185
139
|
|
|
186
|
-
data.table_data = await clean_virtual_fields(
|
|
187
|
-
_ds._dataSourceTableId,
|
|
188
|
-
_ds.data_feed.rows[row_idx]
|
|
189
|
-
);
|
|
140
|
+
data.table_data = await clean_virtual_fields(_ds._dataSourceTableId, _ds.data_feed.rows[row_idx]);
|
|
190
141
|
} catch (err) {
|
|
191
142
|
console.error(err);
|
|
192
143
|
}
|
|
193
144
|
|
|
194
145
|
data.table_id = _ds._dataSourceTableId;
|
|
195
146
|
data.row_id = row_id;
|
|
196
|
-
save_ret = await _this.func.common.db(
|
|
197
|
-
SESSION_ID,
|
|
198
|
-
"dbs_update",
|
|
199
|
-
data,
|
|
200
|
-
{},
|
|
201
|
-
dsSessionP
|
|
202
|
-
);
|
|
147
|
+
save_ret = await _this.func.common.db(SESSION_ID, 'dbs_update', data, {}, dsSessionP);
|
|
203
148
|
refresh_document_changes_for_realtime_update(SESSION_ID, {
|
|
204
149
|
row_id: save_ret.data?.id?.[0],
|
|
205
150
|
table_id: dataSourceTableId,
|
|
206
151
|
});
|
|
207
|
-
|
|
208
152
|
}
|
|
209
153
|
return save_ret;
|
|
210
154
|
}
|
|
211
155
|
return;
|
|
212
156
|
}
|
|
213
157
|
// alert Program Read Only
|
|
214
|
-
if (_view_obj.properties.menuType !==
|
|
215
|
-
return _this.func.utils.alerts.invoke(
|
|
216
|
-
SESSION_ID,
|
|
217
|
-
"system_msg",
|
|
218
|
-
"SYS_MSG_0126"
|
|
219
|
-
); //Program Read Only
|
|
158
|
+
if (_view_obj.properties.menuType !== 'set_data') {
|
|
159
|
+
return _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0126'); //Program Read Only
|
|
220
160
|
}
|
|
221
161
|
|
|
222
162
|
// set_data
|
|
223
163
|
var mode = _ds.set_mode; //screenInfo.crudMode;
|
|
224
164
|
|
|
225
|
-
if (!mode || mode ===
|
|
165
|
+
if (!mode || mode === 'U') {
|
|
226
166
|
let data = { prog_id: _ds.prog_id };
|
|
227
167
|
data.table_id = _ds._dataSourceTableId;
|
|
228
168
|
data.row_id = _ds.currentRecordId;
|
|
@@ -231,55 +171,32 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
|
|
|
231
171
|
try {
|
|
232
172
|
const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
|
|
233
173
|
|
|
234
|
-
data.table_data = await clean_virtual_fields(
|
|
235
|
-
_ds._dataSourceTableId,
|
|
236
|
-
_ds.data_feed.rows[row_idx]
|
|
237
|
-
);
|
|
174
|
+
data.table_data = await clean_virtual_fields(_ds._dataSourceTableId, _ds.data_feed.rows[row_idx]);
|
|
238
175
|
} catch (err) {
|
|
239
176
|
console.error(err);
|
|
240
177
|
}
|
|
241
178
|
|
|
242
|
-
save_ret = await _this.func.common.db(
|
|
243
|
-
SESSION_ID,
|
|
244
|
-
"dbs_update",
|
|
245
|
-
data,
|
|
246
|
-
{},
|
|
247
|
-
dsSessionP
|
|
248
|
-
);
|
|
179
|
+
save_ret = await _this.func.common.db(SESSION_ID, 'dbs_update', data, {}, dsSessionP);
|
|
249
180
|
refresh_document_changes_for_realtime_update(SESSION_ID, {
|
|
250
181
|
row_id: save_ret.data?.id?.[0],
|
|
251
182
|
table_id: dataSourceTableId,
|
|
252
183
|
});
|
|
253
184
|
}
|
|
254
|
-
if (mode ===
|
|
185
|
+
if (mode === 'D') {
|
|
255
186
|
// _id = _ds.key._id;
|
|
256
187
|
let data = { prog_id: _ds.prog_id };
|
|
257
188
|
data.table_id = _ds._dataSourceTableId;
|
|
258
189
|
data.ids = [_ds.currentRecordId];
|
|
259
|
-
save_ret = await _this.func.common.db(
|
|
260
|
-
SESSION_ID,
|
|
261
|
-
"dbs_delete",
|
|
262
|
-
data,
|
|
263
|
-
{},
|
|
264
|
-
dsSessionP
|
|
265
|
-
);
|
|
190
|
+
save_ret = await _this.func.common.db(SESSION_ID, 'dbs_delete', data, {}, dsSessionP);
|
|
266
191
|
refresh_document_changes_for_realtime_update(SESSION_ID, {
|
|
267
192
|
row_id: save_ret.data?.id?.[0],
|
|
268
193
|
table_id: dataSourceTableId,
|
|
269
194
|
});
|
|
270
195
|
return save_ret;
|
|
271
196
|
}
|
|
272
|
-
if (mode ===
|
|
273
|
-
if (
|
|
274
|
-
|
|
275
|
-
_view_obj.properties.crudMode === "U" &&
|
|
276
|
-
!_view_obj.properties.allowCreate
|
|
277
|
-
) {
|
|
278
|
-
return _this.func.utils.alerts.invoke(
|
|
279
|
-
SESSION_ID,
|
|
280
|
-
"system_msg",
|
|
281
|
-
"SYS_MSG_0120"
|
|
282
|
-
); //Create Mode Denied
|
|
197
|
+
if (mode === 'C') {
|
|
198
|
+
if (_view_obj.properties.crudMode !== 'C' && _view_obj.properties.crudMode === 'U' && !_view_obj.properties.allowCreate) {
|
|
199
|
+
return _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0120'); //Create Mode Denied
|
|
283
200
|
}
|
|
284
201
|
|
|
285
202
|
let data = { prog_id: _ds.prog_id };
|
|
@@ -289,13 +206,7 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
|
|
|
289
206
|
const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
|
|
290
207
|
|
|
291
208
|
data.table_data = _ds.data_feed.rows[row_idx];
|
|
292
|
-
save_ret = await _this.func.common.db(
|
|
293
|
-
SESSION_ID,
|
|
294
|
-
"dbs_create",
|
|
295
|
-
data,
|
|
296
|
-
{},
|
|
297
|
-
dsSessionP
|
|
298
|
-
);
|
|
209
|
+
save_ret = await _this.func.common.db(SESSION_ID, 'dbs_create', data, {}, dsSessionP);
|
|
299
210
|
refresh_document_changes_for_realtime_update(SESSION_ID, {
|
|
300
211
|
row_id: save_ret.data.id,
|
|
301
212
|
table_id: dataSourceTableId,
|
|
@@ -312,29 +223,19 @@ _db.get_db_driver = async function (SESSION_ID, dsSessionP) {
|
|
|
312
223
|
|
|
313
224
|
if (dsSessionP) {
|
|
314
225
|
var _ds = _this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
|
|
315
|
-
let _view_obj = await _this.func.utils.VIEWS_OBJ.get(
|
|
316
|
-
SESSION_ID,
|
|
317
|
-
_ds.prog_id
|
|
318
|
-
);
|
|
226
|
+
let _view_obj = await _this.func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
|
|
319
227
|
var dataSourceTableId = _view_obj?.progDataSource?.dataSourceTableId;
|
|
320
228
|
|
|
321
229
|
if (!dataSourceTableId) {
|
|
322
|
-
_this.func.utils.alerts.invoke(SESSION_ID,
|
|
230
|
+
_this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0105'); //Table repository missing
|
|
323
231
|
return;
|
|
324
232
|
}
|
|
325
|
-
let file_ret = await _this.func.utils.FILES_OBJ.get(
|
|
326
|
-
|
|
327
|
-
dataSourceTableId
|
|
328
|
-
);
|
|
329
|
-
db_driver = file_ret.properties.db_driver || "xuda";
|
|
233
|
+
let file_ret = await _this.func.utils.FILES_OBJ.get(SESSION_ID, dataSourceTableId);
|
|
234
|
+
db_driver = file_ret.properties.db_driver || 'xuda';
|
|
330
235
|
}
|
|
331
236
|
|
|
332
|
-
if (
|
|
333
|
-
|
|
334
|
-
!db_driver &&
|
|
335
|
-
_this.SESSION_OBJ[SESSION_ID].app_id === "temp"
|
|
336
|
-
) {
|
|
337
|
-
db_driver = "pouchdb";
|
|
237
|
+
if (_this.SESSION_OBJ[SESSION_ID].engine_mode === 'live_preview' && !db_driver && _this.SESSION_OBJ[SESSION_ID].app_id === 'temp') {
|
|
238
|
+
db_driver = 'pouchdb';
|
|
338
239
|
}
|
|
339
240
|
|
|
340
241
|
return db_driver;
|
|
@@ -360,18 +261,15 @@ _db.get_query = async function (
|
|
|
360
261
|
filterModelUserMongo,
|
|
361
262
|
filterModelUserSql,
|
|
362
263
|
},
|
|
363
|
-
dataSourceFilterModelType =
|
|
364
|
-
total_fields_info
|
|
264
|
+
dataSourceFilterModelType = 'index',
|
|
265
|
+
total_fields_info,
|
|
365
266
|
) {
|
|
366
267
|
const get_fields = async function (_ds) {
|
|
367
268
|
var fields = [];
|
|
368
|
-
const _view_obj = await _this.func.utils.VIEWS_OBJ.get(
|
|
369
|
-
SESSION_ID,
|
|
370
|
-
_ds.prog_id
|
|
371
|
-
);
|
|
269
|
+
const _view_obj = await _this.func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
|
|
372
270
|
if (_view_obj.progFields) {
|
|
373
271
|
for (let val of _view_obj.progFields) {
|
|
374
|
-
if (val.data.type ===
|
|
272
|
+
if (val.data.type === 'table') {
|
|
375
273
|
fields.push(val.data.field_id);
|
|
376
274
|
}
|
|
377
275
|
}
|
|
@@ -388,26 +286,19 @@ _db.get_query = async function (
|
|
|
388
286
|
var query_string;
|
|
389
287
|
if (queryP.indexId) {
|
|
390
288
|
if (countP && queryP.desc) {
|
|
391
|
-
query_string = `startkey=${JSON.stringify(
|
|
392
|
-
queryP.endkey
|
|
393
|
-
)}&endkey=${JSON.stringify(queryP.startkey)}`;
|
|
289
|
+
query_string = `startkey=${JSON.stringify(queryP.endkey)}&endkey=${JSON.stringify(queryP.startkey)}`;
|
|
394
290
|
} else {
|
|
395
|
-
query_string = `startkey=${JSON.stringify(
|
|
396
|
-
queryP.startkey
|
|
397
|
-
)}&endkey=${JSON.stringify(queryP.endkey)}&desc=${queryP.desc}`;
|
|
291
|
+
query_string = `startkey=${JSON.stringify(queryP.startkey)}&endkey=${JSON.stringify(queryP.endkey)}&desc=${queryP.desc}`;
|
|
398
292
|
}
|
|
399
293
|
} else {
|
|
400
|
-
query_string =
|
|
294
|
+
query_string = 'key=' + queryP.table_id;
|
|
401
295
|
}
|
|
402
296
|
var db_driver = await _db.get_db_driver(SESSION_ID, dsSessionP);
|
|
403
297
|
var fields_arr = await get_fields(ds);
|
|
404
298
|
|
|
405
299
|
const response = {
|
|
406
300
|
success: async function (json) {
|
|
407
|
-
if (
|
|
408
|
-
dsSessionP &&
|
|
409
|
-
!_this.SESSION_OBJ[SESSION_ID]?.DS_GLB?.[dsSessionP]
|
|
410
|
-
) {
|
|
301
|
+
if (dsSessionP && !_this.SESSION_OBJ[SESSION_ID]?.DS_GLB?.[dsSessionP]) {
|
|
411
302
|
return;
|
|
412
303
|
}
|
|
413
304
|
|
|
@@ -444,7 +335,7 @@ _db.get_query = async function (
|
|
|
444
335
|
if (dsSessionP)
|
|
445
336
|
_this.func.utils.debug.log(SESSION_ID, ds._dataSourceTableId, {
|
|
446
337
|
module: ds.viewModule,
|
|
447
|
-
action:
|
|
338
|
+
action: 'read',
|
|
448
339
|
prop: sourceP,
|
|
449
340
|
details: query_string,
|
|
450
341
|
result: data.rows ? data.rows.length : 0,
|
|
@@ -452,7 +343,7 @@ _db.get_query = async function (
|
|
|
452
343
|
source: viewSourceDescP,
|
|
453
344
|
json: data,
|
|
454
345
|
fields: _.assignIn(ds.locate_from, ds.locate_to),
|
|
455
|
-
type:
|
|
346
|
+
type: 'file',
|
|
456
347
|
dsSession: dsSessionP,
|
|
457
348
|
});
|
|
458
349
|
|
|
@@ -462,30 +353,21 @@ _db.get_query = async function (
|
|
|
462
353
|
if (dsSessionP && !ds) return;
|
|
463
354
|
if (dsSessionP) {
|
|
464
355
|
var err_msg = err && err.data ? err.data : err;
|
|
465
|
-
_this.func.utils.debug.log(
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
type: "file",
|
|
479
|
-
dsSession: dsSessionP,
|
|
480
|
-
}
|
|
481
|
-
);
|
|
356
|
+
_this.func.utils.debug.log(SESSION_ID, _this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP]._dataSourceTableId, {
|
|
357
|
+
module: ds.viewModule,
|
|
358
|
+
action: 'read',
|
|
359
|
+
prop: sourceP,
|
|
360
|
+
details: query_string,
|
|
361
|
+
result: null,
|
|
362
|
+
error: err_msg,
|
|
363
|
+
source: viewSourceDescP,
|
|
364
|
+
json: null,
|
|
365
|
+
fields: _.assignIn(ds.locate_from, ds.locate_to),
|
|
366
|
+
type: 'file',
|
|
367
|
+
dsSession: dsSessionP,
|
|
368
|
+
});
|
|
482
369
|
}
|
|
483
|
-
_this.func.utils.debug_report(
|
|
484
|
-
SESSION_ID,
|
|
485
|
-
"datasource couchDB query " + sourceP,
|
|
486
|
-
err_msg,
|
|
487
|
-
"E"
|
|
488
|
-
);
|
|
370
|
+
_this.func.utils.debug_report(SESSION_ID, 'datasource couchDB query ' + sourceP, err_msg, 'E');
|
|
489
371
|
|
|
490
372
|
return {
|
|
491
373
|
rows: [],
|
|
@@ -517,7 +399,7 @@ _db.get_query = async function (
|
|
|
517
399
|
data.endkey = JSON.stringify(queryP.endkey);
|
|
518
400
|
|
|
519
401
|
if (countP && queryP.desc) {
|
|
520
|
-
data.sortOrder =
|
|
402
|
+
data.sortOrder = 'asc';
|
|
521
403
|
data.startkey = JSON.stringify(queryP.endkey);
|
|
522
404
|
data.endkey = JSON.stringify(queryP.startkey);
|
|
523
405
|
}
|
|
@@ -540,9 +422,7 @@ _db.get_query = async function (
|
|
|
540
422
|
data.filterModelSql = JSON.stringify(filterModel.filterModelSql);
|
|
541
423
|
}
|
|
542
424
|
if (!_.isEmpty(filterModel?.filterModelUserMongo)) {
|
|
543
|
-
data.filterModelUserMongo = JSON.stringify(
|
|
544
|
-
filterModel.filterModelUserMongo
|
|
545
|
-
);
|
|
425
|
+
data.filterModelUserMongo = JSON.stringify(filterModel.filterModelUserMongo);
|
|
546
426
|
}
|
|
547
427
|
if (filterModel?.filterModelUserSql) {
|
|
548
428
|
data.filterModelUserSql = JSON.stringify(filterModel.filterModelUserSql);
|
|
@@ -558,13 +438,7 @@ _db.get_query = async function (
|
|
|
558
438
|
}
|
|
559
439
|
|
|
560
440
|
try {
|
|
561
|
-
const json = await _this.func.common.db(
|
|
562
|
-
SESSION_ID,
|
|
563
|
-
"dbs_read",
|
|
564
|
-
data,
|
|
565
|
-
{ node: true },
|
|
566
|
-
dsSessionP
|
|
567
|
-
);
|
|
441
|
+
const json = await _this.func.common.db(SESSION_ID, 'dbs_read', data, { node: true }, dsSessionP);
|
|
568
442
|
return await response.success(json);
|
|
569
443
|
} catch (e) {
|
|
570
444
|
return await response.error(e?.message || e?.data || e);
|
|
@@ -572,39 +446,24 @@ _db.get_query = async function (
|
|
|
572
446
|
};
|
|
573
447
|
|
|
574
448
|
var db_driver = await this.get_db_driver(SESSION_ID, dsSessionP);
|
|
575
|
-
if (
|
|
576
|
-
|
|
577
|
-
_this.
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
ds_obj: obj,
|
|
594
|
-
dsSessionP,
|
|
595
|
-
table_id,
|
|
596
|
-
queryP,
|
|
597
|
-
dsSessionP,
|
|
598
|
-
viewSourceDescP,
|
|
599
|
-
sourceP,
|
|
600
|
-
reduceP,
|
|
601
|
-
skipP,
|
|
602
|
-
limitP,
|
|
603
|
-
countP,
|
|
604
|
-
idsP,
|
|
605
|
-
callback_id,
|
|
606
|
-
}
|
|
607
|
-
);
|
|
449
|
+
if (db_driver === 'pouchdb' && _this.glb.IS_WORKER && !_this.SESSION_OBJ[SESSION_ID].engine_mode === 'live_preview') {
|
|
450
|
+
var callback_id = _this.func.utils.set_callback_queue(SESSION_ID, callbackP);
|
|
451
|
+
var obj = _this.func.utils.clean_returned_datasource(SESSION_ID, dsSessionP);
|
|
452
|
+
return _this.func.utils.post_back_to_client(SESSION_ID, 'execute_local_db_query', _this.SESSION_OBJ[SESSION_ID].worker_id, {
|
|
453
|
+
ds_obj: obj,
|
|
454
|
+
dsSessionP,
|
|
455
|
+
table_id,
|
|
456
|
+
queryP,
|
|
457
|
+
dsSessionP,
|
|
458
|
+
viewSourceDescP,
|
|
459
|
+
sourceP,
|
|
460
|
+
reduceP,
|
|
461
|
+
skipP,
|
|
462
|
+
limitP,
|
|
463
|
+
countP,
|
|
464
|
+
idsP,
|
|
465
|
+
callback_id,
|
|
466
|
+
});
|
|
608
467
|
}
|
|
609
468
|
return await run_local();
|
|
610
469
|
};
|
|
@@ -667,20 +526,19 @@ _db.save_indicator = function (SESSION_ID, stateP) {
|
|
|
667
526
|
const init_xuda_dbs_plugin = async function (SESSION_ID) {
|
|
668
527
|
var _session = _this.SESSION_OBJ[SESSION_ID];
|
|
669
528
|
|
|
670
|
-
const plugin_name =
|
|
529
|
+
const plugin_name = '@xuda.io/xuda-dbs-plugin-xuda';
|
|
671
530
|
|
|
672
531
|
const get_path = function (plugin_name, resource) {
|
|
673
|
-
var path = `https://${_session.domain}/plugins/${plugin_name}${resource ?
|
|
674
|
-
}?app_id=${_session.app_id}`;
|
|
532
|
+
var path = `https://${_session.domain}/plugins/${plugin_name}${resource ? '/' + resource : ''}?app_id=${_session.app_id}`;
|
|
675
533
|
|
|
676
534
|
return path;
|
|
677
535
|
};
|
|
678
536
|
|
|
679
537
|
try {
|
|
680
|
-
_this.xuda_dbs_plugin = await import(get_path(plugin_name,
|
|
538
|
+
_this.xuda_dbs_plugin = await import(get_path(plugin_name, 'studio.mjs'));
|
|
681
539
|
|
|
682
540
|
const db = await func.utils.connect_pouchdb(SESSION_ID);
|
|
683
|
-
await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,
|
|
541
|
+
await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, 'create_design', { db });
|
|
684
542
|
} catch (err) {
|
|
685
543
|
return console.error(err.message);
|
|
686
544
|
}
|
|
@@ -691,10 +549,7 @@ _db.call_pouch_xuda_dbs_plugin = async function (SESSION_ID, method, params) {
|
|
|
691
549
|
try {
|
|
692
550
|
// var table_obj = {};
|
|
693
551
|
if (params.e) {
|
|
694
|
-
params.table_obj = await func.utils.DOCS_OBJ.get(
|
|
695
|
-
SESSION_ID,
|
|
696
|
-
params.e.table_id
|
|
697
|
-
);
|
|
552
|
+
params.table_obj = await func.utils.DOCS_OBJ.get(SESSION_ID, params.e.table_id);
|
|
698
553
|
}
|
|
699
554
|
|
|
700
555
|
await _this.xuda_dbs_plugin[method](params, resolve, reject);
|
|
@@ -706,29 +561,26 @@ _db.call_pouch_xuda_dbs_plugin = async function (SESSION_ID, method, params) {
|
|
|
706
561
|
_db.pouch = {};
|
|
707
562
|
_db.pouch.dbs_read = async function (SESSION_ID, e) {
|
|
708
563
|
const db = await func.utils.connect_pouchdb(SESSION_ID);
|
|
709
|
-
return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,
|
|
564
|
+
return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, 'read', { db, e });
|
|
710
565
|
};
|
|
711
566
|
_db.pouch.dbs_create = async function (SESSION_ID, e) {
|
|
712
567
|
const db = await func.utils.connect_pouchdb(SESSION_ID);
|
|
713
|
-
return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,
|
|
568
|
+
return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, 'create', { db, e });
|
|
714
569
|
};
|
|
715
570
|
_db.pouch.dbs_delete = async function (SESSION_ID, e) {
|
|
716
571
|
const db = await func.utils.connect_pouchdb(SESSION_ID);
|
|
717
|
-
return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,
|
|
572
|
+
return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, 'del', { db, e });
|
|
718
573
|
};
|
|
719
574
|
_db.pouch.dbs_update = async function (SESSION_ID, e) {
|
|
720
575
|
const db = await func.utils.connect_pouchdb(SESSION_ID);
|
|
721
|
-
return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,
|
|
576
|
+
return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, 'update', { db, e });
|
|
722
577
|
};
|
|
723
578
|
|
|
724
579
|
_db.pouch.init_db_replication = async function (SESSION_ID) {
|
|
725
580
|
const db = await func.utils.connect_pouchdb(SESSION_ID);
|
|
726
581
|
var _session = _this.SESSION_OBJ[SESSION_ID];
|
|
727
582
|
|
|
728
|
-
if (
|
|
729
|
-
_session.url_params.avoid_local ||
|
|
730
|
-
(_session.engine_mode !== "live_preview" && !_session.opt.enable_offline)
|
|
731
|
-
) {
|
|
583
|
+
if (_session.url_params.avoid_local || (_session.engine_mode !== 'live_preview' && !_session.opt.enable_offline)) {
|
|
732
584
|
return;
|
|
733
585
|
}
|
|
734
586
|
|
|
@@ -739,7 +591,7 @@ _db.pouch.init_db_replication = async function (SESSION_ID) {
|
|
|
739
591
|
live: true,
|
|
740
592
|
include_docs: true,
|
|
741
593
|
})
|
|
742
|
-
.on(
|
|
594
|
+
.on('change', function (change) {
|
|
743
595
|
// handle change
|
|
744
596
|
|
|
745
597
|
if (!change.doc.udfData) return;
|
|
@@ -749,11 +601,11 @@ _db.pouch.init_db_replication = async function (SESSION_ID) {
|
|
|
749
601
|
table_id: change.doc.udfData.udffileid,
|
|
750
602
|
});
|
|
751
603
|
})
|
|
752
|
-
.on(
|
|
604
|
+
.on('complete', function (info) {
|
|
753
605
|
// changes() was canceled
|
|
754
|
-
console.log(
|
|
606
|
+
console.log('complete', info);
|
|
755
607
|
})
|
|
756
|
-
.on(
|
|
608
|
+
.on('error', function (err) {
|
|
757
609
|
console.error(err);
|
|
758
610
|
});
|
|
759
611
|
|
|
@@ -763,42 +615,41 @@ _db.pouch.init_db_replication = async function (SESSION_ID) {
|
|
|
763
615
|
const db_name = APP_OBJ[_session.app_id].app_db_name;
|
|
764
616
|
const rep = db.replicate
|
|
765
617
|
.to(`https://${_session.domain}/db/${db_name}`, {
|
|
766
|
-
selector: { docType:
|
|
618
|
+
selector: { docType: 'database' },
|
|
767
619
|
live: true,
|
|
768
620
|
retry: true,
|
|
769
621
|
fetch: function (url, opts) {
|
|
770
622
|
if (_session.gtp_token) {
|
|
771
|
-
opts.headers.set(
|
|
623
|
+
opts.headers.set('xu-gtp-token', _session.gtp_token);
|
|
772
624
|
}
|
|
773
|
-
if (_session.app_token)
|
|
774
|
-
opts.headers.set("xu-app-token", _session.app_token);
|
|
625
|
+
if (_session.app_token) opts.headers.set('xu-app-token', _session.app_token);
|
|
775
626
|
{
|
|
776
|
-
opts.headers.set(
|
|
627
|
+
opts.headers.set('xu-db', db_name);
|
|
777
628
|
}
|
|
778
629
|
return PouchDB.fetch(url, opts);
|
|
779
630
|
},
|
|
780
631
|
})
|
|
781
|
-
.on(
|
|
632
|
+
.on('change', function (info) {
|
|
782
633
|
// handle change
|
|
783
634
|
})
|
|
784
|
-
.on(
|
|
635
|
+
.on('paused', function (err) {
|
|
785
636
|
if (err) {
|
|
786
637
|
return set_replication_stat(SESSION_ID, null, 2);
|
|
787
638
|
}
|
|
788
639
|
set_replication_stat(SESSION_ID, null, 3);
|
|
789
640
|
// replication paused (e.g. replication up to date, user went offline)
|
|
790
641
|
})
|
|
791
|
-
.on(
|
|
642
|
+
.on('active', function () {
|
|
792
643
|
// replicate resumed (e.g. new changes replicating, user went back online)
|
|
793
644
|
})
|
|
794
|
-
.on(
|
|
645
|
+
.on('denied', function (err) {
|
|
795
646
|
set_replication_stat(SESSION_ID, null, 2);
|
|
796
647
|
// a document failed to replicate (e.g. due to permissions)
|
|
797
648
|
})
|
|
798
|
-
.on(
|
|
649
|
+
.on('complete', function (info) {
|
|
799
650
|
// handle complete
|
|
800
651
|
})
|
|
801
|
-
.on(
|
|
652
|
+
.on('error', function (err) {
|
|
802
653
|
set_replication_stat(SESSION_ID, null, 2);
|
|
803
654
|
// handle error
|
|
804
655
|
});
|
|
@@ -814,12 +665,11 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
|
|
|
814
665
|
const remote_db = new PouchDB(remote_db_url, {
|
|
815
666
|
fetch: function (url, opts) {
|
|
816
667
|
if (_session.gtp_token) {
|
|
817
|
-
opts.headers.set(
|
|
668
|
+
opts.headers.set('xu-gtp-token', _session.gtp_token);
|
|
818
669
|
}
|
|
819
|
-
if (_session.app_token)
|
|
820
|
-
opts.headers.set("xu-app-token", _session.app_token);
|
|
670
|
+
if (_session.app_token) opts.headers.set('xu-app-token', _session.app_token);
|
|
821
671
|
{
|
|
822
|
-
opts.headers.set(
|
|
672
|
+
opts.headers.set('xu-db', db_name);
|
|
823
673
|
}
|
|
824
674
|
return PouchDB.fetch(url, opts);
|
|
825
675
|
},
|
|
@@ -837,23 +687,22 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
|
|
|
837
687
|
doc.stat_reason = reason;
|
|
838
688
|
try {
|
|
839
689
|
db.put(doc);
|
|
840
|
-
} catch (err) {
|
|
841
|
-
} catch (err) {
|
|
690
|
+
} catch (err) {}
|
|
691
|
+
} catch (err) {}
|
|
842
692
|
};
|
|
843
693
|
const download_documents = async function (rep_doc) {
|
|
844
694
|
await write_stat(rep_doc._id, 2);
|
|
845
695
|
|
|
846
696
|
const remote_db = new PouchDB(remote_db_url, {
|
|
847
697
|
fetch: function (url, opts) {
|
|
848
|
-
opts.headers.set(
|
|
698
|
+
opts.headers.set('xu-prog_id', rep_doc.prog_id);
|
|
849
699
|
|
|
850
700
|
if (_session.gtp_token) {
|
|
851
|
-
opts.headers.set(
|
|
701
|
+
opts.headers.set('xu-gtp-token', _session.gtp_token);
|
|
852
702
|
}
|
|
853
|
-
if (_session.app_token)
|
|
854
|
-
opts.headers.set("xu-app-token", _session.app_token);
|
|
703
|
+
if (_session.app_token) opts.headers.set('xu-app-token', _session.app_token);
|
|
855
704
|
{
|
|
856
|
-
opts.headers.set(
|
|
705
|
+
opts.headers.set('xu-db', db_name);
|
|
857
706
|
}
|
|
858
707
|
return PouchDB.fetch(url, opts);
|
|
859
708
|
},
|
|
@@ -861,18 +710,13 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
|
|
|
861
710
|
|
|
862
711
|
const ret = await remote_db.find({
|
|
863
712
|
selector: rep_doc.selector,
|
|
864
|
-
fields: [
|
|
713
|
+
fields: ['_id'],
|
|
865
714
|
limit: 9999999999,
|
|
866
715
|
// prog_id: rep_doc.prog_id,
|
|
867
716
|
});
|
|
868
717
|
|
|
869
718
|
if (ret?.code < 0) {
|
|
870
|
-
return func.utils.debug_report(
|
|
871
|
-
SESSION_ID,
|
|
872
|
-
"download_documents",
|
|
873
|
-
ret.data,
|
|
874
|
-
"E"
|
|
875
|
-
);
|
|
719
|
+
return func.utils.debug_report(SESSION_ID, 'download_documents', ret.data, 'E');
|
|
876
720
|
}
|
|
877
721
|
|
|
878
722
|
try {
|
|
@@ -884,20 +728,19 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
|
|
|
884
728
|
.from(remote_db_url, {
|
|
885
729
|
doc_ids,
|
|
886
730
|
retry: true,
|
|
887
|
-
style:
|
|
731
|
+
style: 'main_only',
|
|
888
732
|
fetch: function (url, opts) {
|
|
889
733
|
if (_session.gtp_token) {
|
|
890
|
-
opts.headers.set(
|
|
734
|
+
opts.headers.set('xu-gtp-token', _session.gtp_token);
|
|
891
735
|
}
|
|
892
|
-
if (_session.app_token)
|
|
893
|
-
opts.headers.set("xu-app-token", _session.app_token);
|
|
736
|
+
if (_session.app_token) opts.headers.set('xu-app-token', _session.app_token);
|
|
894
737
|
{
|
|
895
|
-
opts.headers.set(
|
|
738
|
+
opts.headers.set('xu-db', db_name);
|
|
896
739
|
}
|
|
897
740
|
return PouchDB.fetch(url, opts);
|
|
898
741
|
},
|
|
899
742
|
})
|
|
900
|
-
.on(
|
|
743
|
+
.on('paused', async function (err) {
|
|
901
744
|
// replication paused (e.g. replication up to date, user went offline)
|
|
902
745
|
|
|
903
746
|
if (err) {
|
|
@@ -909,7 +752,7 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
|
|
|
909
752
|
});
|
|
910
753
|
} catch (err) {
|
|
911
754
|
await write_stat(rep_doc._id, 2, err.message);
|
|
912
|
-
console.error(
|
|
755
|
+
console.error('replication from error', err);
|
|
913
756
|
}
|
|
914
757
|
// console.log(ret);
|
|
915
758
|
};
|
|
@@ -923,15 +766,15 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
|
|
|
923
766
|
try {
|
|
924
767
|
_this.db_changes_store = remote_db
|
|
925
768
|
.changes({
|
|
926
|
-
since:
|
|
769
|
+
since: 'now',
|
|
927
770
|
live: true,
|
|
928
771
|
timeout: 300000, // 5 min
|
|
929
|
-
style:
|
|
772
|
+
style: 'main_only',
|
|
930
773
|
include_docs: false,
|
|
931
774
|
// heartbeat: 10000
|
|
932
775
|
})
|
|
933
|
-
.on(
|
|
934
|
-
if (change.id.substr(0, 4) !==
|
|
776
|
+
.on('change', async function (change) {
|
|
777
|
+
if (change.id.substr(0, 4) !== 'dbs-') return;
|
|
935
778
|
|
|
936
779
|
if (_this.db_replication_from_stat !== 3) {
|
|
937
780
|
set_replication_stat(SESSION_ID, 3);
|
|
@@ -943,15 +786,14 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
|
|
|
943
786
|
db.replicate.from(remote_db_url, {
|
|
944
787
|
doc_ids: [change.id],
|
|
945
788
|
retry: true,
|
|
946
|
-
style:
|
|
789
|
+
style: 'main_only',
|
|
947
790
|
fetch: function (url, opts) {
|
|
948
791
|
if (_session.gtp_token) {
|
|
949
|
-
opts.headers.set(
|
|
792
|
+
opts.headers.set('xu-gtp-token', _session.gtp_token);
|
|
950
793
|
}
|
|
951
|
-
if (_session.app_token)
|
|
952
|
-
opts.headers.set("xu-app-token", _session.app_token);
|
|
794
|
+
if (_session.app_token) opts.headers.set('xu-app-token', _session.app_token);
|
|
953
795
|
{
|
|
954
|
-
opts.headers.set(
|
|
796
|
+
opts.headers.set('xu-db', db_name);
|
|
955
797
|
}
|
|
956
798
|
return PouchDB.fetch(url, opts);
|
|
957
799
|
},
|
|
@@ -959,7 +801,7 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
|
|
|
959
801
|
} catch (err) {
|
|
960
802
|
// new doc change
|
|
961
803
|
try {
|
|
962
|
-
const table_id = change.id.split(
|
|
804
|
+
const table_id = change.id.split('_')[0].substr(4);
|
|
963
805
|
|
|
964
806
|
for (let doc of rep_docs) {
|
|
965
807
|
if (doc.table_id === table_id) {
|
|
@@ -971,10 +813,10 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
|
|
|
971
813
|
}
|
|
972
814
|
}
|
|
973
815
|
})
|
|
974
|
-
.on(
|
|
816
|
+
.on('complete', function (info) {
|
|
975
817
|
// changes() was canceled
|
|
976
818
|
})
|
|
977
|
-
.on(
|
|
819
|
+
.on('error', function (err) {
|
|
978
820
|
console.error(err);
|
|
979
821
|
set_replication_stat(SESSION_ID, 2);
|
|
980
822
|
_this.db_changes_store.cancel();
|
|
@@ -985,10 +827,7 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
|
|
|
985
827
|
|
|
986
828
|
return;
|
|
987
829
|
};
|
|
988
|
-
_db.pouch.remove_db_replication_from_server = async function (
|
|
989
|
-
SESSION_ID,
|
|
990
|
-
rep_id
|
|
991
|
-
) {
|
|
830
|
+
_db.pouch.remove_db_replication_from_server = async function (SESSION_ID, rep_id) {
|
|
992
831
|
const db = await func.utils.connect_pouchdb(SESSION_ID);
|
|
993
832
|
|
|
994
833
|
try {
|
|
@@ -997,16 +836,14 @@ _db.pouch.remove_db_replication_from_server = async function (
|
|
|
997
836
|
// _this.db_replication_store[rep_id].cancel();
|
|
998
837
|
db.remove(doc);
|
|
999
838
|
// delete _this.db_replication_store[rep_id];
|
|
1000
|
-
} catch (error) {
|
|
839
|
+
} catch (error) {}
|
|
1001
840
|
};
|
|
1002
841
|
|
|
1003
|
-
_db.pouch.get_replications = async function (
|
|
1004
|
-
SESSION_ID = Object.keys(SESSION_OBJ)[0]
|
|
1005
|
-
) {
|
|
842
|
+
_db.pouch.get_replications = async function (SESSION_ID = Object.keys(SESSION_OBJ)[0]) {
|
|
1006
843
|
const db = await func.utils.connect_pouchdb(SESSION_ID);
|
|
1007
844
|
// source: "runtime"
|
|
1008
845
|
let ret = await db.find({
|
|
1009
|
-
selector: { docType:
|
|
846
|
+
selector: { docType: 'rep_request' },
|
|
1010
847
|
});
|
|
1011
848
|
|
|
1012
849
|
return ret.docs;
|
|
@@ -1029,42 +866,28 @@ const set_replication_stat = async function (SESSION_ID, from_stat, to_stat) {
|
|
|
1029
866
|
if (to_stat) _this.db_replication_to_stat = to_stat;
|
|
1030
867
|
|
|
1031
868
|
var data = {};
|
|
1032
|
-
if (
|
|
1033
|
-
_this.db_replication_from_stat === 3 &&
|
|
1034
|
-
_this.db_replication_to_stat === 3
|
|
1035
|
-
) {
|
|
869
|
+
if (_this.db_replication_from_stat === 3 && _this.db_replication_to_stat === 3) {
|
|
1036
870
|
data.SYS_GLOBAL_BOL_REPLICATION_STAT = 1;
|
|
1037
|
-
console.info(
|
|
871
|
+
console.info('Replication On');
|
|
1038
872
|
} else {
|
|
1039
873
|
data.SYS_GLOBAL_BOL_REPLICATION_STAT = 0;
|
|
1040
|
-
console.info(
|
|
874
|
+
console.info('Replication Off');
|
|
1041
875
|
}
|
|
1042
876
|
|
|
1043
877
|
var datasource_changes = {
|
|
1044
878
|
[0]: {
|
|
1045
|
-
[
|
|
879
|
+
['data_system']: data,
|
|
1046
880
|
},
|
|
1047
881
|
};
|
|
1048
882
|
await func.datasource.update(SESSION_ID, datasource_changes);
|
|
1049
883
|
};
|
|
1050
884
|
|
|
1051
|
-
const refresh_document_changes_for_realtime_update = function (
|
|
1052
|
-
SESSION_ID,
|
|
1053
|
-
doc_change
|
|
1054
|
-
) {
|
|
885
|
+
const refresh_document_changes_for_realtime_update = function (SESSION_ID, doc_change) {
|
|
1055
886
|
var _session = _this.SESSION_OBJ[SESSION_ID];
|
|
1056
887
|
|
|
1057
888
|
if (glb.IS_WORKER) {
|
|
1058
|
-
return func.utils.post_back_to_client(
|
|
1059
|
-
SESSION_ID,
|
|
1060
|
-
"refresh_document_changes_for_realtime_update",
|
|
1061
|
-
_session.worker_id,
|
|
1062
|
-
{ doc_change }
|
|
1063
|
-
);
|
|
889
|
+
return func.utils.post_back_to_client(SESSION_ID, 'refresh_document_changes_for_realtime_update', _session.worker_id, { doc_change });
|
|
1064
890
|
}
|
|
1065
891
|
|
|
1066
|
-
func.UI.screen.refresh_document_changes_for_realtime_update(
|
|
1067
|
-
SESSION_ID,
|
|
1068
|
-
doc_change
|
|
1069
|
-
);
|
|
892
|
+
func.UI.screen.refresh_document_changes_for_realtime_update(SESSION_ID, doc_change);
|
|
1070
893
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xuda.io/runtime-bundle",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.563",
|
|
4
4
|
"description": "The Xuda Runtime Bundle refers to a collection of scripts and libraries packaged together to provide the necessary runtime environment for executing plugins or components in the Xuda platform. ",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"pub": "npm version patch --force && npm publish --access public"
|