@frigade/react 1.35.26 → 1.35.27
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 +9 -10
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +9 -10
- 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 bt,{createContext as Jp,useEffect as Uo,useState as Me}from"react";import{ThemeProvider as Qp}from"styled-components";import St,{useContext as kp,useEffect as $o,useState as wr}from"react";import{useCallback as ht,useContext as Jl,useEffect as Ql}from"react";import Xo,{useMemo as Gr}from"react";var Vr="1.35.26 ";var $e="NOT_STARTED_STEP",q="COMPLETED_FLOW",Co="ABORTED_FLOW",xt="STARTED_FLOW",Ae="NOT_STARTED_FLOW",ze="COMPLETED_STEP",yo="STARTED_STEP";function He(){let{publicApiKey:e,userId:t,apiUrl:o}=Xo.useContext(K);return{config:Gr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Vr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Gr(()=>`${o}/v1/public/`,[o])}}var Ul="frigade-last-call-at-",zl="frigade-last-call-data-";function Nt(){let{shouldGracefullyDegrade:e,readonly:t}=Xo.useContext(K);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return It();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),It();let r=Ul+o,n=zl+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 l=new Date(p);if(new Date().getTime()-l.getTime()<1e3)return It()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return It(p)}return s?s.ok?s:It(s.statusText):It()}}function It(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ot(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Xo.useContext(K);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 ql,useState as Kr}from"react";import{useContext as _l,useEffect as Hl,useState as jl}from"react";import Vl from"swr";import{useContext as Wl}from"react";function ke(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=Wl(K);function n(d,g=!1){return e[d]??g}function s(d,g){t(F=>({...F,[d]:g}))}function p(d){t(g=>{let{[d]:F,...b}=g;return{...b}})}function c(d){r.includes(d)||i(g=>[...g,d])}function l(d){return r.includes(d)}function x(d){return Object.entries(e).some(([g,F])=>F&&g!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:x,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:l}}import Gl from"swr/immutable";var Kl="unknown";function Ie(){let{config:e,apiUrl:t}=He(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=_l(K),{resetOpenFlowState:c}=ke(),[l,x]=jl(!1),d={data:n.map(w=>({flowId:w.id,flowState:q,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},g=w=>fetch(w,e).then(E=>{if(E.ok)return E.json();throw new Error("Failed to fetch user flow states")}).catch(E=>(console.log(`Error fetching ${w}: ${E}. Will gracefully degrade and hide Frigade`),s(!0),d)),F=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:b,isLoading:y,mutate:f,error:B}=p?Gl(F,g):Vl(F,g,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),T=b==null?void 0:b.data;Hl(()=>{!l&&!y&&T&&x(!0)},[T,l,y]);async function h(w){if(T&&!p){let E=T.find(O=>O.flowId===w);E&&E.flowState!==q&&(E.flowState=q),await f(Promise.resolve({...b,data:T}),{optimisticData:{...b,data:T},revalidate:!1,rollbackOnError:!1})}}async function I(w,E,O){if(T){let N=T.find(A=>A.flowId===w);N&&(N.stepStates[E]=O,N.flowState=xt),await f(Promise.resolve({...b,data:T}),{optimisticData:{...b,data:T},revalidate:!1,rollbackOnError:!1})}}async function S(w,E,O){if(T){let N=T.find(A=>A.flowId===w);N&&(N.lastStepId=E,N.stepStates[E]=O,N.flowState=xt),await f({...b,data:T},{optimisticData:{...b,data:T},revalidate:!1,rollbackOnError:!1})}}async function m(w){if(T){let E=T.find(O=>O.flowId===w);E&&E.flowState!==Ae&&(E.flowState=Ae,E.lastStepId=Kl,Object.keys(E.stepStates).forEach(O=>{E.stepStates[O].actionType=$e,E.stepStates[O].createdAt=new Date().toISOString()}),await f({...b,data:T},{optimisticData:{...b,data:T},revalidate:!1,rollbackOnError:!1}),c(w))}}async function P(w,E){if(T){let O=T.find(N=>N.flowId===w);O&&O.stepStates[E]!==$e&&(O.stepStates[E]=$e),await f({...b,data:T},{optimisticData:{...b,data:T},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:T,isLoadingUserFlowStateData:!l,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:h,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:I,optimisticallyMarkStepNotStarted:P,optimisticallyMarkStepStarted:S,error:B}}function Zt(){let{config:e,apiUrl:t}=He(),{userFlowStatesData:o,mutateUserFlowState:i}=Ie(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=ql(K),[c,l]=Kr(new Set),[x,d]=Kr(new Set),g=Nt();function F(f){let B=JSON.stringify(f);if(c.has(B))return null;c.add(B),l(c),x.add(f),d(x);let T=s==null?void 0:s.find(h=>h.flowSlug===f.flowSlug&&h.stepId===f.stepId&&h.actionType===f.actionType&&h.createdAt===f.createdAt);return g(`${t}flowResponses`,{...e,method:"POST",body:B}).then(h=>{h.status!==200&&h.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...r,f])):T||p(I=>[...I??[],f])})}async function b(f){f.foreignUserId&&(f.actionType===xt||f.actionType===Ae?await F(f):f.actionType===q?await F(f):f.actionType===yo?await F(f):f.actionType===ze?await F(f):f.actionType===Co?await F(f):f.actionType===$e&&await F(f))}function y(){let f=[];return o==null||o.forEach(B=>{if(B&&B.stepStates&&Object.keys(B.stepStates).length!==0)for(let T in B.stepStates){let h=B.stepStates[T];f.push({foreignUserId:B.foreignUserId,flowSlug:B.flowId,stepId:h.stepId,actionType:h.actionType,data:{},createdAt:new Date(h.createdAt),blocked:h.blocked,hidden:h.hidden})}}),[...f,...s]}return{addResponse:b,setFlowResponses:p,getFlowResponses:y}}import Zl from"swr";var Yl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,qr=e=>{let t=Yl.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=Xl(i,"'","");n.startsWith("flow_")&&(o=n)}),o},Xl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Jo(e){try{return JSON.parse(e)}catch(t){return console.error("Failed to parse Frigade config.yml to JSON",t),null}}var Qo=(l=>(l.CHECKLIST="CHECKLIST",l.FORM="FORM",l.TOUR="TOUR",l.SUPPORT="SUPPORT",l.CUSTOM="CUSTOM",l.BANNER="BANNER",l.EMBEDDED_TIP="EMBEDDED_TIP",l.NPS_SURVEY="NPS_SURVEY",l.ANNOUNCEMENT="ANNOUNCEMENT",l))(Qo||{});function J(){let{config:e,apiUrl:t}=He(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,setFlowResponses:x,setShouldGracefullyDegrade:d,readonly:g}=Jl(K),F={data:[]},{verifySDKInitiated:b}=Ot(),{addResponse:y,getFlowResponses:f}=Zt(),B=u=>fetch(u,e).then(C=>C.ok?C.json():(console.log(`Error fetching ${u} (${C.status}): ${C.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),F)).catch(C=>(console.log(`Error fetching ${u}: ${C}. Will gracefully degrade and hide Frigade`),d(!0),F)),{mutateUserFlowState:T,userFlowStatesData:h,isLoadingUserFlowStateData:I,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:P,optimisticallyMarkStepNotStarted:w,optimisticallyMarkStepStarted:E}=Ie(),{data:O,error:N,isLoading:A}=Zl(n?`${t}flows${g?"?readonly=true":""}`:null,B,{keepPreviousData:!0});Ql(()=>{if(N){console.error(N);return}O&&O.data&&i(O.data)},[O,N]);function D(u){if(A)return null;let C=o.find(v=>v.slug===u);return!C&&o.length>0&&!I&&!A?(console.log(`Flow with id ${u} not found`),null):(C==null?void 0:C.active)===!1?null:C}function $(u){var W;if(!D(u))return[];let C=D(u).data;return C?(C=j(C),(((W=Jo(C))==null?void 0:W.data)??[]).map(pe=>{let Qt=ye(pe);return{handleSecondaryButtonClick:()=>{pe.skippable===!0&&re(u,pe.id,{skipped:!0})},...pe,complete:me(u,pe.id)===ze||Qt>=1,blocked:Fe(u,pe.id),hidden:L(u,pe.id),handlePrimaryButtonClick:()=>{(!pe.completionCriteria&&(pe.autoMarkCompleted||pe.autoMarkCompleted===void 0)||pe.completionCriteria&&pe.autoMarkCompleted===!0)&&re(u,pe.id)},progress:Qt}}).filter(pe=>pe.hidden!==!0)):[]}function j(u){return u.replaceAll(/\${(.*?)}/g,(C,v)=>s[v]===void 0?"":String(s[v]).replace(/[\u00A0-\u9999<>\&]/g,function(W){return"&#"+W.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(u){if(!D(u))return[];let C=D(u).data;return C?(C=j(C),JSON.parse(C)??{}):[]}function V(u,C){p(v=>({...v,[u]:C}))}function we(u){!I&&!A&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(C=>{V(C,u[C])})}let ce=ht(async(u,C,v)=>{if(!b())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:yo,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};ee(W)&&(await E(u,C,W),y(W))},[r,h]),G=ht(async(u,C,v)=>{if(!b())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:$e,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};ee(W)&&(await w(u,C),y(W))},[r,h]),re=ht(async(u,C,v)=>{if(!b())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:ze,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};ee(W)&&(await P(u,C,W),y(W))},[r,h]),Y=ht(async(u,C)=>{if(!b()||X(u)===Ae)return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Ae,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};await m(u),ee(v)&&y(v)},[r,h]),Te=ht(async(u,C)=>{if(!b())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:xt,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};ee(v)&&y(v)},[r,h]),le=ht(async(u,C)=>{if(!b())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:q,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};ee(v)&&(await S(u),y(v))},[r,h]),he=ht(async(u,C)=>{if(!b())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Co,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};ee(v)&&(await S(u),y(v))},[r,h]);function ee(u){var C;if(!h&&u.actionType===$e)return!1;if(h){let v=h.find(W=>W.flowId===u.flowSlug);if(u.actionType===$e&&(!(v!=null&&v.stepStates[u.stepId])||v.stepStates[u.stepId].actionType===$e)||v&&((C=v.stepStates[u.stepId])==null?void 0:C.actionType)===u.actionType||v&&v.flowState===q&&u.actionType===q)return!1}return!0}function me(u,C){let v=U(u,C);return I?null:v?v.actionType:$e}function Fe(u,C){let v=U(u,C);return v?v.blocked:!1}function L(u,C){let v=U(u,C);return v?v.hidden:!1}function U(u,C){if(I)return null;let v=h==null?void 0:h.find(W=>W.flowId===u);return!v||!v.stepStates[C]?null:v.stepStates[C]??null}function Ce(u){var v;if(I||!h)return null;if(X(u)===Ae)return $(u)[0]??null;let C=(v=h.find(W=>W.flowId===u))==null?void 0:v.lastStepId;return C?$(u).find(W=>W.id===C):null}function z(u){let C=Ce(u);if(!C)return 0;let v=$(u).findIndex(W=>W.id===C.id)??0;return me(u,C.id)===ze&&v<$(u).length-1?v+1:v}function ye(u){if(!u.completionCriteria)return;let C=qr(u.completionCriteria);if(C===null)return;let v=fe(C),W=Ue(C);return W===0?void 0:v/W}function X(u){let C=h==null?void 0:h.find(v=>v.flowId===u);return C?C.flowState:null}function fe(u){let C=$(u);return C.length===0?0:C.filter(W=>me(u,W.id)===ze).length}function Ue(u){return $(u).length}function Et(u){let C=o.find(v=>v.slug===u);return C?Jo(C.data):null}function ft(u){if(g)return!1;if(I)return!0;if(u!=null&&u.targetingLogic&&h){let C=h.find(v=>v.flowId===u.slug);if(C)return C.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&r&&r.startsWith("guest_"))}function At(u){return!ft(D(u))}function gt(){r&&T()}return{getFlow:D,getFlowData:Et,isLoading:I||A,getStepStatus:me,getFlowSteps:$,getCurrentStepIndex:z,markStepStarted:ce,markStepCompleted:re,markFlowNotStarted:Y,markFlowStarted:Te,markFlowCompleted:le,markFlowAborted:he,markStepNotStarted:G,getFlowStatus:X,getNumberOfStepsCompleted:fe,getNumberOfSteps:Ue,targetingLogicShouldHideFlow:ft,setCustomVariable:V,updateCustomVariables:we,customVariables:s,getStepOptionalProgress:ye,getFlowMetadata:H,isStepBlocked:Fe,isStepHidden:L,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,isFlowAvailableToUser:At,refresh:gt}}import{useCallback as Zo,useContext as Rl,useEffect as ea}from"react";var Lt="guest_";function Rt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=Rl(K),{config:n,apiUrl:s}=He(),{mutateUserFlowState:p}=Ie(),c=Nt(),{verifySDKInitiated:l}=Ot();function x(b){return`frigade-user-registered-${b}`}ea(()=>{if(e&&!t){if(e.startsWith(Lt))return;let b=x(e);localStorage.getItem(b)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(b,"true"))}},[e,r,t]);let d=Zo(async b=>{if(!l())return;let y={foreignId:e,properties:b};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(y)}),i(f=>({...f,...b})),p()},[e,n,r,p]),g=Zo(async(b,y)=>{if(!l())return;let B={foreignId:e,events:[{event:b,properties:y}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(B)}),p()},[e,n,p]),F=Zo(async(b,y)=>{if(l())if(y){let f=x(b);localStorage.setItem(f,"true"),o(b);let B={foreignId:b,properties:y};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(B)}),i(T=>({...T,...y})),p()}else o(b)},[n,r,p]);return{userId:e,setUserId:o,setUserIdWithProperties:F,addPropertiesToUser:d,trackEventForUser:g}}import{v4 as Pp}from"uuid";import Ke,{useEffect as bp,useState as wp}from"react";import We,{useEffect as rr,useState as pa}from"react";import wo from"styled-components";import ta from"react";import oa from"styled-components";var Yr="fr-",eo="cfr-";function a(e,t){let o=`${Yr}${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+" "+eo+e}return o}function k(e){if(!e.className||e.className.indexOf(eo)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Yr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function Ro(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function Be(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${Ro(t)}: ${e.styleOverrides[t]};`).join(" "):""}function ge(...e){return e.filter(Boolean).join(" ")}function to(e){return e.charAt(0).toUpperCase()+e.slice(1)}var ra=oa.div`
|
|
2
|
+
import bt,{createContext as Jp,useEffect as Uo,useState as Me}from"react";import{ThemeProvider as Qp}from"styled-components";import St,{useContext as kp,useEffect as $o,useState as wr}from"react";import{useCallback as ht,useContext as Jl,useEffect as Ql}from"react";import Xo,{useMemo as Gr}from"react";var Vr="1.35.27 ";var $e="NOT_STARTED_STEP",q="COMPLETED_FLOW",Co="ABORTED_FLOW",xt="STARTED_FLOW",Ae="NOT_STARTED_FLOW",ze="COMPLETED_STEP",yo="STARTED_STEP";function He(){let{publicApiKey:e,userId:t,apiUrl:o}=Xo.useContext(K);return{config:Gr(()=>({headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Frigade-SDK-Version":Vr,"X-Frigade-SDK-Platform":"React"}}),[e,t]),apiUrl:Gr(()=>`${o}/v1/public/`,[o])}}var Ul="frigade-last-call-at-",zl="frigade-last-call-data-";function Nt(){let{shouldGracefullyDegrade:e,readonly:t}=Xo.useContext(K);return async(o,i)=>{if(t&&(i.method==="POST"||i.method==="PUT"||i.method==="DELETE"))return It();if(e)return console.log(`Skipping ${o} call to Frigade due to error`),It();let r=Ul+o,n=zl+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 l=new Date(p);if(new Date().getTime()-l.getTime()<1e3)return It()}window.localStorage.setItem(r,new Date().toISOString()),window.localStorage.setItem(n,i.body)}let s;try{s=await fetch(o,i)}catch(p){return It(p)}return s?s.ok?s:It(s.statusText):It()}}function It(e){return e&&console.log("Call to Frigade failed",e),{json:()=>({})}}function Ot(){let{publicApiKey:e,shouldGracefullyDegrade:t}=Xo.useContext(K);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 ql,useState as Kr}from"react";import{useContext as _l,useEffect as Hl,useState as jl}from"react";import Vl from"swr";import{useContext as Wl}from"react";function ke(){let{openFlowStates:e,setOpenFlowStates:t,hasActiveFullPageFlow:o,setCompletedFlowsToKeepOpenDuringSession:i,completedFlowsToKeepOpenDuringSession:r}=Wl(K);function n(d,g=!1){return e[d]??g}function s(d,g){t(F=>({...F,[d]:g}))}function p(d){t(g=>{let{[d]:F,...b}=g;return{...b}})}function c(d){r.includes(d)||i(g=>[...g,d])}function l(d){return r.includes(d)}function x(d){return Object.entries(e).some(([g,F])=>F&&g!=d)||o}return{getOpenFlowState:n,setOpenFlowState:s,resetOpenFlowState:p,hasOpenModals:x,setKeepCompletedFlowOpenDuringSession:c,shouldKeepCompletedFlowOpenDuringSession:l}}import Gl from"swr/immutable";var Kl="unknown";function Ie(){let{config:e,apiUrl:t}=He(),{publicApiKey:o,userId:i,organizationId:r,flows:n,setShouldGracefullyDegrade:s,readonly:p}=_l(K),{resetOpenFlowState:c}=ke(),[l,x]=jl(!1),d={data:n.map(w=>({flowId:w.id,flowState:q,lastStepId:null,userId:i,foreignUserId:i,stepStates:{},shouldTrigger:!1}))},g=w=>fetch(w,e).then(E=>{if(E.ok)return E.json();throw new Error("Failed to fetch user flow states")}).catch(E=>(console.log(`Error fetching ${w}: ${E}. Will gracefully degrade and hide Frigade`),s(!0),d)),F=o&&n&&i?`${t}userFlowStates?foreignUserId=${encodeURIComponent(i)}${r?`&foreignUserGroupId=${encodeURIComponent(r)}`:""}`:null,{data:b,isLoading:y,mutate:f,error:B}=p?Gl(F,g):Vl(F,g,{revalidateOnFocus:!0,revalidateIfStale:!0,keepPreviousData:!0,revalidateOnMount:!0,errorRetryInterval:1e4,errorRetryCount:3,onError:()=>d,onLoadingSlow:()=>d}),T=b==null?void 0:b.data;Hl(()=>{!l&&!y&&T&&x(!0)},[T,l,y]);async function h(w){if(T&&!p){let E=T.find(O=>O.flowId===w);E&&E.flowState!==q&&(E.flowState=q),await f(Promise.resolve({...b,data:T}),{optimisticData:{...b,data:T},revalidate:!1,rollbackOnError:!1})}}async function I(w,E,O){if(T){let N=T.find(A=>A.flowId===w);N&&(N.stepStates[E]=O,N.flowState=xt),await f(Promise.resolve({...b,data:T}),{optimisticData:{...b,data:T},revalidate:!1,rollbackOnError:!1})}}async function S(w,E,O){if(T){let N=T.find(A=>A.flowId===w);N&&(N.lastStepId=E,N.stepStates[E]=O,N.flowState=xt),await f({...b,data:T},{optimisticData:{...b,data:T},revalidate:!1,rollbackOnError:!1})}}async function m(w){if(T){let E=T.find(O=>O.flowId===w);E&&E.flowState!==Ae&&(E.flowState=Ae,E.lastStepId=Kl,Object.keys(E.stepStates).forEach(O=>{E.stepStates[O].actionType=$e,E.stepStates[O].createdAt=new Date().toISOString()}),await f({...b,data:T},{optimisticData:{...b,data:T},revalidate:!1,rollbackOnError:!1}),c(w))}}async function P(w,E){if(T){let O=T.find(N=>N.flowId===w);O&&O.stepStates[E]!==$e&&(O.stepStates[E]=$e),await f({...b,data:T},{optimisticData:{...b,data:T},revalidate:!1,rollbackOnError:!1})}}return{userFlowStatesData:T,isLoadingUserFlowStateData:!l,mutateUserFlowState:f,optimisticallyMarkFlowCompleted:h,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:I,optimisticallyMarkStepNotStarted:P,optimisticallyMarkStepStarted:S,error:B}}function Zt(){let{config:e,apiUrl:t}=He(),{userFlowStatesData:o,mutateUserFlowState:i}=Ie(),{failedFlowResponses:r,setFailedFlowResponses:n,flowResponses:s,setFlowResponses:p}=ql(K),[c,l]=Kr(new Set),[x,d]=Kr(new Set),g=Nt();function F(f){let B=JSON.stringify(f);if(c.has(B))return null;c.add(B),l(c),x.add(f),d(x);let T=s==null?void 0:s.find(h=>h.flowSlug===f.flowSlug&&h.stepId===f.stepId&&h.actionType===f.actionType&&h.createdAt===f.createdAt);return g(`${t}flowResponses`,{...e,method:"POST",body:B}).then(h=>{h.status!==200&&h.status!==201?(console.log("Failed to send flow response for step "+f.stepId+". Will retry again later."),n([...r,f])):T||p(I=>[...I??[],f])})}async function b(f){f.foreignUserId&&(f.actionType===xt||f.actionType===Ae?await F(f):f.actionType===q?await F(f):f.actionType===yo?await F(f):f.actionType===ze?await F(f):f.actionType===Co?await F(f):f.actionType===$e&&await F(f))}function y(){let f=[];return o==null||o.forEach(B=>{if(B&&B.stepStates&&Object.keys(B.stepStates).length!==0)for(let T in B.stepStates){let h=B.stepStates[T];f.push({foreignUserId:B.foreignUserId,flowSlug:B.flowId,stepId:h.stepId,actionType:h.actionType,data:{},createdAt:new Date(h.createdAt),blocked:h.blocked,hidden:h.hidden})}}),[...f,...s]}return{addResponse:b,setFlowResponses:p,getFlowResponses:y}}import Zl from"swr";var Yl=/user.flow\(([^\)]+)\) == '?COMPLETED_FLOW'?/gm,qr=e=>{let t=Yl.exec(e);if(t===null)return null;let o=null;return t.forEach((i,r)=>{let n=Xl(i,"'","");n.startsWith("flow_")&&(o=n)}),o},Xl=function(e,t,o){return e.replace(new RegExp(t,"g"),o)};function Jo(e){try{return JSON.parse(e)}catch(t){return console.error("Failed to parse Frigade config.yml to JSON",t),null}}var Qo=(l=>(l.CHECKLIST="CHECKLIST",l.FORM="FORM",l.TOUR="TOUR",l.SUPPORT="SUPPORT",l.CUSTOM="CUSTOM",l.BANNER="BANNER",l.EMBEDDED_TIP="EMBEDDED_TIP",l.NPS_SURVEY="NPS_SURVEY",l.ANNOUNCEMENT="ANNOUNCEMENT",l))(Qo||{});function J(){let{config:e,apiUrl:t}=He(),{flows:o,setFlows:i,userId:r,publicApiKey:n,customVariables:s,setCustomVariables:p,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,setFlowResponses:x,setShouldGracefullyDegrade:d,readonly:g}=Jl(K),F={data:[]},{verifySDKInitiated:b}=Ot(),{addResponse:y,getFlowResponses:f}=Zt(),B=u=>fetch(u,e).then(C=>C.ok?C.json():(console.log(`Error fetching ${u} (${C.status}): ${C.statusText}. .Will gracefully degrade and hide Frigade`),d(!0),F)).catch(C=>(console.log(`Error fetching ${u}: ${C}. Will gracefully degrade and hide Frigade`),d(!0),F)),{mutateUserFlowState:T,userFlowStatesData:h,isLoadingUserFlowStateData:I,optimisticallyMarkFlowCompleted:S,optimisticallyMarkFlowNotStarted:m,optimisticallyMarkStepCompleted:P,optimisticallyMarkStepNotStarted:w,optimisticallyMarkStepStarted:E}=Ie(),{data:O,error:N,isLoading:A}=Zl(n?`${t}flows${g?"?readonly=true":""}`:null,B,{keepPreviousData:!0});Ql(()=>{if(N){console.error(N);return}O&&O.data&&i(O.data)},[O,N]);function D(u){if(A)return null;let C=o.find(v=>v.slug===u);return!C&&o.length>0&&!I&&!A?(console.log(`Flow with id ${u} not found`),null):(C==null?void 0:C.active)===!1?null:C}function $(u){var W;if(!D(u))return[];let C=D(u).data;return C?(C=j(C),(((W=Jo(C))==null?void 0:W.data)??[]).map(pe=>{let Qt=ye(pe);return{handleSecondaryButtonClick:()=>{pe.skippable===!0&&re(u,pe.id,{skipped:!0})},...pe,complete:me(u,pe.id)===ze||Qt>=1,blocked:Fe(u,pe.id),hidden:L(u,pe.id),handlePrimaryButtonClick:()=>{(!pe.completionCriteria&&(pe.autoMarkCompleted||pe.autoMarkCompleted===void 0)||pe.completionCriteria&&pe.autoMarkCompleted===!0)&&re(u,pe.id)},progress:Qt}}).filter(pe=>pe.hidden!==!0)):[]}function j(u){return u.replaceAll(/\${(.*?)}/g,(C,v)=>s[v]===void 0?"":String(s[v]).replace(/[\u00A0-\u9999<>\&]/g,function(W){return"&#"+W.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(u){if(!D(u))return[];let C=D(u).data;return C?(C=j(C),JSON.parse(C)??{}):[]}function V(u,C){p(v=>({...v,[u]:C}))}function we(u){!I&&!A&&u&&JSON.stringify(s)!=JSON.stringify({...s,...u})&&Object.keys(u).forEach(C=>{V(C,u[C])})}let ce=ht(async(u,C,v)=>{if(!b())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:yo,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};ee(W)&&(await E(u,C,W),y(W))},[r,h]),G=ht(async(u,C,v)=>{if(!b())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:$e,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};ee(W)&&(await w(u,C),y(W))},[r,h]),re=ht(async(u,C,v)=>{if(!b())return;let W={foreignUserId:r,flowSlug:u,stepId:C,actionType:ze,data:v??{},createdAt:new Date,blocked:!1,hidden:!1};ee(W)&&(await P(u,C,W),y(W))},[r,h]),Y=ht(async(u,C)=>{if(!b()||X(u)===Ae)return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Ae,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};await m(u),ee(v)&&y(v)},[r,h]),Te=ht(async(u,C)=>{if(!b())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:xt,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};ee(v)&&y(v)},[r,h]),le=ht(async(u,C)=>{if(!b())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:q,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};ee(v)&&(await S(u),y(v))},[r,h]),he=ht(async(u,C)=>{if(!b())return;let v={foreignUserId:r,flowSlug:u,stepId:"unknown",actionType:Co,data:C??{},createdAt:new Date,blocked:!1,hidden:!1};ee(v)&&(await S(u),y(v))},[r,h]);function ee(u){var C;if(!h&&u.actionType===$e)return!1;if(h){let v=h.find(W=>W.flowId===u.flowSlug);if(u.actionType===$e&&(!(v!=null&&v.stepStates[u.stepId])||v.stepStates[u.stepId].actionType===$e)||v&&((C=v.stepStates[u.stepId])==null?void 0:C.actionType)===u.actionType||v&&v.flowState===q&&u.actionType===q)return!1}return!0}function me(u,C){let v=U(u,C);return I?null:v?v.actionType:$e}function Fe(u,C){let v=U(u,C);return v?v.blocked:!1}function L(u,C){let v=U(u,C);return v?v.hidden:!1}function U(u,C){if(I)return null;let v=h==null?void 0:h.find(W=>W.flowId===u);return!v||!v.stepStates[C]?null:v.stepStates[C]??null}function Ce(u){var v;if(I||!h)return null;if(X(u)===Ae)return $(u)[0]??null;let C=(v=h.find(W=>W.flowId===u))==null?void 0:v.lastStepId;return C?$(u).find(W=>W.id===C):null}function z(u){let C=Ce(u);if(!C)return 0;let v=$(u).findIndex(W=>W.id===C.id)??0;return me(u,C.id)===ze&&v<$(u).length-1?v+1:v}function ye(u){if(!u.completionCriteria)return;let C=qr(u.completionCriteria);if(C===null)return;let v=fe(C),W=Ue(C);return W===0?void 0:v/W}function X(u){let C=h==null?void 0:h.find(v=>v.flowId===u);return C?C.flowState:null}function fe(u){let C=$(u);return C.length===0?0:C.filter(W=>me(u,W.id)===ze).length}function Ue(u){return $(u).length}function Et(u){let C=o.find(v=>v.slug===u);return C?Jo(C.data):null}function ft(u){if(g)return!1;if(I)return!0;if(u!=null&&u.targetingLogic&&h){let C=h.find(v=>v.flowId===u.slug);if(C)return C.shouldTrigger===!1}return!!(u!=null&&u.targetingLogic&&r&&r.startsWith("guest_"))}function At(u){return!ft(D(u))}function gt(){r&&T()}return{getFlow:D,getFlowData:Et,isLoading:I||A,getStepStatus:me,getFlowSteps:$,getCurrentStepIndex:z,markStepStarted:ce,markStepCompleted:re,markFlowNotStarted:Y,markFlowStarted:Te,markFlowCompleted:le,markFlowAborted:he,markStepNotStarted:G,getFlowStatus:X,getNumberOfStepsCompleted:fe,getNumberOfSteps:Ue,targetingLogicShouldHideFlow:ft,setCustomVariable:V,updateCustomVariables:we,customVariables:s,getStepOptionalProgress:ye,getFlowMetadata:H,isStepBlocked:Fe,isStepHidden:L,hasActiveFullPageFlow:c,setHasActiveFullPageFlow:l,isFlowAvailableToUser:At,refresh:gt}}import{useCallback as Zo,useContext as Rl,useEffect as ea}from"react";var Lt="guest_";function Rt(){let{userId:e,organizationId:t,setUserId:o,setUserProperties:i,shouldGracefullyDegrade:r}=Rl(K),{config:n,apiUrl:s}=He(),{mutateUserFlowState:p}=Ie(),c=Nt(),{verifySDKInitiated:l}=Ot();function x(b){return`frigade-user-registered-${b}`}ea(()=>{if(e&&!t){if(e.startsWith(Lt))return;let b=x(e);localStorage.getItem(b)||(c(`${s}users`,{...n,method:"POST",body:JSON.stringify({foreignId:e})}),localStorage.setItem(b,"true"))}},[e,r,t]);let d=Zo(async b=>{if(!l())return;let y={foreignId:e,properties:b};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(y)}),i(f=>({...f,...b})),p()},[e,n,r,p]),g=Zo(async(b,y)=>{if(!l())return;let B={foreignId:e,events:[{event:b,properties:y}]};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(B)}),p()},[e,n,p]),F=Zo(async(b,y)=>{if(l())if(y){let f=x(b);localStorage.setItem(f,"true"),o(b);let B={foreignId:b,properties:y};await c(`${s}users`,{...n,method:"POST",body:JSON.stringify(B)}),i(T=>({...T,...y})),p()}else o(b)},[n,r,p]);return{userId:e,setUserId:o,setUserIdWithProperties:F,addPropertiesToUser:d,trackEventForUser:g}}import{v4 as Pp}from"uuid";import Ke,{useEffect as bp,useState as wp}from"react";import We,{useEffect as rr,useState as pa}from"react";import wo from"styled-components";import ta from"react";import oa from"styled-components";var Yr="fr-",eo="cfr-";function a(e,t){let o=`${Yr}${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+" "+eo+e}return o}function k(e){if(!e.className||e.className.indexOf(eo)!==-1)return"";let o=e.className.replace(/\s+/g," ").split(" ");return o.length==1&&o[0].startsWith(Yr)?"":`:not(${o.map(i=>`.${i}`).join(", ")})`}function Ro(e){return e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase()}function Be(e){return e!=null&&e.styleOverrides?Object.keys(e.styleOverrides).map(t=>`${Ro(t)}: ${e.styleOverrides[t]};`).join(" "):""}function ge(...e){return e.filter(Boolean).join(" ")}function to(e){return e.charAt(0).toUpperCase()+e.slice(1)}var ra=oa.div`
|
|
3
3
|
display: flex;
|
|
4
4
|
justify-content: center;
|
|
5
5
|
position: fixed;
|
|
@@ -456,21 +456,20 @@ import bt,{createContext as Jp,useEffect as Uo,useState as Me}from"react";import
|
|
|
456
456
|
width: 24px;
|
|
457
457
|
height: 24px;
|
|
458
458
|
border: 3px solid rgba(255, 255, 255, 0.25);
|
|
459
|
-
border-bottom-color: #
|
|
459
|
+
border-bottom-color: #fff;
|
|
460
460
|
border-radius: 50%;
|
|
461
461
|
display: inline-block;
|
|
462
462
|
box-sizing: border-box;
|
|
463
463
|
animation: rotation 0.75s linear infinite;
|
|
464
|
-
}
|
|
465
464
|
|
|
466
|
-
@keyframes rotation {
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
465
|
+
@keyframes rotation {
|
|
466
|
+
0% {
|
|
467
|
+
transform: rotate(0deg);
|
|
468
|
+
}
|
|
469
|
+
100% {
|
|
470
|
+
transform: rotate(360deg);
|
|
471
|
+
}
|
|
472
472
|
}
|
|
473
|
-
}
|
|
474
473
|
`;var Za=Li.button`
|
|
475
474
|
justify-content: center;
|
|
476
475
|
align-content: center;
|