@frigade/react 1.32.80 → 1.32.82
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/README.md +2 -0
- package/lib/index.d.ts +43 -5
- package/lib/index.js +5 -5
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +5 -5
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import ht,{createContext as za,useEffect as Fo,useState as Ie}from"react";import{ThemeProvider as Wa}from"styled-components";import gt,{useContext as Ua,useEffect as To,useState as tr}from"react";import{useCallback as mt,useContext as ll,useEffect as al}from"react";import Do,{useMemo as yr}from"react";var Sr="1.32.80 ";var Ee="NOT_STARTED_STEP",J="COMPLETED_FLOW",so="ABORTED_FLOW",ct="STARTED_FLOW",Ne="NOT_STARTED_FLOW",Le="COMPLETED_STEP",lo="STARTED_STEP";function Me(){let{publicApiKey:e,userId:t,apiUrl:o}=Do.useContext(K);return{config:yr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Sr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:yr(()=>`${o}/v1/public/`,[o])}}var Xs="frigade-last-call-at-",Qs="frigade-last-call-data-";function wt(){let{shouldGracefullyDegrade:e}=Do.useContext(K);return async(t,o)=>{if(e)return console.log(`Skipping ${t} call to Frigade due to error`),zt();let n=Xs+t,r=Qs+t;if(window&&window.localStorage&&o&&o.body&&o.method==="POST"){let s=window.localStorage.getItem(n),p=window.localStorage.getItem(r);if(s&&p&&p==o.body){let d=new Date(s);if(new Date().getTime()-d.getTime()<1e3)return zt()}window.localStorage.setItem(n,new Date().toISOString()),window.localStorage.setItem(r,o.body)}let i;try{i=await fetch(t,o)}catch(s){return zt(s)}return i?i.ok?i:zt(i.statusText):zt()}}function zt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Tt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Do.useContext(K);function o(){if(t){console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize");return}e||console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider")}return{verifySDKInitiated:o}}import{useContext as il,useState as br}from"react";import{useContext as Rs,useEffect as el,useState as tl}from"react";import ol from"swr";import{useContext as Zs}from"react";function Fe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:n,completedFlowsToKeepOpenDuringSession:r}=Zs(K);function i(c,f=!1){return e[c]??f}function s(c,f){t(C=>({...C,[c]:f}))}function p(c){t(f=>{let{[c]:C,...k}=f;return{...k}})}function d(c){r.includes(c)||n(f=>[...f,c])}function a(c){return r.includes(c)}function x(c){return Object.entries(e).some(([f,C])=>C&&f!=c)||o}return{getOpenFlowState:i,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:x,setKeepCompletedFlowOpenDuringSession:d,shouldKeepCompletedFlowOpenDuringSession:a}}var rl="unknown";function Ae(){let{config:e,apiUrl:t}=Me(),{publicApiKey:o,userId:n,organizationId:r,flows:i,setShouldGracefullyDegrade:s}=Rs(K),{resetOpenFlowState:p}=Fe(),[d,a]=tl(!1),x={data:i.map(m=>({flowId:m.id,flowState:J,lastStepId:null,userId:n,foreignUserId:n,stepStates:{},shouldTrigger:!1}))},c=m=>fetch(m,e).then(h=>{if(h.ok)return h.json();throw new Error("Failed to fetch user flow states")}).catch(h=>(console.log(`Error fetching ${m}: ${h}. Will gracefully degrade and hide Frigade`),s(!0),x)),{data:f,isLoading:C,mutate:k,error:E}=ol(o&&i&&n?`${t}userFlowStates?foreignUserId=${encodeURIComponent(n)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,c,{revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>x,onLoadingSlow:()=>x}),u=f==null?void 0:f.data;el(()=>{!d&&!C&&u&&a(!0)},[u,d,C]);async function b(m){if(u){let h=u.find(w=>w.flowId===m);h&&h.flowState!==J&&(h.flowState=J),await k(Promise.resolve({...f,data:u}),{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function v(m,h,w){if(u){let N=u.find(U=>U.flowId===m);N&&(N.stepStates[h]=w,N.flowState=ct),await k(Promise.resolve({...f,data:u}),{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function P(m,h,w){if(u){let N=u.find(U=>U.flowId===m);N&&(N.lastStepId=h,N.stepStates[h]=w,N.flowState=ct),await k({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function T(m){if(u){let h=u.find(w=>w.flowId===m);h&&h.flowState!==Ne&&(h.flowState=Ne,h.lastStepId=rl,Object.keys(h.stepStates).forEach(w=>{h.stepStates[w].actionType=Ee,h.stepStates[w].createdAt=new Date().toISOString()}),await k({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1}),p(m))}}async function S(m,h){if(u){let w=u.find(N=>N.flowId===m);w&&w.stepStates[h]!==Ee&&(w.stepStates[h]=Ee),await k({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:u,isLoadingUserFlowStateData:!d,mutateUserFlowState:k,optimisticallyMarkFlowCompleted:b,optimisticallyMarkFlowNotStarted:T,optimisticallyMarkStepCompleted:v,optimisticallyMarkStepNotStarted:S,optimisticallyMarkStepStarted:P,error:E}}function Wt(){let{config:e,apiUrl:t}=Me(),{userFlowStatesData:o,mutateUserFlowState:n}=Ae(),{failedFlowResponses:r,setFailedFlowResponses:i,flowResponses:s,setFlowResponses:p}=il(K),[d,a]=br(new Set),[x,c]=br(new Set),f=wt();function C(u){let b=JSON.stringify(u);if(d.has(b))return null;d.add(b),a(d),x.add(u),c(x);let v=s==null?void 0:s.find(P=>P.flowSlug===u.flowSlug&&P.stepId===u.stepId&&P.actionType===u.actionType&&P.createdAt===u.createdAt);return f(`${t}flowResponses`,{...e,method:"POST",body:b}).then(P=>{P.status!==200&&P.status!==201?(console.log("Failed to send flow response for step "+u.stepId+". Will retry again later."),i([...r,u])):v||p(T=>[...T??[],u])})}async function k(u){u.foreignUserId&&(u.actionType===ct||u.actionType===Ne?await C(u):u.actionType===J?await C(u):u.actionType===lo?await C(u):u.actionType===Le?await C(u):u.actionType===so?await C(u):u.actionType===Ee&&await C(u))}function E(){let u=[];return o==null||o.forEach(b=>{if(b&&b.stepStates&&Object.keys(b.stepStates).length!==0)for(let v in b.stepStates){let P=b.stepStates[v];u.push({foreignUserId:b.foreignUserId,flowSlug:b.flowId,stepId:P.stepId,actionType:P.actionType,data:{},createdAt:new Date(P.createdAt),blocked:P.blocked,hidden:P.hidden})}}),[...u,...s]}return{addResponse:k,setFlowResponses:p,getFlowResponses:E}}import pl from"swr";var nl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,wr=e=>{let t=nl.exec(e);if(t===null)return null;let o=null;return t.forEach((n,r)=>{let i=sl(n,"'","");i.startsWith("flow_")&&(o=i)}),o},sl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function X(){let{config:e,apiUrl:t}=Me(),{flows:o,setFlows:n,userId:r,publicApiKey:i,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,setFlowResponses:x,setShouldGracefullyDegrade:c}=ll(K),f={data:[]},{verifySDKInitiated:C}=Tt(),{addResponse:k,getFlowResponses:E}=Wt(),u=g=>fetch(g,e).then(y=>y.ok?y.json():(console.log(`Error fetching ${g} (${y.status}): ${y.statusText}. .Will gracefully degrade and hide Frigade`),c(!0),f)).catch(y=>(console.log(`Error fetching ${g}: ${y}. Will gracefully degrade and hide Frigade`),c(!0),f)),{userFlowStatesData:b,isLoadingUserFlowStateData:v,optimisticallyMarkFlowCompleted:P,optimisticallyMarkFlowNotStarted:T,optimisticallyMarkStepCompleted:S,optimisticallyMarkStepNotStarted:m,optimisticallyMarkStepStarted:h}=Ae(),{data:w,error:N,isLoading:U}=pl(i?`${t}flows`:null,u,{keepPreviousData:!0});al(()=>{if(N){console.error(N);return}w&&w.data&&(w.data=n(w.data))},[w,N]);function W(g){if(U)return null;let y=o.find(B=>B.slug===g);return!y&&o.length>0&&!v&&!U?(console.log(`Flow with slug ${g} not found`),null):(y==null?void 0:y.active)===!1?null:y}function A(g){var z;if(!W(g))return[];let y=W(g).data;return y?(y=_(y),(((z=JSON.parse(y))==null?void 0:z.data)??[]).map(L=>{let Be=Z(L);return{handleSecondaryButtonClick:()=>{L.skippable===!0&&Y(g,L.id,{skipped:!0})},...L,complete:Q(g,L.id)===Le||Be>=1,blocked:ge(g,L.id),hidden:M(g,L.id),handlePrimaryButtonClick:()=>{(!L.completionCriteria&&(L.autoMarkCompleted||L.autoMarkCompleted===void 0)||L.completionCriteria&&L.autoMarkCompleted===!0)&&Y(g,L.id)},progress:Be}}).filter(L=>L.hidden!==!0)):[]}function _(g){return g.replaceAll(/\${(.*?)}/g,(y,B)=>s[B]===void 0?"":String(s[B]).replace(/[\u00A0-\u9999<>\&]/g,function(z){return"&#"+z.charCodeAt(0)+";"}).replaceAll(/[\\]/g,"\\\\").replaceAll(/[\"]/g,'\\"').replaceAll(/[\/]/g,"\\/").replaceAll(/[\b]/g,"\\b").replaceAll(/[\f]/g,"\\f").replaceAll(/[\n]/g,"\\n").replaceAll(/[\r]/g,"\\r").replaceAll(/[\t]/g,"\\t"))}function j(g){if(!W(g))return[];let y=W(g).data;return y?(y=_(y),JSON.parse(y)??{}):[]}function I(g,y){p(B=>({...B,[g]:y}))}function ie(g){!v&&!U&&g&&JSON.stringify(s)!=JSON.stringify({...s,...g})&&Object.keys(g).forEach(y=>{I(y,g[y])})}let fe=mt(async(g,y,B)=>{C();let z={foreignUserId:r,flowSlug:g,stepId:y,actionType:lo,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};ae(z)&&(await h(g,y,z),k(z))},[r,b]),H=mt(async(g,y,B)=>{C();let z={foreignUserId:r,flowSlug:g,stepId:y,actionType:Ee,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};ae(z)&&(await m(g,y),k(z))},[r,b]),Y=mt(async(g,y,B)=>{C();let z={foreignUserId:r,flowSlug:g,stepId:y,actionType:Le,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};ae(z)&&(await S(g,y,z),k(z))},[r,b]),ve=mt(async(g,y)=>{if(C(),$e(g)===Ne)return;let B={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:Ne,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};await T(g),ae(B)&&k(B)},[r,b]),te=mt(async(g,y)=>{C();let B={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:ct,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};ae(B)&&k(B)},[r,b]),q=mt(async(g,y)=>{C();let B={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:J,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};ae(B)&&(await P(g),k(B))},[r,b]),he=mt(async(g,y)=>{C();let B={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:so,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};ae(B)&&(await P(g),k(B))},[r,b]);function ae(g){var y;if(!b&&g.actionType===Ee)return!1;if(b){let B=b.find(z=>z.flowId===g.flowSlug);if(g.actionType===Ee&&(!(B!=null&&B.stepStates[g.stepId])||B.stepStates[g.stepId].actionType===Ee)||B&&((y=B.stepStates[g.stepId])==null?void 0:y.actionType)===g.actionType||B&&B.flowState===J&&g.actionType===J)return!1}return!0}function Q(g,y){let B=O(g,y);return v?null:B?B.actionType:Ee}function ge(g,y){let B=O(g,y);return B?B.blocked:!1}function M(g,y){let B=O(g,y);return B?B.hidden:!1}function O(g,y){if(v)return null;let B=b==null?void 0:b.find(z=>z.flowId===g);return!B||!B.stepStates[y]?null:B.stepStates[y]??null}function ne(g){var B;if(v||!b)return null;if($e(g)===Ne)return A(g)[0]??null;let y=(B=b.find(z=>z.flowId===g))==null?void 0:B.lastStepId;return y?A(g).find(z=>z.id===y):null}function G(g){let y=ne(g);if(!y)return 0;let B=A(g).findIndex(z=>z.id===y.id)??0;return Q(g,y.id)===Le&&B<A(g).length-1?B+1:B}function Z(g){if(!g.completionCriteria)return;let y=wr(g.completionCriteria);if(y===null)return;let B=je(y),z=dt(y);return z===0?void 0:B/z}function $e(g){let y=b==null?void 0:b.find(B=>B.flowId===g);return y?y.flowState:null}function je(g){let y=A(g);return y.length===0?0:y.filter(z=>Q(g,z.id)===Le).length}function dt(g){return A(g).length}function V(g){return JSON.parse(o.find(y=>y.slug===g).data)}function Te(g){if(v)return!0;if(g!=null&&g.targetingLogic&&b){let y=b.find(B=>B.flowId===g.slug);if(y)return y.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&r&&r.startsWith("guest_"))}function Ge(g){return!Te(W(g))}return{getFlow:W,getFlowData:V,isLoading:v||U,getStepStatus:Q,getFlowSteps:A,getCurrentStepIndex:G,markStepStarted:fe,markStepCompleted:Y,markFlowNotStarted:ve,markFlowStarted:te,markFlowCompleted:q,markFlowAborted:he,markStepNotStarted:H,getFlowStatus:$e,getNumberOfStepsCompleted:je,getNumberOfSteps:dt,targetingLogicShouldHideFlow:Te,setCustomVariable:I,updateCustomVariables:ie,customVariables:s,getStepOptionalProgress:Z,getFlowMetadata:j,isStepBlocked:ge,isStepHidden:M,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,isFlowAvailableToUser:Ge}}import{useCallback as Tr,useContext as dl,useEffect as cl}from"react";var Ft="guest_";function Ht(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:n,shouldGracefullyDegrade:r}=dl(K),{config:i,apiUrl:s}=Me(),{mutateUserFlowState:p}=Ae(),d=wt(),{verifySDKInitiated:a}=Tt();cl(()=>{if(e&&!t){if(e.startsWith(Ft))return;let f=`frigade-user-registered-${e}`;localStorage.getItem(f)||(d(`${s}users`,{...i,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(f,"true"))}},[e,r,t]);let x=Tr(async f=>{a();let C={foreignId:e,properties:f};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(C)}),n(k=>({...k,...f})),p()},[e,i,r,p]),c=Tr(async(f,C)=>{a();let E={foreignId:e,events:[{event:f,properties:C}]};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(E)}),p()},[e,i,p]);return{userId:e,setUserId:o,addPropertiesToUser:x,trackEventForUser:c}}import{v4 as _a}from"uuid";import _e,{useEffect as Oa,useState as Da}from"react";import Oe,{useEffect as Cl}from"react";import co from"styled-components";import ml from"react";import ul from"styled-components";var Fr="fr-",Vt="cfr-";function l(e,t){let o=`${Fr}${e}`;if(!t)return o;if(t.styleOverrides&&t.styleOverrides[e]){if(typeof t.styleOverrides[e]=="string")return o+" "+t.styleOverrides[e];if(typeof t.styleOverrides[e]=="object")return o+" "+Vt+e}return o}function F(e){if(!e.className||e.className.indexOf(Vt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Fr)?"":`:not(${o.map(n=>`.${n}`).join(", ")})`}function $o(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function qe(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${$o(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Ce(...e){return e.filter(Boolean).join(" ")}function jt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var fl=ul.div`
|
|
2
|
+
import ht,{createContext as za,useEffect as Fo,useState as Ie}from"react";import{ThemeProvider as Wa}from"styled-components";import gt,{useContext as Ua,useEffect as To,useState as tr}from"react";import{useCallback as mt,useContext as ll,useEffect as al}from"react";import Do,{useMemo as yr}from"react";var Sr="1.32.82 ";var Ee="NOT_STARTED_STEP",J="COMPLETED_FLOW",so="ABORTED_FLOW",ct="STARTED_FLOW",Ne="NOT_STARTED_FLOW",Le="COMPLETED_STEP",lo="STARTED_STEP";function Me(){let{publicApiKey:e,userId:t,apiUrl:o}=Do.useContext(K);return{config:yr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Sr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:yr(()=>`${o}/v1/public/`,[o])}}var Xs="frigade-last-call-at-",Qs="frigade-last-call-data-";function wt(){let{shouldGracefullyDegrade:e}=Do.useContext(K);return async(t,o)=>{if(e)return console.log(`Skipping ${t} call to Frigade due to error`),zt();let n=Xs+t,r=Qs+t;if(window&&window.localStorage&&o&&o.body&&o.method==="POST"){let s=window.localStorage.getItem(n),p=window.localStorage.getItem(r);if(s&&p&&p==o.body){let d=new Date(s);if(new Date().getTime()-d.getTime()<1e3)return zt()}window.localStorage.setItem(n,new Date().toISOString()),window.localStorage.setItem(r,o.body)}let i;try{i=await fetch(t,o)}catch(s){return zt(s)}return i?i.ok?i:zt(i.statusText):zt()}}function zt(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Tt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Do.useContext(K);function o(){if(t){console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize");return}e||console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider")}return{verifySDKInitiated:o}}import{useContext as il,useState as br}from"react";import{useContext as Rs,useEffect as el,useState as tl}from"react";import ol from"swr";import{useContext as Zs}from"react";function Fe(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:n,completedFlowsToKeepOpenDuringSession:r}=Zs(K);function i(c,f=!1){return e[c]??f}function s(c,f){t(C=>({...C,[c]:f}))}function p(c){t(f=>{let{[c]:C,...k}=f;return{...k}})}function d(c){r.includes(c)||n(f=>[...f,c])}function a(c){return r.includes(c)}function x(c){return Object.entries(e).some(([f,C])=>C&&f!=c)||o}return{getOpenFlowState:i,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:x,setKeepCompletedFlowOpenDuringSession:d,shouldKeepCompletedFlowOpenDuringSession:a}}var rl="unknown";function Ae(){let{config:e,apiUrl:t}=Me(),{publicApiKey:o,userId:n,organizationId:r,flows:i,setShouldGracefullyDegrade:s}=Rs(K),{resetOpenFlowState:p}=Fe(),[d,a]=tl(!1),x={data:i.map(m=>({flowId:m.id,flowState:J,lastStepId:null,userId:n,foreignUserId:n,stepStates:{},shouldTrigger:!1}))},c=m=>fetch(m,e).then(h=>{if(h.ok)return h.json();throw new Error("Failed to fetch user flow states")}).catch(h=>(console.log(`Error fetching ${m}: ${h}. Will gracefully degrade and hide Frigade`),s(!0),x)),{data:f,isLoading:C,mutate:k,error:E}=ol(o&&i&&n?`${t}userFlowStates?foreignUserId=${encodeURIComponent(n)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,c,{revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>x,onLoadingSlow:()=>x}),u=f==null?void 0:f.data;el(()=>{!d&&!C&&u&&a(!0)},[u,d,C]);async function b(m){if(u){let h=u.find(w=>w.flowId===m);h&&h.flowState!==J&&(h.flowState=J),await k(Promise.resolve({...f,data:u}),{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function v(m,h,w){if(u){let N=u.find(U=>U.flowId===m);N&&(N.stepStates[h]=w,N.flowState=ct),await k(Promise.resolve({...f,data:u}),{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function P(m,h,w){if(u){let N=u.find(U=>U.flowId===m);N&&(N.lastStepId=h,N.stepStates[h]=w,N.flowState=ct),await k({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}async function T(m){if(u){let h=u.find(w=>w.flowId===m);h&&h.flowState!==Ne&&(h.flowState=Ne,h.lastStepId=rl,Object.keys(h.stepStates).forEach(w=>{h.stepStates[w].actionType=Ee,h.stepStates[w].createdAt=new Date().toISOString()}),await k({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1}),p(m))}}async function S(m,h){if(u){let w=u.find(N=>N.flowId===m);w&&w.stepStates[h]!==Ee&&(w.stepStates[h]=Ee),await k({...f,data:u},{optimisticData:{...f,data:u},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:u,isLoadingUserFlowStateData:!d,mutateUserFlowState:k,optimisticallyMarkFlowCompleted:b,optimisticallyMarkFlowNotStarted:T,optimisticallyMarkStepCompleted:v,optimisticallyMarkStepNotStarted:S,optimisticallyMarkStepStarted:P,error:E}}function Wt(){let{config:e,apiUrl:t}=Me(),{userFlowStatesData:o,mutateUserFlowState:n}=Ae(),{failedFlowResponses:r,setFailedFlowResponses:i,flowResponses:s,setFlowResponses:p}=il(K),[d,a]=br(new Set),[x,c]=br(new Set),f=wt();function C(u){let b=JSON.stringify(u);if(d.has(b))return null;d.add(b),a(d),x.add(u),c(x);let v=s==null?void 0:s.find(P=>P.flowSlug===u.flowSlug&&P.stepId===u.stepId&&P.actionType===u.actionType&&P.createdAt===u.createdAt);return f(`${t}flowResponses`,{...e,method:"POST",body:b}).then(P=>{P.status!==200&&P.status!==201?(console.log("Failed to send flow response for step "+u.stepId+". Will retry again later."),i([...r,u])):v||p(T=>[...T??[],u])})}async function k(u){u.foreignUserId&&(u.actionType===ct||u.actionType===Ne?await C(u):u.actionType===J?await C(u):u.actionType===lo?await C(u):u.actionType===Le?await C(u):u.actionType===so?await C(u):u.actionType===Ee&&await C(u))}function E(){let u=[];return o==null||o.forEach(b=>{if(b&&b.stepStates&&Object.keys(b.stepStates).length!==0)for(let v in b.stepStates){let P=b.stepStates[v];u.push({foreignUserId:b.foreignUserId,flowSlug:b.flowId,stepId:P.stepId,actionType:P.actionType,data:{},createdAt:new Date(P.createdAt),blocked:P.blocked,hidden:P.hidden})}}),[...u,...s]}return{addResponse:k,setFlowResponses:p,getFlowResponses:E}}import pl from"swr";var nl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,wr=e=>{let t=nl.exec(e);if(t===null)return null;let o=null;return t.forEach((n,r)=>{let i=sl(n,"'","");i.startsWith("flow_")&&(o=i)}),o},sl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function X(){let{config:e,apiUrl:t}=Me(),{flows:o,setFlows:n,userId:r,publicApiKey:i,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,setFlowResponses:x,setShouldGracefullyDegrade:c}=ll(K),f={data:[]},{verifySDKInitiated:C}=Tt(),{addResponse:k,getFlowResponses:E}=Wt(),u=g=>fetch(g,e).then(y=>y.ok?y.json():(console.log(`Error fetching ${g} (${y.status}): ${y.statusText}. .Will gracefully degrade and hide Frigade`),c(!0),f)).catch(y=>(console.log(`Error fetching ${g}: ${y}. Will gracefully degrade and hide Frigade`),c(!0),f)),{userFlowStatesData:b,isLoadingUserFlowStateData:v,optimisticallyMarkFlowCompleted:P,optimisticallyMarkFlowNotStarted:T,optimisticallyMarkStepCompleted:S,optimisticallyMarkStepNotStarted:m,optimisticallyMarkStepStarted:h}=Ae(),{data:w,error:N,isLoading:U}=pl(i?`${t}flows`:null,u,{keepPreviousData:!0});al(()=>{if(N){console.error(N);return}w&&w.data&&(w.data=n(w.data))},[w,N]);function W(g){if(U)return null;let y=o.find(B=>B.slug===g);return!y&&o.length>0&&!v&&!U?(console.log(`Flow with slug ${g} not found`),null):(y==null?void 0:y.active)===!1?null:y}function A(g){var z;if(!W(g))return[];let y=W(g).data;return y?(y=_(y),(((z=JSON.parse(y))==null?void 0:z.data)??[]).map(L=>{let Be=Z(L);return{handleSecondaryButtonClick:()=>{L.skippable===!0&&Y(g,L.id,{skipped:!0})},...L,complete:Q(g,L.id)===Le||Be>=1,blocked:ge(g,L.id),hidden:M(g,L.id),handlePrimaryButtonClick:()=>{(!L.completionCriteria&&(L.autoMarkCompleted||L.autoMarkCompleted===void 0)||L.completionCriteria&&L.autoMarkCompleted===!0)&&Y(g,L.id)},progress:Be}}).filter(L=>L.hidden!==!0)):[]}function _(g){return g.replaceAll(/\${(.*?)}/g,(y,B)=>s[B]===void 0?"":String(s[B]).replace(/[\u00A0-\u9999<>\&]/g,function(z){return"&#"+z.charCodeAt(0)+";"}).replaceAll(/[\\]/g,"\\\\").replaceAll(/[\"]/g,'\\"').replaceAll(/[\/]/g,"\\/").replaceAll(/[\b]/g,"\\b").replaceAll(/[\f]/g,"\\f").replaceAll(/[\n]/g,"\\n").replaceAll(/[\r]/g,"\\r").replaceAll(/[\t]/g,"\\t"))}function j(g){if(!W(g))return[];let y=W(g).data;return y?(y=_(y),JSON.parse(y)??{}):[]}function I(g,y){p(B=>({...B,[g]:y}))}function ie(g){!v&&!U&&g&&JSON.stringify(s)!=JSON.stringify({...s,...g})&&Object.keys(g).forEach(y=>{I(y,g[y])})}let fe=mt(async(g,y,B)=>{C();let z={foreignUserId:r,flowSlug:g,stepId:y,actionType:lo,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};ae(z)&&(await h(g,y,z),k(z))},[r,b]),H=mt(async(g,y,B)=>{C();let z={foreignUserId:r,flowSlug:g,stepId:y,actionType:Ee,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};ae(z)&&(await m(g,y),k(z))},[r,b]),Y=mt(async(g,y,B)=>{C();let z={foreignUserId:r,flowSlug:g,stepId:y,actionType:Le,data:B??{},createdAt:new Date,blocked:!1,hidden:!1};ae(z)&&(await S(g,y,z),k(z))},[r,b]),ve=mt(async(g,y)=>{if(C(),$e(g)===Ne)return;let B={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:Ne,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};await T(g),ae(B)&&k(B)},[r,b]),te=mt(async(g,y)=>{C();let B={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:ct,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};ae(B)&&k(B)},[r,b]),q=mt(async(g,y)=>{C();let B={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:J,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};ae(B)&&(await P(g),k(B))},[r,b]),he=mt(async(g,y)=>{C();let B={foreignUserId:r,flowSlug:g,stepId:"unknown",actionType:so,data:y??{},createdAt:new Date,blocked:!1,hidden:!1};ae(B)&&(await P(g),k(B))},[r,b]);function ae(g){var y;if(!b&&g.actionType===Ee)return!1;if(b){let B=b.find(z=>z.flowId===g.flowSlug);if(g.actionType===Ee&&(!(B!=null&&B.stepStates[g.stepId])||B.stepStates[g.stepId].actionType===Ee)||B&&((y=B.stepStates[g.stepId])==null?void 0:y.actionType)===g.actionType||B&&B.flowState===J&&g.actionType===J)return!1}return!0}function Q(g,y){let B=O(g,y);return v?null:B?B.actionType:Ee}function ge(g,y){let B=O(g,y);return B?B.blocked:!1}function M(g,y){let B=O(g,y);return B?B.hidden:!1}function O(g,y){if(v)return null;let B=b==null?void 0:b.find(z=>z.flowId===g);return!B||!B.stepStates[y]?null:B.stepStates[y]??null}function ne(g){var B;if(v||!b)return null;if($e(g)===Ne)return A(g)[0]??null;let y=(B=b.find(z=>z.flowId===g))==null?void 0:B.lastStepId;return y?A(g).find(z=>z.id===y):null}function G(g){let y=ne(g);if(!y)return 0;let B=A(g).findIndex(z=>z.id===y.id)??0;return Q(g,y.id)===Le&&B<A(g).length-1?B+1:B}function Z(g){if(!g.completionCriteria)return;let y=wr(g.completionCriteria);if(y===null)return;let B=je(y),z=dt(y);return z===0?void 0:B/z}function $e(g){let y=b==null?void 0:b.find(B=>B.flowId===g);return y?y.flowState:null}function je(g){let y=A(g);return y.length===0?0:y.filter(z=>Q(g,z.id)===Le).length}function dt(g){return A(g).length}function V(g){return JSON.parse(o.find(y=>y.slug===g).data)}function Te(g){if(v)return!0;if(g!=null&&g.targetingLogic&&b){let y=b.find(B=>B.flowId===g.slug);if(y)return y.shouldTrigger===!1}return!!(g!=null&&g.targetingLogic&&r&&r.startsWith("guest_"))}function Ge(g){return!Te(W(g))}return{getFlow:W,getFlowData:V,isLoading:v||U,getStepStatus:Q,getFlowSteps:A,getCurrentStepIndex:G,markStepStarted:fe,markStepCompleted:Y,markFlowNotStarted:ve,markFlowStarted:te,markFlowCompleted:q,markFlowAborted:he,markStepNotStarted:H,getFlowStatus:$e,getNumberOfStepsCompleted:je,getNumberOfSteps:dt,targetingLogicShouldHideFlow:Te,setCustomVariable:I,updateCustomVariables:ie,customVariables:s,getStepOptionalProgress:Z,getFlowMetadata:j,isStepBlocked:ge,isStepHidden:M,hasActiveFullPageFlow:d,setHasActiveFullPageFlow:a,isFlowAvailableToUser:Ge}}import{useCallback as Tr,useContext as dl,useEffect as cl}from"react";var Ft="guest_";function Ht(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:n,shouldGracefullyDegrade:r}=dl(K),{config:i,apiUrl:s}=Me(),{mutateUserFlowState:p}=Ae(),d=wt(),{verifySDKInitiated:a}=Tt();cl(()=>{if(e&&!t){if(e.startsWith(Ft))return;let f=`frigade-user-registered-${e}`;localStorage.getItem(f)||(d(`${s}users`,{...i,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(f,"true"))}},[e,r,t]);let x=Tr(async f=>{a();let C={foreignId:e,properties:f};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(C)}),n(k=>({...k,...f})),p()},[e,i,r,p]),c=Tr(async(f,C)=>{a();let E={foreignId:e,events:[{event:f,properties:C}]};await d(`${s}users`,{...i,method:"POST",body:JSON.stringify(E)}),p()},[e,i,p]);return{userId:e,setUserId:o,addPropertiesToUser:x,trackEventForUser:c}}import{v4 as _a}from"uuid";import _e,{useEffect as Oa,useState as Da}from"react";import Oe,{useEffect as Cl}from"react";import co from"styled-components";import ml from"react";import ul from"styled-components";var Fr="fr-",Vt="cfr-";function l(e,t){let o=`${Fr}${e}`;if(!t)return o;if(t.styleOverrides&&t.styleOverrides[e]){if(typeof t.styleOverrides[e]=="string")return o+" "+t.styleOverrides[e];if(typeof t.styleOverrides[e]=="object")return o+" "+Vt+e}return o}function F(e){if(!e.className||e.className.indexOf(Vt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Fr)?"":`:not(${o.map(n=>`.${n}`).join(", ")})`}function $o(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function qe(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${$o(t)}: ${e.styleOverrides[t]};`).join(" "):""}function Ce(...e){return e.filter(Boolean).join(" ")}function jt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var fl=ul.div`
|
|
3
3
|
display: flex;
|
|
4
4
|
justify-content: center;
|
|
5
5
|
position: fixed;
|
|
@@ -1052,7 +1052,7 @@ ${n=>n.inlineStyles.map(([r,i])=>`.${Vt}${r}.${Vt}${r} { ${Object.entries(i).map
|
|
|
1052
1052
|
:hover {
|
|
1053
1053
|
opacity: 0.8;
|
|
1054
1054
|
}
|
|
1055
|
-
`,
|
|
1055
|
+
`,wx=Re.div``,Bn=Re.p`
|
|
1056
1056
|
color: ${e=>{var t,o;return(o=(t=e.appearance)==null?void 0:t.theme)==null?void 0:o.colorText}};
|
|
1057
1057
|
font-weight: 400;
|
|
1058
1058
|
font-size: 14px;
|
|
@@ -1062,7 +1062,7 @@ ${n=>n.inlineStyles.map(([r,i])=>`.${Vt}${r}.${Vt}${r} { ${Object.entries(i).map
|
|
|
1062
1062
|
flex-direction: row;
|
|
1063
1063
|
justify-content: flex-start;
|
|
1064
1064
|
align-items: center;
|
|
1065
|
-
`;var An=({stepData:e,collapsed:t,onClick:o,onPrimaryButtonClick:n,onSecondaryButtonClick:r,appearance:i,customStepTypes:s})=>{var x,c;let p=t?{}:{transform:"rotate(90deg)"};function d(){return ue.createElement(ue.Fragment,null,e.imageUri||e.videoUri?ue.createElement(Tn,{className:l("stepMediaContainer",i)},e.imageUri?ue.createElement(Fn,{className:l("stepImage",i),src:e.imageUri,style:e.imageStyle}):null,e.videoUri?ue.createElement(Bt,{appearance:i,videoUri:e.videoUri}):null):null,ue.createElement(Bn,{className:l("stepSubtitle",i),appearance:i,dangerouslySetInnerHTML:ce(e.subtitle)}),ue.createElement(Co,{className:l("checklistCTAContainer",i)},e.secondaryButtonTitle?ue.createElement(oe,{secondary:!0,title:e.secondaryButtonTitle,onClick:()=>r(),appearance:i}):null,ue.createElement(oe,{title:e.primaryButtonTitle??"Continue",onClick:()=>n(),appearance:i})))}function a(){if(!s)return null;let f=s[e.type];return f?f(e,i):null}return ue.createElement(wn,{onClick:()=>t?o():null,"data-testid":`step-${e.id}`,className:l("checklistStepContainer",i),appearance:i},ue.createElement(kn,{className:l("stepHeader",i)},ue.createElement(En,null,ue.createElement(ko,{value:e.complete,style:{width:"auto",borderTop:0},primaryColor:(x=i==null?void 0:i.theme)==null?void 0:x.colorPrimary,appearance:i}),ue.createElement(Pn,{appearance:i,className:l("stepTitle",i),dangerouslySetInnerHTML:ce(e.title)})),ue.createElement(vn,{className:l("stepChevronContainer",i),onClick:()=>o()},ue.createElement(Ot,{style:{...p,transition:"transform 0.1s ease-in-out"},color:(c=i==null?void 0:i.theme)==null?void 0:c.colorTextSecondary}))),ue.createElement(Ap,null,!t&&ue.createElement(Ip.div,{initial:{opacity:1,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:1,height:0},key:e.id,style:{overflow:"hidden"}},a()??d())))};import Dt from"styled-components";var
|
|
1065
|
+
`;var An=({stepData:e,collapsed:t,onClick:o,onPrimaryButtonClick:n,onSecondaryButtonClick:r,appearance:i,customStepTypes:s})=>{var x,c;let p=t?{}:{transform:"rotate(90deg)"};function d(){return ue.createElement(ue.Fragment,null,e.imageUri||e.videoUri?ue.createElement(Tn,{className:l("stepMediaContainer",i)},e.imageUri?ue.createElement(Fn,{className:l("stepImage",i),src:e.imageUri,style:e.imageStyle}):null,e.videoUri?ue.createElement(Bt,{appearance:i,videoUri:e.videoUri}):null):null,ue.createElement(Bn,{className:l("stepSubtitle",i),appearance:i,dangerouslySetInnerHTML:ce(e.subtitle)}),ue.createElement(Co,{className:l("checklistCTAContainer",i)},e.secondaryButtonTitle?ue.createElement(oe,{secondary:!0,title:e.secondaryButtonTitle,onClick:()=>r(),appearance:i}):null,ue.createElement(oe,{title:e.primaryButtonTitle??"Continue",onClick:()=>n(),appearance:i})))}function a(){if(!s)return null;let f=s[e.type];return f?f(e,i):null}return ue.createElement(wn,{onClick:()=>t?o():null,"data-testid":`step-${e.id}`,className:l("checklistStepContainer",i),appearance:i},ue.createElement(kn,{className:l("stepHeader",i)},ue.createElement(En,null,ue.createElement(ko,{value:e.complete,style:{width:"auto",borderTop:0},primaryColor:(x=i==null?void 0:i.theme)==null?void 0:x.colorPrimary,appearance:i}),ue.createElement(Pn,{appearance:i,className:l("stepTitle",i),dangerouslySetInnerHTML:ce(e.title)})),ue.createElement(vn,{className:l("stepChevronContainer",i),onClick:()=>o()},ue.createElement(Ot,{style:{...p,transition:"transform 0.1s ease-in-out"},color:(c=i==null?void 0:i.theme)==null?void 0:c.colorTextSecondary}))),ue.createElement(Ap,null,!t&&ue.createElement(Ip.div,{initial:{opacity:1,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:1,height:0},key:e.id,style:{overflow:"hidden"}},a()??d())))};import Dt from"styled-components";var $x=Dt.div`
|
|
1066
1066
|
background: #ffffff;
|
|
1067
1067
|
box-shadow: 0px 6px 25px rgba(0, 0, 0, 0.06);
|
|
1068
1068
|
border-radius: 6px;
|
|
@@ -1296,7 +1296,7 @@ ${n=>n.inlineStyles.map(([r,i])=>`.${Vt}${r}.${Vt}${r} { ${Object.entries(i).map
|
|
|
1296
1296
|
justify-content: center;
|
|
1297
1297
|
margin-left: 16px;
|
|
1298
1298
|
min-width: 200px;
|
|
1299
|
-
`,
|
|
1299
|
+
`,RC=oo.div`
|
|
1300
1300
|
display: flex;
|
|
1301
1301
|
justify-content: center;
|
|
1302
1302
|
align-items: flex-end;
|
|
@@ -1574,7 +1574,7 @@ ${n=>n.inlineStyles.map(([r,i])=>`.${Vt}${r}.${Vt}${r} { ${Object.entries(i).map
|
|
|
1574
1574
|
display: flex;
|
|
1575
1575
|
flex-direction: column;
|
|
1576
1576
|
flex: 1;
|
|
1577
|
-
`,
|
|
1577
|
+
`,dy=et.div`
|
|
1578
1578
|
display: flex;
|
|
1579
1579
|
flex-direction: column;
|
|
1580
1580
|
justify-content: center;
|