@spiffcommerce/core 12.8.0 → 12.9.1
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 +25 -19
- package/dist/module.js +20 -14
- package/dist/types.d.ts +4 -2
- package/package.json +1 -1
package/dist/module.js
CHANGED
|
@@ -459,7 +459,7 @@ import{CommandContext as t,AssetType as A,BringForwardCommand as e,BringToFrontC
|
|
|
459
459
|
id
|
|
460
460
|
}
|
|
461
461
|
}
|
|
462
|
-
`;class xi extends Mi{constructor(t,A){super(t,A),Fi(this,"transaction",this.manager.getTransaction())}selectVariant(){throw new Error("Bulk step does not support variants.")}async setDesignName(t){await yA.getShadowGraphqlClient().mutate({mutation:Si,variables:{transactionId:this.manager.getTransaction().id,designName:t}});const A=this.manager.getTransaction();this.manager.setTransaction({...A,designName:t})}addVariationRecord(){const t=this.manager.addVariationRecord({transactionId:this.transaction.id,values:[]});return this.manager.setCurrentVariationRecord(t),t}updateBulkIsConnected(t){this.manager.updateStorage(this.getId(),{bulkIsConnected:t})}openBulkSourceUrl(){window.open(this.transaction.bulkSourceUrl,"_blank")}async sendGoogleSheetLinkToEmail(t){await yA.getShadowGraphqlClient().mutate({mutation:Yi,variables:{id:this.transaction.id,details:{emailAddress:t},type:"Owner"}}),this.openBulkSourceUrl()}deleteVariationRecord(t){this.manager.removeVariationRecord(t)}getAspects(){return this.step.data.aspects}}class vi extends Mi{constructor(t,A){super(t,A)}async selectVariant(t){if(this.getCurrentVariant()!==t)return oi.selectVariant(this.step,t.getResource(),this.manager.getRegionElements(this.step.stepName)||[],(t=>this.setUpdateState(t)),this.manager)}getColors(){const t=this.manager.getRegionElements(this.step.stepName)||[];if(0!==t.length)try{return y(t[0].id,this.manager.getAllLayoutData()).colors}catch(t){console.error(t)}}setColor(t,A){const e=new Map;return e.set(t,A),oi.changeColors(this.step,this.manager.getRegionElements(this.step.stepName),this.manager,(()=>this.manager.getCommandContext().getAllLayouts()),e)}async getColorOption(){return this.step.data.colorOption}getAvailableColors(){return this.step.data.colorPickerEnabled?oi.availableColors(this.step,this.manager):Promise.resolve([])}hasVaryingSelection(){return this.step.data.varySelection}hasVaryingColors(){return this.step.data.varyColors}isColorPickerEnabled(){return this.step.data.colorPickerEnabled}}class Ni extends Mi{constructor(t,A){super(t,A)}selectVariant(t){return ri.selectVariant(this.step,t.getResource(),this.manager,(t=>this.setUpdateState(t)))}}class Ri extends Mi{constructor(t,A){super(t,A)}selectVariant(t){return si.selectVariant(this.step,t.getResource(),this.manager,(t=>this.setUpdateState(t)))}}class Pi extends Mi{constructor(t,A){super(t,A)}selectVariant(t){return gi.selectVariant(this.step,t.getResource(),this.manager,(t=>this.setUpdateState(t)))}}class Hi extends Mi{constructor(t,A){super(t,A)}async selectVariant(t){if(!t.getId())throw new Error("Unable to select variant with a null ID");await li.selectVariant(this.step,t.getId(),this.manager)}getDisplayType(){return this.step.option?.displayType}}class Ui extends Mi{constructor(t,A){super(t,A)}selectVariant(t){return Promise.resolve()}setColor(t){return Bi.selectVariant(this.step,t,this.manager.getRegionElements(this.step.stepName)||[],this.manager)}getColors(){return Bi.availableColours(this.step)}}class Gi extends Mi{constructor(t,A){super(t,A)}async selectVariant(t){Ci.selectVariant(this.step,t.getResource(),this.manager,(t=>{if(t)this.manager.setInformationResults([...this.manager.getInformationResults(),{message:"An issue has occured with test",messageType:ui.Error,stepID:this.step.stepName}]);else{const t=this.manager.getInformationResults().filter((t=>t.stepID!==this.step.stepName));this.manager.setInformationResults(t)}}),(t=>{}))}getAvailableFillColors(){return this.step.data.colorPickerEnabled?Ci.availableFillColors(this.step):[]}async setFillColor(t){const A=this.manager.getRegionElements(this.step.stepName);await Ci.changeFillColor(this.step,t,A,this.manager)}getFillColor(){return this.manager.getStepStorage(this.step.stepName)?.color||"#000000"}getAvailableFillImages(){return Ci.availableFillImages(this.step)}async setFillImage(t){const A=this.manager.getRegionElements(this.step.stepName);await Ci.changeFillImage(this.step,t,A,this.manager)}getFillImage(){return this.manager.getStepStorage(this.step.stepName)?.fillImage}setFullTextCustomization(t){const A=this.manager.getStepStorage(this.step.stepName)?.inputText||"",e=void 0!==this.step.data.replaceableText?this.step.data.replaceableText.replace("{{}}",A):A,n=t?e:this.step.data.defaultText;this.manager.updateStorage(this.step.stepName,{customiseAllText:t,text:n,defaultCleared:!1});return this.setText(n)}setText(t){const A={input:t},e=Ci.findLayoutElements(this.manager,this.step),n=Ci.filterUnsupportedCharacters(t,e[0]?.fontData);!!this.step.data&&!!this.step.data.maxLength&&n.length>this.step.data.maxLength||(A.input=n);const i=e.length<=0,a=i?{inputText:n,text:n}:{inputText:n};if(this.manager.updateStorage(this.step.stepName,a),this.manager.updateMetadata(this.step.stepName,{text:n}),i)return A;const{command:o,errors:r,helperText:s}=Ci.updateInputText(n,e,this.step,this.manager);o&&this.manager.getCommandDispatcher()(o);const c=this.manager.getInformationResults(),g=r[0]?.localizationKey;if(g)this.manager.setInformationResults([...c,{message:`${g} - ${this.step.stepTitle}`,messageType:ui.Error,stepID:this.step.stepName}]);else{const t=c.filter((t=>t.stepID!==this.step.stepName));this.manager.setInformationResults(t)}return A.helperText=g||s,A.errorText=g,A}getText(){const t=this.step.data.defaultText;return this.manager.getStepStorage(this.step.stepName)?.text||t||""}isReplaceable(){return this.step.data.userCanReplaceText}clearDefaultTextIfNecessary(){if(!this.manager.getStepStorage(this.step.stepName)?.defaultCleared&&this.step.data.deleteDefaultOnFocus){const t=this.setText("");return this.manager.updateStorage(this.step.stepName,{defaultCleared:!0,inputText:""}),t}}hasVaryingText(){return this.step.data.varyText}hasVaryingColor(){return this.step.data.varyColor}hasVaryingSelection(){return this.step.data.varySelection}hasColorPicker(){return this.step.data.colorPickerEnabled}getRegions(){return this.step.data.regions}getCharacterLimit(){return this.step.data.maxLength}getCharactersRemaining(){const t=this.step.data.maxLength;if(void 0===t)return;return t-this.getText().length}}class ki{static get(t,A){switch(A.type){case m.Question:return new Hi(t,A);case m.Text:return new Gi(t,A);case m.Illustration:return new vi(t,A);case m.Picture:return new Pi(t,A);case m.Shape:return new Ui(t,A);case m.Material:return new Ni(t,A);case m.Model:return new Ri(t,A);case m.Frame:return new
|
|
462
|
+
`;class xi extends Mi{constructor(t,A){super(t,A),Fi(this,"transaction",this.manager.getTransaction())}selectVariant(){throw new Error("Bulk step does not support variants.")}async setDesignName(t){await yA.getShadowGraphqlClient().mutate({mutation:Si,variables:{transactionId:this.manager.getTransaction().id,designName:t}});const A=this.manager.getTransaction();this.manager.setTransaction({...A,designName:t})}addVariationRecord(){const t=this.manager.addVariationRecord({transactionId:this.transaction.id,values:[]});return this.manager.setCurrentVariationRecord(t),t}updateBulkIsConnected(t){this.manager.updateStorage(this.getId(),{bulkIsConnected:t})}openBulkSourceUrl(){window.open(this.transaction.bulkSourceUrl,"_blank")}async sendGoogleSheetLinkToEmail(t){await yA.getShadowGraphqlClient().mutate({mutation:Yi,variables:{id:this.transaction.id,details:{emailAddress:t},type:"Owner"}}),this.openBulkSourceUrl()}deleteVariationRecord(t){this.manager.removeVariationRecord(t)}getAspects(){return this.step.data.aspects}}class vi extends Mi{constructor(t,A){super(t,A)}async selectVariant(t){if(this.getCurrentVariant()!==t)return oi.selectVariant(this.step,t.getResource(),this.manager.getRegionElements(this.step.stepName)||[],(t=>this.setUpdateState(t)),this.manager)}getColors(){const t=this.manager.getRegionElements(this.step.stepName)||[];if(0!==t.length)try{return y(t[0].id,this.manager.getAllLayoutData()).colors}catch(t){console.error(t)}}setColor(t,A){const e=new Map;return e.set(t,A),oi.changeColors(this.step,this.manager.getRegionElements(this.step.stepName),this.manager,(()=>this.manager.getCommandContext().getAllLayouts()),e)}async getColorOption(){return this.step.data.colorOption}getAvailableColors(){return this.step.data.colorPickerEnabled?oi.availableColors(this.step,this.manager):Promise.resolve([])}hasVaryingSelection(){return this.step.data.varySelection}hasVaryingColors(){return this.step.data.varyColors}isColorPickerEnabled(){return this.step.data.colorPickerEnabled}}class Ni extends Mi{constructor(t,A){super(t,A)}selectVariant(t){return ri.selectVariant(this.step,t.getResource(),this.manager,(t=>this.setUpdateState(t)))}}class Ri extends Mi{constructor(t,A){super(t,A)}selectVariant(t){return si.selectVariant(this.step,t.getResource(),this.manager,(t=>this.setUpdateState(t)))}}class Pi extends Mi{constructor(t,A){super(t,A)}selectVariant(t){return gi.selectVariant(this.step,t.getResource(),this.manager,(t=>this.setUpdateState(t)))}}class Hi extends Mi{constructor(t,A){super(t,A)}async selectVariant(t){if(!t.getId())throw new Error("Unable to select variant with a null ID");await li.selectVariant(this.step,t.getId(),this.manager)}getDisplayType(){return this.step.option?.displayType}}class Ui extends Mi{constructor(t,A){super(t,A)}selectVariant(t){return Promise.resolve()}setColor(t){return Bi.selectVariant(this.step,t,this.manager.getRegionElements(this.step.stepName)||[],this.manager)}getColors(){return Bi.availableColours(this.step)}}class Gi extends Mi{constructor(t,A){super(t,A)}async selectVariant(t){Ci.selectVariant(this.step,t.getResource(),this.manager,(t=>{if(t)this.manager.setInformationResults([...this.manager.getInformationResults(),{message:"An issue has occured with test",messageType:ui.Error,stepID:this.step.stepName}]);else{const t=this.manager.getInformationResults().filter((t=>t.stepID!==this.step.stepName));this.manager.setInformationResults(t)}}),(t=>{}))}getAvailableFillColors(){return this.step.data.colorPickerEnabled?Ci.availableFillColors(this.step):[]}async setFillColor(t){const A=this.manager.getRegionElements(this.step.stepName);await Ci.changeFillColor(this.step,t,A,this.manager)}getFillColor(){return this.manager.getStepStorage(this.step.stepName)?.color||"#000000"}getAvailableFillImages(){return Ci.availableFillImages(this.step)}async setFillImage(t){const A=this.manager.getRegionElements(this.step.stepName);await Ci.changeFillImage(this.step,t,A,this.manager)}getFillImage(){return this.manager.getStepStorage(this.step.stepName)?.fillImage}setFullTextCustomization(t){const A=this.manager.getStepStorage(this.step.stepName)?.inputText||"",e=void 0!==this.step.data.replaceableText?this.step.data.replaceableText.replace("{{}}",A):A,n=t?e:this.step.data.defaultText;this.manager.updateStorage(this.step.stepName,{customiseAllText:t,text:n,defaultCleared:!1});return this.setText(n)}setText(t){const A={input:t},e=Ci.findLayoutElements(this.manager,this.step),n=Ci.filterUnsupportedCharacters(t,e[0]?.fontData);!!this.step.data&&!!this.step.data.maxLength&&n.length>this.step.data.maxLength||(A.input=n);const i=e.length<=0,a=i?{inputText:n,text:n}:{inputText:n};if(this.manager.updateStorage(this.step.stepName,a),this.manager.updateMetadata(this.step.stepName,{text:n}),i)return A;const{command:o,errors:r,helperText:s}=Ci.updateInputText(n,e,this.step,this.manager);o&&this.manager.getCommandDispatcher()(o);const c=this.manager.getInformationResults(),g=r[0]?.localizationKey;if(g)this.manager.setInformationResults([...c,{message:`${g} - ${this.step.stepTitle}`,messageType:ui.Error,stepID:this.step.stepName}]);else{const t=c.filter((t=>t.stepID!==this.step.stepName));this.manager.setInformationResults(t)}return A.helperText=g||s,A.errorText=g,A}getText(){const t=this.step.data.defaultText;return this.manager.getStepStorage(this.step.stepName)?.text||t||""}isReplaceable(){return this.step.data.userCanReplaceText}clearDefaultTextIfNecessary(){if(!this.manager.getStepStorage(this.step.stepName)?.defaultCleared&&this.step.data.deleteDefaultOnFocus){const t=this.setText("");return this.manager.updateStorage(this.step.stepName,{defaultCleared:!0,inputText:""}),t}}hasVaryingText(){return this.step.data.varyText}hasVaryingColor(){return this.step.data.varyColor}hasVaryingSelection(){return this.step.data.varySelection}hasColorPicker(){return this.step.data.colorPickerEnabled}getRegions(){return this.step.data.regions}getCharacterLimit(){return this.step.data.maxLength}getCharactersRemaining(){const t=this.step.data.maxLength;if(void 0===t)return;return t-this.getText().length}}class ki{static get(t,A){switch(A.type){case m.Question:return new Hi(t,A);case m.Text:return new Gi(t,A);case m.Illustration:return new vi(t,A);case m.Picture:return new Pi(t,A);case m.Shape:return new Ui(t,A);case m.Material:return new Ni(t,A);case m.Model:return new Ri(t,A);case m.Frame:return new Ha(t,A);case m.Bulk:return new xi(t,A);default:throw new rA(`Step type ${A.type} not yet supported in Core SDK`)}}}function bi(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}const Ji=ft`
|
|
463
463
|
mutation CreateDesign(
|
|
464
464
|
$name: String!
|
|
465
465
|
$layouts: [LayoutInput]!
|
|
@@ -491,7 +491,7 @@ import{CommandContext as t,AssetType as A,BringForwardCommand as e,BringToFrontC
|
|
|
491
491
|
}
|
|
492
492
|
}
|
|
493
493
|
}
|
|
494
|
-
`,Li=(t,A,e)=>{const n={};return A.steps.forEach((A=>{Object.assign(n,(A=>{const n={};if("Frame"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideImageInCart&&e)return n;n[`${A.stepTitle} image`]=i.image}if("Illustration"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideColorsInCart&&e||!i.colors)return n;if(i.colors.length>0){const t=i.colors.join(", ").toUpperCase();n[`${A.stepTitle} colors`]=t}}if("Module"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideTextInCart&&e)return n;n[`${A.stepTitle} text`]=i.text}if("Text"===A.type){const i=t[A.stepName];if(!i)return n;const a=A.data;a.hideTextInCart&&e||(n[`${A.stepTitle} text`]=i.text),!i.color||a.hideColorInCart&&e||(n[`${A.stepTitle} color`]=i.color)}return n})(A))})),n},Oi=(t,A,e,n,i,a,o,r,s,c)=>{const g=(dA.getMap("transactionOwnerIds")||new Map).get(t.id),l={baseCost:e,designProductId:t.externalDesignProductId,designProductVariantId:t.externalDesignProductVariantId,event:"onComplete",exportedData:a,externalCartProductId:t.externalCartProductId,externalCartProductVariantId:t.externalCartProductVariantId,lineItemImageUrl:o||"",optionsCost:n,processExecutionId:c,transactionId:t.id,transactionOwnerId:g,weight:A.weight,workflowViewerLink:t.workflowViewerLink||"",workflowViewerReadOnlyLink:t.workflowViewerReadOnlyLink||""};return i&&(l.metadata=i),r&&(l.selectedVariants=r),s&&(l.sku=s),l},Ti=async(t,A,e,n,i,a,o,r)=>{const s=t.product?.basePrice||0,c=t.priceModifierTotal||0,g=((t,A,e,n)=>{const i={};let a;if(e){a=Li(e,A,!1);for(const t of Object.keys(a))i[t]={value:a[t],priceModifier:0}}else if(n){a=n;for(const t of Object.keys(a))i[t]={value:a[t],priceModifier:0}}for(const e of Object.keys(t)){const n=t[e],a=A.steps.find((t=>t.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 t=0;t<n.length;t++)i[`${a?.stepTitle} selection ${t+1}`]={value:n[t].name,priceModifier:n[t].priceModifier}}return i})(n,e,void 0,a);return Oi(t,A,s,c,a,g,o,n,i,r)},zi=async(t,A,e,n,i,a,o,r,s,c,g,l,B)=>{s("workflow.steps.finish.finalize.buildingLayouts"),await t.outstandingRequestsPromise();const w=yA.getShadowGraphqlClient(),d=await w.query({query:Jn,variables:{id:a.id},fetchPolicy:"no-cache",errorPolicy:"all"}),h=d.data?.transactions[0].workflowState;!d.errors&&h||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(n())),d.errors&&d.errors.forEach((t=>{d.errors&&console.log("Server Error:",t.message)})),await t.updateStateWithServerImmediate(n),console.log("Server state is undefined @ Workflow completion"));const E=t.getPreviewService(),C=A?.finalizeStepConfig?.lookAtAnimation,Q=E&&100===E.getSceneInitializationProgress()&&A.showModelOnFinishStep&&!!C,u=B&&Li(B,A,!0),p=B&&Li(B,A,!1),m=async t=>{const e={};let n=0;if(Object.keys(o).length>0)for(const i of Object.keys(o)){const a=o[i],r=A.steps.find((t=>t.stepName===i));for(let A=0;A<a.selections.length;++A){const i=a.selections[A];if(r&&(!t||r.option&&(r.option.variants||[]).length>1&&!r.data.hideSelectionInCart&&!r.data.hideSelectionsInCart)){const t=r.stepTitle;e[t]?e[t].push({id:i.id||"",name:i.name,priceModifier:i.priceModifier}):e[t]=[{id:i.id||"",name:i.name,priceModifier:i.priceModifier}]}n+=i.priceModifier}}return[e,n]},[D]=await m(!0),I=Object.fromEntries(Object.keys(D).map((t=>[t,D[t].map((t=>t.id))]))),[f]=await m(!1),y=Object.fromEntries(Object.keys(f).map((t=>[t,f[t].map((t=>t.id))]))),M=await l(Q);s("workflow.steps.finish.finalize.creatingDesign"),a.bulk&&await c(g);const F=await(async t=>(await yA.getShadowGraphqlClient().mutate({mutation:Ji,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:r,layouts:e.map((t=>({index:t.index,panelId:t.panelId}))),workflowId:A.id,transactionId:a.id,useThreeDimPreview:!!Q,previewImage:M};if(p){const A=[];for(const[t,e]of Object.entries(p))A.push({key:t,value:e});t.metadata=A}if(I){const A=[];for(const[t,e]of Object.entries(y))A.push({key:t,ids:e});t.selectedVariants=A}return t})()),Y=F?.transaction?.previewImageLink;s("workflow.steps.finish.finalize.updatingTransaction");const S=(await yA.getShadowGraphqlClient().query({query:bn,variables:{id:a.id}})).data.transactions[0];return a.bulk?((t,A,e,n)=>{const i=(t.product?.basePrice||0)*(t.variationsCount||0),a=t.priceModifierTotal||0,o={items:{value:t.variationsCount?`${t.variationsCount}`:"0",priceModifier:0}};return Oi(t,A,i,a,void 0,o,e,void 0,void 0,n)})(S,i,Y,F?.processExecution?.id):await Ti(S,i,A,D,F?.sku,u,Y,F?.processExecution?.id)};let ji;var Ki;(Ki=ji||(ji={})).Local="Local",Ki.Remote="Remote";const Vi=new class{constructor(){bi(this,"localPersistenceKey","designTransactions"),bi(this,"storageMethod",ji.Local),bi(this,"designSavedListeners",[])}attachSaveListener(t){this.designSavedListeners.push(t)}detachSaveListener(t){this.designSavedListeners=this.designSavedListeners.filter((A=>A!==t))}async getSavedDesigns(){if(this.storageMethod===ji.Local){const t=dA.get(this.localPersistenceKey);return t?JSON.parse(t):[]}throw new rA("Unexpected storage method requested")}async getSavedDesignByTransaction(t){return(await this.getSavedDesigns()).find((A=>A.transactionId===t))}async addDesign(t){const A=(await this.getSavedDesigns()).filter((A=>A.transactionId!==t.transactionId));A.unshift(t),await this.setDesigns(A),this.designSavedListeners.forEach((A=>A(t)))}async renameDesign(t,A){const e=await this.getSavedDesigns(),n=e.find((A=>A.transactionId===t));if(!n)throw new Error(`No saved design for transaction ${t}.`);n.title=A,await this.setDesigns(e)}async removeDesign(t){const A=await this.getSavedDesigns();await this.setDesigns(A.filter((A=>A.transactionId!==t)))}async setDesigns(t){if(this.storageMethod!==ji.Local)throw new rA("Unexpected storage method requested");dA.set(this.localPersistenceKey,JSON.stringify(t))}};function Wi(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class Xi{constructor(A,e){if(Wi(this,"client",void 0),Wi(this,"commandContext",void 0),Wi(this,"workflowManager",void 0),Wi(this,"isReadOnly",void 0),Wi(this,"renderableScenes",[]),Wi(this,"renderableSceneCallbacks",[]),Wi(this,"debouncedSavedDesignUpdate",Xt((async()=>{await Vi.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),Wi(this,"getCanvasObjectURLAsync",(async t=>new Promise(((A,e)=>{try{t.toBlob((t=>{if(t){const e=URL.createObjectURL(t);A(e)}}))}catch(t){e(t)}})))),!e.workflow)throw new Error("No Workflow ID provided.");this.client=A;const n=e.layouts;this.commandContext=new t,this.commandContext.initialize(n,e.reloadedState),this.isReadOnly=e.transaction.isOrdered||!!e.readOnly,this.workflowManager=new Di(e.workflow,e.product.profanities?.map((t=>t.word))||[],n,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,e.modelContainer),this.workflowManager.addSelectionCallback((t=>{const A=t.traversableScenes.map((t=>{const A=t.renderableSteps.map((t=>t.stepName));return{id:t.name,title:t.title,renderableSteps:A}}));this.renderableScenes=A,this.renderableSceneCallbacks.forEach((t=>t(A)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(t){await yA.getShadowGraphqlClient().mutate({mutation:kn,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,A){const e=this.workflowManager.getWorkflow(),n=e?.finalizeStepConfig?.lookAtAnimation;if(t){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;A&&A<=2048&&(a=A),i.width=a,i.height=a;const o=this.commandContext.getAllLayouts(),r=e.defaultPreviewPanelIndex||0,s=e.panels[r],c=o.find((t=>t.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 gA("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=Kt.renderToStaticMarkup(w),h=await jt.from(B,d,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await h.render();const E=await this.getCanvasObjectURLAsync(i);return i.toDataURL(E)}getStepById(t){const A=this.getWorkflowManager().getWorkflow().steps.find((A=>A.stepName===t));if(A&&this.stepHasHandle(A))return ki.get(this.getWorkflowManager(),A)}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 A=0;return Object.values(t).forEach((t=>{A+=t.selections.map((t=>t.priceModifier)).reduce(((t,A)=>t+A))})),A}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,A={type:m.Bulk,stepName:"Bulk",stepTitle:t?.stepTitle??"workflow.steps.bulk.title",helpText:t?.helpText,data:{aspects:Ln(this.getWorkflowManager().getWorkflow())},conditions:[]};return ki.get(this.getWorkflowManager(),A)}}getStepByName(t){const A=this.getWorkflowManager().getWorkflow().steps.find((A=>A.stepTitle===t));if(A&&this.stepHasHandle(A))return ki.get(this.getWorkflowManager(),A)}getStepsByType(t){return this.getWorkflowManager().getWorkflow().steps.filter((A=>A.type===t)).map((t=>ki.get(this.getWorkflowManager(),t)))}getStepsByScene(t){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((A=>A.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((A=>A.stepName===t)))).filter((t=>this.stepHasHandle(t))).map((t=>ki.get(this.getWorkflowManager(),t)))}async attachCustomerDetails(t){return this.assignCustomerDetails({emailAddress:t.email})}async assignCustomerDetails(t){const A=(await yA.getShadowGraphqlClient().mutate({mutation:Yi,variables:{id:this.getWorkflowManager().getTransaction().id,details:t,type:"Owner"}})).data?.transactionAddStakeholder?.stakeholders?.find((A=>A.customer?.emailAddress===t.emailAddress));if(A?.customer){this.getWorkflowManager().setTransactionCustomer(A.customer);const t=dA.getMap("transactionCustomerIds")||new Map;t.set(this.getWorkflowManager().getTransaction().id,A.customer.id),dA.setMap("transactionCustomerIds",t)}}attachRenderableSceneListener(t){this.renderableSceneCallbacks.push(t),t(this.renderableScenes)}detachRenderableSceneListener(t){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((A=>A!==t))}async save(t){if(!this.getCommandContext().getState())throw new rA("State undefined!");const A={title:await(async()=>{if(t)return t;const A=this.getWorkflowManager().getTransaction().id,e=(await Vi.getSavedDesigns()).find((t=>t.transactionId===A))?.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 Vi.addDesign(A),A}async copy(){const t=zt(this.getCommandContext().getState());if(!t)throw new rA("Internal state is undefined! Cannot copy experience!");const A=JSON.stringify(t.transaction),e=this.getWorkflowManager().getWorkflow(),n=new Ya({}),i=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!i)throw new rA("Integration product id is undefined!");await n.initFromIntegrationProduct(i);return await n.getWorkflowExperience(e.id,A,void 0)}async onDesignFinished(t){return zi(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!==m.SilentIllustration&&t.type!==m.ProductOverlay}getExportedData(){const t=new Map,A=this.getWorkflowManager().getWorkflowMetadata(),e=this.getWorkflowManager().getWorkflowSelections();return Object.keys(A).forEach((e=>{const n=this.workflowManager.getWorkflow().steps.find((t=>t.stepName===e));if(!n)return;t.has(n.stepTitle)||t.set(n.stepTitle,{});const i=A[e];Object.keys(i).forEach((A=>{t.get(n.stepTitle)[A]=i[A]}))})),Object.keys(e)?.forEach((A=>{const n=this.workflowManager.getWorkflow().steps.find((t=>t.stepName===A));n&&(t.has(n.stepTitle)||t.set(n.stepTitle,{}),t.get(n.stepTitle).selection=e[A].selections[0].name)})),t}}const qi=Zt`
|
|
494
|
+
`,Li=(t,A,e)=>{const n={};return A.steps.forEach((A=>{Object.assign(n,(A=>{const n={};if("Frame"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideImageInCart&&e)return n;n[`${A.stepTitle} image`]=i.image}if("Illustration"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideColorsInCart&&e||!i.colors)return n;if(i.colors.length>0){const t=i.colors.join(", ").toUpperCase();n[`${A.stepTitle} colors`]=t}}if("Module"===A.type){const i=t[A.stepName],a=A.data;if(!i||a.hideTextInCart&&e)return n;n[`${A.stepTitle} text`]=i.text}if("Text"===A.type){const i=t[A.stepName];if(!i)return n;const a=A.data;a.hideTextInCart&&e||(n[`${A.stepTitle} text`]=i.text),!i.color||a.hideColorInCart&&e||(n[`${A.stepTitle} color`]=i.color)}return n})(A))})),n},Oi=(t,A,e,n,i,a,o,r,s,c)=>{const g=(dA.getMap("transactionOwnerIds")||new Map).get(t.id),l={baseCost:e,designProductId:t.externalDesignProductId,designProductVariantId:t.externalDesignProductVariantId,event:"onComplete",exportedData:a,externalCartProductId:t.externalCartProductId,externalCartProductVariantId:t.externalCartProductVariantId,lineItemImageUrl:o||"",optionsCost:n,processExecutionId:c,transactionId:t.id,transactionOwnerId:g,weight:A.weight,workflowViewerLink:t.workflowViewerLink||"",workflowViewerReadOnlyLink:t.workflowViewerReadOnlyLink||""};return i&&(l.metadata=i),r&&(l.selectedVariants=r),s&&(l.sku=s),l},Ti=async(t,A,e,n,i,a,o,r)=>{const s=t.product?.basePrice||0,c=t.priceModifierTotal||0,g=((t,A,e,n)=>{const i={};let a;if(e){a=Li(e,A,!1);for(const t of Object.keys(a))i[t]={value:a[t],priceModifier:0}}else if(n){a=n;for(const t of Object.keys(a))i[t]={value:a[t],priceModifier:0}}for(const e of Object.keys(t)){const n=t[e],a=A.steps.find((t=>t.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 t=0;t<n.length;t++)i[`${a?.stepTitle} selection ${t+1}`]={value:n[t].name,priceModifier:n[t].priceModifier}}return i})(n,e,void 0,a);return Oi(t,A,s,c,a,g,o,n,i,r)},zi=async(t,A,e,n,i,a,o,r,s,c,g,l,B)=>{s("workflow.steps.finish.finalize.buildingLayouts"),await t.outstandingRequestsPromise();const w=yA.getShadowGraphqlClient(),d=await w.query({query:Jn,variables:{id:a.id},fetchPolicy:"no-cache",errorPolicy:"all"}),h=d.data?.transactions[0].workflowState;!d.errors&&h||(console.warn("State mismatch detected. Uploading known state explicitly"),console.warn("State Object:",JSON.stringify(n())),d.errors&&d.errors.forEach((t=>{d.errors&&console.log("Server Error:",t.message)})),await t.updateStateWithServerImmediate(n),console.log("Server state is undefined @ Workflow completion"));const E=t.getPreviewService(),C=A?.finalizeStepConfig?.lookAtAnimation,Q=E&&100===E.getSceneInitializationProgress()&&A.showModelOnFinishStep&&!!C,u=B&&Li(B,A,!0),p=B&&Li(B,A,!1),m=async t=>{const e={};let n=0;if(Object.keys(o).length>0)for(const i of Object.keys(o)){const a=o[i],r=A.steps.find((t=>t.stepName===i));for(let A=0;A<a.selections.length;++A){const i=a.selections[A];if(r&&(!t||r.option&&(r.option.variants||[]).length>1&&!r.data.hideSelectionInCart&&!r.data.hideSelectionsInCart)){const t=r.stepTitle;e[t]?e[t].push({id:i.id||"",name:i.name,priceModifier:i.priceModifier}):e[t]=[{id:i.id||"",name:i.name,priceModifier:i.priceModifier}]}n+=i.priceModifier}}return[e,n]},[D]=await m(!0),I=Object.fromEntries(Object.keys(D).map((t=>[t,D[t].map((t=>t.id))]))),[f]=await m(!1),y=Object.fromEntries(Object.keys(f).map((t=>[t,f[t].map((t=>t.id))]))),M=await l(Q);s("workflow.steps.finish.finalize.creatingDesign"),a.bulk&&await c(g);const F=await(async t=>(await yA.getShadowGraphqlClient().mutate({mutation:Ji,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:r,layouts:e.map((t=>({index:t.index,panelId:t.panelId}))),workflowId:A.id,transactionId:a.id,useThreeDimPreview:!!Q,previewImage:M};if(p){const A=[];for(const[t,e]of Object.entries(p))A.push({key:t,value:e});t.metadata=A}if(I){const A=[];for(const[t,e]of Object.entries(y))A.push({key:t,ids:e});t.selectedVariants=A}return t})()),Y=F?.transaction?.previewImageLink;s("workflow.steps.finish.finalize.updatingTransaction");const S=(await yA.getShadowGraphqlClient().query({query:bn,variables:{id:a.id}})).data.transactions[0];return a.bulk?((t,A,e,n)=>{const i=(t.product?.basePrice||0)*(t.variationsCount||0),a=t.priceModifierTotal||0,o={items:{value:t.variationsCount?`${t.variationsCount}`:"0",priceModifier:0}};return Oi(t,A,i,a,void 0,o,e,void 0,void 0,n)})(S,i,Y,F?.processExecution?.id):await Ti(S,i,A,D,F?.sku,u,Y,F?.processExecution?.id)};let ji;var Ki;(Ki=ji||(ji={})).Local="Local",Ki.Remote="Remote";const Vi=new class{constructor(){bi(this,"localPersistenceKey","designTransactions"),bi(this,"storageMethod",ji.Local),bi(this,"designSavedListeners",[])}attachSaveListener(t){this.designSavedListeners.push(t)}detachSaveListener(t){this.designSavedListeners=this.designSavedListeners.filter((A=>A!==t))}async getSavedDesigns(){if(this.storageMethod===ji.Local){const t=dA.get(this.localPersistenceKey);return t?JSON.parse(t):[]}throw new rA("Unexpected storage method requested")}async getSavedDesignByTransaction(t){return(await this.getSavedDesigns()).find((A=>A.transactionId===t))}async addDesign(t){const A=(await this.getSavedDesigns()).filter((A=>A.transactionId!==t.transactionId));A.unshift(t),await this.setDesigns(A),this.designSavedListeners.forEach((A=>A(t)))}async renameDesign(t,A){const e=await this.getSavedDesigns(),n=e.find((A=>A.transactionId===t));if(!n)throw new Error(`No saved design for transaction ${t}.`);n.title=A,await this.setDesigns(e)}async removeDesign(t){const A=await this.getSavedDesigns();await this.setDesigns(A.filter((A=>A.transactionId!==t)))}async setDesigns(t){if(this.storageMethod!==ji.Local)throw new rA("Unexpected storage method requested");dA.set(this.localPersistenceKey,JSON.stringify(t))}};function Wi(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class Xi{constructor(A,e){if(Wi(this,"client",void 0),Wi(this,"commandContext",void 0),Wi(this,"workflowManager",void 0),Wi(this,"isReadOnly",void 0),Wi(this,"renderableScenes",[]),Wi(this,"renderableSceneCallbacks",[]),Wi(this,"debouncedSavedDesignUpdate",Xt((async()=>{await Vi.getSavedDesignByTransaction(this.getWorkflowManager().getTransaction().id)&&this.save()}),2500)),Wi(this,"getCanvasObjectURLAsync",(async t=>new Promise(((A,e)=>{try{t.toBlob((t=>{if(t){const e=URL.createObjectURL(t);A(e)}}))}catch(t){e(t)}})))),!e.workflow)throw new Error("No Workflow ID provided.");this.client=A;const n=e.layouts;this.commandContext=new t,this.commandContext.initialize(n,e.reloadedState),this.isReadOnly=e.transaction.isOrdered||!!e.readOnly,this.workflowManager=new Di(e.workflow,e.product.profanities?.map((t=>t.word))||[],n,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,e.modelContainer),this.workflowManager.addSelectionCallback((t=>{const A=t.traversableScenes.map((t=>{const A=t.renderableSteps.map((t=>t.stepName));return{id:t.name,title:t.title,renderableSteps:A}}));this.renderableScenes=A,this.renderableSceneCallbacks.forEach((t=>t(A)))}))}getClient(){return this.client}getIsReadOnly(){return this.isReadOnly}getCommandContext(){return this.commandContext}getWorkflowManager(){return this.workflowManager}async updateVariationRecords(t){await yA.getShadowGraphqlClient().mutate({mutation:kn,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,A){const e=this.workflowManager.getWorkflow(),n=e?.finalizeStepConfig?.lookAtAnimation;if(t){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;A&&A<=2048&&(a=A),i.width=a,i.height=a;const o=this.commandContext.getAllLayouts(),r=e.defaultPreviewPanelIndex||0,s=e.panels[r],c=o.find((t=>t.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 gA("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=Kt.renderToStaticMarkup(w),h=await jt.from(B,d,{anonymousCrossOrigin:!0,ignoreDimensions:!1});await h.render();const E=await this.getCanvasObjectURLAsync(i);return i.toDataURL(E)}getStepById(t){const A=this.getWorkflowManager().getWorkflow().steps.find((A=>A.stepName===t));if(A&&this.stepHasHandle(A))return ki.get(this.getWorkflowManager(),A)}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 A=0;return Object.values(t).forEach((t=>{A+=t.selections.map((t=>t.priceModifier)).reduce(((t,A)=>t+A))})),A}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,A={type:m.Bulk,stepName:"Bulk",stepTitle:t?.stepTitle??"workflow.steps.bulk.title",helpText:t?.helpText,data:{aspects:Ln(this.getWorkflowManager().getWorkflow())},conditions:[]};return ki.get(this.getWorkflowManager(),A)}}getStepByName(t){const A=this.getWorkflowManager().getWorkflow().steps.find((A=>A.stepTitle===t));if(A&&this.stepHasHandle(A))return ki.get(this.getWorkflowManager(),A)}getStepsByType(t){return this.getWorkflowManager().getWorkflow().steps.filter((A=>A.type===t)).map((t=>ki.get(this.getWorkflowManager(),t)))}getStepsByScene(t){if(!this.getWorkflowManager().getWorkflow().stepGroups.find((A=>A.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((A=>A.stepName===t)))).filter((t=>this.stepHasHandle(t))).map((t=>ki.get(this.getWorkflowManager(),t)))}async attachCustomerDetails(t){return this.assignCustomerDetails({emailAddress:t.email})}async assignCustomerDetails(t){const A=(await yA.getShadowGraphqlClient().mutate({mutation:Yi,variables:{id:this.getWorkflowManager().getTransaction().id,details:t,type:"Owner"}})).data?.transactionAddStakeholder?.stakeholders?.find((A=>A.customer?.emailAddress===t.emailAddress));if(A?.customer){this.getWorkflowManager().setTransactionCustomer(A.customer);const t=dA.getMap("transactionCustomerIds")||new Map;t.set(this.getWorkflowManager().getTransaction().id,A.customer.id),dA.setMap("transactionCustomerIds",t)}}attachRenderableSceneListener(t){this.renderableSceneCallbacks.push(t),t(this.renderableScenes)}detachRenderableSceneListener(t){this.renderableSceneCallbacks=this.renderableSceneCallbacks.filter((A=>A!==t))}async save(t){if(!this.getCommandContext().getState())throw new rA("State undefined!");const A={title:await(async()=>{if(t)return t;const A=this.getWorkflowManager().getTransaction().id,e=(await Vi.getSavedDesigns()).find((t=>t.transactionId===A))?.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 Vi.addDesign(A),A}async copy(){const t=zt(this.getCommandContext().getState());if(!t)throw new rA("Internal state is undefined! Cannot copy experience!");const A=JSON.stringify(t.transaction),e=this.getWorkflowManager().getWorkflow(),n=new Sa({}),i=this.getWorkflowManager().getTransaction().integrationProduct?.id;if(!i)throw new rA("Integration product id is undefined!");await n.initFromIntegrationProduct(i);return await n.getWorkflowExperience(e.id,A,void 0)}async onDesignFinished(t){return zi(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!==m.SilentIllustration&&t.type!==m.ProductOverlay}getExportedData(){const t=new Map,A=this.getWorkflowManager().getWorkflowMetadata(),e=this.getWorkflowManager().getWorkflowSelections();return Object.keys(A).forEach((e=>{const n=this.workflowManager.getWorkflow().steps.find((t=>t.stepName===e));if(!n)return;t.has(n.stepTitle)||t.set(n.stepTitle,{});const i=A[e];Object.keys(i).forEach((A=>{t.get(n.stepTitle)[A]=i[A]}))})),Object.keys(e)?.forEach((A=>{const n=this.workflowManager.getWorkflow().steps.find((t=>t.stepName===A));n&&(t.has(n.stepTitle)||t.set(n.stepTitle,{}),t.get(n.stepTitle).selection=e[A].selections[0].name)})),t}}const qi=Zt`
|
|
495
495
|
${Zt`
|
|
496
496
|
fragment ProductCollectionProductFields on Product {
|
|
497
497
|
id
|
|
@@ -625,13 +625,19 @@ import{CommandContext as t,AssetType as A,BringForwardCommand as e,BringToFrontC
|
|
|
625
625
|
}
|
|
626
626
|
}
|
|
627
627
|
}
|
|
628
|
-
|
|
628
|
+
`,oa=Zt`
|
|
629
|
+
mutation BundleUpdateTransactionOrder($id: String!, $transactionIds: [String!]!) {
|
|
630
|
+
bundleUpdateTransactionOrder(id: $id, transactionIds: $transactionIds) {
|
|
631
|
+
id
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
`;function ra(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class sa{constructor(t,A){ra(this,"bundle",void 0),ra(this,"property",void 0),this.bundle=t,this.property=A}getName(){return this.property.name}getDescription(){return this.property.description}getType(){return this.property.type}getSharedSteps(t){return(t??this.bundle.getWorkflowExperiences()).flatMap((t=>t.getSteps().filter((t=>{t.getRaw().globalPropertyConfigurationAspectNames?.includes(this.property.name)}))))}}class ca extends sa{constructor(t,A){super(t,A)}async selectImage(t){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t.key),this.applyImageSelection(t)])}async applyGlobalState(t){const A=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(!A)return Promise.resolve();const e=await HA.getLocalOrFromServer(A);return e?this.applyImageSelection(e,t):Promise.resolve()}async applyImageSelection(t,A){const e=this.getSharedSteps(A).map((A=>A.selectImage(t)));await Promise.all(e)}}class ga extends sa{constructor(t,A,e){super(t,A),ra(this,"optionResource",void 0),this.optionResource=e}getCurrentVariant(){if(!this.optionResource)return;const t=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(!t)return;const A=this.optionResource.variants?.find((A=>A.id===t));return A?new fi(A):void 0}getAvailableVariants(){return(this.optionResource?.variants?.filter((t=>t.enabled))||[]).map((t=>new fi(t)))}getAllVariants(){return(this.optionResource?.variants||[]).map((t=>new fi(t)))}async selectVariant(t){await Promise.all([this.bundle.getGlobalPropertyStateManager().setAspect(this.property.name,t.getId()),this.applyVariantSelection(t)])}async applyGlobalState(t){const A=this.bundle.getGlobalPropertyStateManager().getAspect(this.property.name);if(!A)return Promise.resolve();const e=this.optionResource?.variants?.find((t=>t.id===A));return e?this.applyVariantSelection(new fi(e),t):Promise.resolve()}async applyVariantSelection(t,A){const e=this.getSharedSteps(A).map((A=>A.selectVariant(t)));await Promise.all(e)}}const la=Zt`
|
|
629
635
|
mutation CreateGlobalPropertyState($bundleId: String!) {
|
|
630
636
|
globalPropertyStateCreate(bundleId: $bundleId) {
|
|
631
637
|
id
|
|
632
638
|
}
|
|
633
639
|
}
|
|
634
|
-
`,
|
|
640
|
+
`,Ba=Zt`
|
|
635
641
|
mutation UpdateGlobalPropertyState($id: String!, $aspects: [GlobalPropertyStateAspectInput]!) {
|
|
636
642
|
globalPropertyStateUpdate(id: $id, aspects: $aspects) {
|
|
637
643
|
id
|
|
@@ -641,7 +647,7 @@ import{CommandContext as t,AssetType as A,BringForwardCommand as e,BringToFrontC
|
|
|
641
647
|
}
|
|
642
648
|
}
|
|
643
649
|
}
|
|
644
|
-
`,
|
|
650
|
+
`,wa=Zt`
|
|
645
651
|
query GetGlobalPropertyState($bundleId: String!) {
|
|
646
652
|
globalPropertyState(bundleId: $bundleId) {
|
|
647
653
|
id
|
|
@@ -651,7 +657,7 @@ import{CommandContext as t,AssetType as A,BringForwardCommand as e,BringToFrontC
|
|
|
651
657
|
}
|
|
652
658
|
}
|
|
653
659
|
}
|
|
654
|
-
`;function
|
|
660
|
+
`;function da(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class ha{constructor(t){da(this,"bundleId",void 0),da(this,"globalPropertyState",void 0),this.bundleId=t,this.getOrCreateGlobalPropertyState().then((t=>this.globalPropertyState=t))}getGlobalPropertyState(){return this.globalPropertyState}getAspect(t){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const A=this.globalPropertyState.aspects.find((A=>A.name===t));if(A)return A.value}setAspect(t,A){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const e=this.globalPropertyState.aspects.find((A=>A.name===t));return e?e.value=A:this.globalPropertyState.aspects.push({name:t,value:A}),this.updateGlobalPropertyState()}async updateGlobalPropertyState(){if(!this.globalPropertyState)throw new Error("Global property state not initialized");const t=await yA.getShadowGraphqlClient().mutate({mutation:Ba,variables:{id:this.globalPropertyState.id,aspects:this.globalPropertyState.aspects}});if(!t.data?.globalPropertyStateUpdate)throw new Error("Unable to update global property state");this.globalPropertyState=t.data.globalPropertyStateUpdate}async getOrCreateGlobalPropertyState(){const t=await yA.getShadowGraphqlClient().query({query:wa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{bundleId:this.bundleId}});if(t.data.globalPropertyState&&t.data.globalPropertyState.id)return t.data.globalPropertyState;const A=await yA.getShadowGraphqlClient().mutate({mutation:la,variables:{bundleId:this.bundleId}});if(A.data?.globalPropertyStateCreate&&A.data.globalPropertyStateCreate.id)return A.data.globalPropertyStateCreate;throw new Error(`Unable to create global property state for bundle: ${this.bundleId}`)}}function Ea(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class Ca{constructor(t,A){Ea(this,"client",void 0),Ea(this,"id",void 0),Ea(this,"name",void 0),Ea(this,"metadata",void 0),Ea(this,"productCollection",void 0),Ea(this,"globalConfigurations",void 0),Ea(this,"globalPropertyStateManager",void 0),Ea(this,"workflowExperiences",[]),this.client=t,this.id=A.id,this.name=A.name||"",this.metadata=new Map(A.metadata?.map((t=>[t.key,t.value]))||[]),this.productCollection=A.productCollection,this.globalConfigurations=this.resolveGlobalProperties(),this.globalPropertyStateManager=new ha(this.id),A.transactions&&A.transactions.length>0&&(this.workflowExperiences=A.transactions.map((()=>{})))}getClient(){return this.client}getId(){return this.id}getName(){return this.name}setName(t){return this.name=t,this.updateBundle()}getMetadata(){return new Map(this.metadata)}setMetadata(t){return this.metadata=new Map(t),this.updateBundle()}setNameAndMetadata(t,A){return this.name=t,this.metadata=new Map(A),this.updateBundle()}async hasGlobalProperties(){const t=await this.globalConfigurations;return t.length>0&&t.some((t=>t.aspects.length>0))}async getGlobalProperties(){const t=await this.globalConfigurations;if(0===t.length)return[];return(await Promise.all(t.map((t=>Promise.all(t.aspects.map((async t=>{switch(t.type){case It.FileUpload:return new ca(this,t);case It.Option:return new ga(this,t,t.entityId?await bA.getOption(t.entityId):void 0)}}))))))).flat()}getGlobalPropertyStateManager(){return this.globalPropertyStateManager}getTotalSubunits(){return this.workflowExperiences.map((t=>t.getTotalPriceSubunits())).reduce(((t,A)=>t+A),0)}getProductCollection(){return this.productCollection}async addWorkflowExperience(t){const A=t.getWorkflowManager().getTransaction().id;if(this.workflowExperiences.find((t=>t.getWorkflowManager().getTransaction().id===A)))throw new Error("Unable to add transaction to bundle - Already Exists!");await yA.getShadowGraphqlClient().mutate({mutation:Aa,variables:{id:this.id,transactionId:A}}),this.workflowExperiences.push(t);const e=await this.getGlobalProperties();await Promise.all(e.map((A=>A.applyGlobalState([t]))))}async removeWorkflowExperience(t){const A=this.workflowExperiences.indexOf(t);if(!(A>-1))throw new Error("Unable to remove workflow experience from bundle - Not Found!");await yA.getShadowGraphqlClient().mutate({mutation:ea,variables:{id:this.id,transactionId:t.getWorkflowManager().getTransaction().id}}),this.workflowExperiences.splice(A,1)}getWorkflowExperiences(){return[...this.workflowExperiences]}async sortWorkflowExperiences(t){this.workflowExperiences=this.workflowExperiences.sort(t),await yA.getShadowGraphqlClient().mutate({mutation:oa,variables:{id:this.id,transactionIds:this.workflowExperiences.map((t=>t.getWorkflowManager().getTransaction().id))}})}getWorkflowExperienceCount(){return this.workflowExperiences.length}async addStakeholder(t,A){await yA.getShadowGraphqlClient().mutate({mutation:na,variables:{id:this.id,details:t,type:A||oe.Owner}})}async updateStakeholders(t){await yA.getShadowGraphqlClient().mutate({mutation:ia,variables:{id:this.id,input:t}})}async getAllStakeholders(){const t=await yA.getShadowGraphqlClient().query({query:$i,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||[]}async reloadWorkflowExperience(t,A,e){const n=A?e=>A(e,t):void 0,i=await this.client.getWorkflowExperience(void 0,void 0,n,{type:"transaction",transactionId:t}),a=e??this.workflowExperiences.findIndex((A=>A.getWorkflowManager().getTransaction().id===t));return a>-1?this.workflowExperiences[a]=i:this.workflowExperiences.push(i),i}async updateBundle(){if(!(await yA.getShadowGraphqlClient().mutate({mutation:ta,variables:{id:this.id,name:this.name,metadata:Array.from(this.metadata.entries()).map((([t,A])=>({key:t,value:A})))}})).data?.bundleUpdate)throw new Error("Bundle not found!")}async resolveGlobalProperties(){const t=this.productCollection;if(!t)return Promise.resolve([]);const A=new Set;t.products.forEach((t=>t.workflows?.forEach((t=>A.add(t.workflowName)))));const e=await yA.getShadowGraphqlClient().query({query:aa,errorPolicy:"all",variables:{ids:Array.from(A)}}),n=new Map;return e.data.workflows?.forEach((t=>{t.globalPropertyConfiguration&&n.set(t.globalPropertyConfiguration.id,t.globalPropertyConfiguration)})),Object.values(n)}}function Qa(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}const ua=ft`
|
|
655
661
|
${FA}
|
|
656
662
|
${SA}
|
|
657
663
|
${GA}
|
|
@@ -1167,7 +1173,7 @@ import{CommandContext as t,AssetType as A,BringForwardCommand as e,BringToFrontC
|
|
|
1167
1173
|
}
|
|
1168
1174
|
}
|
|
1169
1175
|
}
|
|
1170
|
-
`,
|
|
1176
|
+
`,pa=ft`
|
|
1171
1177
|
query GetTransactionForPartner($id: String!) {
|
|
1172
1178
|
transactions(ids: [$id]) {
|
|
1173
1179
|
id
|
|
@@ -1184,7 +1190,7 @@ import{CommandContext as t,AssetType as A,BringForwardCommand as e,BringToFrontC
|
|
|
1184
1190
|
}
|
|
1185
1191
|
}
|
|
1186
1192
|
}
|
|
1187
|
-
`,
|
|
1193
|
+
`,ma=ft`
|
|
1188
1194
|
${FA}
|
|
1189
1195
|
query GetWorkflowForTheme($id: String!) {
|
|
1190
1196
|
workflow(id: $id) {
|
|
@@ -1206,21 +1212,21 @@ import{CommandContext as t,AssetType as A,BringForwardCommand as e,BringToFrontC
|
|
|
1206
1212
|
}
|
|
1207
1213
|
}
|
|
1208
1214
|
}
|
|
1209
|
-
`,
|
|
1215
|
+
`,Da=ft`
|
|
1210
1216
|
query GetCustomer($emailAddress: String!) {
|
|
1211
1217
|
customer(emailAddress: $emailAddress) {
|
|
1212
1218
|
id
|
|
1213
1219
|
emailAddress
|
|
1214
1220
|
}
|
|
1215
1221
|
}
|
|
1216
|
-
`,
|
|
1222
|
+
`,Ia=ft`
|
|
1217
1223
|
mutation CustomerCreate($details: CustomerDetailsInput!) {
|
|
1218
1224
|
customerCreate(details: $details) {
|
|
1219
1225
|
id
|
|
1220
1226
|
emailAddress
|
|
1221
1227
|
}
|
|
1222
1228
|
}
|
|
1223
|
-
`,
|
|
1229
|
+
`,fa=ft`
|
|
1224
1230
|
mutation CustomerAuthenticate($loginToken: String!) {
|
|
1225
1231
|
customerAuthenticate(loginToken: $loginToken) {
|
|
1226
1232
|
id
|
|
@@ -1244,11 +1250,11 @@ import{CommandContext as t,AssetType as A,BringForwardCommand as e,BringToFrontC
|
|
|
1244
1250
|
}
|
|
1245
1251
|
}
|
|
1246
1252
|
}
|
|
1247
|
-
`,
|
|
1253
|
+
`,ya=ft`
|
|
1248
1254
|
mutation CustomerGenerateVerificationCode($emailAddress: String!) {
|
|
1249
1255
|
customerGenerateVerificationCode(emailAddress: $emailAddress)
|
|
1250
1256
|
}
|
|
1251
|
-
`,
|
|
1257
|
+
`,Ma=ft`
|
|
1252
1258
|
mutation CustomerVerifyCode($emailAddress: String!, $verificationCode: String!) {
|
|
1253
1259
|
customerVerifyCode(emailAddress: $emailAddress, verificationCode: $verificationCode) {
|
|
1254
1260
|
id
|
|
@@ -1276,5 +1282,5 @@ import{CommandContext as t,AssetType as A,BringForwardCommand as e,BringToFrontC
|
|
|
1276
1282
|
}
|
|
1277
1283
|
}
|
|
1278
1284
|
}
|
|
1279
|
-
`,Ma=async t=>{const A=(await yA.getShadowGraphqlClient().query({query:Qa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}})).data.workflow;return A.steps.forEach((t=>{delete t.data.__typename})),A},Fa=(t,A)=>{const e=t.workflowState,n=e?JSON.parse(e):void 0;return n?Object.values(n.layouts).map((t=>t.layout)):A.panels.sort(((t,A)=>t.index-A.index)).map((t=>({id:F(),panelId:t.name,name:t.name,index:t.index,createdAt:new Date,updatedAt:new Date,transparentBackground:t.transparentBackground,height:t.height,width:t.width,previewRegion:t.previewRegion,useEditableArea:t.useEditableArea,editableArea:t.editableArea})))};class Ya{constructor(t){var A;Ca(this,"options",void 0),Ca(this,"initialized",void 0),Ca(this,"experienceOptions",void 0),Ca(this,"currencyCode",void 0),Ca(this,"customer",void 0),Ca(this,"updateTransactionState",(async t=>{try{return yA.getShadowGraphqlClient().mutate({...t,mutation:Un})}catch(t){throw console.error(t),new cA("Critical - Unable to synchronize workflow state with server.")}})),this.initialized=!1,this.options=t,this.options.applicationKey&&(A=this.options.applicationKey,fA=A)}getAssetManager(){return HA}getCurrencyCode(){if(void 0===this.currencyCode)throw new Error("No currency code set.");return this.currencyCode}async authenticateBundleFromLocalStorage(t){const A=dA.getMap("bundleOwnerIds");if(A?.has(t)){const e=A.get(t);return mA(e),Promise.resolve({success:!0,stakeholderType:oe.Owner})}const e=dA.getMap("bundleCustomerIds");if(e?.has(t)){const A=e.get(t);if(A){if(await this.authenticateCustomerId(A)){const A=this.customer?.bundleStakeholders?.find((A=>A.bundle?.id===t));if(A)return Promise.resolve({success:!0,stakeholderType:A.type})}}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(t){const A=yA.getShadowGraphqlClient(),e=await A.query({query:ua,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}});if(!e.data.transactions||0===e.data.transactions.length)throw new Error(`Transaction not found: ${t}`);const n=e.data.transactions[0],i=n.product?.partner?.id;if(!i)throw new Error(`Unable to read transaction: ${t}`);if(n.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const a=dA.getMap("transactionOwnerIds");if(a?.has(t)){const A=a.get(t);return uA(A),Promise.resolve({success:!0,stakeholderType:oe.Owner})}const o=dA.getMap("transactionCustomerIds");if(o?.has(t)){const A=o.get(t);if(A){if(await this.authenticateCustomerId(A)){const A=this.customer?.bundleStakeholders?.find((A=>A.bundle?.transactions?.some((A=>A.id===t))))||this.customer?.stakeholders?.find((A=>A.transaction?.id===t));if(A)return Promise.resolve({success:!0,stakeholderType:A.type})}}}const r=(await A.query({query:pa,errorPolicy:"all",variables:{id:n.workflowId}})).data.workflow;if(!r)throw new Error(`Unable to read workflow: ${n.workflowId}`);return Promise.resolve({success:!1,theme:r.overrideTheme,customLogoLink:n.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(t){const A=dA.getMap("transactionCustomerIds");A?.has(t)&&(A.delete(t),dA.setMap("transactionCustomerIds",A))}getStakeholderTypeForTransaction(t){const A=this.customer?.stakeholders?.find((A=>A.transaction?.id===t));if(A)return A.type}async getOrCreateCustomer(t){this.customer=void 0;const A=yA.getShadowGraphqlClient(),e=(await A.query({query:ma,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;if(!e.id){const e=(await A.mutate({mutation:Da,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:t}}})).data?.customerCreate;if(!e)throw new Error("Unable to create customer.");return this.customer=e,{customer:e,isAuthenticated:!1}}const n=await this.authenticateCustomerId(e.id);return{customer:this.customer||e,isAuthenticated:n}}async authenticateCustomerId(t){const A=yA.getShadowGraphqlClient(),e=dA.getMap("customerTokens");if(!e?.has(t))return!1;const n=e.get(t);if(!n)return!1;const i=(await A.mutate({mutation:Ia,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:n}})).data?.customerAuthenticate;return!!i&&(IA(n),this.customer=i,!0)}async generateVerificationCode(t){await yA.getShadowGraphqlClient().mutate({mutation:fa,variables:{emailAddress:t}})}async verifyCode(t,A){const e=(await yA.getShadowGraphqlClient().mutate({mutation:ya,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t,verificationCode:A}})).data?.customerVerifyCode;if(e?.loginToken){if(!e.partner?.id)throw new Error(`Unable to find customer: ${t}`);const A=dA.getMap("customerTokens")||new Map;return A.set(e.id,e.loginToken),dA.setMap("customerTokens",A),IA(e.loginToken),this.customer={...e,loginToken:void 0},!0}return!1}async getNewBundle(t){const A=(await yA.getShadowGraphqlClient().mutate({mutation:_i,variables:{collectionId:t}})).data?.bundleCreate;if(!A)throw new Error("Unable to create bundle");mA(A.bundleOwnerId);const e=dA.getMap("bundleOwnerIds")||new Map;return e.set(A.id,A.bundleOwnerId),dA.setMap("bundleOwnerIds",e),new Ea(this,A)}async getExistingBundle(t,A){const e=await yA.getShadowGraphqlClient().query({query:Zi,variables:{id:t}});if(!e.data?.bundles||0===e.data?.bundles.length||!e.data?.bundles[0])throw new Error(`Unable to find bundle: ${t}`);const n=e.data?.bundles[0],i=dA.getMap("bundleOwnerIds");i?.has(n.id)&&mA(i.get(n.id));const a=new Ea(this,n);return n.transactions&&n.transactions.length>0&&await Promise.all(n.transactions.map((async t=>{a.reloadWorkflowExperience(t.id,A)}))),a}async getWorkflowExperience(t,A,e,n){if(!n)return await this.getWorkflowExperienceDeprecated(t,A,e);const i=async t=>{for(const A in t.layouts){const e=t.layouts[A].elements.filter((t=>t.type===h.Illustration));for(let t=0;t<e.length;++t){const A=e[t];A.src&&A.svg&&(A.cachedObjectURL=await dt(A.svg))}const n=t.layouts[A].elements.filter((t=>t.type===h.Textbox));for(let t=0;t<n.length;++t){const A=n[t];A.fontData?.assetUrl&&H(A.fontData.assetUrl)}}},{transaction:a,workflow:o,readOnly:r}=await(async()=>{const t=yA.getShadowGraphqlClient();if("transaction"===n.type){const{transactionId:A,readOnly:e}=n,i=await t.query({query:Hn,variables:{id:A},errorPolicy:"all",fetchPolicy:"no-cache"});if(!i.data?.transactions||0===i.data.transactions.length)throw new cA("Existing transaction not found.");const a=i.data?.transactions[0];if(!a.workflowId)throw new cA("Existing transaction has no workflow ID.");const o=await Ma(a.workflowId);if(!a.product)throw new cA("Failed to load transaction, product not available.");return{transaction:a,workflow:o,readOnly:e}}if("integration"===n.type||"external"===n.type){const A=async()=>{const A="integration"===n.type?{integrationProductId:n.integrationProductId}:{externalIntegrationId:n.externalIntegrationId,externalProductId:n.externalProductId},e=await t.mutate({mutation:Rn,variables:{...A,bulk:n.bulk,workflowId:n.workflowId,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!e.data||!e.data.transactionCreate)throw new cA("Failed to create transaction!");const i=e.data.transactionCreate;if(!i.product)throw new cA("Failed to create transaction, product not available.");return i},e=Ma(n.workflowId),[i,a]=await Promise.all([A(),e]);return{transaction:i,workflow:a}}throw new cA("No workflow ID provided.")})();if(this.currencyCode=a.product.partner?.currencyCode,this.experienceOptions={product:a.product,transaction:a,layouts:[],stateMutationFunc:r?async()=>{throw new rA("State mutation is forbidden in read only mode!")}:this.updateTransactionState,readOnly:r,workflow:o},"transaction"===n.type&&a.workflowState){const t=JSON.parse(a.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await v(t),await i(t),this.experienceOptions.reloadedState=t}else if(!r&&n.workflowState){const t=JSON.parse(n.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await v(t),await i(t),this.experienceOptions.reloadedState=t}else this.experienceOptions.layouts=Fa(this.experienceOptions.transaction,this.experienceOptions.workflow);if(this.experienceOptions.previewService=e&&e(o),this.experienceOptions.renderableContextService=new fn(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&(this.experienceOptions.previewService?.initialize({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}),this.experienceOptions.modelContainer=this.experienceOptions.previewService?.getAllModels()[0]),"transaction"!==n.type){const t=dA.getMap("transactionOwnerIds")||new Map;t.set(a.id,a.transactionOwnerId),uA(a.transactionOwnerId||""),dA.setMap("transactionOwnerIds",t)}else{const t=(dA.getMap("transactionOwnerIds")||new Map).get(a.id);t&&uA(t)}this.initialized=!0;const s=new Xi(this,this.experienceOptions);return await s.getWorkflowManager().getInitializationPromise(),"transaction"!==n.type&&this.customer&&await s.attachCustomerDetails({email:this.customer.emailAddress}),s}async initFromIntegrationProduct(t){if(""===t)throw new cA("No integration product ID provided.");const A=yA.getShadowGraphqlClient(),e=await A.mutate({mutation:Rn,variables:{integrationProductId:t,bulk:this.options.bulk||!1,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!e.data||!e.data.transactionCreate)throw new cA("Failed to create transaction!");const n=e.data.transactionCreate;if(!n.product)throw new cA("Failed to create transaction, product not available.");this.currencyCode=n.product.partner?.currencyCode;const i=dA.getMap("transactionOwnerIds")||new Map;i.set(n.id,n.transactionOwnerId),uA(n.transactionOwnerId||""),dA.setMap("transactionOwnerIds",i),this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState},this.initialized=!0}async initFromTransaction(t,A=!1){if(""===t)throw new cA("No transaction ID provided.");const e=yA.getShadowGraphqlClient();if(A)return await(async()=>{const n=(await e.query({query:Hn,variables:{id:t},fetchPolicy:"no-cache",errorPolicy:"all"})).data?.transactions[0];if(!n)throw new cA("Failed to read transaction.");if(!n.product)throw new cA("Failed to load transaction, product not available.");this.currencyCode=n.product.partner?.currencyCode,this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:async()=>{throw new rA("State mutation is forbidden in read only mode!")},readOnly:A},this.initialized=!0})();const n=dA.getMap("transactionOwnerIds")||new Map,i=n.get(t);if(i){uA(i);const n=(await e.query({query:Hn,variables:{id:t},errorPolicy:"all"})).data?.transactions[0];if(!n)throw new cA("Failed to read transaction.");if(!n.product)throw new cA("Failed to load transaction, product not available.");return this.currencyCode=n.product.partner?.currencyCode,this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:A},void(this.initialized=!0)}try{const i=(await e.mutate({mutation:Pn,variables:{id:t},errorPolicy:"all"})).data?.transactionClaim;if(!i)throw new cA("Failed to read transaction.");if(!i.product)throw new cA("Failed to load transaction, product not available.");this.currencyCode=i.product.partner?.currencyCode,i.transactionOwnerId&&(n.set(i.id,i.transactionOwnerId),uA(i.transactionOwnerId),dA.setMap("transactionOwnerIds",n)),this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:A},this.initialized=!0}catch{throw new cA("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(t,A,e){if(!this.initialized||!this.experienceOptions)throw new cA("Cannot launch experience: Not initialized.");const n=async t=>{for(const A in t.layouts){const e=t.layouts[A].elements.filter((t=>t.type===h.Illustration));for(let t=0;t<e.length;++t){const A=e[t];A.src&&A.svg&&(A.cachedObjectURL=await dt(A.svg))}const n=t.layouts[A].elements.filter((t=>t.type===h.Textbox));for(let t=0;t<n.length;++t){const A=n[t];A.fontData?.assetUrl&&H(A.fontData.assetUrl)}}};if(this.experienceOptions.transaction.workflowId){const t=await Ma(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=t,this.experienceOptions.transaction.workflowState){const t=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await v(t),await n(t),this.experienceOptions.reloadedState=t}this.experienceOptions.previewService=e&&e(t),this.experienceOptions.renderableContextService=new fn(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&(this.experienceOptions.previewService?.initialize({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}),this.experienceOptions.modelContainer=this.experienceOptions.previewService?.getAllModels()[0]);const A=new Xi(this,this.experienceOptions);return await A.getWorkflowManager().getInitializationPromise(),A}if(t){const i=yA.getShadowGraphqlClient().mutate({mutation:Gn,variables:{workflowId:t,id:this.experienceOptions.transaction.id}}),a=Ma(t);if(await Promise.all([i,a]),this.experienceOptions.workflow=await a,A){const t=JSON.parse(A);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await v(t),await n(t),this.experienceOptions.reloadedState=t}else this.experienceOptions.layouts=Fa(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=e&&e(await a),this.experienceOptions.renderableContextService=new fn(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&(this.experienceOptions.previewService?.initialize({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}),this.experienceOptions.modelContainer=this.experienceOptions.previewService?.getAllModels()[0]);const o=new Xi(this,this.experienceOptions);return await o.getWorkflowManager().getInitializationPromise(),o}throw new cA("No workflow ID provided.")}getPreviewService(){return this.experienceOptions?.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new cA("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new cA("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}}function Sa(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class xa{constructor(){Sa(this,"getProduct",void 0),Sa(this,"getCommandContext",void 0),Sa(this,"getAllLayoutData",void 0),Sa(this,"getMetadata",void 0),Sa(this,"getWorkflowMetadata",void 0),Sa(this,"getStepStorage",void 0),Sa(this,"setModelContainer",void 0),Sa(this,"getUpdatesPending",void 0)}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}getVariationRecords(){return[]}async reset(){}updateStateWithServer(t){}addVariationRecord(t){return{recordNumber:0,transactionId:"",values:[]}}getCurrentVariationRecord(){}removeVariationRecord(t){return[]}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(t){}addPoller(t){}addConfirmCallback(t){}addCurrentVariationCallback(t){}addEditedCallback(t){}addElementsCallback(t){}addInformationResultCallback(t){}addInitCallback(t){}addMakingAdjustmentsCallback(t){}addMandatoryCallback(t){}addMetadataCallback(t){}addSelectionCallback(t){}addStepSpecificStorageCallback(t,A){}addStorageCallback(t){}addVariationRecordsCallback(t){}getCommandDispatcher(){return t=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(t){return[]}getSerializedStep(t,A){}getStepSpecificServices(t){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(t){}markUpdateCompleted(t){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}setCurrentAdjustingStepId(t){}setCurrentVariationRecord(t){}setEditedStatus(t,A){}setInformationResults(t){}setMandatoryFulfilled(t,A){}async setSelectionsAndElements(t,A,e){}setVariationRecords(t){}toggleDesignConfirmed(){}updateMetadata(t,A){}async updateStorage(t,A){}}function va(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}let Na;var Ra;(Ra=Na||(Na={})).SelectFrame="SelectFrame",Ra.SelectImage="SelectImage",Ra.Position="Position";class Pa extends Mi{constructor(t,A){super(t,A),va(this,"frameService",this.manager.getStepSpecificServices(this.getId())?.frameService)}selectVariant(t){const A=this.manager.getRegionElements(this.step.stepName);return ai.selectVariant(this.step,t.getResource(),A,this.manager,(t=>this.setUpdateState(t)))}onFrameDataChanged(t){this.frameService&&this.frameService.onFrameDataChanged((A=>{A&&t(A)}))}selectImage(t){return ai.selectImage(this.step,t,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(t,A,e,n){return n&&n.length>1&&void 0===t?Na.SelectFrame:A||e||this.getImageData()?Na.Position:Na.SelectImage}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}hasVaryingUpload(){return this.step.data.varyUpload}hasVaryingSelection(){return this.step.data.varySelection}}const Ha=t=>{const A=bt(null),e=bt(void 0),[n,i]=Rt(void 0),{addEvent:a,removeEvent:o,updateEvent:r,eventCache:s}=LA(),[c,g]=Rt(!1),[l,B]=Rt(!1),{state:w,uiDispatcher:d}=ZA(),h=Pt((t=>{const A=t;d(new qA({zoom:Math.max(.1,Math.min(A,w.maxZoom))}))}),[d,w.maxZoom]),E=Pt((t=>{o(t),1===s.length&&(e.current=void 0),2===s.length&&i(void 0);"touch"===t.pointerType&&s.length>1&&s.length-1==1&&(B(!1),g(!1))}),[o,s.length]),C=Pt((t=>{a(t);"touch"===t.pointerType&&1===s.length&&(d(new qA({selectedElement:void 0})),B(!0),g(!0))}),[a,s.length,d]),Q=Pt((t=>{r(t);const A=1===s.length&&"touch"!==s[0].pointerType,a=2===s.length&&"touch"===s[0].pointerType;if(c&&a){const[t,A]=s,e=Math.abs(t.clientX-A.clientX),a=n;a&&h(w.zoom-.0055*(a-e)),i(e)}if(l&&(A||a)&&t.isPrimary){const A=(e?.current?.x||t.screenX)-t.screenX,n=(e?.current?.y||t.screenY)-t.screenY;d(new qA({selectedElement:void 0,xTranslation:w.xTranslation-A/w.zoom,yTranslation:w.yTranslation-n/w.zoom}))}t.isPrimary&&(e.current={x:t.screenX,y:t.screenY})}),[r,s,c,l,n,h,w.zoom,w.xTranslation,w.yTranslation,d]),u=Pt((t=>{c&&h(w.zoom-.035*Math.sign(t.deltaY))}),[h,w.zoom,c]);Ut((()=>{if(!A.current||0===s.length)return;const t=s[0].pointerId,e=A.current.hasPointerCapture(t);l&&!e&&A.current.setPointerCapture(t),!l&&e&&A.current.releasePointerCapture(t)}),[A,l,s]),Je([" "],(()=>{B(!0),d(new qA({selectedElement:void 0}))}),(()=>B(!1))),Je(["Control"],(()=>g(!0)),(()=>g(!1)));const p=kt((()=>({cursor:l&&0===s.length?"grab":l&&1===s.length?"grabbing":c?"zoom-in":void 0,width:"100%",height:"100%",overflow:"clip"})),[l,c,s]);return Jt("div",{ref:A,className:"transform-wrapper",onWheel:u,onPointerDown:C,onPointerUp:E,onPointerCancel:E,onPointerLeave:E,onPointerMove:Q,style:p,children:t.children})};export{Ya as SpiffCommerceClient,t as CommandContext,EA as spiffCoreConfiguration,ze as PromiseQueue,Te as QueueablePromise,xa as MockWorkflowManager,ui as InformationMessageType,Mi as StepHandle,Gi as TextStepHandle,Pa as FrameStepHandle,xi as BulkStepHandle,Ui as ShapeStepHandle,vi as IllustrationStepHandle,Ni as MaterialStepHandle,Ri as ModelStepHandle,Pi as PictureStepHandle,Hi as QuestionStepHandle,te as BulkPriceCalculationStrategy,fi as Variant,AA as OptionNotFoundError,eA as LayoutNotFoundError,nA as AssetNotFoundError,iA as ResourceNotFoundError,aA as MisconfigurationError,sA as ParseError,rA as UnhandledBehaviorError,HA as assetService,Vi as designService,zi as createDesign,bA as optionService,dA as persistenceService,yA as graphQlManager,ge as toast,Zn as FrameService,Xn as getBoundedOffsets,ai as frameStepService,si as modelStepService,ri as materialStepService,Bi as shapeStepService,li as questionStepService,ni as digitalContentStepService,ci as moduleStepService,gi as pictureStepService,Ci as textStepService,oi as illustrationStepService,$A as ProductCameraRig,Na as FrameStep,ee as ConversionLocation,ie as ConversionDataType,Ma as getWorkflow,ti as shortenUrl,A as AssetType,e as BringForwardCommand,n as BringToFrontCommand,i as BringToBackCommand,a as CanvasCommand,o as CreateElementCommand,r as CreateLayoutCommand,s as DeleteElementCommand,c as FontAlignmentCommand,g as FontColorCommand,l as FontSizeCommand,B as FontSourceCommand,w as GroupCommand,d as LayoutElementFactory,h as LayoutElementType,E as MoveCommand,C as ResizeCommand,Q as RotateCommand,u as SendBackwardsCommand,oe as StakeholderType,p as StepAspectType,m as StepType,D as TextChangeCommand,I as UnitOfMeasurement,f as dataUrlFromExternalUrl,y as findElement,M as frameDataCache,F as generate,Y as getAxisAlignedBoundingBox,S as generateSVGWithUnknownColors,x as getAttributesFromArrayBuffer,v as rehydrateSerializedLayout,N as getFrameData,R as getSvgElement,P as loadFontFromDataUrl,H as loadFontFromExternalUrl,U as determineCorrectFontSizeAndLines,G as patternImageDataCache,Dn as generateCommands,k as registerJSDOM,Ge as minZoom,Nn as AdvancedEditor,Ha as TransformWrapper,vn as EditorCore,OA as useLayouts,ZA as useEditorState,be as useEditorInteraction,Je as useShortcutCombination,VA as commandReducer,KA as getDefaultState,JA as CommandContextContext,XA as AdvancedEditorStateProvider,WA as AdvancedEditorContext,qA as UICommand,zA as EditorSubMenu,le as ElementEventType,we as KeyEvent,Ln as gatherVaryingStepAspects};
|
|
1285
|
+
`,Fa=async t=>{const A=(await yA.getShadowGraphqlClient().query({query:ua,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}})).data.workflow;return A.steps.forEach((t=>{delete t.data.__typename})),A},Ya=(t,A)=>{const e=t.workflowState,n=e?JSON.parse(e):void 0;return n?Object.values(n.layouts).map((t=>t.layout)):A.panels.sort(((t,A)=>t.index-A.index)).map((t=>({id:F(),panelId:t.name,name:t.name,index:t.index,createdAt:new Date,updatedAt:new Date,transparentBackground:t.transparentBackground,height:t.height,width:t.width,previewRegion:t.previewRegion,useEditableArea:t.useEditableArea,editableArea:t.editableArea})))};class Sa{constructor(t){var A;Qa(this,"options",void 0),Qa(this,"initialized",void 0),Qa(this,"experienceOptions",void 0),Qa(this,"currencyCode",void 0),Qa(this,"customer",void 0),Qa(this,"updateTransactionState",(async t=>{try{return yA.getShadowGraphqlClient().mutate({...t,mutation:Un})}catch(t){throw console.error(t),new cA("Critical - Unable to synchronize workflow state with server.")}})),this.initialized=!1,this.options=t,this.options.applicationKey&&(A=this.options.applicationKey,fA=A)}getAssetManager(){return HA}getCurrencyCode(){if(void 0===this.currencyCode)throw new Error("No currency code set.");return this.currencyCode}async authenticateBundleFromLocalStorage(t){const A=dA.getMap("bundleOwnerIds");if(A?.has(t)){const e=A.get(t);return mA(e),Promise.resolve({success:!0,stakeholderType:oe.Owner})}const e=dA.getMap("bundleCustomerIds");if(e?.has(t)){const A=e.get(t);if(A){if(await this.authenticateCustomerId(A)){const A=this.customer?.bundleStakeholders?.find((A=>A.bundle?.id===t));if(A)return Promise.resolve({success:!0,stakeholderType:A.type})}}}return Promise.resolve({success:!1})}async authenticateTransactionFromLocalStorage(t){const A=yA.getShadowGraphqlClient(),e=await A.query({query:pa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{id:t}});if(!e.data.transactions||0===e.data.transactions.length)throw new Error(`Transaction not found: ${t}`);const n=e.data.transactions[0],i=n.product?.partner?.id;if(!i)throw new Error(`Unable to read transaction: ${t}`);if(n.isOrdered)return Promise.resolve({success:!1,transactionReadOnly:!0});const a=dA.getMap("transactionOwnerIds");if(a?.has(t)){const A=a.get(t);return uA(A),Promise.resolve({success:!0,stakeholderType:oe.Owner})}const o=dA.getMap("transactionCustomerIds");if(o?.has(t)){const A=o.get(t);if(A){if(await this.authenticateCustomerId(A)){const A=this.customer?.bundleStakeholders?.find((A=>A.bundle?.transactions?.some((A=>A.id===t))))||this.customer?.stakeholders?.find((A=>A.transaction?.id===t));if(A)return Promise.resolve({success:!0,stakeholderType:A.type})}}}const r=(await A.query({query:ma,errorPolicy:"all",variables:{id:n.workflowId}})).data.workflow;if(!r)throw new Error(`Unable to read workflow: ${n.workflowId}`);return Promise.resolve({success:!1,theme:r.overrideTheme,customLogoLink:n.customLogoLink})}clearCustomer(){this.customer=void 0}clearCustomerForTransaction(t){const A=dA.getMap("transactionCustomerIds");A?.has(t)&&(A.delete(t),dA.setMap("transactionCustomerIds",A))}getStakeholderTypeForTransaction(t){const A=this.customer?.stakeholders?.find((A=>A.transaction?.id===t));if(A)return A.type}async getOrCreateCustomer(t){this.customer=void 0;const A=yA.getShadowGraphqlClient(),e=(await A.query({query:Da,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t}})).data.customer;if(!e.id){const e=(await A.mutate({mutation:Ia,errorPolicy:"all",fetchPolicy:"no-cache",variables:{details:{emailAddress:t}}})).data?.customerCreate;if(!e)throw new Error("Unable to create customer.");return this.customer=e,{customer:e,isAuthenticated:!1}}const n=await this.authenticateCustomerId(e.id);return{customer:this.customer||e,isAuthenticated:n}}async authenticateCustomerId(t){const A=yA.getShadowGraphqlClient(),e=dA.getMap("customerTokens");if(!e?.has(t))return!1;const n=e.get(t);if(!n)return!1;const i=(await A.mutate({mutation:fa,errorPolicy:"all",fetchPolicy:"no-cache",variables:{loginToken:n}})).data?.customerAuthenticate;return!!i&&(IA(n),this.customer=i,!0)}async generateVerificationCode(t){await yA.getShadowGraphqlClient().mutate({mutation:ya,variables:{emailAddress:t}})}async verifyCode(t,A){const e=(await yA.getShadowGraphqlClient().mutate({mutation:Ma,errorPolicy:"all",fetchPolicy:"no-cache",variables:{emailAddress:t,verificationCode:A}})).data?.customerVerifyCode;if(e?.loginToken){if(!e.partner?.id)throw new Error(`Unable to find customer: ${t}`);const A=dA.getMap("customerTokens")||new Map;return A.set(e.id,e.loginToken),dA.setMap("customerTokens",A),IA(e.loginToken),this.customer={...e,loginToken:void 0},!0}return!1}async getNewBundle(t){const A=(await yA.getShadowGraphqlClient().mutate({mutation:_i,variables:{collectionId:t}})).data?.bundleCreate;if(!A)throw new Error("Unable to create bundle");mA(A.bundleOwnerId);const e=dA.getMap("bundleOwnerIds")||new Map;return e.set(A.id,A.bundleOwnerId),dA.setMap("bundleOwnerIds",e),new Ca(this,A)}async getExistingBundle(t,A){const e=await yA.getShadowGraphqlClient().query({query:Zi,variables:{id:t}});if(!e.data?.bundles||0===e.data?.bundles.length||!e.data?.bundles[0])throw new Error(`Unable to find bundle: ${t}`);const n=e.data?.bundles[0],i=dA.getMap("bundleOwnerIds");i?.has(n.id)&&mA(i.get(n.id));const a=new Ca(this,n);return n.transactions&&n.transactions.length>0&&await Promise.all(n.transactions.map((async(t,e)=>{a.reloadWorkflowExperience(t.id,A,e)}))),a}async getWorkflowExperience(t,A,e,n){if(!n)return await this.getWorkflowExperienceDeprecated(t,A,e);const i=async t=>{for(const A in t.layouts){const e=t.layouts[A].elements.filter((t=>t.type===h.Illustration));for(let t=0;t<e.length;++t){const A=e[t];A.src&&A.svg&&(A.cachedObjectURL=await dt(A.svg))}const n=t.layouts[A].elements.filter((t=>t.type===h.Textbox));for(let t=0;t<n.length;++t){const A=n[t];A.fontData?.assetUrl&&H(A.fontData.assetUrl)}}},{transaction:a,workflow:o,readOnly:r}=await(async()=>{const t=yA.getShadowGraphqlClient();if("transaction"===n.type){const{transactionId:A,readOnly:e}=n,i=await t.query({query:Hn,variables:{id:A},errorPolicy:"all",fetchPolicy:"no-cache"});if(!i.data?.transactions||0===i.data.transactions.length)throw new cA("Existing transaction not found.");const a=i.data?.transactions[0];if(!a.workflowId)throw new cA("Existing transaction has no workflow ID.");const o=await Fa(a.workflowId);if(!a.product)throw new cA("Failed to load transaction, product not available.");return{transaction:a,workflow:o,readOnly:e}}if("integration"===n.type||"external"===n.type){const A=async()=>{const A="integration"===n.type?{integrationProductId:n.integrationProductId}:{externalIntegrationId:n.externalIntegrationId,externalProductId:n.externalProductId},e=await t.mutate({mutation:Rn,variables:{...A,bulk:n.bulk,workflowId:n.workflowId,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!e.data||!e.data.transactionCreate)throw new cA("Failed to create transaction!");const i=e.data.transactionCreate;if(!i.product)throw new cA("Failed to create transaction, product not available.");return i},e=Fa(n.workflowId),[i,a]=await Promise.all([A(),e]);return{transaction:i,workflow:a}}throw new cA("No workflow ID provided.")})();if(this.currencyCode=a.product.partner?.currencyCode,this.experienceOptions={product:a.product,transaction:a,layouts:[],stateMutationFunc:r?async()=>{throw new rA("State mutation is forbidden in read only mode!")}:this.updateTransactionState,readOnly:r,workflow:o},"transaction"===n.type&&a.workflowState){const t=JSON.parse(a.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await v(t),await i(t),this.experienceOptions.reloadedState=t}else if(!r&&n.workflowState){const t=JSON.parse(n.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await v(t),await i(t),this.experienceOptions.reloadedState=t}else this.experienceOptions.layouts=Ya(this.experienceOptions.transaction,this.experienceOptions.workflow);if(this.experienceOptions.previewService=e&&e(o),this.experienceOptions.renderableContextService=new fn(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&(this.experienceOptions.previewService?.initialize({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}),this.experienceOptions.modelContainer=this.experienceOptions.previewService?.getAllModels()[0]),"transaction"!==n.type){const t=dA.getMap("transactionOwnerIds")||new Map;t.set(a.id,a.transactionOwnerId),uA(a.transactionOwnerId||""),dA.setMap("transactionOwnerIds",t)}else{const t=(dA.getMap("transactionOwnerIds")||new Map).get(a.id);t&&uA(t)}this.initialized=!0;const s=new Xi(this,this.experienceOptions);return await s.getWorkflowManager().getInitializationPromise(),"transaction"!==n.type&&this.customer&&await s.attachCustomerDetails({email:this.customer.emailAddress}),s}async initFromIntegrationProduct(t){if(""===t)throw new cA("No integration product ID provided.");const A=yA.getShadowGraphqlClient(),e=await A.mutate({mutation:Rn,variables:{integrationProductId:t,bulk:this.options.bulk||!1,claim:!0},errorPolicy:"all",fetchPolicy:"no-cache",context:this.options.applicationKey?{headers:{"X-Application-Key":this.options.applicationKey}}:void 0});if(!e.data||!e.data.transactionCreate)throw new cA("Failed to create transaction!");const n=e.data.transactionCreate;if(!n.product)throw new cA("Failed to create transaction, product not available.");this.currencyCode=n.product.partner?.currencyCode;const i=dA.getMap("transactionOwnerIds")||new Map;i.set(n.id,n.transactionOwnerId),uA(n.transactionOwnerId||""),dA.setMap("transactionOwnerIds",i),this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState},this.initialized=!0}async initFromTransaction(t,A=!1){if(""===t)throw new cA("No transaction ID provided.");const e=yA.getShadowGraphqlClient();if(A)return await(async()=>{const n=(await e.query({query:Hn,variables:{id:t},fetchPolicy:"no-cache",errorPolicy:"all"})).data?.transactions[0];if(!n)throw new cA("Failed to read transaction.");if(!n.product)throw new cA("Failed to load transaction, product not available.");this.currencyCode=n.product.partner?.currencyCode,this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:async()=>{throw new rA("State mutation is forbidden in read only mode!")},readOnly:A},this.initialized=!0})();const n=dA.getMap("transactionOwnerIds")||new Map,i=n.get(t);if(i){uA(i);const n=(await e.query({query:Hn,variables:{id:t},errorPolicy:"all"})).data?.transactions[0];if(!n)throw new cA("Failed to read transaction.");if(!n.product)throw new cA("Failed to load transaction, product not available.");return this.currencyCode=n.product.partner?.currencyCode,this.experienceOptions={product:n.product,transaction:n,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:A},void(this.initialized=!0)}try{const i=(await e.mutate({mutation:Pn,variables:{id:t},errorPolicy:"all"})).data?.transactionClaim;if(!i)throw new cA("Failed to read transaction.");if(!i.product)throw new cA("Failed to load transaction, product not available.");this.currencyCode=i.product.partner?.currencyCode,i.transactionOwnerId&&(n.set(i.id,i.transactionOwnerId),uA(i.transactionOwnerId),dA.setMap("transactionOwnerIds",n)),this.experienceOptions={product:i.product,transaction:i,layouts:[],stateMutationFunc:this.updateTransactionState,readOnly:A},this.initialized=!0}catch{throw new cA("Attempted to access a transaction that isn't available.")}}async getWorkflowExperienceDeprecated(t,A,e){if(!this.initialized||!this.experienceOptions)throw new cA("Cannot launch experience: Not initialized.");const n=async t=>{for(const A in t.layouts){const e=t.layouts[A].elements.filter((t=>t.type===h.Illustration));for(let t=0;t<e.length;++t){const A=e[t];A.src&&A.svg&&(A.cachedObjectURL=await dt(A.svg))}const n=t.layouts[A].elements.filter((t=>t.type===h.Textbox));for(let t=0;t<n.length;++t){const A=n[t];A.fontData?.assetUrl&&H(A.fontData.assetUrl)}}};if(this.experienceOptions.transaction.workflowId){const t=await Fa(this.experienceOptions.transaction.workflowId);if(this.experienceOptions.workflow=t,this.experienceOptions.transaction.workflowState){const t=JSON.parse(this.experienceOptions.transaction.workflowState);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await v(t),await n(t),this.experienceOptions.reloadedState=t}this.experienceOptions.previewService=e&&e(t),this.experienceOptions.renderableContextService=new fn(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&(this.experienceOptions.previewService?.initialize({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}),this.experienceOptions.modelContainer=this.experienceOptions.previewService?.getAllModels()[0]);const A=new Xi(this,this.experienceOptions);return await A.getWorkflowManager().getInitializationPromise(),A}if(t){const i=yA.getShadowGraphqlClient().mutate({mutation:Gn,variables:{workflowId:t,id:this.experienceOptions.transaction.id}}),a=Fa(t);if(await Promise.all([i,a]),this.experienceOptions.workflow=await a,A){const t=JSON.parse(A);this.experienceOptions.layouts=Object.values(t.layouts).map((t=>t.layout)),await v(t),await n(t),this.experienceOptions.reloadedState=t}else this.experienceOptions.layouts=Ya(this.experienceOptions.transaction,this.experienceOptions.workflow);this.experienceOptions.previewService=e&&e(await a),this.experienceOptions.renderableContextService=new fn(this.experienceOptions.layouts),this.experienceOptions.product?.modelUrl&&(this.experienceOptions.previewService?.initialize({model:this.experienceOptions.product.modelUrl,contextService:this.experienceOptions.renderableContextService}),this.experienceOptions.modelContainer=this.experienceOptions.previewService?.getAllModels()[0]);const o=new Xi(this,this.experienceOptions);return await o.getWorkflowManager().getInitializationPromise(),o}throw new cA("No workflow ID provided.")}getPreviewService(){return this.experienceOptions?.previewService}getProduct(){if(!this.initialized||!this.experienceOptions)throw new cA("Cannot get product: Not initialized.");return this.experienceOptions.product}getTransaction(){if(!this.initialized||!this.experienceOptions)throw new cA("Cannot get transaction: Not initialized.");return this.experienceOptions.transaction}}function xa(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}class va{constructor(){xa(this,"getProduct",void 0),xa(this,"getCommandContext",void 0),xa(this,"getAllLayoutData",void 0),xa(this,"getMetadata",void 0),xa(this,"getWorkflowMetadata",void 0),xa(this,"getStepStorage",void 0),xa(this,"setModelContainer",void 0),xa(this,"getUpdatesPending",void 0)}getInitializationPromise(){return Promise.resolve()}isInitialized(){return!0}getInformationResults(){return[]}getVariationRecords(){return[]}async reset(){}updateStateWithServer(t){}addVariationRecord(t){return{recordNumber:0,transactionId:"",values:[]}}getCurrentVariationRecord(){}removeVariationRecord(t){return[]}async outstandingRequestsPromise(){}async updateStateWithServerImmediate(t){}addPoller(t){}addConfirmCallback(t){}addCurrentVariationCallback(t){}addEditedCallback(t){}addElementsCallback(t){}addInformationResultCallback(t){}addInitCallback(t){}addMakingAdjustmentsCallback(t){}addMandatoryCallback(t){}addMetadataCallback(t){}addSelectionCallback(t){}addStepSpecificStorageCallback(t,A){}addStorageCallback(t){}addVariationRecordsCallback(t){}getCommandDispatcher(){return t=>{}}getLayouts(){return[]}getLayoutPreviewService(){return{getAll:()=>new Map}}getPreviewService(){}getModelContainer(){}getProfanities(){return[]}getRegionElements(t){return[]}getSerializedStep(t,A){}getStepSpecificServices(t){}getTransaction(){return{id:""}}getTransactionCustomer(){}setTransactionCustomer(){}setTransactionCustomerDetails(){}getWorkflow(){return{id:"",name:"",panels:[],steps:[],showModelOnFinishStep:!1,allowProofDownload:!1,introduction:"",stepGroups:[]}}markStepsAsInitialised(t){}markUpdateCompleted(t){}markUpdatePending(){return"123"}getWorkflowSelections(){return{}}setCurrentAdjustingStepId(t){}setCurrentVariationRecord(t){}setEditedStatus(t,A){}setInformationResults(t){}setMandatoryFulfilled(t,A){}async setSelectionsAndElements(t,A,e){}setVariationRecords(t){}toggleDesignConfirmed(){}updateMetadata(t,A){}async updateStorage(t,A){}}function Na(t,A,e){return(A=function(t){var A=function(t,A){if("object"!=typeof t||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,A||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===A?String:Number)(t)}(t,"string");return"symbol"==typeof A?A:String(A)}(A))in t?Object.defineProperty(t,A,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[A]=e,t}let Ra;var Pa;(Pa=Ra||(Ra={})).SelectFrame="SelectFrame",Pa.SelectImage="SelectImage",Pa.Position="Position";class Ha extends Mi{constructor(t,A){super(t,A),Na(this,"frameService",this.manager.getStepSpecificServices(this.getId())?.frameService)}selectVariant(t){const A=this.manager.getRegionElements(this.step.stepName);return ai.selectVariant(this.step,t.getResource(),A,this.manager,(t=>this.setUpdateState(t)))}onFrameDataChanged(t){this.frameService&&this.frameService.onFrameDataChanged((A=>{A&&t(A)}))}selectImage(t){return ai.selectImage(this.step,t,this.manager)}getImageData(){if(this.frameService)return this.frameService.getImageData()}getCurrentFrameStep(t,A,e,n){return n&&n.length>1&&void 0===t?Ra.SelectFrame:A||e||this.getImageData()?Ra.Position:Ra.SelectImage}getFrameService(){return this.frameService}hasOverlayImageKey(){return this.step.data.overlayImageKey}hasOverlayImageUrl(){return this.step.data.overlayImageUrl}hasVaryingUpload(){return this.step.data.varyUpload}hasVaryingSelection(){return this.step.data.varySelection}}const Ua=t=>{const A=bt(null),e=bt(void 0),[n,i]=Rt(void 0),{addEvent:a,removeEvent:o,updateEvent:r,eventCache:s}=LA(),[c,g]=Rt(!1),[l,B]=Rt(!1),{state:w,uiDispatcher:d}=ZA(),h=Pt((t=>{const A=t;d(new qA({zoom:Math.max(.1,Math.min(A,w.maxZoom))}))}),[d,w.maxZoom]),E=Pt((t=>{o(t),1===s.length&&(e.current=void 0),2===s.length&&i(void 0);"touch"===t.pointerType&&s.length>1&&s.length-1==1&&(B(!1),g(!1))}),[o,s.length]),C=Pt((t=>{a(t);"touch"===t.pointerType&&1===s.length&&(d(new qA({selectedElement:void 0})),B(!0),g(!0))}),[a,s.length,d]),Q=Pt((t=>{r(t);const A=1===s.length&&"touch"!==s[0].pointerType,a=2===s.length&&"touch"===s[0].pointerType;if(c&&a){const[t,A]=s,e=Math.abs(t.clientX-A.clientX),a=n;a&&h(w.zoom-.0055*(a-e)),i(e)}if(l&&(A||a)&&t.isPrimary){const A=(e?.current?.x||t.screenX)-t.screenX,n=(e?.current?.y||t.screenY)-t.screenY;d(new qA({selectedElement:void 0,xTranslation:w.xTranslation-A/w.zoom,yTranslation:w.yTranslation-n/w.zoom}))}t.isPrimary&&(e.current={x:t.screenX,y:t.screenY})}),[r,s,c,l,n,h,w.zoom,w.xTranslation,w.yTranslation,d]),u=Pt((t=>{c&&h(w.zoom-.035*Math.sign(t.deltaY))}),[h,w.zoom,c]);Ut((()=>{if(!A.current||0===s.length)return;const t=s[0].pointerId,e=A.current.hasPointerCapture(t);l&&!e&&A.current.setPointerCapture(t),!l&&e&&A.current.releasePointerCapture(t)}),[A,l,s]),Je([" "],(()=>{B(!0),d(new qA({selectedElement:void 0}))}),(()=>B(!1))),Je(["Control"],(()=>g(!0)),(()=>g(!1)));const p=kt((()=>({cursor:l&&0===s.length?"grab":l&&1===s.length?"grabbing":c?"zoom-in":void 0,width:"100%",height:"100%",overflow:"clip"})),[l,c,s]);return Jt("div",{ref:A,className:"transform-wrapper",onWheel:u,onPointerDown:C,onPointerUp:E,onPointerCancel:E,onPointerLeave:E,onPointerMove:Q,style:p,children:t.children})};export{Sa as SpiffCommerceClient,t as CommandContext,EA as spiffCoreConfiguration,ze as PromiseQueue,Te as QueueablePromise,va as MockWorkflowManager,ui as InformationMessageType,Mi as StepHandle,Gi as TextStepHandle,Ha as FrameStepHandle,xi as BulkStepHandle,Ui as ShapeStepHandle,vi as IllustrationStepHandle,Ni as MaterialStepHandle,Ri as ModelStepHandle,Pi as PictureStepHandle,Hi as QuestionStepHandle,te as BulkPriceCalculationStrategy,fi as Variant,AA as OptionNotFoundError,eA as LayoutNotFoundError,nA as AssetNotFoundError,iA as ResourceNotFoundError,aA as MisconfigurationError,sA as ParseError,rA as UnhandledBehaviorError,HA as assetService,Vi as designService,zi as createDesign,bA as optionService,dA as persistenceService,yA as graphQlManager,ge as toast,Zn as FrameService,Xn as getBoundedOffsets,ai as frameStepService,si as modelStepService,ri as materialStepService,Bi as shapeStepService,li as questionStepService,ni as digitalContentStepService,ci as moduleStepService,gi as pictureStepService,Ci as textStepService,oi as illustrationStepService,$A as ProductCameraRig,Ra as FrameStep,ee as ConversionLocation,ie as ConversionDataType,Fa as getWorkflow,ti as shortenUrl,A as AssetType,e as BringForwardCommand,n as BringToFrontCommand,i as BringToBackCommand,a as CanvasCommand,o as CreateElementCommand,r as CreateLayoutCommand,s as DeleteElementCommand,c as FontAlignmentCommand,g as FontColorCommand,l as FontSizeCommand,B as FontSourceCommand,w as GroupCommand,d as LayoutElementFactory,h as LayoutElementType,E as MoveCommand,C as ResizeCommand,Q as RotateCommand,u as SendBackwardsCommand,oe as StakeholderType,p as StepAspectType,m as StepType,D as TextChangeCommand,I as UnitOfMeasurement,f as dataUrlFromExternalUrl,y as findElement,M as frameDataCache,F as generate,Y as getAxisAlignedBoundingBox,S as generateSVGWithUnknownColors,x as getAttributesFromArrayBuffer,v as rehydrateSerializedLayout,N as getFrameData,R as getSvgElement,P as loadFontFromDataUrl,H as loadFontFromExternalUrl,U as determineCorrectFontSizeAndLines,G as patternImageDataCache,Dn as generateCommands,k as registerJSDOM,Ge as minZoom,Nn as AdvancedEditor,Ua as TransformWrapper,vn as EditorCore,OA as useLayouts,ZA as useEditorState,be as useEditorInteraction,Je as useShortcutCombination,VA as commandReducer,KA as getDefaultState,JA as CommandContextContext,XA as AdvancedEditorStateProvider,WA as AdvancedEditorContext,qA as UICommand,zA as EditorSubMenu,le as ElementEventType,we as KeyEvent,Ln as gatherVaryingStepAspects};
|
|
1280
1286
|
//# sourceMappingURL=module.js.map
|
package/dist/types.d.ts
CHANGED
|
@@ -2008,9 +2008,11 @@ interface _Bundle1 {
|
|
|
2008
2008
|
*/
|
|
2009
2009
|
getWorkflowExperiences(): WorkflowExperience[];
|
|
2010
2010
|
/**
|
|
2011
|
-
* Sort the list of workflow experiences.
|
|
2011
|
+
* Sort the list of workflow experiences. The sorting is performed locally, and then the order is updated in the Spiff Commerce system.
|
|
2012
|
+
* @returns A promise that resolves when the re-ordering of the workflow experiences has been updated in the Spiff Commerce system.
|
|
2013
|
+
* The sorting will occur immediately, but the promise will not resolve until the Spiff Commerce system has been updated.
|
|
2012
2014
|
*/
|
|
2013
|
-
sortWorkflowExperiences(sortFunc: (expA: WorkflowExperience, expB: WorkflowExperience) => number): void
|
|
2015
|
+
sortWorkflowExperiences(sortFunc: (expA: WorkflowExperience, expB: WorkflowExperience) => number): Promise<void>;
|
|
2014
2016
|
/**
|
|
2015
2017
|
* @returns The number of workflow experiences in this bundle.
|
|
2016
2018
|
*/
|