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