@spiffcommerce/core 17.0.3-3 → 17.2.0-beta.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.d.ts +4 -2
- package/dist/index.js +55 -48
- package/dist/index.umd.cjs +2 -2
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1225,7 +1225,7 @@ declare abstract class StepHandle<T extends AnyStepData> {
|
|
|
1225
1225
|
executeAnimations(): void;
|
|
1226
1226
|
}
|
|
1227
1227
|
|
|
1228
|
-
declare const createDesign: (workflowManager: WorkflowManager, workflow: Workflow, layouts: ILayout[], getReducerState: () => CommandState, product: Product, transaction: Transaction, workflowSelections: WorkflowSelections, designName: string, onProgressUpdate: DesignCreationProgressUpdate, createPreviewImage: (shouldRender3D?: boolean) => Promise<string | undefined>, workflowMetadata?: WorkflowMetadata) => Promise<DesignCreationMessage>;
|
|
1228
|
+
declare const createDesign: (workflowManager: WorkflowManager, workflow: Workflow, layouts: ILayout[], getReducerState: () => CommandState, product: Product, transaction: Transaction, workflowSelections: WorkflowSelections, designName: string, onProgressUpdate: DesignCreationProgressUpdate, createPreviewImage: (shouldRender3D?: boolean, transactionId?: string) => Promise<string | undefined>, workflowMetadata?: WorkflowMetadata) => Promise<DesignCreationMessage>;
|
|
1229
1229
|
interface SavedDesign {
|
|
1230
1230
|
/**
|
|
1231
1231
|
* The user's name for this saved design.
|
|
@@ -1831,8 +1831,10 @@ interface Bundle {
|
|
|
1831
1831
|
* The promise resolves with a list of messages that indicate the status of each experience including
|
|
1832
1832
|
* helpful details like what product to add to cart on supported e-commerce platforms.
|
|
1833
1833
|
* @param onProgressUpdate A callback that will be called when the progress of the finalization changes.
|
|
1834
|
+
* @param createPreviewImage A callback that will be called when a preview image is required. This is used to generate a preview image for the design.
|
|
1835
|
+
* If this callback is not provided, no preview image will be generated.
|
|
1834
1836
|
*/
|
|
1835
|
-
finish(onProgressUpdate?: DesignCreationProgressUpdate): Promise<DesignCreationMessage[]>;
|
|
1837
|
+
finish(onProgressUpdate?: DesignCreationProgressUpdate, createPreviewImage?: (workflowExperience?: WorkflowExperience) => Promise<string | undefined>): Promise<DesignCreationMessage[]>;
|
|
1836
1838
|
/**
|
|
1837
1839
|
* Add an event listener to this bundle.
|
|
1838
1840
|
* @param event The event to listen for. Currently only "conditional-global-properties-changed" is supported.
|
package/dist/index.js
CHANGED
|
@@ -6162,7 +6162,7 @@ const tt = y`
|
|
|
6162
6162
|
Y,
|
|
6163
6163
|
u[Y].map((M) => M.id)
|
|
6164
6164
|
])
|
|
6165
|
-
), p = await i(d);
|
|
6165
|
+
), p = await i(d, a.id);
|
|
6166
6166
|
return {
|
|
6167
6167
|
designDetails: (() => {
|
|
6168
6168
|
const Y = {
|
|
@@ -6223,56 +6223,55 @@ const tt = y`
|
|
|
6223
6223
|
C,
|
|
6224
6224
|
(h = d == null ? void 0 : d.processExecution) == null ? void 0 : h.id
|
|
6225
6225
|
);
|
|
6226
|
-
}, An = async (c, A) => {
|
|
6226
|
+
}, An = async (c, A, e) => {
|
|
6227
6227
|
A("workflow.steps.finish.finalize.buildingLayouts"), await Promise.all(
|
|
6228
|
-
c.map(async (
|
|
6229
|
-
await
|
|
6228
|
+
c.map(async (i) => {
|
|
6229
|
+
await i.workflowManager.outstandingRequestsPromise();
|
|
6230
6230
|
})
|
|
6231
6231
|
);
|
|
6232
|
-
const
|
|
6233
|
-
var
|
|
6234
|
-
const
|
|
6232
|
+
const a = await (async () => {
|
|
6233
|
+
var r;
|
|
6234
|
+
const o = await N.getShadowGraphqlClient().query({
|
|
6235
6235
|
query: Oe,
|
|
6236
|
-
variables: { ids: c.map((
|
|
6236
|
+
variables: { ids: c.map((g) => g.transaction.id) },
|
|
6237
6237
|
fetchPolicy: "no-cache",
|
|
6238
6238
|
errorPolicy: "all"
|
|
6239
6239
|
});
|
|
6240
|
-
return
|
|
6241
|
-
|
|
6242
|
-
}), null) : (
|
|
6243
|
-
})(),
|
|
6244
|
-
c.map(async (
|
|
6245
|
-
|
|
6246
|
-
|
|
6247
|
-
|
|
6248
|
-
|
|
6249
|
-
|
|
6250
|
-
|
|
6251
|
-
|
|
6252
|
-
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
t ? t[i] : void 0
|
|
6240
|
+
return o.errors ? (o.errors.forEach((g) => {
|
|
6241
|
+
o.errors && console.log("Server Error:", g.message);
|
|
6242
|
+
}), null) : (r = o.data) != null && r.transactions ? o.data.transactions.map((g) => g.workflowState ?? null) : null;
|
|
6243
|
+
})(), n = await Promise.all(
|
|
6244
|
+
c.map(async (i, o) => await nt(
|
|
6245
|
+
i.workflowManager,
|
|
6246
|
+
i.workflow,
|
|
6247
|
+
i.layouts,
|
|
6248
|
+
i.getReducerState,
|
|
6249
|
+
i.transaction,
|
|
6250
|
+
i.workflowSelections,
|
|
6251
|
+
i.designName,
|
|
6252
|
+
e ?? (() => Promise.resolve(void 0)),
|
|
6253
|
+
i.workflowMetadata,
|
|
6254
|
+
a ? a[o] : void 0
|
|
6256
6255
|
))
|
|
6257
6256
|
);
|
|
6258
6257
|
A("workflow.steps.finish.finalize.creatingDesign");
|
|
6259
|
-
const
|
|
6260
|
-
if (!
|
|
6258
|
+
const s = await Za(n.map((i) => i.designDetails));
|
|
6259
|
+
if (!s)
|
|
6261
6260
|
throw new Error("Failed to create designs");
|
|
6262
6261
|
return A("workflow.steps.finish.finalize.updatingTransaction"), Promise.all(
|
|
6263
|
-
|
|
6264
|
-
var
|
|
6265
|
-
const
|
|
6262
|
+
s.map(async (i, o) => {
|
|
6263
|
+
var l;
|
|
6264
|
+
const r = c[o], g = n[o], B = i.transaction;
|
|
6266
6265
|
return await at(
|
|
6267
|
-
|
|
6268
|
-
|
|
6269
|
-
|
|
6270
|
-
|
|
6271
|
-
|
|
6272
|
-
|
|
6266
|
+
B,
|
|
6267
|
+
r.product,
|
|
6268
|
+
r.workflow,
|
|
6269
|
+
g.cartSelectionsWithPrices,
|
|
6270
|
+
i.sku,
|
|
6271
|
+
g.cartMetadata,
|
|
6273
6272
|
//lineItemImageLink,
|
|
6274
6273
|
void 0,
|
|
6275
|
-
(
|
|
6274
|
+
(l = i.processExecution) == null ? void 0 : l.id
|
|
6276
6275
|
);
|
|
6277
6276
|
})
|
|
6278
6277
|
);
|
|
@@ -8459,21 +8458,29 @@ class Ie {
|
|
|
8459
8458
|
e.customer && this.client.storeCustomer(e.customer);
|
|
8460
8459
|
});
|
|
8461
8460
|
}
|
|
8462
|
-
async finish(A) {
|
|
8461
|
+
async finish(A, e) {
|
|
8463
8462
|
return await An(
|
|
8464
|
-
this.workflowExperiences.map((
|
|
8465
|
-
workflowManager:
|
|
8466
|
-
workflow:
|
|
8467
|
-
layouts:
|
|
8468
|
-
getReducerState: () =>
|
|
8469
|
-
product:
|
|
8470
|
-
transaction:
|
|
8471
|
-
workflowSelections:
|
|
8472
|
-
designName:
|
|
8473
|
-
workflowMetadata:
|
|
8463
|
+
this.workflowExperiences.map((t) => ({
|
|
8464
|
+
workflowManager: t.getWorkflowManager(),
|
|
8465
|
+
workflow: t.getWorkflowManager().getWorkflow(),
|
|
8466
|
+
layouts: t.getWorkflowManager().getLayouts(),
|
|
8467
|
+
getReducerState: () => t.getCommandContext().getState(),
|
|
8468
|
+
product: t.getWorkflowManager().getProduct(),
|
|
8469
|
+
transaction: t.getWorkflowManager().getTransaction(),
|
|
8470
|
+
workflowSelections: t.getWorkflowManager().getWorkflowSelections(),
|
|
8471
|
+
designName: t.getWorkflowManager().getWorkflow().name,
|
|
8472
|
+
workflowMetadata: t.getWorkflowManager().getWorkflowMetadata()
|
|
8474
8473
|
})),
|
|
8475
8474
|
A ?? (() => {
|
|
8476
|
-
})
|
|
8475
|
+
}),
|
|
8476
|
+
e ? (t, a) => {
|
|
8477
|
+
const n = this.workflowExperiences.find(
|
|
8478
|
+
(s) => s.getWorkflowManager().getTransaction().id === a
|
|
8479
|
+
);
|
|
8480
|
+
return n ? e(n) : (console.warn(
|
|
8481
|
+
"SpiffCommerce - Bundle create design - Unable to find experience for transaction: " + a
|
|
8482
|
+
), Promise.resolve(void 0));
|
|
8483
|
+
} : void 0
|
|
8477
8484
|
);
|
|
8478
8485
|
}
|
|
8479
8486
|
getPreviewService() {
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1840,7 +1840,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
|
|
|
1840
1840
|
}
|
|
1841
1841
|
}
|
|
1842
1842
|
}
|
|
1843
|
-
`,tn=async g=>{var A;return(A=(await H.getShadowGraphqlClient().mutate({mutation:en,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:g.name,layouts:g.layouts,workflowId:g.workflowId,transactionId:g.transactionId,previewImage:g.previewImage,useThreeDimPreview:g.useThreeDimPreview,metadata:g.metadata,selectedVariants:g.selectedVariants}})).data)==null?void 0:A.designCreate},nn=async g=>{var A;return(A=(await H.getShadowGraphqlClient().mutate({mutation:An,errorPolicy:"all",fetchPolicy:"no-cache",variables:{inputs:g.map(t=>({name:t.name,layouts:t.layouts,workflowId:t.workflowId,transactionId:t.transactionId,previewImage:t.previewImage,useThreeDimPreview:t.useThreeDimPreview,metadata:t.metadata,selectedVariants:t.selectedVariants}))}})).data)==null?void 0:A.designCreateMany},Le=(g,e,A)=>{const t=a=>{const i={};if(a.type==="Frame"){const o=g[a.stepName],s=a.data;if(!o||!o.image||s.hideImageInCart&&A)return i;i[`${a.stepTitle} image`]=o.image}if(a.type==="Illustration"){const o=g[a.stepName],s=a.data;if(!o||s.hideColorsInCart&&A||!o.colors)return i;if(o.colors.length>0){const r=o.colors.join(", ").toUpperCase();i[`${a.stepTitle} colors`]=r}}if(a.type==="Module"){const o=g[a.stepName],s=a.data;if(!o||o.text===void 0||o.text===null||s.hideTextInCart&&A)return i;i[`${a.stepTitle} text`]=o.text}if(a.type==="Text"){const o=g[a.stepName];if(!o)return i;const s=a.data;(!s.hideTextInCart||!A&&o.text!==void 0&&o.text!==null)&&(i[`${a.stepTitle} text`]=o.text),o.color&&(!s.hideColorInCart||!A)&&(i[`${a.stepTitle} color`]=o.color)}return i},n={};return e.steps.forEach(a=>{Object.assign(n,t(a))}),n},an=(g,e,A,t)=>{const n={};let a;if(A){a=Le(A,e,!1);for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}else if(t){a=t;for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}for(const i of Object.keys(g)){const o=g[i],s=e.steps.find(r=>r.stepTitle===i);if(o.length===1)n[`${s==null?void 0:s.stepTitle} selection`]={value:o[0].name,priceModifier:o[0].priceModifier};else if(o.length>1)for(let r=0;r<o.length;r++)n[`${s==null?void 0:s.stepTitle} selection ${r+1}`]={value:o[r].name,priceModifier:o[r].priceModifier}}return n},vA=(g,e,A,t,n,a,i,o)=>{var E,m;const s=e.basePrice||0,r=g.priceModifierTotal||0,l=an(t,A,void 0,a),B=(P.getMap("transactionOwnerIds")||new Map).get(g.id),w={additionalExternalProductId:(E=g.integrationProduct)==null?void 0:E.additionalExternalProductId,additionalExternalVariantId:(m=g.integrationProduct)==null?void 0:m.additionalExternalVariantId,baseCost:s,designProductId:g.externalDesignProductId,designProductVariantId:g.externalDesignProductVariantId,event:"onComplete",exportedData:l,externalCartProductId:g.externalCartProductId,externalCartProductVariantId:g.externalCartProductVariantId,lineItemImageUrl:i||"",optionsCost:r,processExecutionId:o,transactionId:g.id,transactionOwnerId:B,weight:e.weight,workflowViewerLink:g.workflowViewerLink||"",workflowViewerReadOnlyLink:g.workflowViewerReadOnlyLink||""};return a&&(w.metadata=a),t&&(w.selectedVariants=t),n&&(w.sku=n),w},kA=async(g,e,A,t,n,a,i,o,s,r)=>{var S;await(async()=>{var T;if(r!==void 0)return r;await g.outstandingRequestsPromise();const Y=(P.getMap("transactionOwnerIds")||new Map).get(n.id),N=await H.getShadowGraphqlClient().query({query:lA,variables:{ids:[n.id]},fetchPolicy:"no-cache",errorPolicy:"all",context:{transactionOwnerId:Y}}),v=(T=N.data)==null?void 0:T.transactions[0].workflowState;return N.errors?(N.errors.forEach(K=>{N.errors&&console.log("Server Error:",K.message)}),null):v??null})()||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(t())),await g.updateStateWithServerImmediate(t),console.log("Server state is undefined @ Workflow completion"));const B=g.getPreviewService(),w=(S=e==null?void 0:e.finalizeStepConfig)==null?void 0:S.lookAtAnimation,E=B&&e.showModelOnFinishStep&&!!w,m=s&&Le(s,e,!0),h=s&&Le(s,e,!1),u=async y=>{const Y={};let G=0;if(Object.keys(a).length>0)for(const N of Object.keys(a)){const v=a[N],T=e.steps.find(K=>K.stepName===N);for(let K=0;K<v.selections.length;++K){const V=v.selections[K];if(T&&(!y||T.option&&(T.option.variants||[]).length>1&&!T.data.hideSelectionInCart&&!T.data.hideSelectionsInCart)){const Ve=T.stepTitle;Y[Ve]?Y[Ve].push({id:V.id||"",name:V.name,priceModifier:V.priceModifier}):Y[Ve]=[{id:V.id||"",name:V.name,priceModifier:V.priceModifier}]}G+=V.priceModifier}}return[Y,G]},[C]=await u(!0),D=Object.fromEntries(Object.keys(C).map(y=>[y,C[y].map(Y=>Y.id)])),[I]=await u(!1),F=Object.fromEntries(Object.keys(I).map(y=>[y,I[y].map(Y=>Y.id)])),p=await o(E);return{designDetails:(()=>{const y={name:i,layouts:A.map(Y=>({index:Y.index,panelId:Y.panelId})),workflowId:e.id,transactionId:n.id,useThreeDimPreview:!!E,previewImage:p};if(h){const Y=[];for(const[G,N]of Object.entries(h))Y.push({key:G,value:N});y.metadata=Y}if(D){const Y=[];for(const[G,N]of Object.entries(F))Y.push({key:G,ids:N});y.selectedVariants=Y}return y})(),cartSelectionsWithPrices:C,cartMetadata:m}},bA=async(g,e,A,t,n,a,i,o,s,r,l)=>{var u,C;s("workflow.steps.finish.finalize.buildingLayouts");const{designDetails:d,cartSelectionsWithPrices:B,cartMetadata:w}=await kA(g,e,A,t,a,i,o,r,l);s("workflow.steps.finish.finalize.creatingDesign");const E=await tn(d),m=(u=E==null?void 0:E.transaction)==null?void 0:u.previewImageLink;if(!(E!=null&&E.transaction))throw new Error("Failed to create design");s("workflow.steps.finish.finalize.updatingTransaction");const h=E.transaction;return await vA(h,n,e,B,E==null?void 0:E.sku,w,m,(C=E==null?void 0:E.processExecution)==null?void 0:C.id)},on=async(g,e)=>{e("workflow.steps.finish.finalize.buildingLayouts"),await Promise.all(g.map(async
|
|
1843
|
+
`,tn=async g=>{var A;return(A=(await H.getShadowGraphqlClient().mutate({mutation:en,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:g.name,layouts:g.layouts,workflowId:g.workflowId,transactionId:g.transactionId,previewImage:g.previewImage,useThreeDimPreview:g.useThreeDimPreview,metadata:g.metadata,selectedVariants:g.selectedVariants}})).data)==null?void 0:A.designCreate},nn=async g=>{var A;return(A=(await H.getShadowGraphqlClient().mutate({mutation:An,errorPolicy:"all",fetchPolicy:"no-cache",variables:{inputs:g.map(t=>({name:t.name,layouts:t.layouts,workflowId:t.workflowId,transactionId:t.transactionId,previewImage:t.previewImage,useThreeDimPreview:t.useThreeDimPreview,metadata:t.metadata,selectedVariants:t.selectedVariants}))}})).data)==null?void 0:A.designCreateMany},Le=(g,e,A)=>{const t=a=>{const i={};if(a.type==="Frame"){const o=g[a.stepName],s=a.data;if(!o||!o.image||s.hideImageInCart&&A)return i;i[`${a.stepTitle} image`]=o.image}if(a.type==="Illustration"){const o=g[a.stepName],s=a.data;if(!o||s.hideColorsInCart&&A||!o.colors)return i;if(o.colors.length>0){const r=o.colors.join(", ").toUpperCase();i[`${a.stepTitle} colors`]=r}}if(a.type==="Module"){const o=g[a.stepName],s=a.data;if(!o||o.text===void 0||o.text===null||s.hideTextInCart&&A)return i;i[`${a.stepTitle} text`]=o.text}if(a.type==="Text"){const o=g[a.stepName];if(!o)return i;const s=a.data;(!s.hideTextInCart||!A&&o.text!==void 0&&o.text!==null)&&(i[`${a.stepTitle} text`]=o.text),o.color&&(!s.hideColorInCart||!A)&&(i[`${a.stepTitle} color`]=o.color)}return i},n={};return e.steps.forEach(a=>{Object.assign(n,t(a))}),n},an=(g,e,A,t)=>{const n={};let a;if(A){a=Le(A,e,!1);for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}else if(t){a=t;for(const i of Object.keys(a))n[i]={value:a[i],priceModifier:0}}for(const i of Object.keys(g)){const o=g[i],s=e.steps.find(r=>r.stepTitle===i);if(o.length===1)n[`${s==null?void 0:s.stepTitle} selection`]={value:o[0].name,priceModifier:o[0].priceModifier};else if(o.length>1)for(let r=0;r<o.length;r++)n[`${s==null?void 0:s.stepTitle} selection ${r+1}`]={value:o[r].name,priceModifier:o[r].priceModifier}}return n},vA=(g,e,A,t,n,a,i,o)=>{var E,m;const s=e.basePrice||0,r=g.priceModifierTotal||0,l=an(t,A,void 0,a),B=(P.getMap("transactionOwnerIds")||new Map).get(g.id),w={additionalExternalProductId:(E=g.integrationProduct)==null?void 0:E.additionalExternalProductId,additionalExternalVariantId:(m=g.integrationProduct)==null?void 0:m.additionalExternalVariantId,baseCost:s,designProductId:g.externalDesignProductId,designProductVariantId:g.externalDesignProductVariantId,event:"onComplete",exportedData:l,externalCartProductId:g.externalCartProductId,externalCartProductVariantId:g.externalCartProductVariantId,lineItemImageUrl:i||"",optionsCost:r,processExecutionId:o,transactionId:g.id,transactionOwnerId:B,weight:e.weight,workflowViewerLink:g.workflowViewerLink||"",workflowViewerReadOnlyLink:g.workflowViewerReadOnlyLink||""};return a&&(w.metadata=a),t&&(w.selectedVariants=t),n&&(w.sku=n),w},kA=async(g,e,A,t,n,a,i,o,s,r)=>{var S;await(async()=>{var T;if(r!==void 0)return r;await g.outstandingRequestsPromise();const Y=(P.getMap("transactionOwnerIds")||new Map).get(n.id),N=await H.getShadowGraphqlClient().query({query:lA,variables:{ids:[n.id]},fetchPolicy:"no-cache",errorPolicy:"all",context:{transactionOwnerId:Y}}),v=(T=N.data)==null?void 0:T.transactions[0].workflowState;return N.errors?(N.errors.forEach(K=>{N.errors&&console.log("Server Error:",K.message)}),null):v??null})()||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(t())),await g.updateStateWithServerImmediate(t),console.log("Server state is undefined @ Workflow completion"));const B=g.getPreviewService(),w=(S=e==null?void 0:e.finalizeStepConfig)==null?void 0:S.lookAtAnimation,E=B&&e.showModelOnFinishStep&&!!w,m=s&&Le(s,e,!0),h=s&&Le(s,e,!1),u=async y=>{const Y={};let G=0;if(Object.keys(a).length>0)for(const N of Object.keys(a)){const v=a[N],T=e.steps.find(K=>K.stepName===N);for(let K=0;K<v.selections.length;++K){const V=v.selections[K];if(T&&(!y||T.option&&(T.option.variants||[]).length>1&&!T.data.hideSelectionInCart&&!T.data.hideSelectionsInCart)){const Ve=T.stepTitle;Y[Ve]?Y[Ve].push({id:V.id||"",name:V.name,priceModifier:V.priceModifier}):Y[Ve]=[{id:V.id||"",name:V.name,priceModifier:V.priceModifier}]}G+=V.priceModifier}}return[Y,G]},[C]=await u(!0),D=Object.fromEntries(Object.keys(C).map(y=>[y,C[y].map(Y=>Y.id)])),[I]=await u(!1),F=Object.fromEntries(Object.keys(I).map(y=>[y,I[y].map(Y=>Y.id)])),p=await o(E,n.id);return{designDetails:(()=>{const y={name:i,layouts:A.map(Y=>({index:Y.index,panelId:Y.panelId})),workflowId:e.id,transactionId:n.id,useThreeDimPreview:!!E,previewImage:p};if(h){const Y=[];for(const[G,N]of Object.entries(h))Y.push({key:G,value:N});y.metadata=Y}if(D){const Y=[];for(const[G,N]of Object.entries(F))Y.push({key:G,ids:N});y.selectedVariants=Y}return y})(),cartSelectionsWithPrices:C,cartMetadata:m}},bA=async(g,e,A,t,n,a,i,o,s,r,l)=>{var u,C;s("workflow.steps.finish.finalize.buildingLayouts");const{designDetails:d,cartSelectionsWithPrices:B,cartMetadata:w}=await kA(g,e,A,t,a,i,o,r,l);s("workflow.steps.finish.finalize.creatingDesign");const E=await tn(d),m=(u=E==null?void 0:E.transaction)==null?void 0:u.previewImageLink;if(!(E!=null&&E.transaction))throw new Error("Failed to create design");s("workflow.steps.finish.finalize.updatingTransaction");const h=E.transaction;return await vA(h,n,e,B,E==null?void 0:E.sku,w,m,(C=E==null?void 0:E.processExecution)==null?void 0:C.id)},on=async(g,e,A)=>{e("workflow.steps.finish.finalize.buildingLayouts"),await Promise.all(g.map(async o=>{await o.workflowManager.outstandingRequestsPromise()}));const n=await(async()=>{var r;const s=await H.getShadowGraphqlClient().query({query:lA,variables:{ids:g.map(l=>l.transaction.id)},fetchPolicy:"no-cache",errorPolicy:"all"});return s.errors?(s.errors.forEach(l=>{s.errors&&console.log("Server Error:",l.message)}),null):(r=s.data)!=null&&r.transactions?s.data.transactions.map(l=>l.workflowState??null):null})(),a=await Promise.all(g.map(async(o,s)=>await kA(o.workflowManager,o.workflow,o.layouts,o.getReducerState,o.transaction,o.workflowSelections,o.designName,A??(()=>Promise.resolve(void 0)),o.workflowMetadata,n?n[s]:void 0)));e("workflow.steps.finish.finalize.creatingDesign");const i=await nn(a.map(o=>o.designDetails));if(!i)throw new Error("Failed to create designs");return e("workflow.steps.finish.finalize.updatingTransaction"),Promise.all(i.map(async(o,s)=>{var B;const r=g[s],l=a[s],d=o.transaction;return await vA(d,r.product,r.workflow,l.cartSelectionsWithPrices,o.sku,l.cartMetadata,void 0,(B=o.processExecution)==null?void 0:B.id)}))};class sn{constructor(){this.localPersistenceKey="designTransactions",this.storageMethod="Local",this.designSavedListeners=[]}attachSaveListener(e){this.designSavedListeners.push(e)}detachSaveListener(e){this.designSavedListeners=this.designSavedListeners.filter(A=>A!==e)}async getSavedDesigns(){if(this.storageMethod==="Local"){const e=P.get(this.localPersistenceKey);return e?JSON.parse(e):[]}throw new U("Unexpected storage method requested")}async getSavedDesignByTransaction(e){return(await this.getSavedDesigns()).find(t=>t.transactionId===e)}async addDesign(e){const t=(await this.getSavedDesigns()).filter(n=>n.transactionId!==e.transactionId);t.unshift(e),await this.setDesigns(t),this.designSavedListeners.forEach(n=>n(e))}async renameDesign(e,A){const t=await this.getSavedDesigns(),n=t.find(a=>a.transactionId===e);if(!n)throw new Error(`No saved design for transaction ${e}.`);n.title=A,await this.setDesigns(t)}async removeDesign(e){const A=await this.getSavedDesigns();await this.setDesigns(A.filter(t=>t.transactionId!==e))}async setDesigns(e){if(this.storageMethod==="Local"){P.set(this.localPersistenceKey,JSON.stringify(e));return}throw new U("Unexpected storage method requested")}}const De=new sn,rn=M.gql`
|
|
1844
1844
|
mutation AddTransactionStakeholder($id: String!, $type: String!, $details: CustomerDetailsInput!) {
|
|
1845
1845
|
transactionAddStakeholder(id: $id, details: $details, type: $type) {
|
|
1846
1846
|
id
|
|
@@ -2173,7 +2173,7 @@ IfnI8vaNAAAAAElFTkSuQmCC" transform="matrix(0.13 0.0141 -0.0141 0.1301 104.926 1
|
|
|
2173
2173
|
}
|
|
2174
2174
|
}
|
|
2175
2175
|
}
|
|
2176
|
-
`;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=de(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 H.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 H.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 H.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}}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 H.getShadowGraphqlClient().mutate({mutation:Hn,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 H.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 H.getShadowGraphqlClient().mutate({mutation:xn,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 H.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 H.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 H.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 H.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){return await on(this.workflowExperiences.map(A=>({workflowManager:A.getWorkflowManager(),workflow:A.getWorkflowManager().getWorkflow(),layouts:A.getWorkflowManager().getLayouts(),getReducerState:()=>A.getCommandContext().getState(),product:A.getWorkflowManager().getProduct(),transaction:A.getWorkflowManager().getTransaction(),workflowSelections:A.getWorkflowManager().getWorkflowSelections(),designName:A.getWorkflowManager().getWorkflow().name,workflowMetadata:A.getWorkflowManager().getWorkflowMetadata()})),e??(()=>{}))}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 H.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 H.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`
|
|
2176
|
+
`;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=de(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 H.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 H.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 H.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}}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 H.getShadowGraphqlClient().mutate({mutation:Hn,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 H.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 H.getShadowGraphqlClient().mutate({mutation:xn,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 H.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 H.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 H.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 H.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 H.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 H.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`
|
|
2177
2177
|
mutation processFlowCreate($processFlowId: String!, $inputs: [String]!) {
|
|
2178
2178
|
processExecutionCreate(processFlowId: $processFlowId, inputs: $inputs) {
|
|
2179
2179
|
id
|