2 lines
32 KiB
JavaScript
2 lines
32 KiB
JavaScript
import{i as ve,m as ue,h as je,k as He,l as Y,c as z,n as Ce}from"./index-BTglIPU2.js?v=1773287522785";import{c as Ae,g as Je}from"./data-BVsViUMm.js?v=1773287522785";import{e as Qe,g as Xe,a as et,b as tt,c as nt}from"./campaign-CYIboXPk.js?v=1773287522785";import{r as y,a0 as r,j as M,F as O,N as ot,k as j,al as G,c as N,$ as _,a8 as U,a9 as g,_ as c,Z as b,P as te,S as s,aa as F,ak as R,ad as Te,L as Ke,aj as Ie,ab as at,e as ae,l as Be,v as Fe,a5 as st,am as lt,K as rt}from"./vue-core-DJjvd5ZC.js?v=1773287522785";import{a3 as Pe,a4 as ce,a as it,p as V,a5 as ut,a1 as Q,a6 as se,b as ye,a7 as X,a8 as ct,_ as dt,B as xe,a0 as pt,a9 as _t}from"./naive-ui--dJnpVcV.js?v=1773287522785";import{c as ft}from"./check-CNel7fTH.js?v=1773287522785";import{_ as mt}from"./index.vue_vue_type_script_setup_true_lang-DOnYQQHp.js?v=1773287522785";import"./prismjs-BZPoR7_J.js?v=1773287522785";import"./useLoading-CZ2gSAW7.js?v=1773287522785";import"./mail-COTHIXbY.js?v=1773287522785";const De=y(0),le=y([]),B=y([]),ge=y(Date.now()),h=y("root"),ne=y("trigger"),de=y({root:{nodeKey:"root",parentNodeKey:"",type:"trigger",id:0,parent_id:0,broken:!1,complete:!0,config:{type:"subscriber_added",group_ids:[]}}}),oe=y({}),pe=y({}),_e=y({}),fe=y({}),vt=y({}),x=y({}),E=y({trigger:de,email:oe,delay:pe,webhook:_e,action:fe,abTest:vt,condition:x}),q=y({nodeKey:"",parentNodeKey:"",type:"trigger",next:null,id:0,parent_id:0,broken:!1,complete:!1}),yt=y({...q.value,config:{type:"subscriber_added",group_ids:[]}}),gt=y({...q.value,email_id:0,name:"",subject:"",from:"",from_name:"",track_opens:!0,track_clicks:!0,track_unsubscribe:!0}),bt=y({...q.value,value:0,unit:"days",description:""}),kt=y({...q.value,url:"",secret:""}),ht=y({...q.value,action:"add_to_subscribers",group_ids:[],description:""}),wt=y({...q.value,name:"",branches:[]}),Nt=y({...q.value,rules:[{type:null}],logic_type:"or",yes:[],no:[],description:""}),$t=y({trigger:yt,email:gt,delay:bt,webhook:kt,action:ht,abTest:wt,condition:Nt}),Z={events:{},$on(n,o){this.events[n]?this.events[n].push(o):this.events[n]=[o]},$emit(n,o){this.events[n].forEach(t=>{t(o)})},$unsubscribe(n){this.events[n]=[]}};function re(n,o){const t=n==="trigger"?"root":He(),e=V($t.value[n]);return e.nodeKey=t,e.parentNodeKey=o,e.type=n,E.value[n][t]=e,e}function Ct(n,o){const t=re(n,"root");if(o==="")B.value.unshift({type:n,key:t.nodeKey});else{const e=B.value.findIndex(l=>l.key==o);B.value.splice(e+1,0,{type:n,key:t.nodeKey})}return t}function xt(n,o){const t=re(n,o);return x.value[o].yes.unshift({type:n,key:t.nodeKey}),n=="condition"&&Z.$on(t.nodeKey,()=>{We(t.nodeKey,o)}),t}function Dt(n,o){const t=re(n,o);return x.value[o].yes.push({type:n,key:t.nodeKey}),t}function Rt(n,o){const t=re(n,o);return x.value[o].no.unshift({type:n,key:t.nodeKey}),n=="condition"&&Z.$on(t.nodeKey,()=>{At(t.nodeKey,o)}),t}function St(n,o){const t=re(n,o);return x.value[o].no.push({type:n,key:t.nodeKey}),t}function Ue(n,o){const t=x.value[n],{parentNodeKey:e}=t;t[o].forEach(l=>{if(l.type!=="trigger"){const d=E.value[l.type];d[l.key].parentNodeKey=t.parentNodeKey}if(e==="root")B.value.push({type:l.type,key:l.key});else{const d=x.value[e],u=Ut(n);d[u].push({type:l.type,key:l.key})}})}function Ut(n){const t=x.value[n].parentNodeKey;return x.value[t].yes.some(l=>l.key===n)?"yes":"no"}function Le(n,o){const t=B.value.findIndex(e=>e.key==o);B.value.splice(t,1),delete E.value[n][o]}function ze(n){const o=y(1),t=E.value.condition[n],e=t.yes.length>0||t.no.length>0;je({title:"Please choose one of the following",width:400,content:()=>r(O,null,[e&&r(Pe,{value:o.value,onUpdateValue:l=>o.value=l},{default:()=>[r("div",null,[r(ce,{value:1},{default:()=>[M("Delete both branches including all steps below.")]})]),r("div",{class:"mt-6px"},[r(ce,{value:2},{default:()=>[M("Delete only YES branch including steps below.")]})]),r("div",{class:"mt-6px"},[r(ce,{value:3},{default:()=>[M("Delete only NO branch including steps below.")]})])]}),!e&&r("div",null,[M("Do you really want to delete this step?")])]),onConfirm:async()=>{switch(o.value){case 1:ke(n),he(n),be(n);break;case 2:ke(n),Ue(n,"no"),be(n);break;case 3:he(n),Ue(n,"yes"),be(n);break}await W(),h.value===n&&(ge.value=Date.now(),h.value="root",ne.value="trigger")}})}function ke(n){x.value[n].yes.forEach(o=>{o.type!=="trigger"&&(o.type!=="condition"?Oe(o.type,n,o.key):Et(o.key))})}function he(n){x.value[n].no.forEach(o=>{o.type!=="trigger"&&(o.type!=="condition"?Me(o.type,n,o.key):jt(o.key))})}function be(n){const o=x.value[n],{parentNodeKey:t}=o;if(t==="root")Le("condition",n);else{const e=x.value[t];let l=e.yes.findIndex(d=>d.key===n);l>-1?e.yes.splice(l,1):(l=e.no.findIndex(d=>d.key===n),e.no.splice(l,1))}}function Oe(n,o,t){const e=x.value[o].yes.findIndex(l=>l.key==t);x.value[o].yes.splice(e,1),delete E.value[n][t]}function Me(n,o,t){const e=x.value[o].no.findIndex(l=>l.key==t);x.value[o].no.splice(e,1),delete E.value[n][t]}function Et(n){ke(n),Z.$emit(n)}function jt(n){he(n),Z.$emit(n)}function We(n,o){const t=x.value[o].yes.findIndex(e=>e.key==n);x.value[o].yes.splice(t,1),Z.$unsubscribe(n)}function At(n,o){const t=x.value[o].no.findIndex(e=>e.key==n);x.value[o].no.splice(t,1),Z.$unsubscribe(n)}function Ve(n){Ye();const{root:o,triggers:t}=n;it(t)&&t.length>0&&(t[0].type==="subscriber_added"&&(E.value.trigger.root.complete=t[0].group_ids.length>0),E.value.trigger.root.config=t[0]),B.value=we(o,"root")}function we(n,o,t=!1){const e=[];let l=n;for(;l;){const d=l.nodeKey,u={key:d,type:l.type};if(e.push(u),l.type!=="condition")E.value[l.type][d]=Tt(l),l=l.next;else{t&&Z.$on(d,()=>{We(d,o)}),E.value.condition[d]=Kt(l,d);break}}return e}function Tt(n){return{...n,next:null}}function Kt(n,o){return{...n,nodeKey:o,yes:we(n.yes,o,!0),no:we(n.no,o,!0),next:null}}function It(){const n=Ne(B.value);return{triggers:[ot(E.value.trigger.root.config)],root:n}}function Ne(n){return n.reduceRight((o,t)=>{const e=E.value[t.type][t.key],l=V(e);return l.type==="condition"?{...Bt(l),next:o}:{...l,next:o}},null)}function Bt(n){return{...n,yes:Ne(n.yes),no:Ne(n.no),next:null}}async function Ft(){const{message:n}=await Xe({id:De.value});ve(n)&&Ve(n)}async function W(n="save"){const o=It(),{message:t}=await Qe({id:De.value,...o});if(ve(t)){switch(n){case"save":ue.success("Save successfully");break;case"del":ue.success("Node deleted successfully");break;case"add":ue.success("Node added successfully");break}Ve(t)}}async function Ye(){B.value=[],Object.keys(E.value).forEach(n=>{n!=="trigger"&&(E.value[n]={})})}function Pt(n,o){const t=E.value[o],e=Object.entries(t).filter(([,l])=>l.id===n);return e.length>0?e[0][1].name:""}function Ee(){ge.value=Date.now(),h.value="root",ne.value="trigger"}const Lt={class:"tool-icon"},zt={class:"add-node"},Ot={class:"node-list"},Mt=["onClick"],Wt=j({__name:"ToolAdd",props:{parentKey:{},parentType:{},last:{type:Boolean}},emits:["addNode"],setup(n,{emit:o}){const t=n,e=o,l=G("popoverRef"),d=y([{type:"email",icon:"",desc:"Email"},{type:"delay",icon:"",desc:"Delay"},{type:"webhook",icon:"",desc:"Webhook"}]),u=N(()=>t.last?d.value:d.value.filter(v=>v.type!=="condition"));function m(v){var w;e("addNode",v,t.parentKey),(w=l.value)==null||w.setShow(!1)}return(v,w)=>{const k=Y,i=ut;return _(),U(i,{ref_key:"popoverRef",ref:l,trigger:"click"},{trigger:g(()=>[c("div",Lt,[r(k,{name:"base-add",size:"16"})])]),default:g(()=>[c("div",zt,[w[0]||(w[0]=c("div",{class:"header"},"Add a next step to your workflow",-1)),c("div",Ot,[(_(!0),b(O,null,te(s(u),f=>(_(),b("div",{key:f.type,class:"node-item",onClick:C=>m(f.type)},F(f.desc),9,Mt))),128))])])]),_:1},512)}}}),$e=z(Wt,[["__scopeId","data-v-4e70f650"]]),Vt={class:"normal-node"},Yt={key:0,class:"font-bold"},Gt=j({__name:"TriggerNode",props:{type:{default:"trigger"},nodeKey:{default:""}},setup(n){const o=n,t=N(()=>de.value[o.nodeKey]),e=N(()=>{const{config:u}=t.value;if(u.type==="subscriber_added"&&u.group_ids.length===0)return"Set up workflow trigger";switch(u.type){case"subscriber_added":return"When a new email joins group(s) ";case"subscribed":return"When subscriber joins group(s) ";case"opened":return"When subscriber opens an email ";case"clicked":return"When subscriber clicks a link ".concat(u.link," ");case"unsubscribed":return"When subscriber unsubscribes ";default:return"Set up workflow trigger "}}),l=N(()=>{const{config:u}=t.value;switch(u.type){case"subscriber_added":case"subscribed":return d(u.group_ids);case"clicked":return u.link.url}return""}),d=u=>le.value.filter(m=>u.includes(m.id)).map(m=>m.mail_type).join(", ");return(u,m)=>(_(),b("div",Vt,[c("span",null,F(s(e)),1),s(l)?(_(),b("span",Yt,F(s(l)),1)):R("",!0)]))}}),qt={class:"normal-node"},Zt={class:"mt-8px"},Ht={key:0,class:"font-bold"},Jt=j({__name:"ActionNode",props:{type:{default:"trigger"},nodeKey:{default:""}},setup(n){const o=n,t=N(()=>fe.value[o.nodeKey]),e=N(()=>{if(t.value.complete&&t.value.group_ids.length>0)switch(t.value.action){case"add_to_subscribers":return"Add to group(s) ";case"remove_from_subscribers":return"Remove from group(s) ";case"mark_as_unsubscribe":return"Mark as unsubscribed"}return"Define action"}),l=N(()=>{if(t.value.complete)switch(t.value.action){case"add_to_subscribers":case"remove_from_subscribers":return d(t.value.group_ids)}return""}),d=u=>le.value.filter(m=>u.includes(m.id)).map(m=>m.mail_type).join(", ");return(u,m)=>{const v=Y;return _(),b("div",qt,[c("div",null,[r(v,{name:"flow-action",size:"16"})]),c("div",Zt,[c("span",null,F(s(e)),1),s(l)?(_(),b("span",Ht,F(s(l)),1)):R("",!0)])])}}}),Qt={class:"normal-node"},Xt={class:"mt-8px"},en=j({__name:"DelayNode",props:{type:{default:"delay"},nodeKey:{default:""}},setup(n){const o=n,t=N(()=>pe.value[o.nodeKey]),e=N(()=>t.value.complete?"Wait ".concat(t.value.value," ").concat(t.value.unit):"Set delay");return(l,d)=>{const u=Y;return _(),b("div",Qt,[c("div",null,[r(u,{name:"flow-delay",size:"16"})]),c("div",Xt,F(s(e)),1)])}}}),tn={class:"normal-node"},nn={class:"mt-8px"},on=j({__name:"EmailNode",props:{type:{default:"email"},nodeKey:{default:""}},setup(n){const o=n,t=N(()=>oe.value[o.nodeKey]),e=N(()=>t.value.complete?t.value.name:"Set email");return(l,d)=>{const u=Y;return _(),b("div",tn,[c("div",null,[r(u,{name:"flow-email",size:"16"})]),c("div",nn,F(s(e)),1)])}}}),an=z(on,[["__scopeId","data-v-9bb21c05"]]),sn={class:"normal-node"},ln={class:"mt-8px"},rn=j({__name:"WebhookNode",props:{type:{default:"webhook"},nodeKey:{default:""}},setup(n){const o=n,t=N(()=>_e.value[o.nodeKey]),e=N(()=>t.value.complete?t.value.url:"Set webhook");return(l,d)=>{const u=Y;return _(),b("div",sn,[c("div",null,[r(u,{name:"flow-webhook",size:"16"})]),c("div",ln,F(s(e)),1)])}}}),un={};function cn(n,o){return _(),b("div")}const dn=z(un,[["render",cn]]),pn=j({__name:"index",props:{type:{default:"trigger"},nodeKey:{default:""}},setup(n){const o=n,t=N(()=>{switch(o.type){case"trigger":return Gt;case"delay":return en;case"action":return Jt;case"email":return an;case"webhook":return rn;default:return dn}});return(e,l)=>(_(),U(Te(s(t)),{type:e.type,"node-key":e.nodeKey},null,8,["type","node-key"]))}}),_n=z(pn,[["__scopeId","data-v-c03efef8"]]),fn={key:0,class:"line"},mn={class:"node-title"},vn={key:1,class:"text"},yn={class:"tools-box"},gn=j({__name:"NormalNode",props:{last:{type:Boolean,default:!1},type:{default:"trigger"},nodeKey:{default:"root"}},emits:["addNode","delNormalNode","selectNode"],setup(n,{emit:o}){const t=n,e=o,l=N(()=>t.type!=="trigger"),d=N(()=>!m.value.complete),u=N(()=>t.nodeKey===h.value),m=N(()=>E.value[t.type][t.nodeKey]),v=N(()=>t.type?Ae(t.type):"");function w(){e("selectNode",t.type,t.nodeKey)}function k(f){e("addNode",f,m.value)}function i(){if(t.type==="email"){let f=!1;const C=E.value.email[t.nodeKey],D=E.value.condition,P=Object.entries(D);for(const[,K]of P){if(K.complete&&K.rules.length>0){for(const $ of K.rules)if($.type==="workflow"&&$.node_id===C.id){f=!0;break}}if(f)break}if(f){ue.error("The email node is used in the condition node and cannot be deleted",{close:!0});return}}je({title:"Please confirm",content:"Do you really want to delete this step?",onConfirm:async()=>{e("delNormalNode",t.type,t.nodeKey),await W("del")}})}return(f,C)=>{const D=Y;return _(),b(O,null,[s(l)?(_(),b("div",fn)):R("",!0),c("div",{class:Ke(["node-box",{warning:s(d),action:s(u)}]),onClick:w},[c("div",mn,[s(d)?(_(),U(D,{key:0,class:"icon",name:"warning",color:"#FDCA62"})):R("",!0),s(l)?(_(),b("span",vn,F(s(v)),1)):R("",!0)]),s(l)?(_(),b("span",{key:0,class:"del-node",onClick:Ie(i,["stop"])},[r(D,{name:"flow-del"})])):R("",!0),r(_n,{type:f.type,"node-key":f.nodeKey},null,8,["type","node-key"])],2),c("div",yn,[C[0]||(C[0]=c("div",{class:"line"},null,-1)),c("div",null,[r($e,{last:f.last,"parent-type":f.type,"parent-key":f.nodeKey,onAddNode:k},null,8,["last","parent-type","parent-key"])])])],64)}}}),me=z(gn,[["__scopeId","data-v-0b2e1f55"]]),bn={class:"node-title"},kn={class:"text-center"},hn={class:"mt-12px text-14px text-center"},wn={key:0,class:"font-bold"},Nn={class:"tools-box"},$n={class:"condition-box"},Cn={class:"condition-item"},xn={class:"condition-state success"},Dn={class:"tools-box"},Rn={key:0,class:"flow-tree"},Sn={class:"condition-item"},Un={class:"condition-state fail"},En={class:"tools-box"},jn={key:0,class:"flow-tree"},An=j({name:"ConditionNode",__name:"ConditionNode",props:{type:{default:"trigger"},nodeKey:{default:"root"}},emits:["delCondition","selectNode"],setup(n,{emit:o}){const t=n,e=o,l=N(()=>!u.value.complete),d=N(()=>t.nodeKey===h.value),u=N(()=>x.value[t.nodeKey]),m=new Map([["clicked"," had any link clicked"],["link_clicked"," had a specific link clicked"],["link_not_clicked"," did not have a specific link clicked"],["opened"," was opened"],["not_opened"," was not opened"],["opened_with_not_clicked"," was opened with no links clicked"]]),v=N(()=>{const{rules:p}=u.value;if(p.length>0&&p[0].type!==null)switch(p[0].type){case"campaign":return p[0].campaign.name;case"workflow":return Pt(p[0].node_id,"email")}return""}),w=N(()=>{const{complete:p,rules:a,logic_type:A}=u.value;if(p&&a.length>0&&a[0].type!==null){let T=m.get(a[0].action)||"";return a.length>1&&(T+=" ".concat(A," +").concat(a.length-1," condition")),T}return"Define condition"}),k=()=>{e("selectNode","condition",t.nodeKey)},i=(p,a)=>{e("selectNode",p,a)};async function f(p,a){const A=xt(p,a);await W("add"),i(A.type,A.nodeKey)}async function C(p){const a=Dt(p,t.nodeKey);await W("add"),i(a.type,a.nodeKey)}async function D(p,a){const A=Rt(p,a);await W("add"),i(A.type,A.nodeKey)}async function P(p){const a=St(p,t.nodeKey);await W("add"),i(a.type,a.nodeKey)}function K(){e("delCondition",t.nodeKey)}function $(p){ze(p)}function Re(p,a){Oe(p,t.nodeKey,a),h.value===a&&i("trigger","root")}function Se(p,a){Me(p,t.nodeKey,a),h.value===a&&i("trigger","root")}return(p,a)=>{const A=Y,ee=at("ConditionNode",!0);return _(),b(O,null,[a[8]||(a[8]=c("div",{class:"line"},null,-1)),c("div",{class:Ke(["node-box",{warning:s(l),action:s(d)}]),onClick:k},[c("div",bn,[s(l)?(_(),U(A,{key:0,class:"icon",name:"warning"})):R("",!0),a[0]||(a[0]=c("span",{class:"text"},"Condition",-1))]),c("span",{class:"del-node",onClick:Ie(K,["stop"])},[r(A,{name:"flow-del"})]),c("div",kn,[r(A,{size:"16",name:"flow-condition"})]),c("div",hn,[s(v)?(_(),b("span",wn,F(s(v)),1)):R("",!0),c("span",null,F(s(w)),1)])],2),c("div",Nn,[a[7]||(a[7]=c("div",{class:"line"},null,-1)),c("div",$n,[c("div",Cn,[a[2]||(a[2]=c("div",{class:"horizontal-line right"},null,-1)),a[3]||(a[3]=c("div",{class:"line"},null,-1)),c("div",xn,[r(A,{name:"flow-success",size:"20"})]),c("div",Dn,[a[1]||(a[1]=c("div",{class:"line"},null,-1)),c("div",null,[r($e,{last:s(u).yes.length===0,"parent-type":p.type,"parent-key":p.nodeKey,onAddNode:f},null,8,["last","parent-type","parent-key"])])]),s(u).yes.length?(_(),b("ul",Rn,[(_(!0),b(O,null,te(s(u).yes,(T,H)=>(_(),b("li",{key:T.key},[T.type=="condition"?(_(),U(ee,{key:0,type:"condition","node-key":T.key,onSelectNode:i,onDelCondition:$},null,8,["node-key"])):(_(),U(me,{key:1,last:H===s(u).yes.length-1,type:T.type,"node-key":T.key,onAddNode:C,onSelectNode:i,onDelNormalNode:Re},null,8,["last","type","node-key"]))]))),128))])):R("",!0)]),c("div",Sn,[a[5]||(a[5]=c("div",{class:"horizontal-line left"},null,-1)),a[6]||(a[6]=c("div",{class:"line"},null,-1)),c("div",Un,[r(A,{name:"flow-fail",size:"20"})]),c("div",En,[a[4]||(a[4]=c("div",{class:"line"},null,-1)),c("div",null,[r($e,{last:s(u).no.length===0,"parent-type":p.type,"parent-key":p.nodeKey,onAddNode:D},null,8,["last","parent-type","parent-key"])])]),s(u).no.length?(_(),b("ul",jn,[(_(!0),b(O,null,te(s(u).no,(T,H)=>(_(),b("li",{key:T.key},[T.type=="condition"?(_(),U(ee,{key:0,type:"condition","node-key":T.key,onSelectNode:i,onDelCondition:$},null,8,["node-key"])):(_(),U(me,{key:1,last:H===s(u).no.length-1,type:T.type,"node-key":T.key,onAddNode:P,onSelectNode:i,onDelNormalNode:Se},null,8,["last","type","node-key"]))]))),128))])):R("",!0)])])])],64)}}}),Tn=z(An,[["__scopeId","data-v-fbf5dbc0"]]),Kn={class:"flow-container"},In={class:"flow-tree"},Bn=j({__name:"index",setup(n){async function o(d,u){const m=Ct(d,u.nodeKey);await W("add"),l(m.type,m.nodeKey)}function t(d){ze(d)}function e(d,u){Le(d,u),h.value===u&&l("trigger","root")}function l(d,u){ge.value=Date.now(),ne.value=d,h.value=u}return(d,u)=>(_(),b("div",Kn,[c("ul",In,[c("li",null,[r(me,{last:s(B).length===0,type:"trigger","node-key":"root",onSelectNode:l,onAddNode:o},null,8,["last"])]),(_(!0),b(O,null,te(s(B),(m,v)=>(_(),b("li",{key:m.key},[m.type=="condition"?(_(),U(Tn,{key:0,type:"condition","node-key":m.key,onSelectNode:l,onDelCondition:t},null,8,["node-key"])):(_(),U(me,{key:1,last:v===s(B).length-1,type:m.type,"node-key":m.key,onAddNode:o,onSelectNode:l,onDelNormalNode:e},null,8,["last","type","node-key"]))]))),128))])]))}}),Fn=z(Bn,[["__scopeId","data-v-3663809b"]]),Pn={class:"p-20px"},Ln=j({__name:"TriggerConfig",setup(n,{expose:o}){const t=G("formRef"),e=y({type:"subscriber_added",group_ids:[]}),l={group:{trigger:["change"],validator:()=>(e.value.type==="subscriber_added"||e.value.type==="subscribed")&&!e.value.group_ids.length?new Error("Please select group"):!0},link:{trigger:["input","blur"],validator:()=>e.value.type==="clicked"&&!e.value.link.url?new Error("Please enter link"):!0}},d=y([{label:"When a new email joins group(s)",value:"subscriber_added"}]),u=y([]),m=i=>{switch(i){case"subscriber_added":case"subscribed":e.value={type:i,group_ids:[]};break;case"clicked":e.value={type:i,link:{url:""}};break;case"opened":case"unsubscribed":e.value={type:i};break}},v=async()=>{u.value=le.value.map(i=>({label:i.mail_type,value:i.id}))};return(()=>{if(v(),h.value){const i=de.value[h.value];i&&(e.value=V(i.config))}})(),o({submit:async()=>{var i;if(await((i=t.value)==null?void 0:i.validate()),h.value){const f=de.value[h.value];f.config=V(e.value),f.complete=!0}}}),(i,f)=>{const C=se,D=Q,P=ye,K=X;return _(),b("div",Pn,[r(K,{ref_key:"formRef",ref:t,model:s(e),rules:l},{default:g(()=>[r(D,{label:"Trigger"},{default:g(()=>[r(C,{value:s(e).type,options:s(d),"onUpdate:value":m},null,8,["value","options"])]),_:1}),s(e).type==="subscriber_added"||s(e).type==="subscribed"?(_(),U(D,{key:0,label:"Group",path:"group"},{default:g(()=>[r(C,{value:s(e).group_ids,"onUpdate:value":f[0]||(f[0]=$=>s(e).group_ids=$),multiple:!0,filterable:!0,options:s(u)},null,8,["value","options"])]),_:1})):R("",!0),s(e).type==="clicked"?(_(),U(D,{key:1,label:"Link",path:"link"},{default:g(()=>[r(P,{value:s(e).link.url,"onUpdate:value":f[1]||(f[1]=$=>s(e).link.url=$)},null,8,["value"])]),_:1})):R("",!0)]),_:1},8,["model"])])}}}),zn={class:"p-20px"},On=j({__name:"EmailConfig",setup(n,{expose:o}){const t=G("formRef"),e=ae({name:"",subject:"",from_name:"",from:"",email_id:null,track_opens:!0,track_clicks:!0,track_unsubscribe:!0}),l=y([]),d={email_id:{trigger:["change"],validator:()=>e.email_id?!0:new Error("Please select email template")},name:{trigger:["blur","input"],validator:()=>e.name?!0:new Error("Please enter email name")},subject:{trigger:["blur","input"],validator:()=>e.subject?!0:new Error("Please enter email subject")},from_name:{trigger:["blur","input"],validator:()=>e.from_name?!0:new Error("Please enter sender name")},from:{trigger:["blur","input"],validator:()=>e.from?ft(e.from)?!0:new Error("Please enter a valid email address"):new Error("Please enter sender email")}},u=(k,i)=>{const{data:f}=i;ve(f)&&(e.from_name=f.full_name)},m=()=>{if(v(),h.value){const k=oe.value[h.value];e.name=k.name,e.subject=k.subject,e.from_name=k.from_name,e.from=k.from,e.email_id=k.email_id===0?null:k.email_id,e.track_opens=k.track_opens,e.track_clicks=k.track_clicks,e.track_unsubscribe=k.track_unsubscribe}},v=async()=>{const{message:k}=await et();Ce(k)&&k.length>0&&(l.value=k.map(i=>({label:i.name,value:i.id})))};return m(),o({submit:async()=>{var k;if(await((k=t.value)==null?void 0:k.validate()),h.value){const i=oe.value[h.value];i.name=e.name,i.subject=e.subject,i.from_name=e.from_name,i.from=e.from,i.email_id=e.email_id===null?0:e.email_id,i.track_opens=e.track_opens,i.track_clicks=e.track_clicks,i.track_unsubscribe=e.track_unsubscribe,i.complete=!0}}}),(k,i)=>{const f=ye,C=Q,D=se,P=ct,K=X;return _(),b("div",zn,[r(K,{ref_key:"formRef",ref:t,model:s(e),rules:d},{default:g(()=>[r(C,{label:"Email name",path:"name"},{default:g(()=>[r(f,{value:s(e).name,"onUpdate:value":i[0]||(i[0]=$=>s(e).name=$),placeholder:"Name"},null,8,["value"])]),_:1}),r(C,{label:"Sender email",path:"from"},{default:g(()=>[r(mt,{value:s(e).from,"onUpdate:value":i[1]||(i[1]=$=>s(e).from=$),"is-init":!0,placeholder:"Sender email",onChange:u},null,8,["value"])]),_:1}),r(C,{label:"Who is it from?",path:"from_name"},{default:g(()=>[r(f,{value:s(e).from_name,"onUpdate:value":i[2]||(i[2]=$=>s(e).from_name=$),placeholder:"Sender name"},null,8,["value"])]),_:1}),r(C,{label:"Subject",path:"subject"},{default:g(()=>[r(f,{value:s(e).subject,"onUpdate:value":i[3]||(i[3]=$=>s(e).subject=$),placeholder:"Email subject"},null,8,["value"])]),_:1}),r(C,{label:"Template",path:"email_id"},{default:g(()=>[r(D,{value:s(e).email_id,"onUpdate:value":i[4]||(i[4]=$=>s(e).email_id=$),options:s(l)},null,8,["value","options"])]),_:1}),R("",!0),R("",!0),r(C,{label:"Whether to enable the unsubscribe link and collect unsubscribe statistics"},{default:g(()=>[r(P,{value:s(e).track_unsubscribe,"onUpdate:value":i[7]||(i[7]=$=>s(e).track_unsubscribe=$)},null,8,["value"])]),_:1})]),_:1},8,["model"])])}}}),Mn={class:"p-20px"},Wn={class:"w-140px mr-12px"},Vn={class:"flex-1"},Yn=j({__name:"DelayConfig",setup(n,{expose:o}){const t=G("formRef"),e=ae({value:0,unit:"days"}),l=y([{label:"second(s)",value:"seconds"},{label:"minute(s)",value:"minutes"},{label:"hour(s)",value:"hours"},{label:"day(s)",value:"days"}]),d={value:{trigger:["blur","input"],validator:()=>e.value<=0?new Error("Value must be at least 1"):e.unit==="days"&&e.value>700?new Error("Value must be less than 700"):Number.isInteger(e.value)?!0:new Error("Value must be an integer")}};return(()=>{if(h.value){const v=pe.value[h.value];e.value=v.value,e.unit=v.unit}})(),o({submit:async()=>{var v;if(await((v=t.value)==null?void 0:v.validate()),h.value){const w=pe.value[h.value];w.value=e.value,w.unit=e.unit,w.complete=!0}}}),(v,w)=>{const k=dt,i=se,f=Q,C=X;return _(),b("div",Mn,[r(C,{ref_key:"formRef",ref:t,model:s(e),rules:d},{default:g(()=>[r(f,{label:"Wait",path:"value"},{default:g(()=>[c("div",Wn,[r(k,{value:s(e).value,"onUpdate:value":w[0]||(w[0]=D=>s(e).value=D),min:0,"show-button":!1},null,8,["value"])]),c("div",Vn,[r(i,{value:s(e).unit,"onUpdate:value":w[1]||(w[1]=D=>s(e).unit=D),options:s(l)},null,8,["value","options"])])]),_:1})]),_:1},8,["model"])])}}}),Gn={class:"p-20px"},qn=j({__name:"ActionConfig",setup(n,{expose:o}){const t=G("formRef"),e=ae({action:"add_to_subscribers",group_ids:[]}),l=y([{label:"添加到联系人列表中",value:"add_to_subscribers"},{label:"从联系人列表中删除",value:"remove_from_subscribers"},{label:"标记为已退订",value:"mark_as_unsubscribe"}]),d=y([]),u={group:{trigger:["change"],validator:()=>(e.action==="add_to_subscribers"||e.action==="remove_from_subscribers")&&!e.group_ids.length?new Error("Please select group"):!0}},m=()=>{e.group_ids=[]},v=async()=>{d.value=le.value.map(i=>({label:i.mail_type,value:i.id}))};return(()=>{if(v(),h.value){const i=fe.value[h.value];e.action=i.action,e.group_ids=V(i.group_ids)}})(),o({submit:async()=>{var i;if(await((i=t.value)==null?void 0:i.validate()),h.value){const f=fe.value[h.value];f.action=e.action,f.group_ids=V(e.group_ids),f.complete=!0}}}),(i,f)=>{const C=se,D=Q,P=X;return _(),b("div",Gn,[r(P,{ref_key:"formRef",ref:t,model:s(e),rules:u},{default:g(()=>[r(D,{label:"Choose an action"},{default:g(()=>[r(C,{value:s(e).action,"onUpdate:value":[f[0]||(f[0]=K=>s(e).action=K),m],options:s(l)},null,8,["value","options"])]),_:1}),Be(r(D,{label:"Group",path:"group"},{default:g(()=>[r(C,{value:s(e).group_ids,"onUpdate:value":f[1]||(f[1]=K=>s(e).group_ids=K),multiple:!0,filterable:!0,options:s(d)},null,8,["value","options"])]),_:1},512),[[Fe,s(e).action==="add_to_subscribers"||s(e).action==="remove_from_subscribers"]])]),_:1},8,["model"])])}}}),Zn={class:"p-20px"},Hn=j({__name:"WebhookConfig",setup(n,{expose:o}){const t=G("formRef"),e=ae({url:"",secret:""}),l={url:{required:!0,trigger:["blur","input"],message:"Please enter webhook URL"},secret:{required:!0,trigger:["blur","input"],message:"Please enter secret key"}},d=()=>{if(h.value){const m=_e.value[h.value];e.url=m.url,e.secret=m.secret}},u=async()=>{var m;if(await((m=t.value)==null?void 0:m.validate()),h.value){const v=_e.value[h.value];v.url=e.url,v.secret=e.secret,v.complete=!0}};return d(),o({submit:u}),(m,v)=>{const w=ye,k=Q,i=X;return _(),b("div",Zn,[r(i,{ref_key:"formRef",ref:t,model:s(e),rules:l},{default:g(()=>[r(k,{label:"Webhook URL",path:"url"},{default:g(()=>[r(w,{value:s(e).url,"onUpdate:value":v[0]||(v[0]=f=>s(e).url=f),placeholder:""},null,8,["value"])]),_:1}),r(k,{label:"Secret Key",path:"secret"},{default:g(()=>[r(w,{value:s(e).secret,"onUpdate:value":v[1]||(v[1]=f=>s(e).secret=f),placeholder:""},null,8,["value"])]),_:1})]),_:1},8,["model"])])}}}),Jn={class:"p-20px"},Qn={class:"flex-1"},Xn={class:"mt-12px"},eo={class:"mt-12px"},to={class:"condition-box mt-12px"},no={class:"flex justify-between items-center mb-16px"},oo=j({__name:"ConditionConfig",setup(n,{expose:o}){const t=G("formRef"),e=ae({logic_type:"or",rules:[{type:null}]}),l=y([{label:"Campaign activity",value:"campaign"},{label:"Workflow activity",value:"workflow"}]),d=y([]),u=y([]),m=y([{label:"had any link clicked",value:"clicked"},{label:"had a specific link clicked",value:"link_clicked"},{label:"did not have a specific link clicked",value:"link_not_clicked"},{label:"was opened",value:"opened"},{label:"was not opened",value:"not_opened"},{label:"was opened with no links clicked",value:"opened_with_not_clicked"}]),v=p=>({trigger:"change",validator:()=>e.rules[p].type?!0:new Error("Please select type")}),w=p=>({trigger:"change",validator:()=>{const a=e.rules[p];return a.type==="campaign"&&!a.campaign.id?new Error("Please select campaign"):!0}}),k=p=>({trigger:"change",validator:()=>{const a=e.rules[p];return(a.type==="workflow"||a.type==="campaign")&&!a.action?new Error("Please select action"):!0}}),i=p=>({trigger:"change",validator:()=>{const a=e.rules[p];return(a.type==="workflow"||a.type==="campaign")&&a.action==="link_clicked"&&!a.link.url?new Error("Please input link"):!0}}),f=(p,a)=>{switch(p){case"campaign":e.rules[a]={type:"campaign",action:null,campaign:{id:null,name:""},link:{url:""}};break;case"workflow":e.rules[a]={type:"workflow",node_id:null,action:null,link:{url:""}};break}},C=(p,a)=>{ve(a.data)&&e.rules[p].type==="campaign"&&(e.rules[p].campaign.name=a.data.subject)},D=()=>{e.rules.push({type:null})},P=p=>{e.rules.splice(p,1)},K=async()=>{const{message:p}=await tt();Ce(p)&&(d.value=p.map(a=>({value:a.id,data:a,label:a.subject||a.task_name})))},$=()=>{const p=B.value.filter(a=>a.type==="email").map(a=>oe.value[a.key]).filter(a=>a.complete&&a.id!==0);u.value=p.map(a=>({label:a.name,value:a.id}))};return(()=>{if(K(),$(),h.value){const p=x.value[h.value];e.logic_type=p.logic_type,e.rules=V(p.rules)}})(),o({submit:async()=>{var p;if(await((p=t.value)==null?void 0:p.validate()),h.value){const a=x.value[h.value];a.logic_type=e.logic_type,a.rules=V(e.rules),a.complete=!0}}}),(p,a)=>{const A=ce,ee=Pe,T=pt,H=xe,ie=se,J=Q,Ge=ye,qe=X;return _(),b("div",Jn,[r(qe,{ref_key:"formRef",ref:t,model:s(e)},{default:g(()=>[r(J,{label:"Create a condition"},{default:g(()=>[c("div",Qn,[a[6]||(a[6]=c("div",{class:"text-desc"}," Add up to 5 conditions. Define whether any or all of them must be applicable, for the condition to be met. ",-1)),r(ee,{value:s(e).logic_type,"onUpdate:value":a[0]||(a[0]=S=>s(e).logic_type=S)},{default:g(()=>[c("div",Xn,[r(A,{value:"or"},{default:g(()=>a[1]||(a[1]=[c("div",null,"Any rule",-1),c("div",{class:"mt-8px text-desc"}," Select one or a few conditions where ANY rule can match the criteria. ",-1)])),_:1,__:[1]})]),c("div",eo,[r(A,{value:"and"},{default:g(()=>a[2]||(a[2]=[c("div",null,"All rules",-1),c("div",{class:"mt-8px text-desc"}," Select one or a few conditions where ALL rules must match the criteria. ",-1)])),_:1,__:[2]})])]),_:1},8,["value"]),(_(!0),b(O,null,te(s(e).rules,(S,I)=>(_(),b(O,{key:I},[I!==0?(_(),U(T,{key:0,class:"mt-12px!","title-placement":"left"},{default:g(()=>[M(F(s(e).logic_type),1)]),_:1})):R("",!0),c("div",to,[c("div",no,[a[4]||(a[4]=c("span",null,"Condition",-1)),s(e).rules.length>1?(_(),U(H,{key:0,size:"small",onClick:L=>P(I)},{default:g(()=>a[3]||(a[3]=[M("Delete")])),_:2,__:[3]},1032,["onClick"])):R("",!0)]),r(J,{"show-label":!1,path:"rules[".concat(I,"].type"),rule:v(I)},{default:g(()=>[r(ie,{value:S.type,options:s(l),"onUpdate:value":L=>f(L,I)},null,8,["value","options","onUpdate:value"])]),_:2},1032,["path","rule"]),S.type==="campaign"?(_(),U(J,{key:0,"show-label":!1,path:"rules[".concat(I,"].campaign.id"),rule:w(I)},{default:g(()=>[r(ie,{value:S.campaign.id,"onUpdate:value":[L=>S.campaign.id=L,(L,Ze)=>C(I,Ze)],options:s(d)},null,8,["value","onUpdate:value","options"])]),_:2},1032,["path","rule"])):R("",!0),S.type==="workflow"?(_(),U(J,{key:1,"show-label":!1,path:"rules[".concat(I,"].workflow.node_id")},{default:g(()=>[r(ie,{value:S.node_id,"onUpdate:value":L=>S.node_id=L,options:s(u)},null,8,["value","onUpdate:value","options"])]),_:2},1032,["path"])):R("",!0),S.type==="campaign"&&S.campaign.id||S.type==="workflow"&&S.node_id?(_(),b(O,{key:2},[r(J,{"show-label":!1,path:"rules[".concat(I,"].action"),rule:k(I)},{default:g(()=>[r(ie,{value:S.action,"onUpdate:value":L=>S.action=L,options:s(m)},null,8,["value","onUpdate:value","options"])]),_:2},1032,["path","rule"]),Be(r(J,{"show-label":!1,path:"rules[".concat(I,"].link.url"),rule:i(I)},{default:g(()=>[r(Ge,{value:S.link.url,"onUpdate:value":L=>S.link.url=L,placeholder:"Please input link"},null,8,["value","onUpdate:value"])]),_:2},1032,["path","rule"]),[[Fe,S.action==="link_clicked"]])],64)):R("",!0)])],64))),128)),r(H,{class:"mt-12px",size:"small",onClick:D},{default:g(()=>a[5]||(a[5]=[M(" Add another condition ")])),_:1,__:[5]})])]),_:1})]),_:1},8,["model"])])}}}),ao=z(oo,[["__scopeId","data-v-c8dfd4ad"]]),so={};function lo(n,o){return _(),b("div")}const ro=z(so,[["render",lo]]),io={class:"flow-config"},uo={class:"config-title"},co={class:"text-14px font-bold"},po={class:"flex-1 overflow-auto"},_o={class:"config-footer"},fo=j({__name:"index",setup(n){const o=y(),t=N(()=>{switch(ne.value){case"trigger":return Ln;case"email":return On;case"action":return qn;case"delay":return Yn;case"webhook":return Hn;case"condition":return ao;default:return ro}}),e=N(()=>{const d=ne.value;return d?Ae(d):""}),l=async()=>{var d,u;await((u=(d=o.value)==null?void 0:d.submit)==null?void 0:u.call(d)),W()};return(d,u)=>{const m=xe;return _(),b("div",io,[c("div",uo,[c("span",co,F(s(e)),1)]),c("div",po,[(_(),U(Te(s(t)),{ref_key:"compRef",ref:o,key:s(ge)}))]),c("div",_o,[r(m,{class:"font-bold",size:"large",type:"primary",onClick:l},{default:g(()=>u[0]||(u[0]=[M("Save")])),_:1,__:[0]})])])}}}),mo=z(fo,[["__scopeId","data-v-c21ff526"]]),vo={class:"mail-flow"},yo={class:"relative flex flex-1 overflow-auto"},go={class:"absolute top-16px left-24px z-1000"},bo=j({__name:"index",setup(n){const o=st();o.params.id&&(De.value=Je(o.params.id));const t=lt(),e=async()=>{try{await W()}finally{setTimeout(()=>{t.go(-1)},1e3)}},l=async()=>{const{message:m}=await nt();le.value=Ce(m)?m:[]},d=y(!1);return(async()=>{try{d.value=!0,await Promise.all([l(),Ft()]),Ee()}finally{d.value=!1}})(),rt(()=>{Ee(),Ye()}),(m,v)=>{const w=xe,k=_t;return _(),U(k,{class:"w-full h-full",show:s(d)},{default:g(()=>[c("div",vo,[c("div",yo,[c("div",go,[r(w,{size:"large",class:"font-bold",secondary:"",onClick:e},{default:g(()=>v[0]||(v[0]=[M("Save and back")])),_:1,__:[0]})]),r(Fn),r(mo)])])]),_:1},8,["show"])}}}),Uo=z(bo,[["__scopeId","data-v-b7d1832f"]]);export{Uo as default};
|