@frigade/react 1.33.15 → 1.33.16
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/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/package.json +7 -4
package/lib/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import Ct,{createContext as Bp,useEffect as Eo,useState as Oe}from"react";import{ThemeProvider as Ep}from"styled-components";import ht,{useContext as rp,useEffect as vo,useState as ar}from"react";import{useCallback as ft,useContext as kl,useEffect as Pl}from"react";import Vo,{useMemo as Er}from"react";var Br="1.33.15 ";var Ie="NOT_STARTED_STEP",J="COMPLETED_FLOW",po="ABORTED_FLOW",ut="STARTED_FLOW",De="NOT_STARTED_FLOW",$e="COMPLETED_STEP",co="STARTED_STEP";function _e(){let{publicApiKey:e,userId:t,apiUrl:o}=Vo.useContext(j);return{config:Er(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Br,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Er(()=>`${o}/v1/public/`,[o])}}var ul="frigade-last-call-at-",fl="frigade-last-call-data-";function kt(){let{shouldGracefullyDegrade:e,readonly:t}=Vo.useContext(j);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return Ft();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),Ft();let r=ul+o,n=fl+o;if(window&&window.localStorage&&i&&i.body&&i.method==="POST"){let p=window.localStorage.getItem(r),c=window.localStorage.getItem(n);if(p&&c&&c==i.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return Ft()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return Ft(p)}return s?s.ok?s:Ft(s.statusText):Ft()}}function Ft(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Pt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Vo.useContext(j);function o(){return t?(console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize"),!1):e?!0:(console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider"),!1)}return{verifySDKInitiated:o}}import{useContext as wl,useState as Ar}from"react";import{useContext as xl,useEffect as hl,useState as Cl}from"react";import yl from"swr";import{useContext as gl}from"react";function ve(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=gl(j);function n(d,g=!1){return e[d]??g}function s(d,g){t(C=>({...C,[d]:g}))}function p(d){t(g=>{let{[d]:C,...b}=g;return{...b}})}function c(d){r.includes(d)||i(g=>[...g,d])}function a(d){return r.includes(d)}function h(d){return Object.entries(e).some(([g,C])=>C&&g!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:h,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}import Sl from"swr/immutable";var bl="unknown";function Ne(){let{config:e,apiUrl:t}=_e(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=xl(j),{resetOpenFlowState:c}=ve(),[a,h]=Cl(!1),d={data:n.map(y=>({flowId:y.id,flowState:J,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},g=y=>fetch(y,e).then(P=>{if(P.ok)return P.json();throw new Error("Failed to fetch user flow states")}).catch(P=>(console.log(`Error fetching ${y}: ${P}. Will gracefully degrade and hide Frigade`),s(!0),d)),C=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:b,isLoading:k,mutate:u,error:B}=p?Sl(C,g):yl(C,g,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),x=b==null?void 0:b.data;hl(()=>{!a&&!k&&x&&h(!0)},[x,a,k]);async function F(y){if(x&&!p){let P=x.find(O=>O.flowId===y);P&&P.flowState!==J&&(P.flowState=J),await u(Promise.resolve({...b,data:x}),{optimisticData:{...b,data:x},revalidate:!1,rollbackOnError:!1})}}async function N(y,P,O){if(x){let I=x.find(L=>L.flowId===y);I&&(I.stepStates[P]=O,I.flowState=ut),await u(Promise.resolve({...b,data:x}),{optimisticData:{...b,data:x},revalidate:!1,rollbackOnError:!1})}}async function T(y,P,O){if(x){let I=x.find(L=>L.flowId===y);I&&(I.lastStepId=P,I.stepStates[P]=O,I.flowState=ut),await u({...b,data:x},{optimisticData:{...b,data:x},revalidate:!1,rollbackOnError:!1})}}async function m(y){if(x){let P=x.find(O=>O.flowId===y);P&&P.flowState!==De&&(P.flowState=De,P.lastStepId=bl,Object.keys(P.stepStates).forEach(O=>{P.stepStates[O].actionType=Ie,P.stepStates[O].createdAt=new Date().toISOString()}),await u({...b,data:x},{optimisticData:{...b,data:x},revalidate:!1,rollbackOnError:!1}),c(y))}}async function w(y,P){if(x){let O=x.find(I=>I.flowId===y);O&&O.stepStates[P]!==Ie&&(O.stepStates[P]=Ie),await u({...b,data:x},{optimisticData:{...b,data:x},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:x,isLoadingUserFlowStateData:!a,mutateUserFlowState:u,optimisticallyMarkFlowCompleted:F,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:N,optimisticallyMarkStepNotStarted:w,optimisticallyMarkStepStarted:T,error:B}}function Vt(){let{config:e,apiUrl:t}=_e(),{userFlowStatesData:o,mutateUserFlowState:i}=Ne(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=wl(j),[c,a]=Ar(new Set),[h,d]=Ar(new Set),g=kt();function C(u){let B=JSON.stringify(u);if(c.has(B))return null;c.add(B),a(c),h.add(u),d(h);let x=s==null?void 0:s.find(F=>F.flowSlug===u.flowSlug&&F.stepId===u.stepId&&F.actionType===u.actionType&&F.createdAt===u.createdAt);return g(`${t}flowResponses`,{...e,method:"POST",body:B}).then(F=>{F.status!==200&&F.status!==201?(console.log("Failed to send flow response for step "+u.stepId+". Will retry again later."),n([...r,u])):x||p(N=>[...N??[],u])})}async function b(u){u.foreignUserId&&(u.actionType===ut||u.actionType===De?await C(u):u.actionType===J?await C(u):u.actionType===co?await C(u):u.actionType===$e?await C(u):u.actionType===po?await C(u):u.actionType===Ie&&await C(u))}function k(){let u=[];return o==null||o.forEach(B=>{if(B&&B.stepStates&&Object.keys(B.stepStates).length!==0)for(let x in B.stepStates){let F=B.stepStates[x];u.push({foreignUserId:B.foreignUserId,flowSlug:B.flowId,stepId:F.stepId,actionType:F.actionType,data:{},createdAt:new Date(F.createdAt),blocked:F.blocked,hidden:F.hidden})}}),[...u,...s]}return{addResponse:b,setFlowResponses:p,getFlowResponses:k}}import vl from"swr";var Tl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Ir=e=>{let t=Tl.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=Fl(i,"'","");n.startsWith("flow_")&&(o=n)}),o},Fl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Q(){let{config:e,apiUrl:t}=_e(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:h,setShouldGracefullyDegrade:d,readonly:g}=kl(j),C={data:[]},{verifySDKInitiated:b}=Pt(),{addResponse:k,getFlowResponses:u}=Vt(),B=f=>fetch(f,e).then(S=>S.ok?S.json():(console.log(`Error fetching ${f} (${S.status}): ${S.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),C)).catch(S=>(console.log(`Error fetching ${f}: ${S}. Will gracefully degrade and hide Frigade`),d(!0),C)),{userFlowStatesData:x,isLoadingUserFlowStateData:F,optimisticallyMarkFlowCompleted:N,optimisticallyMarkFlowNotStarted:T,optimisticallyMarkStepCompleted:m,optimisticallyMarkStepNotStarted:w,optimisticallyMarkStepStarted:y}=Ne(),{data:P,error:O,isLoading:I}=vl(n?`${t}flows${g?"?readonly=true":""}`:null,B,{keepPreviousData:!0});Pl(()=>{if(O){console.error(O);return}P&&P.data&&i(P.data)},[P,O]);function L(f){if(I)return null;let S=o.find(E=>E.slug===f);return!S&&o.length>0&&!F&&!I?(console.log(`Flow with slug ${f} not found`),null):(S==null?void 0:S.active)===!1?null:S}function D(f){var A;if(!L(f))return[];let S=L(f).data;return S?(S=z(S),(((A=JSON.parse(S))==null?void 0:A.data)??[]).map(X=>{let mt=me(X);return{handleSecondaryButtonClick:()=>{X.skippable===!0&&ae(f,X.id,{skipped:!0})},...X,complete:Y(f,X.id)===$e||mt>=1,blocked:$(f,X.id),hidden:_(f,X.id),handlePrimaryButtonClick:()=>{(!X.completionCriteria&&(X.autoMarkCompleted||X.autoMarkCompleted===void 0)||X.completionCriteria&&X.autoMarkCompleted===!0)&&ae(f,X.id)},progress:mt}}).filter(X=>X.hidden!==!0)):[]}function z(f){return f.replaceAll(/\${(.*?)}/g,(S,E)=>s[E]===void 0?"":String(s[E]).replace(/[\u00A0-\u9999<>\&]/g,function(A){return"&#"+A.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 H(f){if(!L(f))return[];let S=L(f).data;return S?(S=z(S),JSON.parse(S)??{}):[]}function re(f,S){p(E=>({...E,[f]:S}))}function Z(f){!F&&!I&&f&&JSON.stringify(s)!=JSON.stringify({...s,...f})&&Object.keys(f).forEach(S=>{re(S,f[S])})}let R=ft(async(f,S,E)=>{if(!b())return;let A={foreignUserId:r,flowSlug:f,stepId:S,actionType:co,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ie(A)&&(await y(f,S,A),k(A))},[r,x]),G=ft(async(f,S,E)=>{if(!b())return;let A={foreignUserId:r,flowSlug:f,stepId:S,actionType:Ie,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ie(A)&&(await w(f,S),k(A))},[r,x]),ae=ft(async(f,S,E)=>{if(!b())return;let A={foreignUserId:r,flowSlug:f,stepId:S,actionType:$e,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ie(A)&&(await m(f,S,A),k(A))},[r,x]),K=ft(async(f,S)=>{if(!b()||te(f)===De)return;let E={foreignUserId:r,flowSlug:f,stepId:"unknown",actionType:De,data:S??{},createdAt:new Date,blocked:!1,hidden:!1};await T(f),ie(E)&&k(E)},[r,x]),ee=ft(async(f,S)=>{if(!b())return;let E={foreignUserId:r,flowSlug:f,stepId:"unknown",actionType:ut,data:S??{},createdAt:new Date,blocked:!1,hidden:!1};ie(E)&&k(E)},[r,x]),Pe=ft(async(f,S)=>{if(!b())return;let E={foreignUserId:r,flowSlug:f,stepId:"unknown",actionType:J,data:S??{},createdAt:new Date,blocked:!1,hidden:!1};ie(E)&&(await N(f),k(E))},[r,x]),Ce=ft(async(f,S)=>{if(!b())return;let E={foreignUserId:r,flowSlug:f,stepId:"unknown",actionType:po,data:S??{},createdAt:new Date,blocked:!1,hidden:!1};ie(E)&&(await N(f),k(E))},[r,x]);function ie(f){var S;if(!x&&f.actionType===Ie)return!1;if(x){let E=x.find(A=>A.flowId===f.flowSlug);if(f.actionType===Ie&&(!(E!=null&&E.stepStates[f.stepId])||E.stepStates[f.stepId].actionType===Ie)||E&&((S=E.stepStates[f.stepId])==null?void 0:S.actionType)===f.actionType||E&&E.flowState===J&&f.actionType===J)return!1}return!0}function Y(f,S){let E=ye(f,S);return F?null:E?E.actionType:Ie}function $(f,S){let E=ye(f,S);return E?E.blocked:!1}function _(f,S){let E=ye(f,S);return E?E.hidden:!1}function ye(f,S){if(F)return null;let E=x==null?void 0:x.find(A=>A.flowId===f);return!E||!E.stepStates[S]?null:E.stepStates[S]??null}function ce(f){var E;if(F||!x)return null;if(te(f)===De)return D(f)[0]??null;let S=(E=x.find(A=>A.flowId===f))==null?void 0:E.lastStepId;return S?D(f).find(A=>A.id===S):null}function U(f){let S=ce(f);if(!S)return 0;let E=D(f).findIndex(A=>A.id===S.id)??0;return Y(f,S.id)===$e&&E<D(f).length-1?E+1:E}function me(f){if(!f.completionCriteria)return;let S=Ir(f.completionCriteria);if(S===null)return;let E=Se(S),A=V(S);return A===0?void 0:E/A}function te(f){let S=x==null?void 0:x.find(E=>E.flowId===f);return S?S.flowState:null}function Se(f){let S=D(f);return S.length===0?0:S.filter(A=>Y(f,A.id)===$e).length}function V(f){return D(f).length}function Ae(f){let S=o.find(E=>E.slug===f);return S?JSON.parse(S.data):null}function ze(f){if(g)return!1;if(F)return!0;if(f!=null&&f.targetingLogic&&x){let S=x.find(E=>E.flowId===f.slug);if(S)return S.shouldTrigger===!1}return!!(f!=null&&f.targetingLogic&&r&&r.startsWith("guest_"))}function Ho(f){return!ze(L(f))}return{getFlow:L,getFlowData:Ae,isLoading:F||I,getStepStatus:Y,getFlowSteps:D,getCurrentStepIndex:U,markStepStarted:R,markStepCompleted:ae,markFlowNotStarted:K,markFlowStarted:ee,markFlowCompleted:Pe,markFlowAborted:Ce,markStepNotStarted:G,getFlowStatus:te,getNumberOfStepsCompleted:Se,getNumberOfSteps:V,targetingLogicShouldHideFlow:ze,setCustomVariable:re,updateCustomVariables:Z,customVariables:s,getStepOptionalProgress:me,getFlowMetadata:H,isStepBlocked:$,isStepHidden:_,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:Ho}}import{useCallback as Nr,useContext as Bl,useEffect as El}from"react";var vt="guest_";function jt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=Bl(j),{config:n,apiUrl:s}=_e(),{mutateUserFlowState:p}=Ne(),c=kt(),{verifySDKInitiated:a}=Pt();El(()=>{if(e&&!t){if(e.startsWith(vt))return;let g=`frigade-user-registered-${e}`;localStorage.getItem(g)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(g,"true"))}},[e,r,t]);let h=Nr(async g=>{if(!a())return;let C={foreignId:e,properties:g};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(C)}),i(b=>({...b,...g})),p()},[e,n,r,p]),d=Nr(async(g,C)=>{if(!a())return;let k={foreignId:e,events:[{event:g,properties:C}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(k)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:h,trackEventForUser:d}}import{v4 as ip}from"uuid";import He,{useEffect as Ra,useState as ep}from"react";import Me,{useEffect as $l}from"react";import fo from"styled-components";import Al from"react";import Il from"styled-components";var Or="fr-",Gt="cfr-";function l(e,t){let o=`${Or}${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+" "+Gt+e}return o}function v(e){if(!e.className||e.className.indexOf(Gt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Or)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function jo(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function Ge(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${jo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function be(...e){return e.filter(Boolean).join(" ")}function qt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Nl=Il.div`
|
|
2
|
+
import Ct,{createContext as Bp,useEffect as Eo,useState as Oe}from"react";import{ThemeProvider as Ep}from"styled-components";import ht,{useContext as rp,useEffect as vo,useState as ar}from"react";import{useCallback as ft,useContext as kl,useEffect as Pl}from"react";import Vo,{useMemo as Er}from"react";var Br="1.33.16 ";var Ie="NOT_STARTED_STEP",J="COMPLETED_FLOW",po="ABORTED_FLOW",ut="STARTED_FLOW",De="NOT_STARTED_FLOW",$e="COMPLETED_STEP",co="STARTED_STEP";function _e(){let{publicApiKey:e,userId:t,apiUrl:o}=Vo.useContext(j);return{config:Er(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Br,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Er(()=>`${o}/v1/public/`,[o])}}var ul="frigade-last-call-at-",fl="frigade-last-call-data-";function kt(){let{shouldGracefullyDegrade:e,readonly:t}=Vo.useContext(j);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return Ft();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),Ft();let r=ul+o,n=fl+o;if(window&&window.localStorage&&i&&i.body&&i.method==="POST"){let p=window.localStorage.getItem(r),c=window.localStorage.getItem(n);if(p&&c&&c==i.body){let a=new Date(p);if(new Date().getTime()-a.getTime()<1e3)return Ft()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return Ft(p)}return s?s.ok?s:Ft(s.statusText):Ft()}}function Ft(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Pt(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Vo.useContext(j);function o(){return t?(console.error("Frigade hooks cannot be used when Frigade SDK has failed to initialize"),!1):e?!0:(console.error("Frigade hooks cannot be used outside the scope of FrigadeProvider"),!1)}return{verifySDKInitiated:o}}import{useContext as wl,useState as Ar}from"react";import{useContext as xl,useEffect as hl,useState as Cl}from"react";import yl from"swr";import{useContext as gl}from"react";function ve(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=gl(j);function n(d,g=!1){return e[d]??g}function s(d,g){t(C=>({...C,[d]:g}))}function p(d){t(g=>{let{[d]:C,...b}=g;return{...b}})}function c(d){r.includes(d)||i(g=>[...g,d])}function a(d){return r.includes(d)}function h(d){return Object.entries(e).some(([g,C])=>C&&g!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:h,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:a}}import Sl from"swr/immutable";var bl="unknown";function Ne(){let{config:e,apiUrl:t}=_e(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=xl(j),{resetOpenFlowState:c}=ve(),[a,h]=Cl(!1),d={data:n.map(y=>({flowId:y.id,flowState:J,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},g=y=>fetch(y,e).then(P=>{if(P.ok)return P.json();throw new Error("Failed to fetch user flow states")}).catch(P=>(console.log(`Error fetching ${y}: ${P}. Will gracefully degrade and hide Frigade`),s(!0),d)),C=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:b,isLoading:k,mutate:u,error:B}=p?Sl(C,g):yl(C,g,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),x=b==null?void 0:b.data;hl(()=>{!a&&!k&&x&&h(!0)},[x,a,k]);async function F(y){if(x&&!p){let P=x.find(O=>O.flowId===y);P&&P.flowState!==J&&(P.flowState=J),await u(Promise.resolve({...b,data:x}),{optimisticData:{...b,data:x},revalidate:!1,rollbackOnError:!1})}}async function N(y,P,O){if(x){let I=x.find(L=>L.flowId===y);I&&(I.stepStates[P]=O,I.flowState=ut),await u(Promise.resolve({...b,data:x}),{optimisticData:{...b,data:x},revalidate:!1,rollbackOnError:!1})}}async function T(y,P,O){if(x){let I=x.find(L=>L.flowId===y);I&&(I.lastStepId=P,I.stepStates[P]=O,I.flowState=ut),await u({...b,data:x},{optimisticData:{...b,data:x},revalidate:!1,rollbackOnError:!1})}}async function m(y){if(x){let P=x.find(O=>O.flowId===y);P&&P.flowState!==De&&(P.flowState=De,P.lastStepId=bl,Object.keys(P.stepStates).forEach(O=>{P.stepStates[O].actionType=Ie,P.stepStates[O].createdAt=new Date().toISOString()}),await u({...b,data:x},{optimisticData:{...b,data:x},revalidate:!1,rollbackOnError:!1}),c(y))}}async function w(y,P){if(x){let O=x.find(I=>I.flowId===y);O&&O.stepStates[P]!==Ie&&(O.stepStates[P]=Ie),await u({...b,data:x},{optimisticData:{...b,data:x},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:x,isLoadingUserFlowStateData:!a,mutateUserFlowState:u,optimisticallyMarkFlowCompleted:F,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:N,optimisticallyMarkStepNotStarted:w,optimisticallyMarkStepStarted:T,error:B}}function Vt(){let{config:e,apiUrl:t}=_e(),{userFlowStatesData:o,mutateUserFlowState:i}=Ne(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=wl(j),[c,a]=Ar(new Set),[h,d]=Ar(new Set),g=kt();function C(u){let B=JSON.stringify(u);if(c.has(B))return null;c.add(B),a(c),h.add(u),d(h);let x=s==null?void 0:s.find(F=>F.flowSlug===u.flowSlug&&F.stepId===u.stepId&&F.actionType===u.actionType&&F.createdAt===u.createdAt);return g(`${t}flowResponses`,{...e,method:"POST",body:B}).then(F=>{F.status!==200&&F.status!==201?(console.log("Failed to send flow response for step "+u.stepId+". Will retry again later."),n([...r,u])):x||p(N=>[...N??[],u])})}async function b(u){u.foreignUserId&&(u.actionType===ut||u.actionType===De?await C(u):u.actionType===J?await C(u):u.actionType===co?await C(u):u.actionType===$e?await C(u):u.actionType===po?await C(u):u.actionType===Ie&&await C(u))}function k(){let u=[];return o==null||o.forEach(B=>{if(B&&B.stepStates&&Object.keys(B.stepStates).length!==0)for(let x in B.stepStates){let F=B.stepStates[x];u.push({foreignUserId:B.foreignUserId,flowSlug:B.flowId,stepId:F.stepId,actionType:F.actionType,data:{},createdAt:new Date(F.createdAt),blocked:F.blocked,hidden:F.hidden})}}),[...u,...s]}return{addResponse:b,setFlowResponses:p,getFlowResponses:k}}import vl from"swr";var Tl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,Ir=e=>{let t=Tl.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=Fl(i,"'","");n.startsWith("flow_")&&(o=n)}),o},Fl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Q(){let{config:e,apiUrl:t}=_e(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,setFlowResponses:h,setShouldGracefullyDegrade:d,readonly:g}=kl(j),C={data:[]},{verifySDKInitiated:b}=Pt(),{addResponse:k,getFlowResponses:u}=Vt(),B=f=>fetch(f,e).then(S=>S.ok?S.json():(console.log(`Error fetching ${f} (${S.status}): ${S.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),C)).catch(S=>(console.log(`Error fetching ${f}: ${S}. Will gracefully degrade and hide Frigade`),d(!0),C)),{userFlowStatesData:x,isLoadingUserFlowStateData:F,optimisticallyMarkFlowCompleted:N,optimisticallyMarkFlowNotStarted:T,optimisticallyMarkStepCompleted:m,optimisticallyMarkStepNotStarted:w,optimisticallyMarkStepStarted:y}=Ne(),{data:P,error:O,isLoading:I}=vl(n?`${t}flows${g?"?readonly=true":""}`:null,B,{keepPreviousData:!0});Pl(()=>{if(O){console.error(O);return}P&&P.data&&i(P.data)},[P,O]);function L(f){if(I)return null;let S=o.find(E=>E.slug===f);return!S&&o.length>0&&!F&&!I?(console.log(`Flow with slug ${f} not found`),null):(S==null?void 0:S.active)===!1?null:S}function D(f){var A;if(!L(f))return[];let S=L(f).data;return S?(S=z(S),(((A=JSON.parse(S))==null?void 0:A.data)??[]).map(X=>{let mt=me(X);return{handleSecondaryButtonClick:()=>{X.skippable===!0&&ae(f,X.id,{skipped:!0})},...X,complete:Y(f,X.id)===$e||mt>=1,blocked:$(f,X.id),hidden:_(f,X.id),handlePrimaryButtonClick:()=>{(!X.completionCriteria&&(X.autoMarkCompleted||X.autoMarkCompleted===void 0)||X.completionCriteria&&X.autoMarkCompleted===!0)&&ae(f,X.id)},progress:mt}}).filter(X=>X.hidden!==!0)):[]}function z(f){return f.replaceAll(/\${(.*?)}/g,(S,E)=>s[E]===void 0?"":String(s[E]).replace(/[\u00A0-\u9999<>\&]/g,function(A){return"&#"+A.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 H(f){if(!L(f))return[];let S=L(f).data;return S?(S=z(S),JSON.parse(S)??{}):[]}function re(f,S){p(E=>({...E,[f]:S}))}function Z(f){!F&&!I&&f&&JSON.stringify(s)!=JSON.stringify({...s,...f})&&Object.keys(f).forEach(S=>{re(S,f[S])})}let R=ft(async(f,S,E)=>{if(!b())return;let A={foreignUserId:r,flowSlug:f,stepId:S,actionType:co,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ie(A)&&(await y(f,S,A),k(A))},[r,x]),G=ft(async(f,S,E)=>{if(!b())return;let A={foreignUserId:r,flowSlug:f,stepId:S,actionType:Ie,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ie(A)&&(await w(f,S),k(A))},[r,x]),ae=ft(async(f,S,E)=>{if(!b())return;let A={foreignUserId:r,flowSlug:f,stepId:S,actionType:$e,data:E??{},createdAt:new Date,blocked:!1,hidden:!1};ie(A)&&(await m(f,S,A),k(A))},[r,x]),K=ft(async(f,S)=>{if(!b()||te(f)===De)return;let E={foreignUserId:r,flowSlug:f,stepId:"unknown",actionType:De,data:S??{},createdAt:new Date,blocked:!1,hidden:!1};await T(f),ie(E)&&k(E)},[r,x]),ee=ft(async(f,S)=>{if(!b())return;let E={foreignUserId:r,flowSlug:f,stepId:"unknown",actionType:ut,data:S??{},createdAt:new Date,blocked:!1,hidden:!1};ie(E)&&k(E)},[r,x]),Pe=ft(async(f,S)=>{if(!b())return;let E={foreignUserId:r,flowSlug:f,stepId:"unknown",actionType:J,data:S??{},createdAt:new Date,blocked:!1,hidden:!1};ie(E)&&(await N(f),k(E))},[r,x]),Ce=ft(async(f,S)=>{if(!b())return;let E={foreignUserId:r,flowSlug:f,stepId:"unknown",actionType:po,data:S??{},createdAt:new Date,blocked:!1,hidden:!1};ie(E)&&(await N(f),k(E))},[r,x]);function ie(f){var S;if(!x&&f.actionType===Ie)return!1;if(x){let E=x.find(A=>A.flowId===f.flowSlug);if(f.actionType===Ie&&(!(E!=null&&E.stepStates[f.stepId])||E.stepStates[f.stepId].actionType===Ie)||E&&((S=E.stepStates[f.stepId])==null?void 0:S.actionType)===f.actionType||E&&E.flowState===J&&f.actionType===J)return!1}return!0}function Y(f,S){let E=ye(f,S);return F?null:E?E.actionType:Ie}function $(f,S){let E=ye(f,S);return E?E.blocked:!1}function _(f,S){let E=ye(f,S);return E?E.hidden:!1}function ye(f,S){if(F)return null;let E=x==null?void 0:x.find(A=>A.flowId===f);return!E||!E.stepStates[S]?null:E.stepStates[S]??null}function ce(f){var E;if(F||!x)return null;if(te(f)===De)return D(f)[0]??null;let S=(E=x.find(A=>A.flowId===f))==null?void 0:E.lastStepId;return S?D(f).find(A=>A.id===S):null}function U(f){let S=ce(f);if(!S)return 0;let E=D(f).findIndex(A=>A.id===S.id)??0;return Y(f,S.id)===$e&&E<D(f).length-1?E+1:E}function me(f){if(!f.completionCriteria)return;let S=Ir(f.completionCriteria);if(S===null)return;let E=Se(S),A=V(S);return A===0?void 0:E/A}function te(f){let S=x==null?void 0:x.find(E=>E.flowId===f);return S?S.flowState:null}function Se(f){let S=D(f);return S.length===0?0:S.filter(A=>Y(f,A.id)===$e).length}function V(f){return D(f).length}function Ae(f){let S=o.find(E=>E.slug===f);return S?JSON.parse(S.data):null}function ze(f){if(g)return!1;if(F)return!0;if(f!=null&&f.targetingLogic&&x){let S=x.find(E=>E.flowId===f.slug);if(S)return S.shouldTrigger===!1}return!!(f!=null&&f.targetingLogic&&r&&r.startsWith("guest_"))}function Ho(f){return!ze(L(f))}return{getFlow:L,getFlowData:Ae,isLoading:F||I,getStepStatus:Y,getFlowSteps:D,getCurrentStepIndex:U,markStepStarted:R,markStepCompleted:ae,markFlowNotStarted:K,markFlowStarted:ee,markFlowCompleted:Pe,markFlowAborted:Ce,markStepNotStarted:G,getFlowStatus:te,getNumberOfStepsCompleted:Se,getNumberOfSteps:V,targetingLogicShouldHideFlow:ze,setCustomVariable:re,updateCustomVariables:Z,customVariables:s,getStepOptionalProgress:me,getFlowMetadata:H,isStepBlocked:$,isStepHidden:_,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:a,isFlowAvailableToUser:Ho}}import{useCallback as Nr,useContext as Bl,useEffect as El}from"react";var vt="guest_";function jt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=Bl(j),{config:n,apiUrl:s}=_e(),{mutateUserFlowState:p}=Ne(),c=kt(),{verifySDKInitiated:a}=Pt();El(()=>{if(e&&!t){if(e.startsWith(vt))return;let g=`frigade-user-registered-${e}`;localStorage.getItem(g)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(g,"true"))}},[e,r,t]);let h=Nr(async g=>{if(!a())return;let C={foreignId:e,properties:g};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(C)}),i(b=>({...b,...g})),p()},[e,n,r,p]),d=Nr(async(g,C)=>{if(!a())return;let k={foreignId:e,events:[{event:g,properties:C}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(k)}),p()},[e,n,p]);return{userId:e,setUserId:o,addPropertiesToUser:h,trackEventForUser:d}}import{v4 as ip}from"uuid";import He,{useEffect as Ra,useState as ep}from"react";import Me,{useEffect as $l}from"react";import fo from"styled-components";import Al from"react";import Il from"styled-components";var Or="fr-",Gt="cfr-";function l(e,t){let o=`${Or}${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+" "+Gt+e}return o}function v(e){if(!e.className||e.className.indexOf(Gt)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Or)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function jo(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function Ge(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${jo(t)}: ${e.styleOverrides[t]};`).join(" "):""}function be(...e){return e.filter(Boolean).join(" ")}function qt(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Nl=Il.div`
|
|
3
3
|
display: flex;
|
|
4
4
|
justify-content: center;
|
|
5
5
|
position: fixed;
|