copper-sdk 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +4 -0
- package/dist/copper-sdk.js +36 -12
- package/dist/copper-sdk.min.js +1 -1
- package/dist/defer.d.ts +5 -0
- package/es/copper-sdk.js +36 -12
- package/es/defer.d.ts +5 -0
- package/lib/copper-sdk.js +36 -12
- package/lib/defer.d.ts +5 -0
- package/package.json +1 -1
- package/src/defer.ts +15 -1
- package/src/index.ts +23 -11
package/CHANGELOG.md
CHANGED
package/dist/copper-sdk.js
CHANGED
@@ -68,7 +68,7 @@
|
|
68
68
|
}
|
69
69
|
}
|
70
70
|
|
71
|
-
var version = "0.7.
|
71
|
+
var version = "0.7.1";
|
72
72
|
|
73
73
|
var ENTITY_PATH_MAP = {
|
74
74
|
lead: 'leads',
|
@@ -164,7 +164,14 @@
|
|
164
164
|
_this._resolve = resolve;
|
165
165
|
_this._reject = reject;
|
166
166
|
});
|
167
|
+
this._id = Deferred.getNextId();
|
167
168
|
}
|
169
|
+
Deferred.resetNextId = function () {
|
170
|
+
Deferred._nextId = 0;
|
171
|
+
};
|
172
|
+
Deferred.getNextId = function () {
|
173
|
+
return Deferred._nextId++;
|
174
|
+
};
|
168
175
|
Object.defineProperty(Deferred.prototype, "promise", {
|
169
176
|
get: function () {
|
170
177
|
return this._promise;
|
@@ -172,6 +179,14 @@
|
|
172
179
|
enumerable: false,
|
173
180
|
configurable: true
|
174
181
|
});
|
182
|
+
Object.defineProperty(Deferred.prototype, "id", {
|
183
|
+
get: function () {
|
184
|
+
return this._id;
|
185
|
+
},
|
186
|
+
enumerable: false,
|
187
|
+
configurable: true
|
188
|
+
});
|
189
|
+
Deferred._nextId = 0;
|
175
190
|
return Deferred;
|
176
191
|
}());
|
177
192
|
|
@@ -564,15 +579,19 @@
|
|
564
579
|
});
|
565
580
|
});
|
566
581
|
};
|
567
|
-
Copper.prototype._postMessage = function (type, message) {
|
582
|
+
Copper.prototype._postMessage = function (type, message, id) {
|
583
|
+
var _a;
|
568
584
|
if (message === void 0) { message = {}; }
|
569
|
-
|
585
|
+
if (id === void 0) { id = -1; }
|
586
|
+
(_a = this.win.top) === null || _a === void 0 ? void 0 : _a.postMessage(__assign(__assign({}, message), {
|
570
587
|
// as a credential to the parent frame, so parent frame can recoganize the origin
|
571
588
|
instanceId: this.instanceId,
|
572
589
|
// tell parent frame current sdk version
|
573
590
|
version: version,
|
574
591
|
// type of message
|
575
|
-
type: type
|
592
|
+
type: type,
|
593
|
+
// optional id for message
|
594
|
+
id: id }), this.parentOrigin);
|
576
595
|
};
|
577
596
|
Copper.prototype._listenMessage = function () {
|
578
597
|
var _this = this;
|
@@ -582,7 +601,7 @@
|
|
582
601
|
}
|
583
602
|
// if type is a deferred type, we resolve it
|
584
603
|
// otherwise we do something else
|
585
|
-
_this._resolveDeferred(event.data.type, event.data);
|
604
|
+
_this._resolveDeferred(event.data.type, event.data.id, event.data);
|
586
605
|
// if event type exists, we pass the event to SDK
|
587
606
|
// so sdk user can subscribe those events
|
588
607
|
if (event.data.type) {
|
@@ -598,12 +617,17 @@
|
|
598
617
|
createArrayWhenEmpty(this.deferredQueues, queueName);
|
599
618
|
this.deferredQueues[queueName].push(deferred);
|
600
619
|
};
|
601
|
-
Copper.prototype._resolveDeferred = function (queueName, data) {
|
602
|
-
|
620
|
+
Copper.prototype._resolveDeferred = function (queueName, messageId, data) {
|
621
|
+
var queue = this.deferredQueues[queueName];
|
622
|
+
if (!queue) {
|
603
623
|
return;
|
604
624
|
}
|
605
|
-
var
|
625
|
+
var foundIdx = queue.findIndex(function (d) {
|
626
|
+
return d.id === messageId;
|
627
|
+
});
|
628
|
+
var deferred = queue[foundIdx];
|
606
629
|
if (deferred) {
|
630
|
+
queue.splice(foundIdx, 1);
|
607
631
|
if (data.error) {
|
608
632
|
return deferred.reject(data.error);
|
609
633
|
}
|
@@ -642,17 +666,17 @@
|
|
642
666
|
Copper.prototype._createDeferredMethod = function (queueName, executor) {
|
643
667
|
var deferred = new Deferred();
|
644
668
|
this._enqueueDeferred(queueName, deferred);
|
645
|
-
executor();
|
669
|
+
executor(deferred);
|
646
670
|
return deferred.promise;
|
647
671
|
};
|
648
672
|
Copper.prototype._deferredPost = function (name, data) {
|
649
673
|
var _this = this;
|
650
|
-
return this._createDeferredMethod(name, function () {
|
674
|
+
return this._createDeferredMethod(name, function (deferred) {
|
651
675
|
if (data) {
|
652
|
-
_this._postMessage(name, data);
|
676
|
+
_this._postMessage(name, data, deferred.id);
|
653
677
|
}
|
654
678
|
else {
|
655
|
-
_this._postMessage(name);
|
679
|
+
_this._postMessage(name, {}, deferred.id);
|
656
680
|
}
|
657
681
|
});
|
658
682
|
};
|
package/dist/copper-sdk.min.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Copper=e()}(this,function(){"use strict";var n=function(){return(n=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function e(t,s,a,u){return new(a=a||Promise)(function(n,e){function i(t){try{o(u.next(t))}catch(t){e(t)}}function r(t){try{o(u.throw(t))}catch(t){e(t)}}function o(t){var e;t.done?n(t.value):((e=t.value)instanceof a?e:new a(function(t){t(e)})).then(i,r)}o((u=u.apply(t,s||[])).next())})}function d(i,r){var o,s,a,u={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},t={next:e(0),throw:e(1),return:e(2)};return"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function e(n){return function(t){var e=[n,t];if(o)throw new TypeError("Generator is already executing.");for(;u;)try{if(o=1,s&&(a=2&e[0]?s.return:e[0]?s.throw||((a=s.return)&&a.call(s),0):s.next)&&!(a=a.call(s,e[1])).done)return a;switch(s=0,(e=a?[2&e[0],a.value]:e)[0]){case 0:case 1:a=e;break;case 4:return u.label++,{value:e[1],done:!1};case 5:u.label++,s=e[1],e=[0];continue;case 7:e=u.ops.pop(),u.trys.pop();continue;default:if(!(a=0<(a=u.trys).length&&a[a.length-1])&&(6===e[0]||2===e[0])){u=0;continue}if(3===e[0]&&(!a||a[0]<e[1]&&e[1]<a[3]))u.label=e[1];else if(6===e[0]&&u.label<a[1])u.label=a[1],a=e;else{if(!a||a[2]<=u.label){a[2]&&u.ops.pop(),u.trys.pop();continue}u.label=a[2],u.ops.push(e)}}e=r.call(i,u)}catch(t){e=[6,t],s=0}finally{o=a=0}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}}}var f,t,i="0.7.0",h={lead:"leads",person:"people",company:"companies",opportunity:"opportunities",task:"tasks",project:"projects"};(t=f=f||{}).ActivityLog="ActivityLog",t.ListView="ListView";Object.defineProperty(o.prototype,"promise",{get:function(){return this._promise},enumerable:!(t.Related="Related"),configurable:!0});var r=o;function o(){var n=this;this.resolve=function(t){n._resolve(t)},this.reject=function(t){n._reject(t)},this._promise=new Promise(function(t,e){n._resolve=t,n._reject=e})}function s(t,e){e=(e=void 0===e?"":e)||window.location.href,t=t.replace(/[[]]/g,"\\$&");t=RegExp("[?&]"+t+"(=([^&#]*)|&|#|$)").exec(e);return t&&t[2]?decodeURIComponent(t[2].replace(/\+/g," ")):""}function a(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];console.log.apply(console,t)}function u(t,e){t[e]||(t[e]=[])}function l(t,e){setTimeout(function(){t()},e=void 0===e?1e3:e)}p.prototype.save=function(){return e(this,void 0,void 0,function(){return d(this,function(t){switch(t.label){case 0:return this._onSave?[4,this._onSave(this)]:[3,2];case 1:return[2,t.sent()];case 2:return[2,null]}})})},p.prototype.toJSON=function(){return JSON.stringify(this.toObject())},p.prototype.toObject=function(){var e=this,n={};return Object.keys(this).forEach(function(t){n[t]=e[t]}),n},p.prototype._getEntityDataDefinition=function(e,n){void 0===n&&(n=[]);var i={};return Object.keys(e).forEach(function(t){~n.indexOf(t)?i[t]={value:e[t],writable:!0,enumerable:!0}:i[t]={get:function(){return e[t]},set:function(){a("property "+t+" is read only")},enumerable:!0}}),i};var c=p;function p(t,e,n,i){e=this._getEntityDataDefinition(e,n=void 0===n?[]:n);e.type={enumerable:!1,writable:!1,value:t},e._onSave={enumerable:!1,value:i},Object.defineProperties(this,e)}function y(t,e,n,i){if(void 0===i&&(i=window),this.parentOrigin=t,this.instanceId=e,this.options=n,this._win=i,this.deferredQueues={},this.events={},!this.parentOrigin||!this.instanceId)throw new TypeError("parentOrigin or instanceId is empty");this._listenMessage(),this._subscribeContextUpdated(),this._postMessage("init")}return y.init=function(){var t=s("origin"),e=s("instanceId"),n={isGlobal:"1"===s("isGlobal")};if(function(){if("undefined"!=typeof window)return window.top===window&&a("Copper should be inside an iframe, otherwise it might not work as expected."),1;a("Copper can only run in browser environment")}())return new y(t,e,n);throw Error("Environment checking does not pass.")},Object.defineProperty(y,"version",{get:function(){return i},enumerable:!1,configurable:!0}),Object.defineProperty(y.prototype,"win",{get:function(){return this._win},enumerable:!1,configurable:!0}),y.prototype.getContext=function(){return e(this,void 0,void 0,function(){var e;return d(this,function(t){switch(t.label){case 0:return[4,this._deferredPost("getContext")];case 1:return e=t.sent(),[2,this._createContextModel(e)]}})})},y.prototype.getUserInfo=function(){return e(this,void 0,void 0,function(){return d(this,function(t){return[2,this._deferredPost("getUserInfo")]})})},y.prototype.getRouteInfo=function(){return e(this,void 0,void 0,function(){return d(this,function(t){return[2,this._deferredPost("getRouteInfo")]})})},y.prototype.saveContext=function(n){return e(this,void 0,void 0,function(){var e;return d(this,function(t){switch(t.label){case 0:return[4,this._deferredPost("saveContext",{data:{entityType:n.type,entityData:n.toObject()}})];case 1:return e=t.sent(),[2,this._createContextModel(e)]}})})},y.prototype.setAppUI=function(t){this._postMessage("setUI",{data:t})},y.prototype.showModal=function(t){this._postMessage("showModal",{params:t=void 0===t?{}:t})},y.prototype.closeModal=function(){this._postMessage("closeModal")},y.prototype.publishMessage=function(t,e,n){this._postMessage("publishMessage",{target:e,data:{type:t,msg:n=void 0===n?{}:n}})},y.prototype.logActivity=function(r,o,s,a){return void 0===a&&(a=0),e(this,void 0,void 0,function(){var i;return d(this,function(t){switch(t.label){case 0:return[4,this._getCachedContext()];case 1:return i=t.sent(),e={parent:{type:(e=i).type,id:e.id},type:{category:"user",id:(n={activityType:r,details:o,activityDate:s}).activityType},details:n.details},(n=n.activityDate)&&(e.activity_date=n),i={url:"/v1/activities",method:"POST",data:e,target:{name:f.ActivityLog}},[2,this._action(i,a)]}var e,n})})},y.prototype.createEntity=function(u,c,p){return void 0===p&&(p=0),e(this,void 0,void 0,function(){var r,o,s,a=this;return d(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this._getCachedContext()];case 1:return r=t.sent(),[3,3];case 2:return t.sent(),r={},[3,3];case 3:return e=r,i=(n={entityType:u,data:c}).entityType,n=n.data,o=(s={url:"/v1/"+h[i],method:"POST",data:n,target:i===e.type?{name:f.ListView,data:{entityType:i,entityData:n}}:null}).target,[4,this.api(s.url,{method:s.method,body:JSON.stringify(s.data)})];case 4:return s=t.sent(),o&&o.data&&(o.data.entityData=s,l(function(){a.refreshUI(o)},p)),[2,s]}var e,n,i})})},y.prototype.relateEntity=function(o,s,a,u){return void 0===u&&(u=0),e(this,void 0,void 0,function(){var r;return d(this,function(t){switch(t.label){case 0:return[4,this._getCachedContext()];case 1:return r=t.sent(),r={url:"/v1/"+h[n=(e={entityType:o,entityId:parseInt(s,10),data:a}).entityType]+"/"+(i=e.entityId)+"/related",method:"POST",data:{resource:e=e.data},target:n===(n=r).type&&i===n.id?{name:f.Related,data:e}:null},[2,this._action(r,u)]}var e,n,i})})},y.prototype.refreshUI=function(t){this._postMessage("refreshUI",{target:t})},y.prototype.on=function(t,e){u(this.events,t),this.events[t].push(e)},y.prototype.trigger=function(t,e){var n=this;this.events[t]&&this.events[t].forEach(function(t){t.call(n,e)})},y.prototype.api=function(t,e){if(!t)return Promise.reject({id:"sdk-api",version:y.version,detail:"url cannot be empty"});if(e&&e.body)try{JSON.parse(e.body)}catch(t){return Promise.reject({id:"sdk-api",version:y.version,detail:"body must be a valid JSON string"})}return this._deferredPost("api",{url:t,options:e})},y.prototype.navigateToEntityDetail=function(t,e){return this._deferredPost("navigateToEntityDetail",{entityType:t,entityId:e})},y.prototype.getSelectedRecords=function(t){var t=void 0===t?{}:t,e=t.pageSize,t=t.pageNumber;return this._deferredPost("getSelectedRecords",{pageSize:void 0===e?100:e,pageNumber:void 0===t?0:t})},y.prototype.getConfig=function(){return this._deferredPost("getConfig")},y.prototype._getCachedContext=function(){return e(this,void 0,void 0,function(){return d(this,function(t){switch(t.label){case 0:return this._context?[2,this._context]:[4,this.getContext()];case 1:return[2,t.sent().context]}})})},y.prototype._postMessage=function(t,e){this.win.top.postMessage(n(n({},e=void 0===e?{}:e),{instanceId:this.instanceId,version:i,type:t}),this.parentOrigin)},y.prototype._listenMessage=function(){var e=this;this.win.addEventListener("message",function(t){e._isOriginValid(t)&&(e._resolveDeferred(t.data.type,t.data),t.data.type)&&e.trigger(t.data.type,t.data.msg||t.data.data)},!1)},y.prototype._isOriginValid=function(t){return t.origin===this.parentOrigin},y.prototype._enqueueDeferred=function(t,e){u(this.deferredQueues,t),this.deferredQueues[t].push(e)},y.prototype._resolveDeferred=function(t,e){if(this.deferredQueues[t]){t=this.deferredQueues[t].shift();if(t){if(e.error)return t.reject(e.error);t.resolve(e.data)}}},y.prototype._createContextModel=function(t){var e=t.entityType,t=new c(e,t.entityData,t.editableFields,this.saveContext.bind(this));return{type:e,context:this._context=t}},y.prototype._action=function(t,i){var r=t.url,o=t.method,s=t.data,a=t.target;return e(this,void 0,void 0,function(){var e,n=this;return d(this,function(t){switch(t.label){case 0:return[4,this.api(r,{method:o,body:JSON.stringify(s)})];case 1:return e=t.sent(),a&&l(function(){n.refreshUI(a)},i),[2,e]}})})},y.prototype._createDeferredMethod=function(t,e){var n=new r;return this._enqueueDeferred(t,n),e(),n.promise},y.prototype._deferredPost=function(t,e){var n=this;return this._createDeferredMethod(t,function(){e?n._postMessage(t,e):n._postMessage(t)})},y.prototype._subscribeContextUpdated=function(){this.on("contextUpdated",function(){0})},y});
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Copper=e()}(this,function(){"use strict";var r=function(){return(r=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function e(t,s,a,u){return new(a=a||Promise)(function(n,e){function i(t){try{o(u.next(t))}catch(t){e(t)}}function r(t){try{o(u.throw(t))}catch(t){e(t)}}function o(t){var e;t.done?n(t.value):((e=t.value)instanceof a?e:new a(function(t){t(e)})).then(i,r)}o((u=u.apply(t,s||[])).next())})}function p(i,r){var o,s,a,u={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},t={next:e(0),throw:e(1),return:e(2)};return"function"==typeof Symbol&&(t[Symbol.iterator]=function(){return this}),t;function e(n){return function(t){var e=[n,t];if(o)throw new TypeError("Generator is already executing.");for(;u;)try{if(o=1,s&&(a=2&e[0]?s.return:e[0]?s.throw||((a=s.return)&&a.call(s),0):s.next)&&!(a=a.call(s,e[1])).done)return a;switch(s=0,(e=a?[2&e[0],a.value]:e)[0]){case 0:case 1:a=e;break;case 4:return u.label++,{value:e[1],done:!1};case 5:u.label++,s=e[1],e=[0];continue;case 7:e=u.ops.pop(),u.trys.pop();continue;default:if(!(a=0<(a=u.trys).length&&a[a.length-1])&&(6===e[0]||2===e[0])){u=0;continue}if(3===e[0]&&(!a||a[0]<e[1]&&e[1]<a[3]))u.label=e[1];else if(6===e[0]&&u.label<a[1])u.label=a[1],a=e;else{if(!a||a[2]<=u.label){a[2]&&u.ops.pop(),u.trys.pop();continue}u.label=a[2],u.ops.push(e)}}e=r.call(i,u)}catch(t){e=[6,t],s=0}finally{o=a=0}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}}}var f,t,o="0.7.1",h={lead:"leads",person:"people",company:"companies",opportunity:"opportunities",task:"tasks",project:"projects"};(t=f=f||{}).ActivityLog="ActivityLog",t.ListView="ListView",t.Related="Related";s.resetNextId=function(){s._nextId=0},s.getNextId=function(){return s._nextId++},Object.defineProperty(s.prototype,"promise",{get:function(){return this._promise},enumerable:!1,configurable:!0}),Object.defineProperty(s.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),s._nextId=0;var i=s;function s(){var n=this;this.resolve=function(t){n._resolve(t)},this.reject=function(t){n._reject(t)},this._promise=new Promise(function(t,e){n._resolve=t,n._reject=e}),this._id=s.getNextId()}function a(t,e){e=(e=void 0===e?"":e)||window.location.href,t=t.replace(/[[]]/g,"\\$&");t=RegExp("[?&]"+t+"(=([^&#]*)|&|#|$)").exec(e);return t&&t[2]?decodeURIComponent(t[2].replace(/\+/g," ")):""}function u(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];console.log.apply(console,t)}function n(t,e){t[e]||(t[e]=[])}function l(t,e){setTimeout(function(){t()},e=void 0===e?1e3:e)}d.prototype.save=function(){return e(this,void 0,void 0,function(){return p(this,function(t){switch(t.label){case 0:return this._onSave?[4,this._onSave(this)]:[3,2];case 1:return[2,t.sent()];case 2:return[2,null]}})})},d.prototype.toJSON=function(){return JSON.stringify(this.toObject())},d.prototype.toObject=function(){var e=this,n={};return Object.keys(this).forEach(function(t){n[t]=e[t]}),n},d.prototype._getEntityDataDefinition=function(e,n){void 0===n&&(n=[]);var i={};return Object.keys(e).forEach(function(t){~n.indexOf(t)?i[t]={value:e[t],writable:!0,enumerable:!0}:i[t]={get:function(){return e[t]},set:function(){u("property "+t+" is read only")},enumerable:!0}}),i};var c=d;function d(t,e,n,i){e=this._getEntityDataDefinition(e,n=void 0===n?[]:n);e.type={enumerable:!1,writable:!1,value:t},e._onSave={enumerable:!1,value:i},Object.defineProperties(this,e)}function y(t,e,n,i){if(void 0===i&&(i=window),this.parentOrigin=t,this.instanceId=e,this.options=n,this._win=i,this.deferredQueues={},this.events={},!this.parentOrigin||!this.instanceId)throw new TypeError("parentOrigin or instanceId is empty");this._listenMessage(),this._subscribeContextUpdated(),this._postMessage("init")}return y.init=function(){var t=a("origin"),e=a("instanceId"),n={isGlobal:"1"===a("isGlobal")};if(function(){if("undefined"!=typeof window)return window.top===window&&u("Copper should be inside an iframe, otherwise it might not work as expected."),1;u("Copper can only run in browser environment")}())return new y(t,e,n);throw Error("Environment checking does not pass.")},Object.defineProperty(y,"version",{get:function(){return o},enumerable:!1,configurable:!0}),Object.defineProperty(y.prototype,"win",{get:function(){return this._win},enumerable:!1,configurable:!0}),y.prototype.getContext=function(){return e(this,void 0,void 0,function(){var e;return p(this,function(t){switch(t.label){case 0:return[4,this._deferredPost("getContext")];case 1:return e=t.sent(),[2,this._createContextModel(e)]}})})},y.prototype.getUserInfo=function(){return e(this,void 0,void 0,function(){return p(this,function(t){return[2,this._deferredPost("getUserInfo")]})})},y.prototype.getRouteInfo=function(){return e(this,void 0,void 0,function(){return p(this,function(t){return[2,this._deferredPost("getRouteInfo")]})})},y.prototype.saveContext=function(n){return e(this,void 0,void 0,function(){var e;return p(this,function(t){switch(t.label){case 0:return[4,this._deferredPost("saveContext",{data:{entityType:n.type,entityData:n.toObject()}})];case 1:return e=t.sent(),[2,this._createContextModel(e)]}})})},y.prototype.setAppUI=function(t){this._postMessage("setUI",{data:t})},y.prototype.showModal=function(t){this._postMessage("showModal",{params:t=void 0===t?{}:t})},y.prototype.closeModal=function(){this._postMessage("closeModal")},y.prototype.publishMessage=function(t,e,n){this._postMessage("publishMessage",{target:e,data:{type:t,msg:n=void 0===n?{}:n}})},y.prototype.logActivity=function(r,o,s,a){return void 0===a&&(a=0),e(this,void 0,void 0,function(){var i;return p(this,function(t){switch(t.label){case 0:return[4,this._getCachedContext()];case 1:return i=t.sent(),e={parent:{type:(e=i).type,id:e.id},type:{category:"user",id:(n={activityType:r,details:o,activityDate:s}).activityType},details:n.details},(n=n.activityDate)&&(e.activity_date=n),i={url:"/v1/activities",method:"POST",data:e,target:{name:f.ActivityLog}},[2,this._action(i,a)]}var e,n})})},y.prototype.createEntity=function(u,c,d){return void 0===d&&(d=0),e(this,void 0,void 0,function(){var r,o,s,a=this;return p(this,function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,this._getCachedContext()];case 1:return r=t.sent(),[3,3];case 2:return t.sent(),r={},[3,3];case 3:return e=r,i=(n={entityType:u,data:c}).entityType,n=n.data,o=(s={url:"/v1/"+h[i],method:"POST",data:n,target:i===e.type?{name:f.ListView,data:{entityType:i,entityData:n}}:null}).target,[4,this.api(s.url,{method:s.method,body:JSON.stringify(s.data)})];case 4:return s=t.sent(),o&&o.data&&(o.data.entityData=s,l(function(){a.refreshUI(o)},d)),[2,s]}var e,n,i})})},y.prototype.relateEntity=function(o,s,a,u){return void 0===u&&(u=0),e(this,void 0,void 0,function(){var r;return p(this,function(t){switch(t.label){case 0:return[4,this._getCachedContext()];case 1:return r=t.sent(),r={url:"/v1/"+h[n=(e={entityType:o,entityId:parseInt(s,10),data:a}).entityType]+"/"+(i=e.entityId)+"/related",method:"POST",data:{resource:e=e.data},target:n===(n=r).type&&i===n.id?{name:f.Related,data:e}:null},[2,this._action(r,u)]}var e,n,i})})},y.prototype.refreshUI=function(t){this._postMessage("refreshUI",{target:t})},y.prototype.on=function(t,e){n(this.events,t),this.events[t].push(e)},y.prototype.trigger=function(t,e){var n=this;this.events[t]&&this.events[t].forEach(function(t){t.call(n,e)})},y.prototype.api=function(t,e){if(!t)return Promise.reject({id:"sdk-api",version:y.version,detail:"url cannot be empty"});if(e&&e.body)try{JSON.parse(e.body)}catch(t){return Promise.reject({id:"sdk-api",version:y.version,detail:"body must be a valid JSON string"})}return this._deferredPost("api",{url:t,options:e})},y.prototype.navigateToEntityDetail=function(t,e){return this._deferredPost("navigateToEntityDetail",{entityType:t,entityId:e})},y.prototype.getSelectedRecords=function(t){var t=void 0===t?{}:t,e=t.pageSize,t=t.pageNumber;return this._deferredPost("getSelectedRecords",{pageSize:void 0===e?100:e,pageNumber:void 0===t?0:t})},y.prototype.getConfig=function(){return this._deferredPost("getConfig")},y.prototype._getCachedContext=function(){return e(this,void 0,void 0,function(){return p(this,function(t){switch(t.label){case 0:return this._context?[2,this._context]:[4,this.getContext()];case 1:return[2,t.sent().context]}})})},y.prototype._postMessage=function(t,e,n){var i;void 0===e&&(e={}),void 0===n&&(n=-1),null!=(i=this.win.top)&&i.postMessage(r(r({},e),{instanceId:this.instanceId,version:o,type:t,id:n}),this.parentOrigin)},y.prototype._listenMessage=function(){var e=this;this.win.addEventListener("message",function(t){e._isOriginValid(t)&&(e._resolveDeferred(t.data.type,t.data.id,t.data),t.data.type)&&e.trigger(t.data.type,t.data.msg||t.data.data)},!1)},y.prototype._isOriginValid=function(t){return t.origin===this.parentOrigin},y.prototype._enqueueDeferred=function(t,e){n(this.deferredQueues,t),this.deferredQueues[t].push(e)},y.prototype._resolveDeferred=function(t,e,n){t=this.deferredQueues[t];if(t){var i=t.findIndex(function(t){return t.id===e}),r=t[i];if(r){if(t.splice(i,1),n.error)return r.reject(n.error);r.resolve(n.data)}}},y.prototype._createContextModel=function(t){var e=t.entityType,t=new c(e,t.entityData,t.editableFields,this.saveContext.bind(this));return{type:e,context:this._context=t}},y.prototype._action=function(t,i){var r=t.url,o=t.method,s=t.data,a=t.target;return e(this,void 0,void 0,function(){var e,n=this;return p(this,function(t){switch(t.label){case 0:return[4,this.api(r,{method:o,body:JSON.stringify(s)})];case 1:return e=t.sent(),a&&l(function(){n.refreshUI(a)},i),[2,e]}})})},y.prototype._createDeferredMethod=function(t,e){var n=new i;return this._enqueueDeferred(t,n),e(n),n.promise},y.prototype._deferredPost=function(e,n){var i=this;return this._createDeferredMethod(e,function(t){i._postMessage(e,n||{},t.id)})},y.prototype._subscribeContextUpdated=function(){this.on("contextUpdated",function(){0})},y});
|
package/dist/defer.d.ts
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
export default class Deferred<T> {
|
2
|
+
static resetNextId(): void;
|
3
|
+
private static _nextId;
|
4
|
+
private static getNextId;
|
2
5
|
private _promise;
|
3
6
|
private _resolve;
|
4
7
|
private _reject;
|
8
|
+
private _id;
|
5
9
|
constructor();
|
6
10
|
get promise(): Promise<T>;
|
11
|
+
get id(): number;
|
7
12
|
resolve: (value?: T | PromiseLike<T> | undefined) => void;
|
8
13
|
reject: (reason?: any) => void;
|
9
14
|
}
|
package/es/copper-sdk.js
CHANGED
@@ -62,7 +62,7 @@ function __generator(thisArg, body) {
|
|
62
62
|
}
|
63
63
|
}
|
64
64
|
|
65
|
-
var version = "0.7.
|
65
|
+
var version = "0.7.1";
|
66
66
|
|
67
67
|
var ENTITY_PATH_MAP = {
|
68
68
|
lead: 'leads',
|
@@ -158,7 +158,14 @@ var Deferred = /** @class */ (function () {
|
|
158
158
|
_this._resolve = resolve;
|
159
159
|
_this._reject = reject;
|
160
160
|
});
|
161
|
+
this._id = Deferred.getNextId();
|
161
162
|
}
|
163
|
+
Deferred.resetNextId = function () {
|
164
|
+
Deferred._nextId = 0;
|
165
|
+
};
|
166
|
+
Deferred.getNextId = function () {
|
167
|
+
return Deferred._nextId++;
|
168
|
+
};
|
162
169
|
Object.defineProperty(Deferred.prototype, "promise", {
|
163
170
|
get: function () {
|
164
171
|
return this._promise;
|
@@ -166,6 +173,14 @@ var Deferred = /** @class */ (function () {
|
|
166
173
|
enumerable: false,
|
167
174
|
configurable: true
|
168
175
|
});
|
176
|
+
Object.defineProperty(Deferred.prototype, "id", {
|
177
|
+
get: function () {
|
178
|
+
return this._id;
|
179
|
+
},
|
180
|
+
enumerable: false,
|
181
|
+
configurable: true
|
182
|
+
});
|
183
|
+
Deferred._nextId = 0;
|
169
184
|
return Deferred;
|
170
185
|
}());
|
171
186
|
|
@@ -558,15 +573,19 @@ var Copper = /** @class */ (function () {
|
|
558
573
|
});
|
559
574
|
});
|
560
575
|
};
|
561
|
-
Copper.prototype._postMessage = function (type, message) {
|
576
|
+
Copper.prototype._postMessage = function (type, message, id) {
|
577
|
+
var _a;
|
562
578
|
if (message === void 0) { message = {}; }
|
563
|
-
|
579
|
+
if (id === void 0) { id = -1; }
|
580
|
+
(_a = this.win.top) === null || _a === void 0 ? void 0 : _a.postMessage(__assign(__assign({}, message), {
|
564
581
|
// as a credential to the parent frame, so parent frame can recoganize the origin
|
565
582
|
instanceId: this.instanceId,
|
566
583
|
// tell parent frame current sdk version
|
567
584
|
version: version,
|
568
585
|
// type of message
|
569
|
-
type: type
|
586
|
+
type: type,
|
587
|
+
// optional id for message
|
588
|
+
id: id }), this.parentOrigin);
|
570
589
|
};
|
571
590
|
Copper.prototype._listenMessage = function () {
|
572
591
|
var _this = this;
|
@@ -576,7 +595,7 @@ var Copper = /** @class */ (function () {
|
|
576
595
|
}
|
577
596
|
// if type is a deferred type, we resolve it
|
578
597
|
// otherwise we do something else
|
579
|
-
_this._resolveDeferred(event.data.type, event.data);
|
598
|
+
_this._resolveDeferred(event.data.type, event.data.id, event.data);
|
580
599
|
// if event type exists, we pass the event to SDK
|
581
600
|
// so sdk user can subscribe those events
|
582
601
|
if (event.data.type) {
|
@@ -592,12 +611,17 @@ var Copper = /** @class */ (function () {
|
|
592
611
|
createArrayWhenEmpty(this.deferredQueues, queueName);
|
593
612
|
this.deferredQueues[queueName].push(deferred);
|
594
613
|
};
|
595
|
-
Copper.prototype._resolveDeferred = function (queueName, data) {
|
596
|
-
|
614
|
+
Copper.prototype._resolveDeferred = function (queueName, messageId, data) {
|
615
|
+
var queue = this.deferredQueues[queueName];
|
616
|
+
if (!queue) {
|
597
617
|
return;
|
598
618
|
}
|
599
|
-
var
|
619
|
+
var foundIdx = queue.findIndex(function (d) {
|
620
|
+
return d.id === messageId;
|
621
|
+
});
|
622
|
+
var deferred = queue[foundIdx];
|
600
623
|
if (deferred) {
|
624
|
+
queue.splice(foundIdx, 1);
|
601
625
|
if (data.error) {
|
602
626
|
return deferred.reject(data.error);
|
603
627
|
}
|
@@ -636,17 +660,17 @@ var Copper = /** @class */ (function () {
|
|
636
660
|
Copper.prototype._createDeferredMethod = function (queueName, executor) {
|
637
661
|
var deferred = new Deferred();
|
638
662
|
this._enqueueDeferred(queueName, deferred);
|
639
|
-
executor();
|
663
|
+
executor(deferred);
|
640
664
|
return deferred.promise;
|
641
665
|
};
|
642
666
|
Copper.prototype._deferredPost = function (name, data) {
|
643
667
|
var _this = this;
|
644
|
-
return this._createDeferredMethod(name, function () {
|
668
|
+
return this._createDeferredMethod(name, function (deferred) {
|
645
669
|
if (data) {
|
646
|
-
_this._postMessage(name, data);
|
670
|
+
_this._postMessage(name, data, deferred.id);
|
647
671
|
}
|
648
672
|
else {
|
649
|
-
_this._postMessage(name);
|
673
|
+
_this._postMessage(name, {}, deferred.id);
|
650
674
|
}
|
651
675
|
});
|
652
676
|
};
|
package/es/defer.d.ts
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
export default class Deferred<T> {
|
2
|
+
static resetNextId(): void;
|
3
|
+
private static _nextId;
|
4
|
+
private static getNextId;
|
2
5
|
private _promise;
|
3
6
|
private _resolve;
|
4
7
|
private _reject;
|
8
|
+
private _id;
|
5
9
|
constructor();
|
6
10
|
get promise(): Promise<T>;
|
11
|
+
get id(): number;
|
7
12
|
resolve: (value?: T | PromiseLike<T> | undefined) => void;
|
8
13
|
reject: (reason?: any) => void;
|
9
14
|
}
|
package/lib/copper-sdk.js
CHANGED
@@ -64,7 +64,7 @@ function __generator(thisArg, body) {
|
|
64
64
|
}
|
65
65
|
}
|
66
66
|
|
67
|
-
var version = "0.7.
|
67
|
+
var version = "0.7.1";
|
68
68
|
|
69
69
|
var ENTITY_PATH_MAP = {
|
70
70
|
lead: 'leads',
|
@@ -160,7 +160,14 @@ var Deferred = /** @class */ (function () {
|
|
160
160
|
_this._resolve = resolve;
|
161
161
|
_this._reject = reject;
|
162
162
|
});
|
163
|
+
this._id = Deferred.getNextId();
|
163
164
|
}
|
165
|
+
Deferred.resetNextId = function () {
|
166
|
+
Deferred._nextId = 0;
|
167
|
+
};
|
168
|
+
Deferred.getNextId = function () {
|
169
|
+
return Deferred._nextId++;
|
170
|
+
};
|
164
171
|
Object.defineProperty(Deferred.prototype, "promise", {
|
165
172
|
get: function () {
|
166
173
|
return this._promise;
|
@@ -168,6 +175,14 @@ var Deferred = /** @class */ (function () {
|
|
168
175
|
enumerable: false,
|
169
176
|
configurable: true
|
170
177
|
});
|
178
|
+
Object.defineProperty(Deferred.prototype, "id", {
|
179
|
+
get: function () {
|
180
|
+
return this._id;
|
181
|
+
},
|
182
|
+
enumerable: false,
|
183
|
+
configurable: true
|
184
|
+
});
|
185
|
+
Deferred._nextId = 0;
|
171
186
|
return Deferred;
|
172
187
|
}());
|
173
188
|
|
@@ -560,15 +575,19 @@ var Copper = /** @class */ (function () {
|
|
560
575
|
});
|
561
576
|
});
|
562
577
|
};
|
563
|
-
Copper.prototype._postMessage = function (type, message) {
|
578
|
+
Copper.prototype._postMessage = function (type, message, id) {
|
579
|
+
var _a;
|
564
580
|
if (message === void 0) { message = {}; }
|
565
|
-
|
581
|
+
if (id === void 0) { id = -1; }
|
582
|
+
(_a = this.win.top) === null || _a === void 0 ? void 0 : _a.postMessage(__assign(__assign({}, message), {
|
566
583
|
// as a credential to the parent frame, so parent frame can recoganize the origin
|
567
584
|
instanceId: this.instanceId,
|
568
585
|
// tell parent frame current sdk version
|
569
586
|
version: version,
|
570
587
|
// type of message
|
571
|
-
type: type
|
588
|
+
type: type,
|
589
|
+
// optional id for message
|
590
|
+
id: id }), this.parentOrigin);
|
572
591
|
};
|
573
592
|
Copper.prototype._listenMessage = function () {
|
574
593
|
var _this = this;
|
@@ -578,7 +597,7 @@ var Copper = /** @class */ (function () {
|
|
578
597
|
}
|
579
598
|
// if type is a deferred type, we resolve it
|
580
599
|
// otherwise we do something else
|
581
|
-
_this._resolveDeferred(event.data.type, event.data);
|
600
|
+
_this._resolveDeferred(event.data.type, event.data.id, event.data);
|
582
601
|
// if event type exists, we pass the event to SDK
|
583
602
|
// so sdk user can subscribe those events
|
584
603
|
if (event.data.type) {
|
@@ -594,12 +613,17 @@ var Copper = /** @class */ (function () {
|
|
594
613
|
createArrayWhenEmpty(this.deferredQueues, queueName);
|
595
614
|
this.deferredQueues[queueName].push(deferred);
|
596
615
|
};
|
597
|
-
Copper.prototype._resolveDeferred = function (queueName, data) {
|
598
|
-
|
616
|
+
Copper.prototype._resolveDeferred = function (queueName, messageId, data) {
|
617
|
+
var queue = this.deferredQueues[queueName];
|
618
|
+
if (!queue) {
|
599
619
|
return;
|
600
620
|
}
|
601
|
-
var
|
621
|
+
var foundIdx = queue.findIndex(function (d) {
|
622
|
+
return d.id === messageId;
|
623
|
+
});
|
624
|
+
var deferred = queue[foundIdx];
|
602
625
|
if (deferred) {
|
626
|
+
queue.splice(foundIdx, 1);
|
603
627
|
if (data.error) {
|
604
628
|
return deferred.reject(data.error);
|
605
629
|
}
|
@@ -638,17 +662,17 @@ var Copper = /** @class */ (function () {
|
|
638
662
|
Copper.prototype._createDeferredMethod = function (queueName, executor) {
|
639
663
|
var deferred = new Deferred();
|
640
664
|
this._enqueueDeferred(queueName, deferred);
|
641
|
-
executor();
|
665
|
+
executor(deferred);
|
642
666
|
return deferred.promise;
|
643
667
|
};
|
644
668
|
Copper.prototype._deferredPost = function (name, data) {
|
645
669
|
var _this = this;
|
646
|
-
return this._createDeferredMethod(name, function () {
|
670
|
+
return this._createDeferredMethod(name, function (deferred) {
|
647
671
|
if (data) {
|
648
|
-
_this._postMessage(name, data);
|
672
|
+
_this._postMessage(name, data, deferred.id);
|
649
673
|
}
|
650
674
|
else {
|
651
|
-
_this._postMessage(name);
|
675
|
+
_this._postMessage(name, {}, deferred.id);
|
652
676
|
}
|
653
677
|
});
|
654
678
|
};
|
package/lib/defer.d.ts
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
export default class Deferred<T> {
|
2
|
+
static resetNextId(): void;
|
3
|
+
private static _nextId;
|
4
|
+
private static getNextId;
|
2
5
|
private _promise;
|
3
6
|
private _resolve;
|
4
7
|
private _reject;
|
8
|
+
private _id;
|
5
9
|
constructor();
|
6
10
|
get promise(): Promise<T>;
|
11
|
+
get id(): number;
|
7
12
|
resolve: (value?: T | PromiseLike<T> | undefined) => void;
|
8
13
|
reject: (reason?: any) => void;
|
9
14
|
}
|
package/package.json
CHANGED
package/src/defer.ts
CHANGED
@@ -1,20 +1,35 @@
|
|
1
1
|
export default class Deferred<T> {
|
2
|
+
public static resetNextId() {
|
3
|
+
Deferred._nextId = 0;
|
4
|
+
}
|
5
|
+
|
6
|
+
private static _nextId: number = 0;
|
7
|
+
|
8
|
+
private static getNextId() {
|
9
|
+
return Deferred._nextId++;
|
10
|
+
}
|
2
11
|
|
3
12
|
private _promise: Promise<T>;
|
4
13
|
private _resolve: (value?: T | PromiseLike<T>) => void;
|
5
14
|
private _reject: (reason?: any) => void;
|
15
|
+
private _id: number;
|
6
16
|
|
7
17
|
constructor() {
|
8
18
|
this._promise = new Promise<T>((resolve, reject) => {
|
9
19
|
this._resolve = resolve;
|
10
20
|
this._reject = reject;
|
11
21
|
});
|
22
|
+
this._id = Deferred.getNextId();
|
12
23
|
}
|
13
24
|
|
14
25
|
public get promise(): Promise<T> {
|
15
26
|
return this._promise;
|
16
27
|
}
|
17
28
|
|
29
|
+
public get id(): number {
|
30
|
+
return this._id;
|
31
|
+
}
|
32
|
+
|
18
33
|
public resolve = (value?: T | PromiseLike<T>): void => {
|
19
34
|
this._resolve(value);
|
20
35
|
}
|
@@ -22,5 +37,4 @@ export default class Deferred<T> {
|
|
22
37
|
public reject = (reason?: any): void => {
|
23
38
|
this._reject(reason);
|
24
39
|
}
|
25
|
-
|
26
40
|
}
|
package/src/index.ts
CHANGED
@@ -252,8 +252,8 @@ export default class Copper {
|
|
252
252
|
return context;
|
253
253
|
}
|
254
254
|
|
255
|
-
private _postMessage(type: string, message: { [name: string]: any } = {}): void {
|
256
|
-
this.win.top
|
255
|
+
private _postMessage(type: string, message: { [name: string]: any } = {}, id: number = -1): void {
|
256
|
+
this.win.top?.postMessage(
|
257
257
|
{
|
258
258
|
// actual messages
|
259
259
|
...message,
|
@@ -263,6 +263,8 @@ export default class Copper {
|
|
263
263
|
version,
|
264
264
|
// type of message
|
265
265
|
type,
|
266
|
+
// optional id for message
|
267
|
+
id,
|
266
268
|
},
|
267
269
|
this.parentOrigin,
|
268
270
|
);
|
@@ -278,7 +280,7 @@ export default class Copper {
|
|
278
280
|
|
279
281
|
// if type is a deferred type, we resolve it
|
280
282
|
// otherwise we do something else
|
281
|
-
this._resolveDeferred(event.data.type, event.data as IMessageData);
|
283
|
+
this._resolveDeferred(event.data.type, event.data.id, event.data as IMessageData);
|
282
284
|
|
283
285
|
// if event type exists, we pass the event to SDK
|
284
286
|
// so sdk user can subscribe those events
|
@@ -300,12 +302,19 @@ export default class Copper {
|
|
300
302
|
this.deferredQueues[queueName].push(deferred);
|
301
303
|
}
|
302
304
|
|
303
|
-
private _resolveDeferred(queueName: string, data: IMessageData): void {
|
304
|
-
|
305
|
+
private _resolveDeferred(queueName: string, messageId: number, data: IMessageData): void {
|
306
|
+
const queue = this.deferredQueues[queueName];
|
307
|
+
if (!queue) {
|
305
308
|
return;
|
306
309
|
}
|
307
|
-
|
310
|
+
|
311
|
+
const foundIdx = queue.findIndex((d) => {
|
312
|
+
return d.id === messageId;
|
313
|
+
});
|
314
|
+
|
315
|
+
const deferred = queue[foundIdx];
|
308
316
|
if (deferred) {
|
317
|
+
queue.splice(foundIdx, 1);
|
309
318
|
if (data.error) {
|
310
319
|
return deferred.reject(data.error);
|
311
320
|
}
|
@@ -344,19 +353,22 @@ export default class Copper {
|
|
344
353
|
return result;
|
345
354
|
}
|
346
355
|
|
347
|
-
private _createDeferredMethod(
|
356
|
+
private _createDeferredMethod(
|
357
|
+
queueName: string,
|
358
|
+
executor: (deferred: Deferred<any>) => any,
|
359
|
+
): Promise<any> {
|
348
360
|
const deferred = new Deferred<any>();
|
349
361
|
this._enqueueDeferred(queueName, deferred);
|
350
|
-
executor();
|
362
|
+
executor(deferred);
|
351
363
|
return deferred.promise;
|
352
364
|
}
|
353
365
|
|
354
366
|
private _deferredPost(name: string, data?: any): Promise<any> {
|
355
|
-
return this._createDeferredMethod(name, () => {
|
367
|
+
return this._createDeferredMethod(name, (deferred) => {
|
356
368
|
if (data) {
|
357
|
-
this._postMessage(name, data);
|
369
|
+
this._postMessage(name, data, deferred.id);
|
358
370
|
} else {
|
359
|
-
this._postMessage(name);
|
371
|
+
this._postMessage(name, {}, deferred.id);
|
360
372
|
}
|
361
373
|
});
|
362
374
|
}
|