@spiffcommerce/core 11.4.0 → 11.5.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/main.js +2 -2
- package/dist/module.js +2 -2
- package/dist/types.d.ts +16 -0
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -488,7 +488,7 @@ var t=require("@apollo/client"),e=require("lodash.clonedeep"),A=require("react/j
|
|
|
488
488
|
}
|
|
489
489
|
}
|
|
490
490
|
}
|
|
491
|
-
`,ko=(t,e,A)=>{const i={};return e.steps.forEach((e=>{Object.assign(i,(e=>{const i={};if("Frame"===e.type){const n=t[e.stepName],r=e.data;if(!n||r.hideImageInCart&&A)return i;i[`${e.stepTitle} image`]=n.image}if("Illustration"===e.type){const n=t[e.stepName],r=e.data;if(!n||r.hideColorsInCart&&A||!n.colors)return i;if(n.colors.length>0){const t=n.colors.join(", ").toUpperCase();i[`${e.stepTitle} colors`]=t}}if("Module"===e.type){const n=t[e.stepName],r=e.data;if(!n||r.hideTextInCart&&A)return i;i[`${e.stepTitle} text`]=n.text}if("Text"===e.type){const n=t[e.stepName];if(!n)return i;const r=e.data;r.hideTextInCart&&A||(i[`${e.stepTitle} text`]=n.text),!n.color||r.hideColorInCart&&A||(i[`${e.stepTitle} color`]=n.color)}return i})(e))})),i},Ho=(t,e,A,i,n,r,a,s,o)=>{const c=(cr.getMap("transactionOwnerIds")||new Map).get(t.id),l={event:"onComplete",lineItemImageUrl:a||"",transactionId:t.id,designProductVariantId:t.externalDesignProductVariantId,designProductId:t.externalDesignProductId,externalCartProductId:t.externalCartProductId,externalCartProductVariantId:t.externalCartProductVariantId,baseCost:A,weight:e.weight,optionsCost:i,exportedData:r,workflowViewerLink:t.workflowViewerLink||"",workflowViewerReadOnlyLink:t.workflowViewerReadOnlyLink||"",transactionOwnerId:c};return n&&(l.metadata=n),s&&(l.selectedVariants=s),o&&(l.sku=o),l},Uo=async(t,e,A,i,n,r,a)=>{const s=t.product?.basePrice||0,o=t.priceModifierTotal||0,c=((t,e,A,i)=>{const n={};let r;if(A){r=ko(A,e,!1);for(const t of Object.keys(r))n[t]={value:r[t],priceModifier:0}}else if(i){r=i;for(const t of Object.keys(r))n[t]={value:r[t],priceModifier:0}}for(const A of Object.keys(t)){const i=t[A],r=e.steps.find((t=>t.stepTitle===A));if(1===i.length)n[`${r?.stepTitle} selection`]={value:i[0].name,priceModifier:i[0].priceModifier};else if(i.length>1)for(let t=0;t<i.length;t++)n[`${r?.stepTitle} selection ${t+1}`]={value:i[t].name,priceModifier:i[t].priceModifier}}return n})(i,A,void 0,r);return Ho(t,e,s,o,r,c,a,i,n)},Go=async(t,e,A,i,n,r,a,s,o,c,l,g,h)=>{o("workflow.steps.finish.finalize.buildingLayouts"),await t.outstandingRequestsPromise();const d=Cr.getShadowGraphqlClient();await d.resetStore();const u=await d.query({query:Ns,variables:{id:r.id},errorPolicy:"all"}),B=u.data?.transactions[0].workflowState;!u.errors&&B||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(i())),u.errors&&u.errors.forEach((t=>{u.errors&&console.log("Server Error:",t.message)})),await t.updateStateWithServerImmediate(i),console.log("Server state is undefined @ Workflow completion"));const w=t.getPreviewService(),E=e?.finalizeStepConfig?.lookAtAnimation,p=w&&100===w.getSceneInitializationProgress()&&e.showModelOnFinishStep&&!!E,m=h&&ko(h,e,!0),C=h&&ko(h,e,!1),f=async t=>{const A={};let i=0;if(Object.keys(a).length>0)for(const n of Object.keys(a)){const r=a[n],s=e.steps.find((t=>t.stepName===n));for(let e=0;e<r.selections.length;++e){const n=r.selections[e];if(s&&(!t||s.option&&(s.option.variants||[]).length>1&&!s.data.hideSelectionInCart&&!s.data.hideSelectionsInCart)){const t=s.stepTitle;A[t]?A[t].push({id:n.id||"",name:n.name,priceModifier:n.priceModifier}):A[t]=[{id:n.id||"",name:n.name,priceModifier:n.priceModifier}]}i+=n.priceModifier}}return[A,i]},[Q]=await f(!0),y=Object.fromEntries(Object.keys(Q).map((t=>[t,Q[t].map((t=>t.id))]))),[D]=await f(!1),I=Object.fromEntries(Object.keys(D).map((t=>[t,D[t].map((t=>t.id))]))),x=await g(p);o("workflow.steps.finish.finalize.creatingDesign"),r.bulk&&await c(l);const M=await(async t=>(await Cr.getShadowGraphqlClient().mutate({mutation:Ro,errorPolicy:"all",fetchPolicy:"no-cache",variables:{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?.designCreate)((()=>{const t={name:s,layouts:A.map((t=>({index:t.index,panelId:t.panelId}))),workflowId:e.id,transactionId:r.id,useThreeDimPreview:p,previewImage:x};if(C){const e=[];for(const[t,A]of Object.entries(C))e.push({key:t,value:A});t.metadata=e}if(y){const e=[];for(const[t,A]of Object.entries(I))e.push({key:t,ids:A});t.selectedVariants=e}return t})()),v=M?.transaction?.previewImageLink;o("workflow.steps.finish.finalize.updatingTransaction");const F=(await Cr.getShadowGraphqlClient().query({query:Ps,variables:{id:r.id}})).data.transactions[0];return r.bulk?((t,e,A)=>{const i=(t.product?.basePrice||0)*(t.variationsCount||0),n=t.priceModifierTotal||0,r={items:{value:t.variationsCount?`${t.variationsCount}`:"0",priceModifier:0}};return Ho(t,e,i,n,void 0,r,A)})(F,n,v):await Uo(F,n,e,Q,M?.sku,m,v)};let To;var Oo;(Oo=To||(To={})).Local="Local",Oo.Remote="Remote";const Jo=new class{constructor(){No(this,"localPersistenceKey","designTransactions"),No(this,"storageMethod",To.Local),No(this,"designSavedListeners",[])}attachSaveListener(t){this.designSavedListeners.push(t)}detachSaveListener(t){this.designSavedListeners=this.designSavedListeners.filter((e=>e!==t))}async getSavedDesigns(){if(this.storageMethod===To.Local){const t=cr.get(this.localPersistenceKey);return t?JSON.parse(t):[]}throw new Ar("Unexpected storage method requested")}async getSavedDesignByTransaction(t){return(await this.getSavedDesigns()).find((e=>e.transactionId===t))}async addDesign(t){const e=(await this.getSavedDesigns()).filter((e=>e.transactionId!==t.transactionId));e.unshift(t),await this.setDesigns(e),this.designSavedListeners.forEach((e=>e(t)))}async renameDesign(t,e){const A=await this.getSavedDesigns(),i=A.find((e=>e.transactionId===t));if(!i)throw new Error(`No saved design for transaction ${t}.`);i.title=e,await this.setDesigns(A)}async removeDesign(t){const e=await this.getSavedDesigns();await this.setDesigns(e.filter((e=>e.transactionId!==t)))}async setDesigns(t){if(this.storageMethod!==To.Local)throw new Ar("Unexpected storage method requested");cr.set(this.localPersistenceKey,JSON.stringify(t))}};function Lo(t,e,A){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var A=t[Symbol.toPrimitive];if(void 0!==A){var i=A.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:A,enumerable:!0,configurable:!0,writable:!0}):t[e]=A,t}class zo{constructor(t,e){if(Lo(this,"client",void 0),Lo(this,"commandContext",void 0),Lo(this,"workflowManager",void 0),Lo(this,"isReadOnly",void 0),Lo(this,"renderableScenes",[]),Lo(this,"renderableSceneCallbacks",[]),Lo(this,"debouncedSavedDesignUpdate",S(I)((async()=>{await Jo.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),Lo(this,"getCanvasObjectURLAsync",(async t=>new Promise(((e,A)=>{try{t.toBlob((t=>{if(t){const A=URL.createObjectURL(t);e(A)}}))}catch(t){A(t)}})))),!e.workflow)throw new Error("No Workflow ID provided.");this.client=t;const A=e.layouts;this.commandContext=new Ui,this.commandContext.initialize(A,e.reloadedState),this.isReadOnly=e.transaction.isOrdered||!!e.readOnly,this.workflowManager=new Eo(e.workflow,e.product.profanities?.map((t=>t.word))||[],A,this.commandContext,(t=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return e.stateMutationFunc(t)}),e.transaction,e.product,e.previewService,e.renderableContextService,e.reloadedState,e.readOnly),this.workflowManager.addSelectionCallback((t=>{const e=t.traversableScenes.map((t=>{const e=t.renderableSteps.map((t=>t.stepName));return{id:t.name,title:t.title,renderableSteps:e}}));this.renderableScenes=e,this.renderableSceneCallbacks.forEach((t=>t(e)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(t){await Cr.getShadowGraphqlClient().mutate({mutation:Ys,variables:{transactionId:this.workflowManager.getTransaction().id,updates:t.map((t=>({recordNumber:t.recordNumber,values:t.values.map((t=>({aspect:t.aspect,stepName:t.stepName,value:t.value})))})))}})}async createPreviewImage(t,e){const A=this.workflowManager.getWorkflow(),i=A?.finalizeStepConfig?.lookAtAnimation;if(t){if(!i)throw new Error("Failed to generate cart preview image!");return await(this.workflowManager.getPreviewService()?.renderSceneScreenshot(512,i))||""}const n=document.createElement("canvas");let r=2048;e&&e<=2048&&(r=e),n.width=r,n.height=r;const a=this.commandContext.getAllLayouts(),s=A.defaultPreviewPanelIndex||0,o=A.panels[s],c=a.find((t=>t.layoutState?.layout.panelId===o?.name))||a[0],l=c.layoutState.layout.previewRegion?{x:c.layoutState.layout.previewRegion.left,y:c.layoutState.layout.previewRegion.top,width:c.layoutState.layout.previewRegion.width,height:c.layoutState.layout.previewRegion.height}:{x:0,y:0,width:c.layoutState.layout.width,height:c.layoutState.layout.height},g=this.commandContext.getLayoutById(c.layoutState.layout.id),h=n.getContext("2d");if(!h)throw new rr("Failed to obtain 2D context for preview image creation");const d=Ti(g.layoutState.layout,g.layoutState.elements,{renderingConfiguration:{purpose:Ve.Print,region:{left:l.x,top:l.y,width:l.width,height:l.height}}}),u=S(Q).renderToStaticMarkup(d),B=await ke.from(h,u,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await B.render();const w=await this.getCanvasObjectURLAsync(n);return n.toDataURL(w)}getStepById(t){const e=this.getWorkflowManager().getWorkflow().steps.find((e=>e.stepName===t));if(e&&this.stepHasHandle(e))return Po.get(this.getWorkflowManager(),e)}getSteps(){return this.getScenes().flatMap((t=>this.getStepsByScene(t)))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map((t=>({id:t.id,name:t.name,stepIds:t.stepNames})))}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const t=this.getWorkflowManager().getProduct().bulkConfiguration,e={type:nA.Bulk,stepName:"Bulk",stepTitle:t?.stepTitle??"workflow.steps.bulk.title",helpText:t?.helpText,data:{aspects:Rs(this.getWorkflowManager().getWorkflow())},conditions:[]};return Po.get(this.getWorkflowManager(),e)}}getStepByName(t){const e=this.getWorkflowManager().getWorkflow().steps.find((e=>e.stepTitle===t));if(e&&this.stepHasHandle(e))return Po.get(this.getWorkflowManager(),e)}getStepsByType(t){return this.getWorkflowManager().getWorkflow().steps.filter((e=>e.type===t)).map((t=>Po.get(this.getWorkflowManager(),t)))}getStepsByScene(t){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((e=>e.name===t.name)))throw new Error("Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.");return t.stepIds.map((t=>this.getWorkflowManager().getWorkflow().steps.find((e=>e.stepName===t)))).filter((t=>this.stepHasHandle(t))).map((t=>Po.get(this.getWorkflowManager(),t)))}async attachCustomerDetails(t){return this.assignCustomerDetails({emailAddress:t.email})}async assignCustomerDetails(t){const e=(await Cr.getShadowGraphqlClient().mutate({mutation:yo,variables:{id:this.getWorkflowManager().getTransaction().id,details:t,type:"Owner"}})).data?.transactionAddStakeholder?.stakeholders?.find((e=>e.customer?.emailAddress===t.emailAddress));if(e?.customer){this.getWorkflowManager().setTransactionCustomer(e.customer);const t=cr.getMap("transactionCustomerIds")||new Map;t.set(this.getWorkflowManager().getTransaction().id,e.customer.id),cr.setMap("transactionCustomerIds",t)}}attachRenderableSceneListener(t){this.renderableSceneCallbacks.push(t),t(this.renderableScenes)}detachRenderableSceneListener(t){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((e=>e!==t))}async save(t){if(!this.getCommandContext().getState())throw new Ar("State undefined!");const e={title:await(async()=>{if(t)return t;const e=this.getWorkflowManager().getTransaction().id,A=(await Jo.getSavedDesigns()).find((t=>t.transactionId===e))?.title;return A||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await Jo.addDesign(e),e}async copy(){const t=S(e)(this.getCommandContext().getState());if(!t)throw new Ar("Internal state is undefined! Cannot copy experience!");const A=JSON.stringify(t.transaction),i=this.getWorkflowManager().getWorkflow(),n=new uc({}),r=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!r)throw new Ar("Integration product id is undefined!");await n.initFromIntegrationProduct(r);return await n.getWorkflowExperience(i.id,A,void 0)}async onDesignFinished(t){return Go(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),(()=>this.commandContext.getState()),this.workflowManager.getProduct(),this.workflowManager.getTransaction(),this.workflowManager.getWorkflowSelections(),this.workflowManager.getWorkflow().name,t||(()=>{}),(t=>this.updateVariationRecords(t)),this.workflowManager.getVariationRecords(),(t=>this.createPreviewImage(t)),this.workflowManager.getWorkflowMetadata())}stepHasHandle(t){return t.type!==nA.SilentIllustration&&t.type!==nA.ProductOverlay}getExportedData(){const t=new Map,e=this.getWorkflowManager().getWorkflowMetadata(),A=this.getWorkflowManager().getWorkflowSelections();return Object.keys(e).forEach((A=>{const i=this.workflowManager.getWorkflow().steps.find((t=>t.stepName===A));if(!i)return;t.has(i.stepTitle)||t.set(i.stepTitle,{});const n=e[A];Object.keys(n).forEach((e=>{t.get(i.stepTitle)[e]=n[e]}))})),Object.keys(A)?.forEach((e=>{const i=this.workflowManager.getWorkflow().steps.find((t=>t.stepName===e));i&&(t.has(i.stepTitle)||t.set(i.stepTitle,{}),t.get(i.stepTitle).selection=A[e].selections[0].name)})),t}}const jo=M.gql`
|
|
491
|
+
`,ko=(t,e,A)=>{const i={};return e.steps.forEach((e=>{Object.assign(i,(e=>{const i={};if("Frame"===e.type){const n=t[e.stepName],r=e.data;if(!n||r.hideImageInCart&&A)return i;i[`${e.stepTitle} image`]=n.image}if("Illustration"===e.type){const n=t[e.stepName],r=e.data;if(!n||r.hideColorsInCart&&A||!n.colors)return i;if(n.colors.length>0){const t=n.colors.join(", ").toUpperCase();i[`${e.stepTitle} colors`]=t}}if("Module"===e.type){const n=t[e.stepName],r=e.data;if(!n||r.hideTextInCart&&A)return i;i[`${e.stepTitle} text`]=n.text}if("Text"===e.type){const n=t[e.stepName];if(!n)return i;const r=e.data;r.hideTextInCart&&A||(i[`${e.stepTitle} text`]=n.text),!n.color||r.hideColorInCart&&A||(i[`${e.stepTitle} color`]=n.color)}return i})(e))})),i},Ho=(t,e,A,i,n,r,a,s,o)=>{const c=(cr.getMap("transactionOwnerIds")||new Map).get(t.id),l={event:"onComplete",lineItemImageUrl:a||"",transactionId:t.id,designProductVariantId:t.externalDesignProductVariantId,designProductId:t.externalDesignProductId,externalCartProductId:t.externalCartProductId,externalCartProductVariantId:t.externalCartProductVariantId,baseCost:A,weight:e.weight,optionsCost:i,exportedData:r,workflowViewerLink:t.workflowViewerLink||"",workflowViewerReadOnlyLink:t.workflowViewerReadOnlyLink||"",transactionOwnerId:c};return n&&(l.metadata=n),s&&(l.selectedVariants=s),o&&(l.sku=o),l},Uo=async(t,e,A,i,n,r,a)=>{const s=t.product?.basePrice||0,o=t.priceModifierTotal||0,c=((t,e,A,i)=>{const n={};let r;if(A){r=ko(A,e,!1);for(const t of Object.keys(r))n[t]={value:r[t],priceModifier:0}}else if(i){r=i;for(const t of Object.keys(r))n[t]={value:r[t],priceModifier:0}}for(const A of Object.keys(t)){const i=t[A],r=e.steps.find((t=>t.stepTitle===A));if(1===i.length)n[`${r?.stepTitle} selection`]={value:i[0].name,priceModifier:i[0].priceModifier};else if(i.length>1)for(let t=0;t<i.length;t++)n[`${r?.stepTitle} selection ${t+1}`]={value:i[t].name,priceModifier:i[t].priceModifier}}return n})(i,A,void 0,r);return Ho(t,e,s,o,r,c,a,i,n)},Go=async(t,e,A,i,n,r,a,s,o,c,l,g,h)=>{o("workflow.steps.finish.finalize.buildingLayouts"),await t.outstandingRequestsPromise();const d=Cr.getShadowGraphqlClient();await d.resetStore();const u=await d.query({query:Ns,variables:{id:r.id},errorPolicy:"all"}),B=u.data?.transactions[0].workflowState;!u.errors&&B||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(i())),u.errors&&u.errors.forEach((t=>{u.errors&&console.log("Server Error:",t.message)})),await t.updateStateWithServerImmediate(i),console.log("Server state is undefined @ Workflow completion"));const w=t.getPreviewService(),E=e?.finalizeStepConfig?.lookAtAnimation,p=w&&100===w.getSceneInitializationProgress()&&e.showModelOnFinishStep&&!!E,m=h&&ko(h,e,!0),C=h&&ko(h,e,!1),f=async t=>{const A={};let i=0;if(Object.keys(a).length>0)for(const n of Object.keys(a)){const r=a[n],s=e.steps.find((t=>t.stepName===n));for(let e=0;e<r.selections.length;++e){const n=r.selections[e];if(s&&(!t||s.option&&(s.option.variants||[]).length>1&&!s.data.hideSelectionInCart&&!s.data.hideSelectionsInCart)){const t=s.stepTitle;A[t]?A[t].push({id:n.id||"",name:n.name,priceModifier:n.priceModifier}):A[t]=[{id:n.id||"",name:n.name,priceModifier:n.priceModifier}]}i+=n.priceModifier}}return[A,i]},[Q]=await f(!0),y=Object.fromEntries(Object.keys(Q).map((t=>[t,Q[t].map((t=>t.id))]))),[D]=await f(!1),I=Object.fromEntries(Object.keys(D).map((t=>[t,D[t].map((t=>t.id))]))),x=await g(p);o("workflow.steps.finish.finalize.creatingDesign"),r.bulk&&await c(l);const M=await(async t=>(await Cr.getShadowGraphqlClient().mutate({mutation:Ro,errorPolicy:"all",fetchPolicy:"no-cache",variables:{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?.designCreate)((()=>{const t={name:s,layouts:A.map((t=>({index:t.index,panelId:t.panelId}))),workflowId:e.id,transactionId:r.id,useThreeDimPreview:p,previewImage:x};if(C){const e=[];for(const[t,A]of Object.entries(C))e.push({key:t,value:A});t.metadata=e}if(y){const e=[];for(const[t,A]of Object.entries(I))e.push({key:t,ids:A});t.selectedVariants=e}return t})()),v=M?.transaction?.previewImageLink;o("workflow.steps.finish.finalize.updatingTransaction");const F=(await Cr.getShadowGraphqlClient().query({query:Ps,variables:{id:r.id}})).data.transactions[0];return r.bulk?((t,e,A)=>{const i=(t.product?.basePrice||0)*(t.variationsCount||0),n=t.priceModifierTotal||0,r={items:{value:t.variationsCount?`${t.variationsCount}`:"0",priceModifier:0}};return Ho(t,e,i,n,void 0,r,A)})(F,n,v):await Uo(F,n,e,Q,M?.sku,m,v)};let To;var Oo;(Oo=To||(To={})).Local="Local",Oo.Remote="Remote";const Jo=new class{constructor(){No(this,"localPersistenceKey","designTransactions"),No(this,"storageMethod",To.Local),No(this,"designSavedListeners",[])}attachSaveListener(t){this.designSavedListeners.push(t)}detachSaveListener(t){this.designSavedListeners=this.designSavedListeners.filter((e=>e!==t))}async getSavedDesigns(){if(this.storageMethod===To.Local){const t=cr.get(this.localPersistenceKey);return t?JSON.parse(t):[]}throw new Ar("Unexpected storage method requested")}async getSavedDesignByTransaction(t){return(await this.getSavedDesigns()).find((e=>e.transactionId===t))}async addDesign(t){const e=(await this.getSavedDesigns()).filter((e=>e.transactionId!==t.transactionId));e.unshift(t),await this.setDesigns(e),this.designSavedListeners.forEach((e=>e(t)))}async renameDesign(t,e){const A=await this.getSavedDesigns(),i=A.find((e=>e.transactionId===t));if(!i)throw new Error(`No saved design for transaction ${t}.`);i.title=e,await this.setDesigns(A)}async removeDesign(t){const e=await this.getSavedDesigns();await this.setDesigns(e.filter((e=>e.transactionId!==t)))}async setDesigns(t){if(this.storageMethod!==To.Local)throw new Ar("Unexpected storage method requested");cr.set(this.localPersistenceKey,JSON.stringify(t))}};function Lo(t,e,A){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var A=t[Symbol.toPrimitive];if(void 0!==A){var i=A.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:A,enumerable:!0,configurable:!0,writable:!0}):t[e]=A,t}class zo{constructor(t,e){if(Lo(this,"client",void 0),Lo(this,"commandContext",void 0),Lo(this,"workflowManager",void 0),Lo(this,"isReadOnly",void 0),Lo(this,"renderableScenes",[]),Lo(this,"renderableSceneCallbacks",[]),Lo(this,"debouncedSavedDesignUpdate",S(I)((async()=>{await Jo.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),Lo(this,"getCanvasObjectURLAsync",(async t=>new Promise(((e,A)=>{try{t.toBlob((t=>{if(t){const A=URL.createObjectURL(t);e(A)}}))}catch(t){A(t)}})))),!e.workflow)throw new Error("No Workflow ID provided.");this.client=t;const A=e.layouts;this.commandContext=new Ui,this.commandContext.initialize(A,e.reloadedState),this.isReadOnly=e.transaction.isOrdered||!!e.readOnly,this.workflowManager=new Eo(e.workflow,e.product.profanities?.map((t=>t.word))||[],A,this.commandContext,(t=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return e.stateMutationFunc(t)}),e.transaction,e.product,e.previewService,e.renderableContextService,e.reloadedState,e.readOnly),this.workflowManager.addSelectionCallback((t=>{const e=t.traversableScenes.map((t=>{const e=t.renderableSteps.map((t=>t.stepName));return{id:t.name,title:t.title,renderableSteps:e}}));this.renderableScenes=e,this.renderableSceneCallbacks.forEach((t=>t(e)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(t){await Cr.getShadowGraphqlClient().mutate({mutation:Ys,variables:{transactionId:this.workflowManager.getTransaction().id,updates:t.map((t=>({recordNumber:t.recordNumber,values:t.values.map((t=>({aspect:t.aspect,stepName:t.stepName,value:t.value})))})))}})}async createPreviewImage(t,e){const A=this.workflowManager.getWorkflow(),i=A?.finalizeStepConfig?.lookAtAnimation;if(t){if(!i)throw new Error("Failed to generate cart preview image!");return await(this.workflowManager.getPreviewService()?.renderSceneScreenshot(512,i))||""}const n=document.createElement("canvas");let r=2048;e&&e<=2048&&(r=e),n.width=r,n.height=r;const a=this.commandContext.getAllLayouts(),s=A.defaultPreviewPanelIndex||0,o=A.panels[s],c=a.find((t=>t.layoutState?.layout.panelId===o?.name))||a[0],l=c.layoutState.layout.previewRegion?{x:c.layoutState.layout.previewRegion.left,y:c.layoutState.layout.previewRegion.top,width:c.layoutState.layout.previewRegion.width,height:c.layoutState.layout.previewRegion.height}:{x:0,y:0,width:c.layoutState.layout.width,height:c.layoutState.layout.height},g=this.commandContext.getLayoutById(c.layoutState.layout.id),h=n.getContext("2d");if(!h)throw new rr("Failed to obtain 2D context for preview image creation");const d=Ti(g.layoutState.layout,g.layoutState.elements,{renderingConfiguration:{purpose:Ve.Print,region:{left:l.x,top:l.y,width:l.width,height:l.height}}}),u=S(Q).renderToStaticMarkup(d),B=await ke.from(h,u,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await B.render();const w=await this.getCanvasObjectURLAsync(n);return n.toDataURL(w)}getStepById(t){const e=this.getWorkflowManager().getWorkflow().steps.find((e=>e.stepName===t));if(e&&this.stepHasHandle(e))return Po.get(this.getWorkflowManager(),e)}getSteps(){return this.getScenes().flatMap((t=>this.getStepsByScene(t)))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map((t=>({id:t.id,name:t.name,stepIds:t.stepNames})))}getSelectionPriceSubunits(){const t=this.getWorkflowManager().getWorkflowSelections();let e=0;return Object.values(t).forEach((t=>{e+=t.selections.map((t=>t.priceModifier)).reduce(((t,e)=>t+e))})),e}getBasePriceSubunits(){return this.getWorkflowManager().getProduct().basePrice||0}getTotalPriceSubunits(){return this.getBasePriceSubunits()+this.getSelectionPriceSubunits()}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const t=this.getWorkflowManager().getProduct().bulkConfiguration,e={type:nA.Bulk,stepName:"Bulk",stepTitle:t?.stepTitle??"workflow.steps.bulk.title",helpText:t?.helpText,data:{aspects:Rs(this.getWorkflowManager().getWorkflow())},conditions:[]};return Po.get(this.getWorkflowManager(),e)}}getStepByName(t){const e=this.getWorkflowManager().getWorkflow().steps.find((e=>e.stepTitle===t));if(e&&this.stepHasHandle(e))return Po.get(this.getWorkflowManager(),e)}getStepsByType(t){return this.getWorkflowManager().getWorkflow().steps.filter((e=>e.type===t)).map((t=>Po.get(this.getWorkflowManager(),t)))}getStepsByScene(t){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((e=>e.name===t.name)))throw new Error("Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.");return t.stepIds.map((t=>this.getWorkflowManager().getWorkflow().steps.find((e=>e.stepName===t)))).filter((t=>this.stepHasHandle(t))).map((t=>Po.get(this.getWorkflowManager(),t)))}async attachCustomerDetails(t){return this.assignCustomerDetails({emailAddress:t.email})}async assignCustomerDetails(t){const e=(await Cr.getShadowGraphqlClient().mutate({mutation:yo,variables:{id:this.getWorkflowManager().getTransaction().id,details:t,type:"Owner"}})).data?.transactionAddStakeholder?.stakeholders?.find((e=>e.customer?.emailAddress===t.emailAddress));if(e?.customer){this.getWorkflowManager().setTransactionCustomer(e.customer);const t=cr.getMap("transactionCustomerIds")||new Map;t.set(this.getWorkflowManager().getTransaction().id,e.customer.id),cr.setMap("transactionCustomerIds",t)}}attachRenderableSceneListener(t){this.renderableSceneCallbacks.push(t),t(this.renderableScenes)}detachRenderableSceneListener(t){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((e=>e!==t))}async save(t){if(!this.getCommandContext().getState())throw new Ar("State undefined!");const e={title:await(async()=>{if(t)return t;const e=this.getWorkflowManager().getTransaction().id,A=(await Jo.getSavedDesigns()).find((t=>t.transactionId===e))?.title;return A||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await Jo.addDesign(e),e}async copy(){const t=S(e)(this.getCommandContext().getState());if(!t)throw new Ar("Internal state is undefined! Cannot copy experience!");const A=JSON.stringify(t.transaction),i=this.getWorkflowManager().getWorkflow(),n=new uc({}),r=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!r)throw new Ar("Integration product id is undefined!");await n.initFromIntegrationProduct(r);return await n.getWorkflowExperience(i.id,A,void 0)}async onDesignFinished(t){return Go(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),(()=>this.commandContext.getState()),this.workflowManager.getProduct(),this.workflowManager.getTransaction(),this.workflowManager.getWorkflowSelections(),this.workflowManager.getWorkflow().name,t||(()=>{}),(t=>this.updateVariationRecords(t)),this.workflowManager.getVariationRecords(),(t=>this.createPreviewImage(t)),this.workflowManager.getWorkflowMetadata())}stepHasHandle(t){return t.type!==nA.SilentIllustration&&t.type!==nA.ProductOverlay}getExportedData(){const t=new Map,e=this.getWorkflowManager().getWorkflowMetadata(),A=this.getWorkflowManager().getWorkflowSelections();return Object.keys(e).forEach((A=>{const i=this.workflowManager.getWorkflow().steps.find((t=>t.stepName===A));if(!i)return;t.has(i.stepTitle)||t.set(i.stepTitle,{});const n=e[A];Object.keys(n).forEach((e=>{t.get(i.stepTitle)[e]=n[e]}))})),Object.keys(A)?.forEach((e=>{const i=this.workflowManager.getWorkflow().steps.find((t=>t.stepName===e));i&&(t.has(i.stepTitle)||t.set(i.stepTitle,{}),t.get(i.stepTitle).selection=A[e].selections[0].name)})),t}}const jo=M.gql`
|
|
492
492
|
query GetBundle($id: String!) {
|
|
493
493
|
bundles(ids: [$id]) {
|
|
494
494
|
id
|
|
@@ -546,7 +546,7 @@ var t=require("@apollo/client"),e=require("lodash.clonedeep"),A=require("react/j
|
|
|
546
546
|
id
|
|
547
547
|
}
|
|
548
548
|
}
|
|
549
|
-
`;function $o(t,e,A){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var A=t[Symbol.toPrimitive];if(void 0!==A){var i=A.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:A,enumerable:!0,configurable:!0,writable:!0}):t[e]=A,t}class _o{constructor(t,e){$o(this,"client",void 0),$o(this,"id",void 0),$o(this,"workflowExperiences",[]),this.client=t,this.id=e}getClient(){return this.client}getId(){return this.id}hasGlobalProperties(){throw new Error("Method not implemented.")}getGlobalProperties(){throw new Error("Method not implemented.")}async addWorkflowExperience(t){const e=t.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find((t=>t.getWorkflowManager().getTransaction().id===e)))throw new Error("Unable to add transaction to bundle - Already Exists!");await Cr.getShadowGraphqlClient().mutate({mutation:Wo,variables:{id:this.id,transactionId:e}}),this.workflowExperiences.push(t)}async removeWorkflowExperience(t){const e=this.workflowExperiences.indexOf(t);if(!(e>-1))throw new Error("Unable to remove workflow experience from bundle - Not Found!");await Cr.getShadowGraphqlClient().mutate({mutation:Xo,variables:{id:this.id,transactionId:t.getWorkflowManager().getTransaction().id}}),this.workflowExperiences.splice(e,1)}sortWorkflowExperiences(t){this.workflowExperiences=this.workflowExperiences.sort(t)}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(t,e){await Cr.getShadowGraphqlClient().mutate({mutation:qo,variables:{id:this.id,details:t,type:e||ea.Owner}})}async updateStakeholders(t){await Cr.getShadowGraphqlClient().mutate({mutation:Zo,variables:{id:this.id,input:t}})}async getAllStakeholders(){const t=await Cr.getShadowGraphqlClient().query({query:Vo,errorPolicy:"all",variables:{id:this.id}});if(!t.data.bundles||0===t.data.bundles.length)throw new Error("Bundle not found!");return t.data.bundles[0].bundleStakeholders||[]}}function tc(t,e,A){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var A=t[Symbol.toPrimitive];if(void 0!==A){var i=A.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:A,enumerable:!0,configurable:!0,writable:!0}):t[e]=A,t}const ec=t.gql`
|
|
549
|
+
`;function $o(t,e,A){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var A=t[Symbol.toPrimitive];if(void 0!==A){var i=A.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:A,enumerable:!0,configurable:!0,writable:!0}):t[e]=A,t}class _o{constructor(t,e){$o(this,"client",void 0),$o(this,"id",void 0),$o(this,"workflowExperiences",[]),this.client=t,this.id=e}getClient(){return this.client}getId(){return this.id}hasGlobalProperties(){throw new Error("Method not implemented.")}getGlobalProperties(){throw new Error("Method not implemented.")}getTotalSubunits(){return this.workflowExperiences.map((t=>t.getTotalPriceSubunits())).reduce(((t,e)=>t+e),0)}async addWorkflowExperience(t){const e=t.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find((t=>t.getWorkflowManager().getTransaction().id===e)))throw new Error("Unable to add transaction to bundle - Already Exists!");await Cr.getShadowGraphqlClient().mutate({mutation:Wo,variables:{id:this.id,transactionId:e}}),this.workflowExperiences.push(t)}async removeWorkflowExperience(t){const e=this.workflowExperiences.indexOf(t);if(!(e>-1))throw new Error("Unable to remove workflow experience from bundle - Not Found!");await Cr.getShadowGraphqlClient().mutate({mutation:Xo,variables:{id:this.id,transactionId:t.getWorkflowManager().getTransaction().id}}),this.workflowExperiences.splice(e,1)}sortWorkflowExperiences(t){this.workflowExperiences=this.workflowExperiences.sort(t)}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(t,e){await Cr.getShadowGraphqlClient().mutate({mutation:qo,variables:{id:this.id,details:t,type:e||ea.Owner}})}async updateStakeholders(t){await Cr.getShadowGraphqlClient().mutate({mutation:Zo,variables:{id:this.id,input:t}})}async getAllStakeholders(){const t=await Cr.getShadowGraphqlClient().query({query:Vo,errorPolicy:"all",variables:{id:this.id}});if(!t.data.bundles||0===t.data.bundles.length)throw new Error("Bundle not found!");return t.data.bundles[0].bundleStakeholders||[]}}function tc(t,e,A){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var A=t[Symbol.toPrimitive];if(void 0!==A){var i=A.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:A,enumerable:!0,configurable:!0,writable:!0}):t[e]=A,t}const ec=t.gql`
|
|
550
550
|
fragment RegionFields on Region {
|
|
551
551
|
width
|
|
552
552
|
top
|
package/dist/module.js
CHANGED
|
@@ -488,7 +488,7 @@ import{CommandContext as A,AssetType as t,BringForwardCommand as e,BringToFrontC
|
|
|
488
488
|
}
|
|
489
489
|
}
|
|
490
490
|
}
|
|
491
|
-
`,Ji=(A,t,e)=>{const n={};return t.steps.forEach((t=>{Object.assign(n,(t=>{const n={};if("Frame"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideImageInCart&&e)return n;n[`${t.stepTitle} image`]=i.image}if("Illustration"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideColorsInCart&&e||!i.colors)return n;if(i.colors.length>0){const A=i.colors.join(", ").toUpperCase();n[`${t.stepTitle} colors`]=A}}if("Module"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideTextInCart&&e)return n;n[`${t.stepTitle} text`]=i.text}if("Text"===t.type){const i=A[t.stepName];if(!i)return n;const a=t.data;a.hideTextInCart&&e||(n[`${t.stepTitle} text`]=i.text),!i.color||a.hideColorInCart&&e||(n[`${t.stepTitle} color`]=i.color)}return n})(t))})),n},Li=(A,t,e,n,i,a,o,r,s)=>{const c=(wt.getMap("transactionOwnerIds")||new Map).get(A.id),g={event:"onComplete",lineItemImageUrl:o||"",transactionId:A.id,designProductVariantId:A.externalDesignProductVariantId,designProductId:A.externalDesignProductId,externalCartProductId:A.externalCartProductId,externalCartProductVariantId:A.externalCartProductVariantId,baseCost:e,weight:t.weight,optionsCost:n,exportedData:a,workflowViewerLink:A.workflowViewerLink||"",workflowViewerReadOnlyLink:A.workflowViewerReadOnlyLink||"",transactionOwnerId:c};return i&&(g.metadata=i),r&&(g.selectedVariants=r),s&&(g.sku=s),g},Oi=async(A,t,e,n,i,a,o)=>{const r=A.product?.basePrice||0,s=A.priceModifierTotal||0,c=((A,t,e,n)=>{const i={};let a;if(e){a=Ji(e,t,!1);for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}else if(n){a=n;for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}for(const e of Object.keys(A)){const n=A[e],a=t.steps.find((A=>A.stepTitle===e));if(1===n.length)i[`${a?.stepTitle} selection`]={value:n[0].name,priceModifier:n[0].priceModifier};else if(n.length>1)for(let A=0;A<n.length;A++)i[`${a?.stepTitle} selection ${A+1}`]={value:n[A].name,priceModifier:n[A].priceModifier}}return i})(n,e,void 0,a);return Li(A,t,r,s,a,c,o,n,i)},Ti=async(A,t,e,n,i,a,o,r,s,c,g,l,B)=>{s("workflow.steps.finish.finalize.buildingLayouts"),await A.outstandingRequestsPromise();const w=ft.getShadowGraphqlClient();await w.resetStore();const d=await w.query({query:bn,variables:{id:a.id},errorPolicy:"all"}),E=d.data?.transactions[0].workflowState;!d.errors&&E||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(n())),d.errors&&d.errors.forEach((A=>{d.errors&&console.log("Server Error:",A.message)})),await A.updateStateWithServerImmediate(n),console.log("Server state is undefined @ Workflow completion"));const h=A.getPreviewService(),Q=t?.finalizeStepConfig?.lookAtAnimation,C=h&&100===h.getSceneInitializationProgress()&&t.showModelOnFinishStep&&!!Q,u=B&&Ji(B,t,!0),m=B&&Ji(B,t,!1),D=async A=>{const e={};let n=0;if(Object.keys(o).length>0)for(const i of Object.keys(o)){const a=o[i],r=t.steps.find((A=>A.stepName===i));for(let t=0;t<a.selections.length;++t){const i=a.selections[t];if(r&&(!A||r.option&&(r.option.variants||[]).length>1&&!r.data.hideSelectionInCart&&!r.data.hideSelectionsInCart)){const A=r.stepTitle;e[A]?e[A].push({id:i.id||"",name:i.name,priceModifier:i.priceModifier}):e[A]=[{id:i.id||"",name:i.name,priceModifier:i.priceModifier}]}n+=i.priceModifier}}return[e,n]},[p]=await D(!0),I=Object.fromEntries(Object.keys(p).map((A=>[A,p[A].map((A=>A.id))]))),[f]=await D(!1),y=Object.fromEntries(Object.keys(f).map((A=>[A,f[A].map((A=>A.id))]))),M=await l(C);s("workflow.steps.finish.finalize.creatingDesign"),a.bulk&&await c(g);const F=await(async A=>(await ft.getShadowGraphqlClient().mutate({mutation:bi,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:A.name,layouts:A.layouts,workflowId:A.workflowId,transactionId:A.transactionId,previewImage:A.previewImage,useThreeDimPreview:A.useThreeDimPreview,metadata:A.metadata,selectedVariants:A.selectedVariants}})).data?.designCreate)((()=>{const A={name:r,layouts:e.map((A=>({index:A.index,panelId:A.panelId}))),workflowId:t.id,transactionId:a.id,useThreeDimPreview:C,previewImage:M};if(m){const t=[];for(const[A,e]of Object.entries(m))t.push({key:A,value:e});A.metadata=t}if(I){const t=[];for(const[A,e]of Object.entries(y))t.push({key:A,ids:e});A.selectedVariants=t}return A})()),Y=F?.transaction?.previewImageLink;s("workflow.steps.finish.finalize.updatingTransaction");const x=(await ft.getShadowGraphqlClient().query({query:kn,variables:{id:a.id}})).data.transactions[0];return a.bulk?((A,t,e)=>{const n=(A.product?.basePrice||0)*(A.variationsCount||0),i=A.priceModifierTotal||0,a={items:{value:A.variationsCount?`${A.variationsCount}`:"0",priceModifier:0}};return Li(A,t,n,i,void 0,a,e)})(x,i,Y):await Oi(x,i,t,p,F?.sku,u,Y)};let zi;var ji;(ji=zi||(zi={})).Local="Local",ji.Remote="Remote";const Ki=new class{constructor(){ki(this,"localPersistenceKey","designTransactions"),ki(this,"storageMethod",zi.Local),ki(this,"designSavedListeners",[])}attachSaveListener(A){this.designSavedListeners.push(A)}detachSaveListener(A){this.designSavedListeners=this.designSavedListeners.filter((t=>t!==A))}async getSavedDesigns(){if(this.storageMethod===zi.Local){const A=wt.get(this.localPersistenceKey);return A?JSON.parse(A):[]}throw new ot("Unexpected storage method requested")}async getSavedDesignByTransaction(A){return(await this.getSavedDesigns()).find((t=>t.transactionId===A))}async addDesign(A){const t=(await this.getSavedDesigns()).filter((t=>t.transactionId!==A.transactionId));t.unshift(A),await this.setDesigns(t),this.designSavedListeners.forEach((t=>t(A)))}async renameDesign(A,t){const e=await this.getSavedDesigns(),n=e.find((t=>t.transactionId===A));if(!n)throw new Error(`No saved design for transaction ${A}.`);n.title=t,await this.setDesigns(e)}async removeDesign(A){const t=await this.getSavedDesigns();await this.setDesigns(t.filter((t=>t.transactionId!==A)))}async setDesigns(A){if(this.storageMethod!==zi.Local)throw new ot("Unexpected storage method requested");wt.set(this.localPersistenceKey,JSON.stringify(A))}};function Vi(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Wi{constructor(t,e){if(Vi(this,"client",void 0),Vi(this,"commandContext",void 0),Vi(this,"workflowManager",void 0),Vi(this,"isReadOnly",void 0),Vi(this,"renderableScenes",[]),Vi(this,"renderableSceneCallbacks",[]),Vi(this,"debouncedSavedDesignUpdate",WA((async()=>{await Ki.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),Vi(this,"getCanvasObjectURLAsync",(async A=>new Promise(((t,e)=>{try{A.toBlob((A=>{if(A){const e=URL.createObjectURL(A);t(e)}}))}catch(A){e(A)}})))),!e.workflow)throw new Error("No Workflow ID provided.");this.client=t;const n=e.layouts;this.commandContext=new A,this.commandContext.initialize(n,e.reloadedState),this.isReadOnly=e.transaction.isOrdered||!!e.readOnly,this.workflowManager=new Di(e.workflow,e.product.profanities?.map((A=>A.word))||[],n,this.commandContext,(A=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return e.stateMutationFunc(A)}),e.transaction,e.product,e.previewService,e.renderableContextService,e.reloadedState,e.readOnly),this.workflowManager.addSelectionCallback((A=>{const t=A.traversableScenes.map((A=>{const t=A.renderableSteps.map((A=>A.stepName));return{id:A.name,title:A.title,renderableSteps:t}}));this.renderableScenes=t,this.renderableSceneCallbacks.forEach((A=>A(t)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(A){await ft.getShadowGraphqlClient().mutate({mutation:Gn,variables:{transactionId:this.workflowManager.getTransaction().id,updates:A.map((A=>({recordNumber:A.recordNumber,values:A.values.map((A=>({aspect:A.aspect,stepName:A.stepName,value:A.value})))})))}})}async createPreviewImage(A,t){const e=this.workflowManager.getWorkflow(),n=e?.finalizeStepConfig?.lookAtAnimation;if(A){if(!n)throw new Error("Failed to generate cart preview image!");return await(this.workflowManager.getPreviewService()?.renderSceneScreenshot(512,n))||""}const i=document.createElement("canvas");let a=2048;t&&t<=2048&&(a=t),i.width=a,i.height=a;const o=this.commandContext.getAllLayouts(),r=e.defaultPreviewPanelIndex||0,s=e.panels[r],c=o.find((A=>A.layoutState?.layout.panelId===s?.name))||o[0],g=c.layoutState.layout.previewRegion?{x:c.layoutState.layout.previewRegion.left,y:c.layoutState.layout.previewRegion.top,width:c.layoutState.layout.previewRegion.width,height:c.layoutState.layout.previewRegion.height}:{x:0,y:0,width:c.layoutState.layout.width,height:c.layoutState.layout.height},l=this.commandContext.getLayoutById(c.layoutState.layout.id),B=i.getContext("2d");if(!B)throw new ct("Failed to obtain 2D context for preview image creation");const w=R(l.layoutState.layout,l.layoutState.elements,{renderingConfiguration:{purpose:W.Print,region:{left:g.x,top:g.y,width:g.width,height:g.height}}}),d=jA.renderToStaticMarkup(w),E=await zA.from(B,d,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await E.render();const h=await this.getCanvasObjectURLAsync(i);return i.toDataURL(h)}getStepById(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A));if(t&&this.stepHasHandle(t))return Gi.get(this.getWorkflowManager(),t)}getSteps(){return this.getScenes().flatMap((A=>this.getStepsByScene(A)))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map((A=>({id:A.id,name:A.name,stepIds:A.stepNames})))}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const A=this.getWorkflowManager().getProduct().bulkConfiguration,t={type:D.Bulk,stepName:"Bulk",stepTitle:A?.stepTitle??"workflow.steps.bulk.title",helpText:A?.helpText,data:{aspects:Jn(this.getWorkflowManager().getWorkflow())},conditions:[]};return Gi.get(this.getWorkflowManager(),t)}}getStepByName(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepTitle===A));if(t&&this.stepHasHandle(t))return Gi.get(this.getWorkflowManager(),t)}getStepsByType(A){return this.getWorkflowManager().getWorkflow().steps.filter((t=>t.type===A)).map((A=>Gi.get(this.getWorkflowManager(),A)))}getStepsByScene(A){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((t=>t.name===A.name)))throw new Error("Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.");return A.stepIds.map((A=>this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A)))).filter((A=>this.stepHasHandle(A))).map((A=>Gi.get(this.getWorkflowManager(),A)))}async attachCustomerDetails(A){return this.assignCustomerDetails({emailAddress:A.email})}async assignCustomerDetails(A){const t=(await ft.getShadowGraphqlClient().mutate({mutation:Fi,variables:{id:this.getWorkflowManager().getTransaction().id,details:A,type:"Owner"}})).data?.transactionAddStakeholder?.stakeholders?.find((t=>t.customer?.emailAddress===A.emailAddress));if(t?.customer){this.getWorkflowManager().setTransactionCustomer(t.customer);const A=wt.getMap("transactionCustomerIds")||new Map;A.set(this.getWorkflowManager().getTransaction().id,t.customer.id),wt.setMap("transactionCustomerIds",A)}}attachRenderableSceneListener(A){this.renderableSceneCallbacks.push(A),A(this.renderableScenes)}detachRenderableSceneListener(A){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((t=>t!==A))}async save(A){if(!this.getCommandContext().getState())throw new ot("State undefined!");const t={title:await(async()=>{if(A)return A;const t=this.getWorkflowManager().getTransaction().id,e=(await Ki.getSavedDesigns()).find((A=>A.transactionId===t))?.title;return e||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await Ki.addDesign(t),t}async copy(){const A=TA(this.getCommandContext().getState());if(!A)throw new ot("Internal state is undefined! Cannot copy experience!");const t=JSON.stringify(A.transaction),e=this.getWorkflowManager().getWorkflow(),n=new Ea({}),i=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!i)throw new ot("Integration product id is undefined!");await n.initFromIntegrationProduct(i);return await n.getWorkflowExperience(e.id,t,void 0)}async onDesignFinished(A){return Ti(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),(()=>this.commandContext.getState()),this.workflowManager.getProduct(),this.workflowManager.getTransaction(),this.workflowManager.getWorkflowSelections(),this.workflowManager.getWorkflow().name,A||(()=>{}),(A=>this.updateVariationRecords(A)),this.workflowManager.getVariationRecords(),(A=>this.createPreviewImage(A)),this.workflowManager.getWorkflowMetadata())}stepHasHandle(A){return A.type!==D.SilentIllustration&&A.type!==D.ProductOverlay}getExportedData(){const A=new Map,t=this.getWorkflowManager().getWorkflowMetadata(),e=this.getWorkflowManager().getWorkflowSelections();return Object.keys(t).forEach((e=>{const n=this.workflowManager.getWorkflow().steps.find((A=>A.stepName===e));if(!n)return;A.has(n.stepTitle)||A.set(n.stepTitle,{});const i=t[e];Object.keys(i).forEach((t=>{A.get(n.stepTitle)[t]=i[t]}))})),Object.keys(e)?.forEach((t=>{const n=this.workflowManager.getWorkflow().steps.find((A=>A.stepName===t));n&&(A.has(n.stepTitle)||A.set(n.stepTitle,{}),A.get(n.stepTitle).selection=e[t].selections[0].name)})),A}}const Xi=qA`
|
|
491
|
+
`,Ji=(A,t,e)=>{const n={};return t.steps.forEach((t=>{Object.assign(n,(t=>{const n={};if("Frame"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideImageInCart&&e)return n;n[`${t.stepTitle} image`]=i.image}if("Illustration"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideColorsInCart&&e||!i.colors)return n;if(i.colors.length>0){const A=i.colors.join(", ").toUpperCase();n[`${t.stepTitle} colors`]=A}}if("Module"===t.type){const i=A[t.stepName],a=t.data;if(!i||a.hideTextInCart&&e)return n;n[`${t.stepTitle} text`]=i.text}if("Text"===t.type){const i=A[t.stepName];if(!i)return n;const a=t.data;a.hideTextInCart&&e||(n[`${t.stepTitle} text`]=i.text),!i.color||a.hideColorInCart&&e||(n[`${t.stepTitle} color`]=i.color)}return n})(t))})),n},Li=(A,t,e,n,i,a,o,r,s)=>{const c=(wt.getMap("transactionOwnerIds")||new Map).get(A.id),g={event:"onComplete",lineItemImageUrl:o||"",transactionId:A.id,designProductVariantId:A.externalDesignProductVariantId,designProductId:A.externalDesignProductId,externalCartProductId:A.externalCartProductId,externalCartProductVariantId:A.externalCartProductVariantId,baseCost:e,weight:t.weight,optionsCost:n,exportedData:a,workflowViewerLink:A.workflowViewerLink||"",workflowViewerReadOnlyLink:A.workflowViewerReadOnlyLink||"",transactionOwnerId:c};return i&&(g.metadata=i),r&&(g.selectedVariants=r),s&&(g.sku=s),g},Oi=async(A,t,e,n,i,a,o)=>{const r=A.product?.basePrice||0,s=A.priceModifierTotal||0,c=((A,t,e,n)=>{const i={};let a;if(e){a=Ji(e,t,!1);for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}else if(n){a=n;for(const A of Object.keys(a))i[A]={value:a[A],priceModifier:0}}for(const e of Object.keys(A)){const n=A[e],a=t.steps.find((A=>A.stepTitle===e));if(1===n.length)i[`${a?.stepTitle} selection`]={value:n[0].name,priceModifier:n[0].priceModifier};else if(n.length>1)for(let A=0;A<n.length;A++)i[`${a?.stepTitle} selection ${A+1}`]={value:n[A].name,priceModifier:n[A].priceModifier}}return i})(n,e,void 0,a);return Li(A,t,r,s,a,c,o,n,i)},Ti=async(A,t,e,n,i,a,o,r,s,c,g,l,B)=>{s("workflow.steps.finish.finalize.buildingLayouts"),await A.outstandingRequestsPromise();const w=ft.getShadowGraphqlClient();await w.resetStore();const d=await w.query({query:bn,variables:{id:a.id},errorPolicy:"all"}),E=d.data?.transactions[0].workflowState;!d.errors&&E||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(n())),d.errors&&d.errors.forEach((A=>{d.errors&&console.log("Server Error:",A.message)})),await A.updateStateWithServerImmediate(n),console.log("Server state is undefined @ Workflow completion"));const h=A.getPreviewService(),Q=t?.finalizeStepConfig?.lookAtAnimation,C=h&&100===h.getSceneInitializationProgress()&&t.showModelOnFinishStep&&!!Q,u=B&&Ji(B,t,!0),m=B&&Ji(B,t,!1),D=async A=>{const e={};let n=0;if(Object.keys(o).length>0)for(const i of Object.keys(o)){const a=o[i],r=t.steps.find((A=>A.stepName===i));for(let t=0;t<a.selections.length;++t){const i=a.selections[t];if(r&&(!A||r.option&&(r.option.variants||[]).length>1&&!r.data.hideSelectionInCart&&!r.data.hideSelectionsInCart)){const A=r.stepTitle;e[A]?e[A].push({id:i.id||"",name:i.name,priceModifier:i.priceModifier}):e[A]=[{id:i.id||"",name:i.name,priceModifier:i.priceModifier}]}n+=i.priceModifier}}return[e,n]},[p]=await D(!0),I=Object.fromEntries(Object.keys(p).map((A=>[A,p[A].map((A=>A.id))]))),[f]=await D(!1),y=Object.fromEntries(Object.keys(f).map((A=>[A,f[A].map((A=>A.id))]))),M=await l(C);s("workflow.steps.finish.finalize.creatingDesign"),a.bulk&&await c(g);const F=await(async A=>(await ft.getShadowGraphqlClient().mutate({mutation:bi,errorPolicy:"all",fetchPolicy:"no-cache",variables:{name:A.name,layouts:A.layouts,workflowId:A.workflowId,transactionId:A.transactionId,previewImage:A.previewImage,useThreeDimPreview:A.useThreeDimPreview,metadata:A.metadata,selectedVariants:A.selectedVariants}})).data?.designCreate)((()=>{const A={name:r,layouts:e.map((A=>({index:A.index,panelId:A.panelId}))),workflowId:t.id,transactionId:a.id,useThreeDimPreview:C,previewImage:M};if(m){const t=[];for(const[A,e]of Object.entries(m))t.push({key:A,value:e});A.metadata=t}if(I){const t=[];for(const[A,e]of Object.entries(y))t.push({key:A,ids:e});A.selectedVariants=t}return A})()),Y=F?.transaction?.previewImageLink;s("workflow.steps.finish.finalize.updatingTransaction");const x=(await ft.getShadowGraphqlClient().query({query:kn,variables:{id:a.id}})).data.transactions[0];return a.bulk?((A,t,e)=>{const n=(A.product?.basePrice||0)*(A.variationsCount||0),i=A.priceModifierTotal||0,a={items:{value:A.variationsCount?`${A.variationsCount}`:"0",priceModifier:0}};return Li(A,t,n,i,void 0,a,e)})(x,i,Y):await Oi(x,i,t,p,F?.sku,u,Y)};let zi;var ji;(ji=zi||(zi={})).Local="Local",ji.Remote="Remote";const Ki=new class{constructor(){ki(this,"localPersistenceKey","designTransactions"),ki(this,"storageMethod",zi.Local),ki(this,"designSavedListeners",[])}attachSaveListener(A){this.designSavedListeners.push(A)}detachSaveListener(A){this.designSavedListeners=this.designSavedListeners.filter((t=>t!==A))}async getSavedDesigns(){if(this.storageMethod===zi.Local){const A=wt.get(this.localPersistenceKey);return A?JSON.parse(A):[]}throw new ot("Unexpected storage method requested")}async getSavedDesignByTransaction(A){return(await this.getSavedDesigns()).find((t=>t.transactionId===A))}async addDesign(A){const t=(await this.getSavedDesigns()).filter((t=>t.transactionId!==A.transactionId));t.unshift(A),await this.setDesigns(t),this.designSavedListeners.forEach((t=>t(A)))}async renameDesign(A,t){const e=await this.getSavedDesigns(),n=e.find((t=>t.transactionId===A));if(!n)throw new Error(`No saved design for transaction ${A}.`);n.title=t,await this.setDesigns(e)}async removeDesign(A){const t=await this.getSavedDesigns();await this.setDesigns(t.filter((t=>t.transactionId!==A)))}async setDesigns(A){if(this.storageMethod!==zi.Local)throw new ot("Unexpected storage method requested");wt.set(this.localPersistenceKey,JSON.stringify(A))}};function Vi(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class Wi{constructor(t,e){if(Vi(this,"client",void 0),Vi(this,"commandContext",void 0),Vi(this,"workflowManager",void 0),Vi(this,"isReadOnly",void 0),Vi(this,"renderableScenes",[]),Vi(this,"renderableSceneCallbacks",[]),Vi(this,"debouncedSavedDesignUpdate",WA((async()=>{await Ki.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),Vi(this,"getCanvasObjectURLAsync",(async A=>new Promise(((t,e)=>{try{A.toBlob((A=>{if(A){const e=URL.createObjectURL(A);t(e)}}))}catch(A){e(A)}})))),!e.workflow)throw new Error("No Workflow ID provided.");this.client=t;const n=e.layouts;this.commandContext=new A,this.commandContext.initialize(n,e.reloadedState),this.isReadOnly=e.transaction.isOrdered||!!e.readOnly,this.workflowManager=new Di(e.workflow,e.product.profanities?.map((A=>A.word))||[],n,this.commandContext,(A=>{try{this.debouncedSavedDesignUpdate()}catch{console.error("Failed to update saved design details.")}return e.stateMutationFunc(A)}),e.transaction,e.product,e.previewService,e.renderableContextService,e.reloadedState,e.readOnly),this.workflowManager.addSelectionCallback((A=>{const t=A.traversableScenes.map((A=>{const t=A.renderableSteps.map((A=>A.stepName));return{id:A.name,title:A.title,renderableSteps:t}}));this.renderableScenes=t,this.renderableSceneCallbacks.forEach((A=>A(t)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(A){await ft.getShadowGraphqlClient().mutate({mutation:Gn,variables:{transactionId:this.workflowManager.getTransaction().id,updates:A.map((A=>({recordNumber:A.recordNumber,values:A.values.map((A=>({aspect:A.aspect,stepName:A.stepName,value:A.value})))})))}})}async createPreviewImage(A,t){const e=this.workflowManager.getWorkflow(),n=e?.finalizeStepConfig?.lookAtAnimation;if(A){if(!n)throw new Error("Failed to generate cart preview image!");return await(this.workflowManager.getPreviewService()?.renderSceneScreenshot(512,n))||""}const i=document.createElement("canvas");let a=2048;t&&t<=2048&&(a=t),i.width=a,i.height=a;const o=this.commandContext.getAllLayouts(),r=e.defaultPreviewPanelIndex||0,s=e.panels[r],c=o.find((A=>A.layoutState?.layout.panelId===s?.name))||o[0],g=c.layoutState.layout.previewRegion?{x:c.layoutState.layout.previewRegion.left,y:c.layoutState.layout.previewRegion.top,width:c.layoutState.layout.previewRegion.width,height:c.layoutState.layout.previewRegion.height}:{x:0,y:0,width:c.layoutState.layout.width,height:c.layoutState.layout.height},l=this.commandContext.getLayoutById(c.layoutState.layout.id),B=i.getContext("2d");if(!B)throw new ct("Failed to obtain 2D context for preview image creation");const w=R(l.layoutState.layout,l.layoutState.elements,{renderingConfiguration:{purpose:W.Print,region:{left:g.x,top:g.y,width:g.width,height:g.height}}}),d=jA.renderToStaticMarkup(w),E=await zA.from(B,d,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await E.render();const h=await this.getCanvasObjectURLAsync(i);return i.toDataURL(h)}getStepById(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A));if(t&&this.stepHasHandle(t))return Gi.get(this.getWorkflowManager(),t)}getSteps(){return this.getScenes().flatMap((A=>this.getStepsByScene(A)))}getScenes(){return this.getWorkflowManager().getWorkflow().stepGroups.map((A=>({id:A.id,name:A.name,stepIds:A.stepNames})))}getSelectionPriceSubunits(){const A=this.getWorkflowManager().getWorkflowSelections();let t=0;return Object.values(A).forEach((A=>{t+=A.selections.map((A=>A.priceModifier)).reduce(((A,t)=>A+t))})),t}getBasePriceSubunits(){return this.getWorkflowManager().getProduct().basePrice||0}getTotalPriceSubunits(){return this.getBasePriceSubunits()+this.getSelectionPriceSubunits()}getBulkStep(){if(this.getWorkflowManager().getTransaction().bulk){const A=this.getWorkflowManager().getProduct().bulkConfiguration,t={type:D.Bulk,stepName:"Bulk",stepTitle:A?.stepTitle??"workflow.steps.bulk.title",helpText:A?.helpText,data:{aspects:Jn(this.getWorkflowManager().getWorkflow())},conditions:[]};return Gi.get(this.getWorkflowManager(),t)}}getStepByName(A){const t=this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepTitle===A));if(t&&this.stepHasHandle(t))return Gi.get(this.getWorkflowManager(),t)}getStepsByType(A){return this.getWorkflowManager().getWorkflow().steps.filter((t=>t.type===A)).map((A=>Gi.get(this.getWorkflowManager(),A)))}getStepsByScene(A){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((t=>t.name===A.name)))throw new Error("Given scene is not present on workflow! Be careful when persisting scenes that you only use them with the relevant workflow.");return A.stepIds.map((A=>this.getWorkflowManager().getWorkflow().steps.find((t=>t.stepName===A)))).filter((A=>this.stepHasHandle(A))).map((A=>Gi.get(this.getWorkflowManager(),A)))}async attachCustomerDetails(A){return this.assignCustomerDetails({emailAddress:A.email})}async assignCustomerDetails(A){const t=(await ft.getShadowGraphqlClient().mutate({mutation:Fi,variables:{id:this.getWorkflowManager().getTransaction().id,details:A,type:"Owner"}})).data?.transactionAddStakeholder?.stakeholders?.find((t=>t.customer?.emailAddress===A.emailAddress));if(t?.customer){this.getWorkflowManager().setTransactionCustomer(t.customer);const A=wt.getMap("transactionCustomerIds")||new Map;A.set(this.getWorkflowManager().getTransaction().id,t.customer.id),wt.setMap("transactionCustomerIds",A)}}attachRenderableSceneListener(A){this.renderableSceneCallbacks.push(A),A(this.renderableScenes)}detachRenderableSceneListener(A){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((t=>t!==A))}async save(A){if(!this.getCommandContext().getState())throw new ot("State undefined!");const t={title:await(async()=>{if(A)return A;const t=this.getWorkflowManager().getTransaction().id,e=(await Ki.getSavedDesigns()).find((A=>A.transactionId===t))?.title;return e||"My design"})(),thumbnail:await this.createPreviewImage(!1,256),transactionId:this.getWorkflowManager().getTransaction().id,productId:this.getWorkflowManager().getProduct().id,integrationProductId:this.getWorkflowManager().getTransaction().integrationProduct.id,workflowName:this.getWorkflowManager().getWorkflow().name,workflowId:this.getWorkflowManager().getWorkflow().id,lastEdited:new Date};return await Ki.addDesign(t),t}async copy(){const A=TA(this.getCommandContext().getState());if(!A)throw new ot("Internal state is undefined! Cannot copy experience!");const t=JSON.stringify(A.transaction),e=this.getWorkflowManager().getWorkflow(),n=new Ea({}),i=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!i)throw new ot("Integration product id is undefined!");await n.initFromIntegrationProduct(i);return await n.getWorkflowExperience(e.id,t,void 0)}async onDesignFinished(A){return Ti(this.workflowManager,this.workflowManager.getWorkflow(),this.workflowManager.getLayouts(),(()=>this.commandContext.getState()),this.workflowManager.getProduct(),this.workflowManager.getTransaction(),this.workflowManager.getWorkflowSelections(),this.workflowManager.getWorkflow().name,A||(()=>{}),(A=>this.updateVariationRecords(A)),this.workflowManager.getVariationRecords(),(A=>this.createPreviewImage(A)),this.workflowManager.getWorkflowMetadata())}stepHasHandle(A){return A.type!==D.SilentIllustration&&A.type!==D.ProductOverlay}getExportedData(){const A=new Map,t=this.getWorkflowManager().getWorkflowMetadata(),e=this.getWorkflowManager().getWorkflowSelections();return Object.keys(t).forEach((e=>{const n=this.workflowManager.getWorkflow().steps.find((A=>A.stepName===e));if(!n)return;A.has(n.stepTitle)||A.set(n.stepTitle,{});const i=t[e];Object.keys(i).forEach((t=>{A.get(n.stepTitle)[t]=i[t]}))})),Object.keys(e)?.forEach((t=>{const n=this.workflowManager.getWorkflow().steps.find((A=>A.stepName===t));n&&(A.has(n.stepTitle)||A.set(n.stepTitle,{}),A.get(n.stepTitle).selection=e[t].selections[0].name)})),A}}const Xi=qA`
|
|
492
492
|
query GetBundle($id: String!) {
|
|
493
493
|
bundles(ids: [$id]) {
|
|
494
494
|
id
|
|
@@ -546,7 +546,7 @@ import{CommandContext as A,AssetType as t,BringForwardCommand as e,BringToFrontC
|
|
|
546
546
|
id
|
|
547
547
|
}
|
|
548
548
|
}
|
|
549
|
-
`;function ea(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class na{constructor(A,t){ea(this,"client",void 0),ea(this,"id",void 0),ea(this,"workflowExperiences",[]),this.client=A,this.id=t}getClient(){return this.client}getId(){return this.id}hasGlobalProperties(){throw new Error("Method not implemented.")}getGlobalProperties(){throw new Error("Method not implemented.")}async addWorkflowExperience(A){const t=A.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find((A=>A.getWorkflowManager().getTransaction().id===t)))throw new Error("Unable to add transaction to bundle - Already Exists!");await ft.getShadowGraphqlClient().mutate({mutation:$i,variables:{id:this.id,transactionId:t}}),this.workflowExperiences.push(A)}async removeWorkflowExperience(A){const t=this.workflowExperiences.indexOf(A);if(!(t>-1))throw new Error("Unable to remove workflow experience from bundle - Not Found!");await ft.getShadowGraphqlClient().mutate({mutation:_i,variables:{id:this.id,transactionId:A.getWorkflowManager().getTransaction().id}}),this.workflowExperiences.splice(t,1)}sortWorkflowExperiences(A){this.workflowExperiences=this.workflowExperiences.sort(A)}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(A,t){await ft.getShadowGraphqlClient().mutate({mutation:Aa,variables:{id:this.id,details:A,type:t||ae.Owner}})}async updateStakeholders(A){await ft.getShadowGraphqlClient().mutate({mutation:ta,variables:{id:this.id,input:A}})}async getAllStakeholders(){const A=await ft.getShadowGraphqlClient().query({query:qi,errorPolicy:"all",variables:{id:this.id}});if(!A.data.bundles||0===A.data.bundles.length)throw new Error("Bundle not found!");return A.data.bundles[0].bundleStakeholders||[]}}function ia(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const aa=IA`
|
|
549
|
+
`;function ea(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}class na{constructor(A,t){ea(this,"client",void 0),ea(this,"id",void 0),ea(this,"workflowExperiences",[]),this.client=A,this.id=t}getClient(){return this.client}getId(){return this.id}hasGlobalProperties(){throw new Error("Method not implemented.")}getGlobalProperties(){throw new Error("Method not implemented.")}getTotalSubunits(){return this.workflowExperiences.map((A=>A.getTotalPriceSubunits())).reduce(((A,t)=>A+t),0)}async addWorkflowExperience(A){const t=A.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find((A=>A.getWorkflowManager().getTransaction().id===t)))throw new Error("Unable to add transaction to bundle - Already Exists!");await ft.getShadowGraphqlClient().mutate({mutation:$i,variables:{id:this.id,transactionId:t}}),this.workflowExperiences.push(A)}async removeWorkflowExperience(A){const t=this.workflowExperiences.indexOf(A);if(!(t>-1))throw new Error("Unable to remove workflow experience from bundle - Not Found!");await ft.getShadowGraphqlClient().mutate({mutation:_i,variables:{id:this.id,transactionId:A.getWorkflowManager().getTransaction().id}}),this.workflowExperiences.splice(t,1)}sortWorkflowExperiences(A){this.workflowExperiences=this.workflowExperiences.sort(A)}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(A,t){await ft.getShadowGraphqlClient().mutate({mutation:Aa,variables:{id:this.id,details:A,type:t||ae.Owner}})}async updateStakeholders(A){await ft.getShadowGraphqlClient().mutate({mutation:ta,variables:{id:this.id,input:A}})}async getAllStakeholders(){const A=await ft.getShadowGraphqlClient().query({query:qi,errorPolicy:"all",variables:{id:this.id}});if(!A.data.bundles||0===A.data.bundles.length)throw new Error("Bundle not found!");return A.data.bundles[0].bundleStakeholders||[]}}function ia(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var n=e.call(A,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(A)}(A,"string");return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}const aa=IA`
|
|
550
550
|
${Mt}
|
|
551
551
|
${Yt}
|
|
552
552
|
${Pt}
|
package/dist/types.d.ts
CHANGED
|
@@ -1771,6 +1771,18 @@ export interface WorkflowExperience {
|
|
|
1771
1771
|
* contains a list of steps. See getStepsByScene to access these.
|
|
1772
1772
|
*/
|
|
1773
1773
|
getScenes(): Scene[];
|
|
1774
|
+
/**
|
|
1775
|
+
* Returns the total cost in subunits for all selections made on the design.
|
|
1776
|
+
*/
|
|
1777
|
+
getSelectionPriceSubunits(): number;
|
|
1778
|
+
/**
|
|
1779
|
+
* Returns the total cost in subunits for the base product.
|
|
1780
|
+
*/
|
|
1781
|
+
getBasePriceSubunits(): number;
|
|
1782
|
+
/**
|
|
1783
|
+
* A convenience function returning the sum of the selection and base price values.
|
|
1784
|
+
*/
|
|
1785
|
+
getTotalPriceSubunits(): number;
|
|
1774
1786
|
/**
|
|
1775
1787
|
* Attach specific details about the customer to the experience. This is useful for things like retargeting. Currently only
|
|
1776
1788
|
* email is supported. From SpiffCommerce hosted experiences these details will be attached whenever the customer has provided & given permission.
|
|
@@ -1848,6 +1860,10 @@ interface _Bundle1 {
|
|
|
1848
1860
|
* via this method will make selections on all bundles that share the property.
|
|
1849
1861
|
*/
|
|
1850
1862
|
getGlobalProperties(): any;
|
|
1863
|
+
/**
|
|
1864
|
+
* Return the total in subunits for this bundle. This is the sum of the total for all individual transactions.
|
|
1865
|
+
*/
|
|
1866
|
+
getTotalSubunits(): number;
|
|
1851
1867
|
/**
|
|
1852
1868
|
* Add another workflow experience to this bundle.
|
|
1853
1869
|
* @param experience The workflow experience to add to this bundle.
|