1import{r as g,j as e}from"./react-vendor-MWwqr4Bj.js";import{e as P}from"./store-DCpqFTGv.js";import{c as W,B as J}from"./BarList-BWxCjsHr.js";import{m as h,i as c,c as A,p as K}from"./format-CSqGlD9k.js";import{u as U,E as S}from"./palette-cdFjuu9X.js";import{D as N}from"./DataTable-C-7xY9ui.js";import{E as R}from"./index-Di18qMTG.js";import{C as x}from"./Card-CYHaNvW2.js";import{B as y}from"./Badge-D75GeqlU.js";import{S as b}from"./StatCard-cYiYqEoH.js";import{M as T}from"./Modal-BrLzBm3s.js";import{M as I}from"./megaphone-C2p6PUn4.js";import{U as q}from"./users-B7jotR6f.js";import"./charts.module-CVuZIDTc.js";import"./arrow-up-CtImw-T8.js";import"./Icon-BilrOlgA.js";/** 2 * @license lucide-react v1.17.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const Z=[["path",{d:"M12 17V7",key:"pyj7ub"}],["path",{d:"M16 8h-6a2 2 0 0 0 0 4h4a2 2 0 0 1 0 4H8",key:"1elt7d"}],["path",{d:"M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z",key:"ycz6yz"}]],Q=R("receipt",Z);/** 7 * @license lucide-react v1.17.0 - ISC 8 * 9 * This source code is licensed under the ISC license. 10 * See the LICENSE file in the root directory of this source tree. 11 */const X=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],Y=R("zap",X),ee="_page_13g5s_4",ae="_section_13g5s_11",se="_eyebrowRow_13g5s_17",re="_eyebrow_13g5s_17",ne="_source_13g5s_32",te="_kpiGrid_13g5s_39",le="_grid2_13g5s_46",ce="_cardHead_13g5s_54",oe="_cardTitle_13g5s_63",ie="_caption_13g5s_69",de="_drawerOverlay_13g5s_88",me="_drawer_13g5s_88",ue="_drawerHead_13g5s_110",_e="_drawerTitle_13g5s_118",ve="_drawerSub_13g5s_125",ge="_drawerClose_13g5s_130",pe="_drawerSection_13g5s_152",he="_statGrid_13g5s_161",je="_stat_13g5s_161",xe="_statLabel_13g5s_173",be="_statValue_13g5s_178",ye="_eventList_13g5s_185",we="_eventRow_13g5s_193",fe="_eventMain_13g5s_206",Ne="_eventWho_13g5s_213",Ce="_eventMeta_13g5s_221",ke="_eventAmt_13g5s_226",s={page:ee,section:ae,eyebrowRow:se,eyebrow:re,source:ne,kpiGrid:te,grid2:le,cardHead:ce,cardTitle:oe,caption:ie,drawerOverlay:de,drawer:me,drawerHead:ue,drawerTitle:_e,drawerSub:ve,drawerClose:ge,drawerSection:pe,statGrid:he,stat:je,statLabel:xe,statValue:be,eventList:ye,eventRow:we,eventMain:fe,eventWho:Ne,eventMeta:Ce,eventAmt:ke},Me=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function V(r){if(!r)return null;const[l,m,t]=r.slice(0,10).split("-").map(Number);return!l||!m||!t?null:`${t} ${Me[m-1]}`}function H(r){const l=V(r.start_date),m=V(r.end_date);return!l&&!m?null:`${l??"â¦"} â ${m??"â¦"}`}const w=(r,l,m)=>[r,l].filter(Boolean).join(" ").trim()||m,O=r=>r==="active"?e.jsx(y,{tone:"brand",dot:!0,children:"active"}):r==="upcoming"?e.jsx(y,{tone:"neutral",dot:!0,children:"upcoming"}):e.jsx(y,{tone:"neutral",dot:!0,children:"ended"});function Ke(){P(["influencerOverview"]);const r=W(),l=U(),[m,t]=g.useState(null),[u,o]=g.useState(null),_=g.useMemo(()=>r?.campaigns??[],[r]),f=g.useMemo(()=>r?.creators??[],[r]),p=g.useMemo(()=>r?.conversions??[],[r]),C=g.useMemo(()=>r?.conversionEvents??[],[r]),B=g.useMemo(()=>{const a=new Map;for(const n of p)a.set(n.campaign_id,n);return a},[p]),j=g.useMemo(()=>_.find(a=>a.budget_currency)?.budget_currency??"EUR",[_]),v=g.useMemo(()=>{const a=_.filter(n=>n.lifecycle_status==="active").length;return{campaignsTotal:r?.summary?.campaigns_total??_.length,campaignsActive:r?.summary?.campaigns_active??a,campaignsEnded:r?.summary?.campaigns_concluded??_.filter(n=>n.lifecycle_status==="concluded").length,creatorsActive:r?.summary?.creators_active_distinct??f.length,conversions:p.reduce((n,i)=>n+i.conversions_total,0),cancelled:p.reduce((n,i)=>n+i.hf_cancelled,0),revenue:p.reduce((n,i)=>{const z=i.revenue_by_currency??(i.hf_revenue!=null&&i.currency?{[i.currency]:i.hf_revenue}:{});for(const[M,F]of Object.entries(z))n[M]=(n[M]??0)+F;return n},{})}},[_,f,p,r]),k=g.useMemo(()=>{const a=Object.entries(v.revenue).sort(([n],[i])=>n.localeCompare(i));return a.length?a.map(([n,i])=>h(i,n)).join(" · "):h(0,j)},[v.revenue,j]),D=g.useMemo(()=>{const a=new Map;for(const n of _){const i=n.market_country??"â";a.set(i,(a.get(i)??0)+1)}return[...a.entries()].sort((n,i)=>i[1]-n[1]).map(([n,i])=>({label:n,value:i}))},[_]);if(!r||_.length===0)return e.jsx("div",{className:s.page,children:e.jsx(S,{minHeight:280,children:"No creator campaigns for this brand yet."})});const E=[{key:"name",label:"Campaign",align:"left",render:a=>a.name,sortValue:a=>a.name},{key:"market_country",label:"Market",align:"left",render:a=>a.market_country??"â",sortValue:a=>a.market_country??""},{key:"lifecycle_status",label:"Status",align:"left",render:a=>
11O(a.lifecycle_status),sortValue:a=>a.lifecycle_status},{key:"period",label:"Period",align:"left",render:a=>H(a)??"â",sortValue:a=>a.start_date??"",noSort:!0},{key:"creators_assigned",label:"Creators",align:"right",render:a=>c(a.creators_assigned),sortValue:a=>a.creators_assigned},{key:"creators_active",label:"Active",align:"right",render:a=>c(a.creators_active),sortValue:a=>a.creators_active}],G=[{key:"name",label:"Creator",align:"left",render:a=>w(a.first_name,a.last_name,a.creator_id),sortValue:a=>w(a.first_name,a.last_name,a.creator_id)},{key:"country",label:"Country",align:"left",render:a=>a.country??"â",sortValue:a=>a.country??""},{key:"niche",label:"Niche",align:"left",render:a=>a.niche??"â",sortValue:a=>a.niche??""},{key:"followers_count",label:"Followers",align:"right",render:a=>A(a.followers_count),sortValue:a=>a.followers_count??-1},{key:"active_campaigns",label:"Camp.",align:"right",render:a=>c(a.active_campaigns),sortValue:a=>a.active_campaigns}],$=[{key:"campaign_name",label:"Campaign",align:"left",render:a=>a.campaign_name,sortValue:a=>a.campaign_name},{key:"conversions_total",label:"Conv.",align:"right",render:a=>c(a.conversions_total),sortValue:a=>a.conversions_total},{key:"hf_cancelled",label:"Cancel.",align:"right",render:a=>c(a.hf_cancelled),sortValue:a=>a.hf_cancelled},{key:"hf_revenue",label:"Revenue",align:"right",render:a=>h(a.hf_revenue,a.currency??j),sortValue:a=>a.hf_revenue??-1}];return e.jsxs("div",{className:s.page,children:[e.jsxs("section",{className:s.section,children:[e.jsx("div",{className:s.eyebrowRow,children:e.jsx("span",{className:s.eyebrow,children:"Overview"})}),e.jsxs("div",{className:s.kpiGrid,children:[e.jsx(b,{label:"Active campaigns",value:c(v.campaignsActive),delta:`of ${v.campaignsTotal}`,deltaTone:"neutral",icon:I}),e.jsx(b,{label:"Active creators",value:c(v.creatorsActive),delta:"on live campaigns",deltaTone:"neutral",icon:q}),e.jsx(b,{label:"Conversions",value:c(v.conversions),delta:`${c(v.cancelled)} cancelled`,deltaTone:"neutral",icon:Y}),e.jsx(b,{label:"Conv. revenue",value:k,delta:"paid only",deltaTone:"brand",icon:Q})]})]}),e.jsxs("section",{className:s.section,children:[e.jsxs("div",{className:s.eyebrowRow,children:[e.jsx("span",{className:s.eyebrow,children:"Campaigns by market"}),e.jsxs("span",{className:s.source,children:[c(v.campaignsTotal)," total"]})]}),e.jsx(x,{children:e.jsx(J,{items:D,color:l.brand})})]}),e.jsxs("section",{className:s.section,children:[e.jsxs("div",{className:s.eyebrowRow,children:[e.jsx("span",{className:s.eyebrow,children:"Campaigns"}),e.jsxs("span",{className:s.source,children:[c(v.campaignsActive)," active · ",c(v.campaignsEnded)," ended"]})]}),e.jsx(x,{pad:0,children:e.jsx(N,{columns:E,rows:_,rowKey:a=>a.campaign_id,initialSort:"lifecycle_status",initialDir:"asc",maxHeight:420,onRowClick:t})})]}),e.jsxs("section",{className:s.section,children:[e.jsx("div",{className:s.eyebrowRow,children:e.jsx("span",{className:s.eyebrow,children:"Creators & conversions"})}),e.jsxs("div",{className:s.grid2,children:[e.jsxs(x,{pad:0,children:[e.jsxs("div",{className:s.cardHead,children:[e.jsx("h3",{className:s.cardTitle,children:"Active creators"}),e.jsxs("span",{className:s.source,children:[c(v.creatorsActive)," on live campaigns"]})]}),e.jsx(N,{columns:G,rows:f,rowKey:a=>a.creator_id,initialSort:"followers_count",initialDir:"desc",maxHeight:280,onRowClick:o})]}),e.jsxs(x,{pad:0,children:[e.jsxs("div",{className:s.cardHead,children:[e.jsx("h3",{className:s.cardTitle,children:"Conversions by campaign"}),e.jsxs("span",{className:s.source,children:["paid ",k]})]}),p.length?e.jsx(N,{columns:$,rows:p,rowKey:a=>a.campaign_id,initialSort:"conversions_total",initialDir:"desc",maxHeight:280,onRowClick:a=>{const n=_.find(i=>i.campaign_id===a.campaign_id);n&&t(n)}}):e.jsx(S,{minHeight:200,children:"No conversions tracked yet."})]})]})]}),m&&e.jsx(Se,{campaign:m,conv:B.get(m.campaign_id)??null,events:C.filter(a=>a.campaign_id===m.campaign_id),currency:j,onClose:()=>t(null)}),u&&e.jsx(Ve,{creator:u,events:C.filter(a=>a.creator_id===u.creator_id),currency:j,onClose:()=>o(null)})]})}function d({label:r,value:l}){return e.jsxs("div",{className:s.stat,children:[e.jsx("span",{className:s.statLabel,children:r}),e.jsx("span",{className:s.statValue,children:l})]})}function L({events:r,currency:l,mode:m}){return r.length?e.jsx("ul",{className:s.eventList,children:r.slice(0,20).map(t=>e.jsxs("li",{className:s.eventRow,children:[e.jsxs("div",{className:s.eventMain,children:[e.jsx("span",{className:s.eventWho,children:m==="campaign"?w(t.first_name,t.last_name,t.creator_id??"â"):t.campaign_name}),e.jsx("span",{className:s.eventMeta,children:[t.conversion_type,t.order_status,t.discount_code].filter(
11Boolean).join(" · ")||"â"})]}),e.jsxs("div",{className:s.eventAmt,children:[e.jsx("span",{className:s.statValue,children:h(t.amount,t.currency??l)}),e.jsx("span",{className:s.eventMeta,children:t.converted_at?.slice(0,10)??"â"})]})]},t.order_id))}):e.jsx("p",{className:s.caption,children:"No conversions recorded."})}function Se({campaign:r,conv:l,events:m,currency:t,onClose:u}){const o=r;return e.jsxs(T,{open:!0,onClose:u,className:s.drawer,overlayClassName:s.drawerOverlay,label:`Campaign ${o.name}`,children:[e.jsxs("div",{className:s.drawerHead,children:[e.jsxs("div",{children:[e.jsx("span",{className:s.eyebrow,children:"Campaign"}),e.jsx("h3",{className:s.drawerTitle,children:o.name}),e.jsx("span",{className:s.drawerSub,children:[o.org,o.market_name??o.market_country].filter(Boolean).join(" · ")||"â"})]}),O(o.lifecycle_status)]}),e.jsx("button",{type:"button",className:s.drawerClose,onClick:u,"aria-label":"Close",children:"Ã"}),e.jsxs("div",{className:s.statGrid,children:[e.jsx(d,{label:"Period",value:H(o)??"â"}),e.jsx(d,{label:"Budget",value:o.budget_amount==null?"â":h(o.budget_amount,o.budget_currency??t)}),e.jsx(d,{label:"Objective",value:o.objective??"â"}),e.jsx(d,{label:"Platform",value:o.platform??"â"}),e.jsx(d,{label:"Creators assigned",value:c(o.creators_assigned)}),e.jsx(d,{label:"Creators active",value:c(o.creators_active)}),e.jsx(d,{label:"Creators pending",value:c(o.creators_pending)}),e.jsx(d,{label:"Pool",value:o.is_pool?"yes":"no"})]}),l&&e.jsxs(e.Fragment,{children:[e.jsx("h4",{className:s.drawerSection,children:"Conversions"}),e.jsxs("div",{className:s.statGrid,children:[e.jsx(d,{label:"Total",value:c(l.conversions_total)}),e.jsx(d,{label:"Paid (HF)",value:c(l.hf_conversions)}),e.jsx(d,{label:"Cancelled",value:c(l.hf_cancelled)}),e.jsx(d,{label:"Activations",value:c(l.activations)}),e.jsx(d,{label:"Reactivations",value:c(l.reactivations)}),e.jsx(d,{label:"Voucher conv.",value:c(l.voucher_conversions)}),e.jsx(d,{label:"Revenue",value:h(l.hf_revenue,l.currency??t)}),e.jsx(d,{label:"Voucher cost",value:h(l.voucher_cost,t)})]})]}),e.jsx("h4",{className:s.drawerSection,children:"Recent conversions"}),e.jsx(L,{events:m,currency:t,mode:"campaign"})]})}function Ve({creator:r,events:l,currency:m,onClose:t}){const u=r,o=w(u.first_name,u.last_name,u.creator_id);return e.jsxs(T,{open:!0,onClose:t,className:s.drawer,overlayClassName:s.drawerOverlay,label:`Creator ${o}`,children:[e.jsxs("div",{className:s.drawerHead,children:[e.jsxs("div",{children:[e.jsx("span",{className:s.eyebrow,children:"Creator"}),e.jsx("h3",{className:s.drawerTitle,children:o}),e.jsx("span",{className:s.drawerSub,children:u.country??"â"})]}),u.vetting_tier?e.jsx(y,{tone:"brand",dot:!0,children:u.vetting_tier}):null]}),e.jsx("button",{type:"button",className:s.drawerClose,onClick:t,"aria-label":"Close",children:"Ã"}),e.jsxs("div",{className:s.statGrid,children:[e.jsx(d,{label:"Followers",value:A(u.followers_count)}),e.jsx(d,{label:"Avg engagement",value:u.avg_engagement_rate==null?"â":K(u.avg_engagement_rate)}),e.jsx(d,{label:"Niche",value:u.niche??"â"}),e.jsx(d,{label:"Active campaigns",value:c(u.active_campaigns)})]}),e.jsx("h4",{className:s.drawerSection,children:"Recent conversions"}),e.jsx(L,{events:l,currency:m,mode:"creator"})]})}export{Ke as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.