@spiffcommerce/core 18.2.0-beta.1 → 18.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +12 -11
- package/dist/index.umd.cjs +2 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -7414,6 +7414,7 @@ const ys = (c, A) => {
|
|
|
7414
7414
|
...AdditionalIntegrationProductFields
|
|
7415
7415
|
}
|
|
7416
7416
|
integration {
|
|
7417
|
+
id
|
|
7417
7418
|
enabled
|
|
7418
7419
|
externalIntegrationId
|
|
7419
7420
|
type
|
|
@@ -8196,7 +8197,7 @@ class zn {
|
|
|
8196
8197
|
* @returns
|
|
8197
8198
|
*/
|
|
8198
8199
|
getBasePrice(A) {
|
|
8199
|
-
var a, n, s;
|
|
8200
|
+
var a, n, s, i;
|
|
8200
8201
|
const e = this.product.basePrice || 0;
|
|
8201
8202
|
if (!A)
|
|
8202
8203
|
return e;
|
|
@@ -8206,21 +8207,21 @@ class zn {
|
|
|
8206
8207
|
);
|
|
8207
8208
|
let t;
|
|
8208
8209
|
return A.integrationId ? t = (a = this.product.integrationProducts) == null ? void 0 : a.find(
|
|
8209
|
-
(
|
|
8210
|
-
var
|
|
8211
|
-
return ((
|
|
8210
|
+
(o) => {
|
|
8211
|
+
var r;
|
|
8212
|
+
return ((r = o.integration) == null ? void 0 : r.id) === A.integrationId;
|
|
8212
8213
|
}
|
|
8213
8214
|
) : A.externalId ? t = (n = this.product.integrationProducts) == null ? void 0 : n.find(
|
|
8214
|
-
(
|
|
8215
|
-
var
|
|
8216
|
-
return ((
|
|
8215
|
+
(o) => {
|
|
8216
|
+
var r;
|
|
8217
|
+
return ((r = o.integration) == null ? void 0 : r.externalIntegrationId) === A.externalId;
|
|
8217
8218
|
}
|
|
8218
8219
|
) : t = (s = this.product.integrationProducts) == null ? void 0 : s.find(
|
|
8219
|
-
(
|
|
8220
|
-
var
|
|
8221
|
-
return ((
|
|
8220
|
+
(o) => {
|
|
8221
|
+
var r;
|
|
8222
|
+
return ((r = o.integration) == null ? void 0 : r.type) === A.integrationType;
|
|
8222
8223
|
}
|
|
8223
|
-
),
|
|
8224
|
+
), (i = t == null ? void 0 : t.additionalIntegrationProduct) != null && i.product ? e + (t.additionalIntegrationProduct.product.basePrice || 0) : e;
|
|
8224
8225
|
}
|
|
8225
8226
|
}
|
|
8226
8227
|
class me {
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1930,6 +1930,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
|
|
|
1930
1930
|
...AdditionalIntegrationProductFields
|
|
1931
1931
|
}
|
|
1932
1932
|
integration {
|
|
1933
|
+
id
|
|
1933
1934
|
enabled
|
|
1934
1935
|
externalIntegrationId
|
|
1935
1936
|
type
|
|
@@ -2217,7 +2218,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
|
|
|
2217
2218
|
}
|
|
2218
2219
|
}
|
|
2219
2220
|
}
|
|
2220
|
-
`;class jn{constructor(e,A,t){this.bundleId=e,this.bundleOwnerId=A,this.initPromise=this.getOrCreateGlobalPropertyState().then(n=>{this.globalPropertyState=n}),this.onGlobalPropertyStateChange=t}getInitializationPromise(){return this.initPromise}getGlobalPropertyState(){return this.globalPropertyState}getAspect(e){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const A=this.globalPropertyState.aspects.find(t=>t.name===e);if(A)return A.value}async setAspect(e,A){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const t=we(this.globalPropertyState),n=this.globalPropertyState.aspects.find(a=>a.name===e);n?n.value=A:this.globalPropertyState.aspects.push({name:e,value:A}),await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(t,this.globalPropertyState)}async updateGlobalPropertyState(){var A;if(!this.globalPropertyState)throw new Error("Global property state not initialized");const e=await x.getShadowGraphqlClient().mutate({mutation:On,variables:{id:this.globalPropertyState.id,aspects:this.globalPropertyState.aspects},context:{bundleOwnerId:this.bundleOwnerId}});if((A=e.data)!=null&&A.globalPropertyStateUpdate)this.globalPropertyState=e.data.globalPropertyStateUpdate;else throw new Error("Unable to update global property state")}async getOrCreateGlobalPropertyState(){var t;const e=await x.getShadowGraphqlClient().query({query:zn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{bundleId:this.bundleId},context:{bundleOwnerId:this.bundleOwnerId}});if(e.data.globalPropertyState&&e.data.globalPropertyState.id)return e.data.globalPropertyState;const A=await x.getShadowGraphqlClient().mutate({mutation:Ln,variables:{bundleId:this.bundleId},context:{bundleOwnerId:this.bundleOwnerId}});if((t=A.data)!=null&&t.globalPropertyStateCreate&&A.data.globalPropertyStateCreate.id)return A.data.globalPropertyStateCreate;throw new Error(`Unable to create global property state for bundle: ${this.bundleId}`)}}class Kn{constructor(e){this.setState(e)}setState(e){e&&(this.state=JSON.parse(e))}applyStateToWorkflowExperience(e){var a,i;if(!this.state||!((a=e==null?void 0:e.getWorkflowManager())!=null&&a.getModelContainer()))return;const A=(i=this.state.transactions.find(o=>o.transactionId===e.getWorkflowManager().getTransaction().id&&o.transform))==null?void 0:i.transform;if(!A)return;const t=this.flipTransform(A,e.getWorkflowManager().getPreviewService()),n=e.getWorkflowManager().getModelContainer();n.position=t.position,n.rotation=t.rotation,n.scale=t.scale}setWorkflowExperienceTransform(e,A){var o;if(!((o=e==null?void 0:e.getWorkflowManager())!=null&&o.getModelContainer()))return;const t=this.flipTransform(A,e.getWorkflowManager().getPreviewService()),n=e.getWorkflowManager().getModelContainer();n.position=t.position,n.rotation=t.rotation,n.scale=t.scale;const a=e.getWorkflowManager().getTransaction().id;this.state?this.state.transactions||(this.state.transactions=[]):this.state={transactions:[]};const i=this.state.transactions.find(s=>s.transactionId===a);i?i.transform=A:this.state.transactions.push({transactionId:a,transform:A})}removeStateForTransaction(e){if(!this.state||!this.state.transactions)return;const A=this.state.transactions.findIndex(t=>t.transactionId===e);A!==-1&&this.state.transactions.splice(A,1)}getSerializedState(){if(this.state)return JSON.stringify(this.state)}flipTransform(e,A){return A&&A.flipTransform?A.flipTransform(e.position,{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},e.scale):{position:e.position,rotation:{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},scale:e.scale}}}class OA{constructor(e){this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getProducts(){return this.collection.productCollectionProducts.map(e=>new zA(e))}getTransformCollection(){if(this.collection.transformCollection)return new jA(this.collection.transformCollection)}getResource(){return this.collection}}class zA{constructor(e){this.product=e.product,this.productResource=e}getId(){return this.product.id}getName(){return this.product.name}getIntegrationByType(e,A){const n=(this.product.integrationProducts||[]).find(a=>{var r,l,d;const i=(r=a.integration)==null?void 0:r.type,o=((l=a.integration)==null?void 0:l.type)===e,s=A?((d=a.integration)==null?void 0:d.externalIntegrationId)===A:!0;return i&&o&&s});if(!n)throw new Error("Failed to find requested integration type on product. This is generally due to a configuration error");return n}getDefaultWorkflow(){const e=this.product.workflows||[];if(e.length===0)throw new R("No workflows found on product. This is generally due to a configuration error. Please confirm at least one workflow is configured for this product.");const A=this.productResource.workflowId;if(A){const n=e.find(a=>a.workflowName===A);if(n)return new Oe(n)}const t=e[0];return new Oe(t)}getIntegrations(){return this.product.integrationProducts||[]}getResource(){return this.product}getBasePrice(e){var n,a,i;const A=this.product.basePrice||0;if(!e)return A;if(!e.integrationType&&!e.externalId&&!e.integrationId)throw new Error("You must provide at least one of the following fields on the includeAdditionalProduct object: integrationType, externalId, integrationId");let t;return e.integrationId?t=(n=this.product.integrationProducts)==null?void 0:n.find(o=>{var s;return((s=o.integration)==null?void 0:s.id)===e.integrationId}):e.externalId?t=(a=this.product.integrationProducts)==null?void 0:a.find(o=>{var s;return((s=o.integration)==null?void 0:s.externalIntegrationId)===e.externalId}):t=(i=this.product.integrationProducts)==null?void 0:i.find(o=>{var s;return((s=o.integration)==null?void 0:s.type)===e.integrationType}),!t||!t.additionalIntegrationProduct||!t.additionalIntegrationProduct.product?A:A+(t.additionalIntegrationProduct.product.basePrice||0)}}class Oe{constructor(e){this.workflow=e}getId(){return this.workflow.workflowName}getName(){return this.workflow.friendlyName}getThumbnail(){return this.workflow.imageUrl}}class jA{constructor(e){this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getTransforms(){return this.collection.transforms.map(e=>new KA(e))}}class KA{constructor(e){this.transform=e}getId(){return this.transform.id}getName(){return this.transform.name}get(){return{position:this.transform.position,rotation:this.transform.rotation,scale:this.transform.scale}}}class VA{constructor(e,A,t,n,a){var i,o,s;this.eventListeners=new Map,this.workflowExperiences=[],this.client=e,this.id=A.id,this.name=A.name||"",this.ownerId=a,this.metadata=new Map(((i=A.metadata)==null?void 0:i.map(r=>[r.key,r.value]))||[]),this.productCollection=A.productCollection,this.bundleStateManager=new Kn(A.bundleStateData),this.globalConfiguration=(o=this.productCollection)==null?void 0:o.globalPropertyConfiguration,this.globalPropertyStateManager=new jn(this.id,this.ownerId,this.checkConditionalHandlesChanged.bind(this)),this.globalPropertyHandleService=new kn(this),this.setPreviewService(t),this.initializationPromise=this.loadExistingBundles(((s=A.transactions)==null?void 0:s.map(r=>r.id))||[],n)}getInitializationPromise(){return this.initializationPromise}addEventListener(e,A){this.eventListeners.set(e,[...this.eventListeners.get(e)||[],A])}removeEventListener(e,A){const t=this.eventListeners.get(e)||[],n=t.indexOf(A);n>-1&&t.splice(n,1)}getClient(){return this.client}getId(){return this.id}getName(){return this.name}setName(e){return this.name=e,this.updateBundle()}getMetadata(){return new Map(this.metadata)}setMetadata(e){return this.metadata=new Map(e),this.updateBundle()}setNameAndMetadata(e,A){return this.name=e,this.metadata=new Map(A),this.updateBundle()}hasGlobalProperties(){return!!this.globalConfiguration&&this.globalConfiguration.aspects.length>0}async getGlobalProperties(){return this.globalPropertyHandleService.applyConditionsFromState(await this.globalPropertyHandleService.getHandles(),this.getGlobalPropertyStateManager().getGlobalPropertyState())}getGlobalPropertyStateManager(){return this.globalPropertyStateManager}async getGlobalPropertyTotalSubunits(){return(await this.globalPropertyHandleService.getHandles()).filter(t=>t.getType()===c.AspectType.Option).map(t=>{var n;return((n=t.getCurrentVariant())==null?void 0:n.getPrice())||0}).reduce((t,n)=>t+n,0)}getTotalSubunits(){return this.workflowExperiences.map(e=>e.getTotalPriceSubunits()).reduce((e,A)=>e+A,0)}getProductCollection(){return this.productCollection?new OA(this.productCollection):void 0}async addWorkflowExperience(e){await this.appendWorkflowExperience(e),await this.injectExperienceIntoPreviewService(e);const A=await this.getGlobalProperties();await Promise.all(A.map(t=>t.applyGlobalState([e])))}async addWorkflowExperiences(e){const A=e.map(i=>i.getWorkflowManager().getTransaction().id),t=A.map(i=>this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===i));if(t.some(i=>!!i))throw new Error("Unable to add transaction to bundle - Already Exists: "+t.filter(i=>!!i).map(i=>i==null?void 0:i.getWorkflowManager().getTransaction().id).join(", "));const n=P.getMap("transactionOwnerIds")||new Map,a=A.map(i=>n.get(i));await x.getShadowGraphqlClient().mutate({mutation:xn,variables:{id:this.id,transactionIds:A,transactionOwnerIds:a},context:{bundleOwnerId:this.ownerId}}).catch(i=>{console.error(i)}),this.workflowExperiences.push(...e),await Promise.all([this.updateTransactionOrder(),(async()=>{for(const o of e)await this.injectExperienceIntoPreviewService(o);const i=await this.getGlobalProperties();await Promise.all(i.map(o=>o.applyGlobalState(e)))})()])}async appendWorkflowExperience(e,A=!0){const t=e.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===t))throw new Error("Unable to add transaction to bundle - Already Exists!");const i=(P.getMap("transactionOwnerIds")||new Map).get(t);await x.getShadowGraphqlClient().mutate({mutation:Nn,variables:{id:this.id,transactionId:t},context:{bundleOwnerId:this.ownerId,transactionOwnerId:i}}),A&&this.workflowExperiences.push(e)}async removeWorkflowExperience(e){const A=this.workflowExperiences.indexOf(e);await this.removeTransaction(A,this.workflowExperiences[A].getWorkflowManager().getTransaction())}async removeWorkflowExperiences(e){await this.removeTransactions(e.map(A=>A.getWorkflowManager().getTransaction()))}async removeWorkflowExperienceByTransaction(e){const A=this.workflowExperiences.findIndex(t=>t.getWorkflowManager().getTransaction().id===e.id);await this.removeTransaction(A,e)}async removeWorkflowExperiencesByTransactions(e){await this.removeTransactions(e)}async removeTransaction(e,A,t=!0){if(e>-1){const n=this.workflowExperiences.find(a=>a.getWorkflowManager().getTransaction().id===A.id);this.previewService&&n.getWorkflowManager().ejectFromPreviewService(),this.bundleStateManager.removeStateForTransaction(A.id),await x.getShadowGraphqlClient().mutate({mutation:Hn,variables:{id:this.id,transactionId:A.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([a,i])=>({key:a,value:i})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),t&&(this.workflowExperiences.splice(e,1),await this.updateTransactionOrder())}else throw new Error("Unable to remove workflow experience from bundle - Not Found! - "+A.id)}async removeTransactions(e){const A=e.map(n=>this.workflowExperiences.findIndex(a=>a.getWorkflowManager().getTransaction().id===n.id));if(A.some(n=>n===-1))throw new Error("Unable to remove workflow experience from bundle - The following aren't included in the bundle: "+e.filter((n,a)=>A[a]===-1).map(n=>n.id).join(", "));const t=e.map(n=>this.workflowExperiences.splice(this.workflowExperiences.findIndex(a=>a.getWorkflowManager().getTransaction().id===n.id),1)[0]);this.previewService&&t.forEach(n=>n.getWorkflowManager().ejectFromPreviewService()),e.forEach(n=>this.bundleStateManager.removeStateForTransaction(n.id)),await x.getShadowGraphqlClient().mutate({mutation:Rn,variables:{id:this.id,transactionIds:e.map(n=>n.id),name:this.name,metadata:Array.from(this.metadata.entries()).map(([n,a])=>({key:n,value:a})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),await this.updateTransactionOrder()}async insertWorkflowExperience(e,A){await this.appendWorkflowExperience(e,!1),this.workflowExperiences.splice(A,0,e),await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(e);const t=await this.getGlobalProperties();await Promise.all(t.map(n=>n.applyGlobalState([e])))})()])}async replaceWorkflowExperience(e,A){if(e<0||e>=this.workflowExperiences.length)throw new Error("Unable to replace workflow experience in bundle - Index out of range!");const t=this.workflowExperiences[e];if(t.getWorkflowManager().getTransaction().id===A.getWorkflowManager().getTransaction().id)throw new Error("Unable to replace workflow experience in bundle - Same transaction!");await Promise.all([this.removeTransaction(e,t.getWorkflowManager().getTransaction(),!1),this.appendWorkflowExperience(A,!1)]),this.workflowExperiences[e]=A,await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(A);const n=await this.getGlobalProperties();await Promise.all(n.map(a=>a.applyGlobalState([A])))})()])}async swapWorkflowExperiences(e,A){if(e<0||e>=this.workflowExperiences.length||A<0||A>=this.workflowExperiences.length)throw new Error("Unable to swap workflow experiences in bundle - Index out of range!");if(e===A)return;const t=this.workflowExperiences[e];this.workflowExperiences[e]=this.workflowExperiences[A],this.workflowExperiences[A]=t,await this.updateTransactionOrder()}getWorkflowExperiences(){return[...this.workflowExperiences]}async sortWorkflowExperiences(e){this.workflowExperiences=this.workflowExperiences.sort(e),await this.updateTransactionOrder()}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(e,A){var a;const t=await x.getShadowGraphqlClient().mutate({mutation:Un,variables:{id:this.id,details:e,type:A||oe.Owner},context:{bundleOwnerId:this.ownerId}});if(!((a=t.data)!=null&&a.bundleAddStakeholder))throw new Error("Bundle not found!");const n=t.data.bundleAddStakeholder.bundleStakeholders||[];this.storeStakeholderCustomers(n)}async updateStakeholders(e){var n;const A=await x.getShadowGraphqlClient().mutate({mutation:Gn,variables:{id:this.id,input:e},context:{bundleOwnerId:this.ownerId}});if(!((n=A.data)!=null&&n.bundleUpdateStakeholders))throw new Error("Bundle not found!");const t=A.data.bundleUpdateStakeholders.bundleStakeholders||[];this.storeStakeholderCustomers(t)}async getAllStakeholders(){const e=await x.getShadowGraphqlClient().query({query:Sn,errorPolicy:"all",variables:{id:this.id},context:{bundleOwnerId:this.ownerId}});if(!e.data.bundles||e.data.bundles.length===0)throw new Error("Bundle not found!");const A=e.data.bundles[0].bundleStakeholders||[];return this.storeStakeholderCustomers(A),A}storeStakeholderCustomers(e){e.forEach(A=>{A.customer&&this.client.storeCustomer(A.customer)})}async finish(e,A){return await on(this.workflowExperiences.map(t=>({workflowManager:t.getWorkflowManager(),workflow:t.getWorkflowManager().getWorkflow(),layouts:t.getWorkflowManager().getLayouts(),getReducerState:()=>t.getCommandContext().getState(),product:t.getWorkflowManager().getProduct(),transaction:t.getWorkflowManager().getTransaction(),workflowSelections:t.getWorkflowManager().getWorkflowSelections(),designName:t.getWorkflowManager().getWorkflow().name,workflowMetadata:t.getWorkflowManager().getWorkflowMetadata()})),e??(()=>{}),A?(t,n)=>{const a=this.workflowExperiences.find(i=>i.getWorkflowManager().getTransaction().id===n);return a?A(a):(console.warn("SpiffCommerce - Bundle create design - Unable to find experience for transaction: "+n),Promise.resolve(void 0))}:void 0)}getPreviewService(){return this.previewService}async setPreviewService(e){if(this.workflowExperiences&&this.workflowExperiences.length>0&&(this.workflowExperiences.forEach(A=>A.getWorkflowManager().ejectFromPreviewService()),e))for(const A of this.workflowExperiences)await this.injectExperienceIntoPreviewService(A);e&&e.registerModelLoadEventListener&&e.registerModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService&&this.previewService!==e&&this.previewService.unregisterModelLoadEventListener&&this.previewService.unregisterModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService=e}setWorkflowExperienceTransform(e,A){return this.bundleStateManager.setWorkflowExperienceTransform(e,A),this.updateBundle()}onModelLoadEvent(e){e.eventType==="unload"||!e.modelContainer||(e.modelContainer.registerMaterialSelectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!0)),e.modelContainer.registerMaterialDeselectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!1)))}onModelSelectedEvent(e,A){if(e&&e.metadata&&e.metadata instanceof Map&&e.metadata.has("workflowManager")){const n=e.metadata.get("workflowManager").getTransaction(),a=this.workflowExperiences.find(i=>i.getWorkflowManager().getTransaction().id===n.id);a&&this.fireEvent(A?"workflow-experience-hover-enter":"workflow-experience-hover-exit",{workflowExperience:a})}}async injectExperienceIntoPreviewService(e){if(this.previewService){const A=e.getWorkflowManager().injectIntoPreviewService(this.previewService);try{this.bundleStateManager.applyStateToWorkflowExperience(e)}catch(t){console.error(`Unable to apply state to workflow experience: ${t}`)}await A}}async loadExistingBundles(e,A){if(e.length===0)return;const t=await this.client.getWorkflowExperiences(e.map(n=>({type:"transaction",transactionId:n})),A);if(this.workflowExperiences=t,this.previewService)for(const n of t)await this.injectExperienceIntoPreviewService(n)}async updateBundle(){var A;if(!((A=(await x.getShadowGraphqlClient().mutate({mutation:Pn,variables:{id:this.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([t,n])=>({key:t,value:n})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}})).data)!=null&&A.bundleUpdate))throw new Error("Bundle not found!")}async updateTransactionOrder(){await x.getShadowGraphqlClient().mutate({mutation:vn,variables:{id:this.id,transactionIds:this.workflowExperiences.map(e=>e.getWorkflowManager().getTransaction().id)},context:{bundleOwnerId:this.ownerId}})}async checkConditionalHandlesChanged(e,A){const t=await this.globalPropertyHandleService.getHandles(),n=this.globalPropertyHandleService.applyConditionsFromState(t,e),a=this.globalPropertyHandleService.applyConditionsFromState(t,A);(()=>{if(n.length!==a.length)return!0;for(let o=0;o<n.length;o++)if(n[o].getName()!==a[o].getName())return!0;return!1})()&&this.fireEvent("conditional-global-properties-changed",{globalProperties:a})}fireEvent(e,A){(this.eventListeners.get(e)||[]).forEach(n=>n({bundle:this,event:e,data:A}))}}const Vn=M.gql`
|
|
2221
|
+
`;class jn{constructor(e,A,t){this.bundleId=e,this.bundleOwnerId=A,this.initPromise=this.getOrCreateGlobalPropertyState().then(n=>{this.globalPropertyState=n}),this.onGlobalPropertyStateChange=t}getInitializationPromise(){return this.initPromise}getGlobalPropertyState(){return this.globalPropertyState}getAspect(e){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const A=this.globalPropertyState.aspects.find(t=>t.name===e);if(A)return A.value}async setAspect(e,A){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const t=we(this.globalPropertyState),n=this.globalPropertyState.aspects.find(a=>a.name===e);n?n.value=A:this.globalPropertyState.aspects.push({name:e,value:A}),await this.updateGlobalPropertyState(),await this.onGlobalPropertyStateChange(t,this.globalPropertyState)}async updateGlobalPropertyState(){var A;if(!this.globalPropertyState)throw new Error("Global property state not initialized");const e=await x.getShadowGraphqlClient().mutate({mutation:On,variables:{id:this.globalPropertyState.id,aspects:this.globalPropertyState.aspects},context:{bundleOwnerId:this.bundleOwnerId}});if((A=e.data)!=null&&A.globalPropertyStateUpdate)this.globalPropertyState=e.data.globalPropertyStateUpdate;else throw new Error("Unable to update global property state")}async getOrCreateGlobalPropertyState(){var t;const e=await x.getShadowGraphqlClient().query({query:zn,errorPolicy:"all",fetchPolicy:"no-cache",variables:{bundleId:this.bundleId},context:{bundleOwnerId:this.bundleOwnerId}});if(e.data.globalPropertyState&&e.data.globalPropertyState.id)return e.data.globalPropertyState;const A=await x.getShadowGraphqlClient().mutate({mutation:Ln,variables:{bundleId:this.bundleId},context:{bundleOwnerId:this.bundleOwnerId}});if((t=A.data)!=null&&t.globalPropertyStateCreate&&A.data.globalPropertyStateCreate.id)return A.data.globalPropertyStateCreate;throw new Error(`Unable to create global property state for bundle: ${this.bundleId}`)}}class Kn{constructor(e){this.setState(e)}setState(e){e&&(this.state=JSON.parse(e))}applyStateToWorkflowExperience(e){var a,i;if(!this.state||!((a=e==null?void 0:e.getWorkflowManager())!=null&&a.getModelContainer()))return;const A=(i=this.state.transactions.find(o=>o.transactionId===e.getWorkflowManager().getTransaction().id&&o.transform))==null?void 0:i.transform;if(!A)return;const t=this.flipTransform(A,e.getWorkflowManager().getPreviewService()),n=e.getWorkflowManager().getModelContainer();n.position=t.position,n.rotation=t.rotation,n.scale=t.scale}setWorkflowExperienceTransform(e,A){var o;if(!((o=e==null?void 0:e.getWorkflowManager())!=null&&o.getModelContainer()))return;const t=this.flipTransform(A,e.getWorkflowManager().getPreviewService()),n=e.getWorkflowManager().getModelContainer();n.position=t.position,n.rotation=t.rotation,n.scale=t.scale;const a=e.getWorkflowManager().getTransaction().id;this.state?this.state.transactions||(this.state.transactions=[]):this.state={transactions:[]};const i=this.state.transactions.find(s=>s.transactionId===a);i?i.transform=A:this.state.transactions.push({transactionId:a,transform:A})}removeStateForTransaction(e){if(!this.state||!this.state.transactions)return;const A=this.state.transactions.findIndex(t=>t.transactionId===e);A!==-1&&this.state.transactions.splice(A,1)}getSerializedState(){if(this.state)return JSON.stringify(this.state)}flipTransform(e,A){return A&&A.flipTransform?A.flipTransform(e.position,{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},e.scale):{position:e.position,rotation:{x:e.rotation.x*Math.PI/180,y:e.rotation.y*Math.PI/180,z:e.rotation.z*Math.PI/180},scale:e.scale}}}class OA{constructor(e){this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getProducts(){return this.collection.productCollectionProducts.map(e=>new zA(e))}getTransformCollection(){if(this.collection.transformCollection)return new jA(this.collection.transformCollection)}getResource(){return this.collection}}class zA{constructor(e){this.product=e.product,this.productResource=e}getId(){return this.product.id}getName(){return this.product.name}getIntegrationByType(e,A){const n=(this.product.integrationProducts||[]).find(a=>{var r,l,d;const i=(r=a.integration)==null?void 0:r.type,o=((l=a.integration)==null?void 0:l.type)===e,s=A?((d=a.integration)==null?void 0:d.externalIntegrationId)===A:!0;return i&&o&&s});if(!n)throw new Error("Failed to find requested integration type on product. This is generally due to a configuration error");return n}getDefaultWorkflow(){const e=this.product.workflows||[];if(e.length===0)throw new R("No workflows found on product. This is generally due to a configuration error. Please confirm at least one workflow is configured for this product.");const A=this.productResource.workflowId;if(A){const n=e.find(a=>a.workflowName===A);if(n)return new Oe(n)}const t=e[0];return new Oe(t)}getIntegrations(){return this.product.integrationProducts||[]}getResource(){return this.product}getBasePrice(e){var n,a,i,o;const A=this.product.basePrice||0;if(!e)return A;if(!e.integrationType&&!e.externalId&&!e.integrationId)throw new Error("You must provide at least one of the following fields on the includeAdditionalProduct object: integrationType, externalId, integrationId");let t;return e.integrationId?t=(n=this.product.integrationProducts)==null?void 0:n.find(s=>{var r;return((r=s.integration)==null?void 0:r.id)===e.integrationId}):e.externalId?t=(a=this.product.integrationProducts)==null?void 0:a.find(s=>{var r;return((r=s.integration)==null?void 0:r.externalIntegrationId)===e.externalId}):t=(i=this.product.integrationProducts)==null?void 0:i.find(s=>{var r;return((r=s.integration)==null?void 0:r.type)===e.integrationType}),(o=t==null?void 0:t.additionalIntegrationProduct)!=null&&o.product?A+(t.additionalIntegrationProduct.product.basePrice||0):A}}class Oe{constructor(e){this.workflow=e}getId(){return this.workflow.workflowName}getName(){return this.workflow.friendlyName}getThumbnail(){return this.workflow.imageUrl}}class jA{constructor(e){this.collection=e}getId(){return this.collection.id}getName(){return this.collection.name}getTransforms(){return this.collection.transforms.map(e=>new KA(e))}}class KA{constructor(e){this.transform=e}getId(){return this.transform.id}getName(){return this.transform.name}get(){return{position:this.transform.position,rotation:this.transform.rotation,scale:this.transform.scale}}}class VA{constructor(e,A,t,n,a){var i,o,s;this.eventListeners=new Map,this.workflowExperiences=[],this.client=e,this.id=A.id,this.name=A.name||"",this.ownerId=a,this.metadata=new Map(((i=A.metadata)==null?void 0:i.map(r=>[r.key,r.value]))||[]),this.productCollection=A.productCollection,this.bundleStateManager=new Kn(A.bundleStateData),this.globalConfiguration=(o=this.productCollection)==null?void 0:o.globalPropertyConfiguration,this.globalPropertyStateManager=new jn(this.id,this.ownerId,this.checkConditionalHandlesChanged.bind(this)),this.globalPropertyHandleService=new kn(this),this.setPreviewService(t),this.initializationPromise=this.loadExistingBundles(((s=A.transactions)==null?void 0:s.map(r=>r.id))||[],n)}getInitializationPromise(){return this.initializationPromise}addEventListener(e,A){this.eventListeners.set(e,[...this.eventListeners.get(e)||[],A])}removeEventListener(e,A){const t=this.eventListeners.get(e)||[],n=t.indexOf(A);n>-1&&t.splice(n,1)}getClient(){return this.client}getId(){return this.id}getName(){return this.name}setName(e){return this.name=e,this.updateBundle()}getMetadata(){return new Map(this.metadata)}setMetadata(e){return this.metadata=new Map(e),this.updateBundle()}setNameAndMetadata(e,A){return this.name=e,this.metadata=new Map(A),this.updateBundle()}hasGlobalProperties(){return!!this.globalConfiguration&&this.globalConfiguration.aspects.length>0}async getGlobalProperties(){return this.globalPropertyHandleService.applyConditionsFromState(await this.globalPropertyHandleService.getHandles(),this.getGlobalPropertyStateManager().getGlobalPropertyState())}getGlobalPropertyStateManager(){return this.globalPropertyStateManager}async getGlobalPropertyTotalSubunits(){return(await this.globalPropertyHandleService.getHandles()).filter(t=>t.getType()===c.AspectType.Option).map(t=>{var n;return((n=t.getCurrentVariant())==null?void 0:n.getPrice())||0}).reduce((t,n)=>t+n,0)}getTotalSubunits(){return this.workflowExperiences.map(e=>e.getTotalPriceSubunits()).reduce((e,A)=>e+A,0)}getProductCollection(){return this.productCollection?new OA(this.productCollection):void 0}async addWorkflowExperience(e){await this.appendWorkflowExperience(e),await this.injectExperienceIntoPreviewService(e);const A=await this.getGlobalProperties();await Promise.all(A.map(t=>t.applyGlobalState([e])))}async addWorkflowExperiences(e){const A=e.map(i=>i.getWorkflowManager().getTransaction().id),t=A.map(i=>this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===i));if(t.some(i=>!!i))throw new Error("Unable to add transaction to bundle - Already Exists: "+t.filter(i=>!!i).map(i=>i==null?void 0:i.getWorkflowManager().getTransaction().id).join(", "));const n=P.getMap("transactionOwnerIds")||new Map,a=A.map(i=>n.get(i));await x.getShadowGraphqlClient().mutate({mutation:xn,variables:{id:this.id,transactionIds:A,transactionOwnerIds:a},context:{bundleOwnerId:this.ownerId}}).catch(i=>{console.error(i)}),this.workflowExperiences.push(...e),await Promise.all([this.updateTransactionOrder(),(async()=>{for(const o of e)await this.injectExperienceIntoPreviewService(o);const i=await this.getGlobalProperties();await Promise.all(i.map(o=>o.applyGlobalState(e)))})()])}async appendWorkflowExperience(e,A=!0){const t=e.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find(o=>o.getWorkflowManager().getTransaction().id===t))throw new Error("Unable to add transaction to bundle - Already Exists!");const i=(P.getMap("transactionOwnerIds")||new Map).get(t);await x.getShadowGraphqlClient().mutate({mutation:Nn,variables:{id:this.id,transactionId:t},context:{bundleOwnerId:this.ownerId,transactionOwnerId:i}}),A&&this.workflowExperiences.push(e)}async removeWorkflowExperience(e){const A=this.workflowExperiences.indexOf(e);await this.removeTransaction(A,this.workflowExperiences[A].getWorkflowManager().getTransaction())}async removeWorkflowExperiences(e){await this.removeTransactions(e.map(A=>A.getWorkflowManager().getTransaction()))}async removeWorkflowExperienceByTransaction(e){const A=this.workflowExperiences.findIndex(t=>t.getWorkflowManager().getTransaction().id===e.id);await this.removeTransaction(A,e)}async removeWorkflowExperiencesByTransactions(e){await this.removeTransactions(e)}async removeTransaction(e,A,t=!0){if(e>-1){const n=this.workflowExperiences.find(a=>a.getWorkflowManager().getTransaction().id===A.id);this.previewService&&n.getWorkflowManager().ejectFromPreviewService(),this.bundleStateManager.removeStateForTransaction(A.id),await x.getShadowGraphqlClient().mutate({mutation:Hn,variables:{id:this.id,transactionId:A.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([a,i])=>({key:a,value:i})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),t&&(this.workflowExperiences.splice(e,1),await this.updateTransactionOrder())}else throw new Error("Unable to remove workflow experience from bundle - Not Found! - "+A.id)}async removeTransactions(e){const A=e.map(n=>this.workflowExperiences.findIndex(a=>a.getWorkflowManager().getTransaction().id===n.id));if(A.some(n=>n===-1))throw new Error("Unable to remove workflow experience from bundle - The following aren't included in the bundle: "+e.filter((n,a)=>A[a]===-1).map(n=>n.id).join(", "));const t=e.map(n=>this.workflowExperiences.splice(this.workflowExperiences.findIndex(a=>a.getWorkflowManager().getTransaction().id===n.id),1)[0]);this.previewService&&t.forEach(n=>n.getWorkflowManager().ejectFromPreviewService()),e.forEach(n=>this.bundleStateManager.removeStateForTransaction(n.id)),await x.getShadowGraphqlClient().mutate({mutation:Rn,variables:{id:this.id,transactionIds:e.map(n=>n.id),name:this.name,metadata:Array.from(this.metadata.entries()).map(([n,a])=>({key:n,value:a})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}}),await this.updateTransactionOrder()}async insertWorkflowExperience(e,A){await this.appendWorkflowExperience(e,!1),this.workflowExperiences.splice(A,0,e),await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(e);const t=await this.getGlobalProperties();await Promise.all(t.map(n=>n.applyGlobalState([e])))})()])}async replaceWorkflowExperience(e,A){if(e<0||e>=this.workflowExperiences.length)throw new Error("Unable to replace workflow experience in bundle - Index out of range!");const t=this.workflowExperiences[e];if(t.getWorkflowManager().getTransaction().id===A.getWorkflowManager().getTransaction().id)throw new Error("Unable to replace workflow experience in bundle - Same transaction!");await Promise.all([this.removeTransaction(e,t.getWorkflowManager().getTransaction(),!1),this.appendWorkflowExperience(A,!1)]),this.workflowExperiences[e]=A,await Promise.all([this.updateTransactionOrder(),(async()=>{await this.injectExperienceIntoPreviewService(A);const n=await this.getGlobalProperties();await Promise.all(n.map(a=>a.applyGlobalState([A])))})()])}async swapWorkflowExperiences(e,A){if(e<0||e>=this.workflowExperiences.length||A<0||A>=this.workflowExperiences.length)throw new Error("Unable to swap workflow experiences in bundle - Index out of range!");if(e===A)return;const t=this.workflowExperiences[e];this.workflowExperiences[e]=this.workflowExperiences[A],this.workflowExperiences[A]=t,await this.updateTransactionOrder()}getWorkflowExperiences(){return[...this.workflowExperiences]}async sortWorkflowExperiences(e){this.workflowExperiences=this.workflowExperiences.sort(e),await this.updateTransactionOrder()}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(e,A){var a;const t=await x.getShadowGraphqlClient().mutate({mutation:Un,variables:{id:this.id,details:e,type:A||oe.Owner},context:{bundleOwnerId:this.ownerId}});if(!((a=t.data)!=null&&a.bundleAddStakeholder))throw new Error("Bundle not found!");const n=t.data.bundleAddStakeholder.bundleStakeholders||[];this.storeStakeholderCustomers(n)}async updateStakeholders(e){var n;const A=await x.getShadowGraphqlClient().mutate({mutation:Gn,variables:{id:this.id,input:e},context:{bundleOwnerId:this.ownerId}});if(!((n=A.data)!=null&&n.bundleUpdateStakeholders))throw new Error("Bundle not found!");const t=A.data.bundleUpdateStakeholders.bundleStakeholders||[];this.storeStakeholderCustomers(t)}async getAllStakeholders(){const e=await x.getShadowGraphqlClient().query({query:Sn,errorPolicy:"all",variables:{id:this.id},context:{bundleOwnerId:this.ownerId}});if(!e.data.bundles||e.data.bundles.length===0)throw new Error("Bundle not found!");const A=e.data.bundles[0].bundleStakeholders||[];return this.storeStakeholderCustomers(A),A}storeStakeholderCustomers(e){e.forEach(A=>{A.customer&&this.client.storeCustomer(A.customer)})}async finish(e,A){return await on(this.workflowExperiences.map(t=>({workflowManager:t.getWorkflowManager(),workflow:t.getWorkflowManager().getWorkflow(),layouts:t.getWorkflowManager().getLayouts(),getReducerState:()=>t.getCommandContext().getState(),product:t.getWorkflowManager().getProduct(),transaction:t.getWorkflowManager().getTransaction(),workflowSelections:t.getWorkflowManager().getWorkflowSelections(),designName:t.getWorkflowManager().getWorkflow().name,workflowMetadata:t.getWorkflowManager().getWorkflowMetadata()})),e??(()=>{}),A?(t,n)=>{const a=this.workflowExperiences.find(i=>i.getWorkflowManager().getTransaction().id===n);return a?A(a):(console.warn("SpiffCommerce - Bundle create design - Unable to find experience for transaction: "+n),Promise.resolve(void 0))}:void 0)}getPreviewService(){return this.previewService}async setPreviewService(e){if(this.workflowExperiences&&this.workflowExperiences.length>0&&(this.workflowExperiences.forEach(A=>A.getWorkflowManager().ejectFromPreviewService()),e))for(const A of this.workflowExperiences)await this.injectExperienceIntoPreviewService(A);e&&e.registerModelLoadEventListener&&e.registerModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService&&this.previewService!==e&&this.previewService.unregisterModelLoadEventListener&&this.previewService.unregisterModelLoadEventListener(this.onModelLoadEvent.bind(this)),this.previewService=e}setWorkflowExperienceTransform(e,A){return this.bundleStateManager.setWorkflowExperienceTransform(e,A),this.updateBundle()}onModelLoadEvent(e){e.eventType==="unload"||!e.modelContainer||(e.modelContainer.registerMaterialSelectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!0)),e.modelContainer.registerMaterialDeselectedCallback(()=>this.onModelSelectedEvent(e.modelContainer,!1)))}onModelSelectedEvent(e,A){if(e&&e.metadata&&e.metadata instanceof Map&&e.metadata.has("workflowManager")){const n=e.metadata.get("workflowManager").getTransaction(),a=this.workflowExperiences.find(i=>i.getWorkflowManager().getTransaction().id===n.id);a&&this.fireEvent(A?"workflow-experience-hover-enter":"workflow-experience-hover-exit",{workflowExperience:a})}}async injectExperienceIntoPreviewService(e){if(this.previewService){const A=e.getWorkflowManager().injectIntoPreviewService(this.previewService);try{this.bundleStateManager.applyStateToWorkflowExperience(e)}catch(t){console.error(`Unable to apply state to workflow experience: ${t}`)}await A}}async loadExistingBundles(e,A){if(e.length===0)return;const t=await this.client.getWorkflowExperiences(e.map(n=>({type:"transaction",transactionId:n})),A);if(this.workflowExperiences=t,this.previewService)for(const n of t)await this.injectExperienceIntoPreviewService(n)}async updateBundle(){var A;if(!((A=(await x.getShadowGraphqlClient().mutate({mutation:Pn,variables:{id:this.id,name:this.name,metadata:Array.from(this.metadata.entries()).map(([t,n])=>({key:t,value:n})),bundleStateData:this.bundleStateManager.getSerializedState()},context:{bundleOwnerId:this.ownerId}})).data)!=null&&A.bundleUpdate))throw new Error("Bundle not found!")}async updateTransactionOrder(){await x.getShadowGraphqlClient().mutate({mutation:vn,variables:{id:this.id,transactionIds:this.workflowExperiences.map(e=>e.getWorkflowManager().getTransaction().id)},context:{bundleOwnerId:this.ownerId}})}async checkConditionalHandlesChanged(e,A){const t=await this.globalPropertyHandleService.getHandles(),n=this.globalPropertyHandleService.applyConditionsFromState(t,e),a=this.globalPropertyHandleService.applyConditionsFromState(t,A);(()=>{if(n.length!==a.length)return!0;for(let o=0;o<n.length;o++)if(n[o].getName()!==a[o].getName())return!0;return!1})()&&this.fireEvent("conditional-global-properties-changed",{globalProperties:a})}fireEvent(e,A){(this.eventListeners.get(e)||[]).forEach(n=>n({bundle:this,event:e,data:A}))}}const Vn=M.gql`
|
|
2221
2222
|
mutation processFlowCreate($processFlowId: String!, $inputs: [String]!) {
|
|
2222
2223
|
processExecutionCreate(processFlowId: $processFlowId, inputs: $inputs) {
|
|
2223
2224
|
id
|