1import{r as h,j as e}from"./vendor-react-DF9l7Zim.js";import{a4 as ne,T as te,V as q,q as T,n as le,ak as se,$ as u,aa as F,ap as I,aq as K,ah as A,ab as p}from"./index-DIdUq0at.js";import{u as G,b as O}from"./vendor-query-DvoWqiWG.js";import{f as re}from"./admin-format-sGTqEM2S.js";import{L as t}from"./label-BWdB9qKq.js";import{S as z}from"./switch-BIUiOlBG.js";import{A as ce,a as de}from"./alert-DmDP2DAi.js";import{S as ee}from"./skeleton-DPMAdzFp.js";import{S as f,a as j,b as g,c as v,d as i}from"./select-DUIxizIK.js";import{C as J}from"./catalog-shell-Br_nbvOg.js";import"./vendor-ui-utils-CyvyRcDv.js";import"./index-D17hSi50.js";import"./chevron-up-Kvv9Q6mP.js";import"./arrow-up-right-Dj22t3w6.js";import"./boxes-0wdW005j.js";const R=a=>Math.round(Number(a||0)*100),$=a=>a==null?"":(a/100).toFixed(2),M=a=>Math.round(Number(a||0)*100),Q=a=>a==null?"":String(a/100);function W(a,c){return a.commissionKind==="flat"&&a.commissionFlatCents!=null?`${re(a.commissionFlatCents,{cents:!0})} per unit`:a.commissionKind==="percent"&&a.commissionBps!=null?`${(a.commissionBps/100).toFixed(1)}%`:c}function ke(){const{id:a}=ne(),{toast:c}=te(),b=G({queryKey:[`/api/commerce/affiliate-campaigns/${a}`]}),D=G({queryKey:["/api/commerce/offers"]}),V=G({queryKey:["/api/affiliates"]}),l=b.data,[w,S]=h.useState({});h.useEffect(()=>{l&&S({})},[l?.id]);const n=s=>w[s]??l?.[s],r=(s,x)=>S(d=>({...d,[s]:x})),N=O({mutationFn:async s=>(await q("PATCH",`/api/commerce/affiliate-campaigns/${a}`,s)).json(),onSuccess:()=>{T.invalidateQueries({queryKey:[`/api/commerce/affiliate-campaigns/${a}`]}
1),T.invalidateQueries({queryKey:["/api/commerce/affiliate-campaigns"]}),S({}),c({title:"Campaign saved"})},onError:s=>c({title:"Could not save",description:s.message,variant:"destructive"})}),k=O({mutationFn:async s=>(await q("PUT",`/api/commerce/affiliate-campaigns/${a}/products`,s)).json(),onSuccess:()=>{T.invalidateQueries({queryKey:[`/api/commerce/affiliate-campaigns/${a}`]}),c({title:"Offer rate saved"})},onError:s=>c({title:"Could not save the offer",description:s.message,variant:"destructive"})}),_=O({mutationFn:async s=>(await q("PUT",`/api/commerce/affiliate-campaigns/${a}/tiers`,{tiers:s})).json(),onSuccess:()=>{T.invalidateQueries({queryKey:[`/api/commerce/affiliate-campaigns/${a}`]}),c({title:"Tiers saved"})},onError:s=>c({title:"Could not save tiers",description:s.message,variant:"destructive"})}),C=O({mutationFn:async s=>(await q("PUT",`/api/commerce/affiliate-campaigns/${a}/variable-rates`,s)).json(),onSuccess:()=>{T.invalidateQueries({queryKey:[`/api/commerce/affiliate-campaigns/${a}`]}),c({title:"Rate ladder saved"})},onError:s=>c({title:"Could not save the ladder",description:s.message,variant:"destructive"})}),B=O({mutationFn:async s=>(await q("PUT",`/api/commerce/affiliate-campaigns/${a}/members`,s)).json(),onSuccess:()=>{T.invalidateQueries({queryKey:[`/api/commerce/affiliate-campaigns/${a}`]}),c({title:"Saved"})},onError:s=>c({title:"Could not save",description:s.message,variant:"destructive"})}),[m,H]=h.useState(null),[ae,E]=h.useState(null),[Y,X]=h.useState(""),[U,Z]=h.useState("");if(b.isLoading)return e.jsx(J,{children:e.jsxs("div",{className:"p-6 space-y-3",children:[e.jsx(ee,{className:"h-8 w-64"}),e.jsx(ee,{className:"h-40 w-full"})]})});if(b.error||!l)return e.jsx(J,{children:e.jsx("div",{className:"p-6",children:e.jsx(ce,{variant:"destructive",children:e.jsxs(de,{children:[b.error?.message||"Campaign not found."," This is a loading failure, not an empty campaign."]})})})});const P=m??l.tiers,y=ae??l.variableRates.filter(s=>s.offerId==null),ie=Object.keys(w).length>0,L=n("defaultCommissionKind");return e.jsx(J,{children:e.jsxs("div",{className:"p-6 space-y-6 max-w-5xl",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx(le,{href:"/catalog/affiliates",className:"catalog-back-link",children:"Back to affiliates"}),e.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:l.name}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[l.isDefault?"Your default campaign. ":"",l.members.length," enrolled"]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(se,{variant:l.status==="active"?"default":"outline",children:l.status}),l.status==="active"?e.jsx(u,{variant:"outline",size:"sm",onClick:()=>N.mutate({status:"paused"}),children:"Pause"}):e.jsx(u,{size:"sm",onClick:()=>N.mutate({status:"active"}),children:"Activate"})]})]}),e.jsxs(F,{children:[e.jsx(I,{children:e.jsx(K,{children:"What it pays"})}),e.jsxs(A,{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:"Name"}),e.jsx(p,{value:String(n("name")??""),onChange:s=>r("name",s.target.value)})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:"Pays"}),e.jsxs(f,{value:String(L),onValueChange:s=>r("defaultCommissionKind",s),children:[e.jsx(j,{children:e.jsx(g,{})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"percent",children:"A percentage of the sale"}),e.jsx(i,{value:"flat",children:"A fixed amount per unit"})]})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:L==="flat"?"Dollars per unit":"Percent"}),e.jsx(p,{value:L==="flat"?$(n("defaultCommissionFlatCents")):Q(n("defaultCommissionBps")),onChange:s=>L==="flat"?r("defaultCommissionFlatCents",R(s.target.value)):r("defaultCommissionBps",M(s.target.value)),"data-testid":"input-campaign-default-rate"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:L==="flat"?"Per unit, so ten seats pays ten times this.":"Of the sale after tax and shipping."})]})]})]}),e.jsxs(F,{children:[e.jsx(I,{children:e.jsx(K,{children:"Tracking"})}),e.jsxs(A,{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:"Cookie days"}
1),e.jsx(p,{value:String(n("cookieDays")??30),onChange:s=>r("cookieDays",Number(s.target.value)||30)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"How long after a click a sale still counts."})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:"Attribution"}),e.jsxs(f,{value:String(n("attribution")),onValueChange:s=>r("attribution",s),children:[e.jsx(j,{children:e.jsx(g,{})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"last_click",children:"Last click wins"}),e.jsx(i,{value:"first_click",children:"First click wins"})]})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:"Hold days"}),e.jsx(p,{value:String(n("holdDays")??0),onChange:s=>r("holdDays",Number(s.target.value)||0)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Your refund window. 0 pays immediately."})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:"Payout terms"}),e.jsxs(f,{value:String(n("netTerms")),onValueChange:s=>r("netTerms",s),children:[e.jsx(j,{children:e.jsx(g,{})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"none",children:"Pay when you choose"}),e.jsx(i,{value:"net_7",children:"NET 7"}),e.jsx(i,{value:"net_15",children:"NET 15"}),e.jsx(i,{value:"net_30",children:"NET 30"}),e.jsx(i,{value:"net_45",children:"NET 45"}),e.jsx(i,{value:"net_60",children:"NET 60"}),e.jsx(i,{value:"net_90",children:"NET 90"})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"When you pay each commission after it clears. You pay affiliates from your own account and record each payment on the Payouts tab."})]})]})]}),e.jsxs(F,{children:[e.jsx(I,{children:e.jsx(K,{children:"Repeat payments"})}),e.jsxs(A,{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between rounded-md border px-3 py-2",children:[e.jsxs("div",{children:[e.jsx(t,{children:"Pay on subscription renewals"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Every cycle the customer is billed, not just the first."})]}),e.jsx(z,{checked:!!n("earnOnRecurring"),onCheckedChange:s=>r("earnOnRecurring",s)})]}),e.jsxs("div",{className:"flex items-center justify-between rounded-md border px-3 py-2",children:[e.jsxs("div",{children:[e.jsx(t,{children:"Pay on payment-plan installments"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Each installment of a split payment."})]}),e.jsx(z,{checked:!!n("earnOnPaymentPlan"),onCheckedChange:s=>r("earnOnPaymentPlan",s)})]}),e.jsxs("div",{className:"flex items-center justify-between rounded-md border px-3 py-2",children:[e.jsxs("div",{children:[e.jsx(t,{children:"Include setup fees in the commission"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Off means a one-off onboarding fee is yours to keep."})]}),e.jsx(z,{checked:!!n("includeSetupFees"),onCheckedChange:s=>r("includeSetupFees",s)})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:"How long they keep earning"}),e.jsxs(f,{value:String(n("commissionLength")),onValueChange:s=>r("commissionLength",s),children:[e.jsx(j,{children:e.jsx(g,{})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"unlimited",children:"For as long as the customer stays"}),e.jsx(i,{value:"first_n_charges",children:"Only the first few payments"})]})]})]}),n("commissionLength")==="first_n_charges"&&e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:"Number of payments"}),e.jsx(p,{value:String(n("commissionLengthN")??""),onChange:s=>r("commissionLengthN",Number(s.target.value)||null),placeholder:"3"})]})]})]})]}),e.jsxs(F,{children:[e.jsx(I,{children:e.jsx(K,{children:"Offers in this campaign"})}),e.jsxs(A,{className:"space-y-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"An offer with its own rate uses that rate. Anything not listed uses the campaign default above. Turning an offer off means it pays nothing, which is different from leaving its rate blank."}),e.jsxs("div",{className:"rounded-md border divide-y",children:[(D.data??[]).map(s=>{const x=l.products.find(d=>d.offerId===s.id);return e.jsx(oe,{offer:s,row:x,campaignDefault:W({commissionKind:l.defaultCommissionKind,commissionBps:l.defaultCommissionBps,commissionFlatCents:l.defaultCommissionFlatCents},"campaign default"),pending:k.isPending,onSave:d=>k.mutate({offerId:s.id,...d})},s.id)}),(D.data??[]).length===0&&e.jsx("div",{className:"px-4 py-6 text-sm text-muted-foreground text-center",children:"No offers yet. Create one on the Offers tab first."})]})]})]}),e.jsxs(F,{children:[e.jsx(I,{children:e.jsx(K,{children:"Sub-affiliates"})}),e.jsxs(A,{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between rounded-md border px-3 py-2",children:[e.jsxs("div",{children:[e.jsx(t,{children:"Let promoters recruit other promoters"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"A recruiter earns a cut of their recruits' sales, on top of what the recruit earns."})]}),e.jsx(z,{checked:!!n("subAffiliatesEnabled"),onCheckedChange:s=>r("subAffiliatesEnabled",s)})]}),n("subAffiliatesEnabled")&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-1.5 sm:w-48",children:[e.jsx(t,{children:"Levels"}),e.jsxs(f,{value:String(n("tierCount")??1),onValueChange:s=>r("tierCount",Number(s)),children:[e.jsx(j,{children:e.jsx(g,{})}),e.jsx(v,{className:"catalog-popover",children:[1,2,3,4,5,6,7].map(s=>e.jsx(i,{value:String(s),children:s},s))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"What each level above a seller earns. Levels must run 1, 2, 3 with no gaps: a gap silently stops paying at the gap."}),P.map((s,x)=>e.jsxs("div",{className:"flex flex-wrap items-end gap-2 rounded-md border px-3 py-2",children:[e.jsxs("div",{className:"text-sm font-medium w-24",children:["Level ",s.tierDepth]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:"Pays"}),e.jsxs(f,{value:s.commissionKind,onValueChange:d=>{const o=[...P];o[x]={...s,commissionKind:d},H(o)},children:[e.jsx(j,{className:"w-32",children:e.jsx(g,{})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"percent",children:"Percent"}),e.jsx(i,{value:"flat",children:"Fixed"})]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:s.commissionKind==="flat"?"Dollars":"Percent"}),e.jsx(p,{className:"w-28",value:s.commissionKind==="flat"?$(s.commissionFlatCents):Q(s.commissionBps),onChange:d=>{const o=[...P];o[x]=s.commissionKind==="flat"?{...s,commissionFlatCents:R(d.target.value)}:{...s,commissionBps:M(d.target.value)},H(o)}})]}),e.jsx(u,{size:"sm",variant:"ghost",onClick:()=>H(P.filter(d=>d.tierDepth!==s.tierDepth).map((d,o)=>({...d,tierDepth:o+1}))),children:"Remove"})]},s.tierDepth)),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(u,{size:"sm",variant:"outline",disabled:P.length>=Math.min(6,(n("tierCount")??1)-1),onClick:()=>H([...P,{tierDepth:P.length+1,commissionKind:"percent",commissionBps:500,commissionFlatCents:0}]),children:"Add a level"}),e.jsx(u,{size:"sm",disabled:_.isPending,onClick:()=>_.mutate(P),children:"Save levels"})]})]})]})]})]}),e.jsxs(F,{children:[e.jsx(I,{children:e.jsx(K,{children:"Rate ladder by payment number"})}),e.jsxs(A,{className:"space-y-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"A different rate for early payments than for later ones, for example 33% for the first three then 23%. Ranges may not overlap: two rates covering the same payment would make the commission depend on row order."}),y.map((s,x)=>e.jsxs("div",{className:"flex flex-wrap items-end gap-2 rounded-md border px-3 py-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:"From payment"}),e.jsx(p,{className:"w-24",value:String(s.fromChargeIndex),onChange:d=>{const o=[...y];o[x]={...s,fromChargeIndex:Number(d.target.value)||1},E(o)}})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:"To (blank = onwards)"}),e.jsx(p,{className:"w-32",value:s.toChargeIndex==null?"":String(s.toChargeIndex),onChange:d=>{const o=[...y];o[x]={...s,toChargeIndex:d.target.value?Number(d.target.value):null},E(o)}})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:"Pays"}),e.jsxs(f,{value:s.commissionKind,onValueChange:d=>{const o=[...y];o[x]={...s,commissionKind:d},E(o)},children:[e.jsx(j,{className:"w-28",children:e.jsx(g,{})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"percent",children:"Percent"}),e.jsx(i,{value:"flat",children:"Fixed"})]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:s.commissionKind==="flat"?"Dollars":"Percent"}),e.jsx(p,{className:"w-24",value:s.commissionKind==="flat"?$(s.commissionFlatCents):Q(s.commissionBps),onChange:d=>{const o=[...y];o[x]=s.commissionKind==="flat"?{...s,commissionFlatCents:R(d.target.value)}:{...s,commissionBps:M(d.target.value)},E(o)}})]}),e.jsx(u,{size:"sm",variant:"ghost",onClick:()=>E(y.filter((d,o)=>o!==x)),children:"Remove"})]},x)),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(u,{size:"sm",variant:"outline",onClick:()=>E([...y,{fromChargeIndex:y.length===0?1:(y[y.length-1].toChargeIndex??y.length)+1,toChargeIndex:null,commissionKind:"percent",commissionBps:1e3,commissionFlatCents:0,offerId:null}]),children:"Add a band"}),e.jsx(u,{size:"sm",disabled:C.isPending,onClick:()=>C.mutate({offerId:null,bands:y.map(s=>({fromChargeIndex:s.fromChargeIndex,toChargeIndex:s.toChargeIndex,commissionKind:s.commissionKind,commissionBps:s.commissionBps,commissionFlatCents:s.commissionFlatCents}))}),children:"Save ladder"})]})]})]}),e.jsxs(F,{children:[e.jsx(I,{children:e.jsx(K,{children:"Pay per lead"})}),e.jsxs(A,{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:"Dollars per lead"}),e.jsx(p,{value:$(n("leadCommissionFlatCents")),onChange:s=>r("leadCommissionFlatCents",s.target.value?R(s.target.value):null),placeholder:"Blank means this campaign does not pay for leads"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(t,{children:"Daily cap per promoter"}),e.jsx(p,{value:String(n("leadDailyCapPerAffiliate")??""),onChange:s=>r("leadDailyCapPerAffiliate",s.target.value?Number(s.target.value):null),placeholder:"e.g. 25"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"A lead costs a promoter nothing to manufacture. Set a cap before turning this on."})]})]})]}),e.jsxs(F,{children:[e.jsx(I,{children:e.jsx(K,{children:"Who is on this campaign"})}),e.jsxs(A,{className:"space-y-3",children:[e.jsxs("div",{className:"rounded-md border divide-y",children:[l.members.map(s=>e.jsx(me,{member:s,members:l.members,subAffiliates:!!n("subAffiliatesEnabled"),campaignDefault:W({commissionKind:l.defaultCommissionKind,commissionBps:l.defaultCommissionBps,commissionFlatCents:l.defaultCommissionFlatCents},"campaign default"),pending:B.isPending,onSave:x=>B.mutate({affiliateId:s.affiliateId,...x})},s.affiliateId)),l.members.length===0&&e.jsx("div",{className:"px-4 py-6 text-sm text-muted-foreground text-center",children:"Nobody is enrolled yet."})]}),e.jsxs("div",{className:"flex flex-wrap items-end gap-2",children:[e.jsxs("div",{className:"space-y-1.5 min-w-[14rem]",children:[e.jsx(t,{children:"Add someone"}),e.jsxs(f,{value:Y,onValueChange:X,children:[e.jsx(j,{children:e.jsx(g,{placeholder:"Pick a person"})}),e.jsx(v,{className:"catalog-popover",children:(V.data??[]).filter(s=>!l.members.some(x=>x.affiliateId===s.id)).map(s=>e.jsx(i,{value:s.id,children:s.name},s.id))})]})]}),n("subAffiliatesEnabled")&&e.jsxs("div",{className:"space-y-1.5 min-w-[14rem]",children:[e.jsx(t,{children:"Recruited by (optional)"}),e.jsxs(f,{value:U,onValueChange:Z,children:[e.jsx(j,{children:e.jsx(g,{placeholder:"Nobody"})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"__none__",children:"Nobody"}),l.members.map(s=>e.jsx(i,{value:s.affiliateId,children:s.name},s.affiliateId))]})]})]}),e.jsx(u,{disabled:!Y||B.isPending,onClick:()=>{B.mutate({affiliateId:Y,parentAffiliateId:U&&U!=="__none__"?U:null,status:"active"}),X(""),Z("")},"data-testid":"button-enrol-affiliate",children:"Add to campaign"})]})]})]}),ie&&e.jsx("div",{className:"sticky bottom-4 flex justify-end",children:e.jsx(u,{className:"shadow-lg active:scale-[0.98]",disabled:N.isPending,onClick:()=>N.mutate(w),"data-testid":"button-save-campaign",children:N.isPending?"Savingâ¦":"Save changes"})})]})})}function oe({offer:a,row:c,campaignDefault:b,pending:D,onSave:V}){const[l,w]=h.useState(!1),[S,n]=h.useState(c?.enabled??!0),[r,N]=h.useState(c?.commissionKind??""),[k,_]=h.useState(c?.commissionKind==="flat"?$(c.commissionFlatCents):Q(c?.commissionBps));return e.jsxs("div",{className:"px-4 py-3 space-y-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-medium",children:a.name}),e.jsx("div",{className:"text-xs text-muted-foreground",children:c?c.enabled?c.commissionKind?W(c,b):`${b} (campaign default)`:"Pays nothing":`${b} (campaign default)`})]}),e.jsx(u,{size:"sm",variant:"ghost",onClick:()=>w(C=>
1!C),children:l?"Close":"Set rate"})]}),l&&e.jsxs("div",{className:"flex flex-wrap items-end gap-2 rounded-md bg-muted/40 px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(z,{checked:S,onCheckedChange:n}),e.jsx(t,{className:"text-xs",children:"In this campaign"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:"Rate"}),e.jsxs(f,{value:r||"__default__",onValueChange:C=>N(C==="__default__"?"":C),children:[e.jsx(j,{className:"w-40",children:e.jsx(g,{})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"__default__",children:"Use campaign default"}),e.jsx(i,{value:"percent",children:"Percent"}),e.jsx(i,{value:"flat",children:"Fixed per unit"})]})]})]}),r&&e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:r==="flat"?"Dollars":"Percent"}),e.jsx(p,{className:"w-28",value:k,onChange:C=>_(C.target.value)})]}),e.jsx(u,{size:"sm",disabled:D,onClick:()=>V({enabled:S,commissionKind:r||null,commissionBps:r==="percent"?M(k):null,commissionFlatCents:r==="flat"?R(k):null}),children:"Save"})]})]})}function me({member:a,members:c,subAffiliates:b,campaignDefault:D,pending:V,onSave:l}){const[w,S]=h.useState(!1),[n,r]=h.useState(a.commissionKind??""),[N,k]=h.useState(a.commissionKind==="flat"?$(a.commissionFlatCents):Q(a.commissionBps)),[_,C]=h.useState(a.parentAffiliateId??"__none__"),B=c.find(m=>m.affiliateId===a.parentAffiliateId)?.name;return e.jsxs("div",{className:"px-4 py-3 space-y-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-medium",children:a.name}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:["/",a.referralCode," · ",W(a,D),a.tierDepth>0&&B?` · recruited by ${B}`:""]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(se,{variant:a.status==="active"?"default":"outline",children:a.status}),e.jsx(u,{size:"sm",variant:"ghost",onClick:()=>S(m=>!m),children:w?"Close":"Edit"})]})]}),w&&e.jsxs("div",{className:"flex flex-wrap items-end gap-2 rounded-md bg-muted/40 px-3 py-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:"Their rate"}),e.jsxs(f,{value:n||"__default__",onValueChange:m=>r(m==="__default__"?"":m),children:[e.jsx(j,{className:"w-40",children:e.jsx(g,{})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"__default__",children:"Same as everyone"}),e.jsx(i,{value:"percent",children:"Percent"}),e.jsx(i,{value:"flat",children:"Fixed per unit"})]})]})]}),n&&e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:n==="flat"?"Dollars":"Percent"}),e.jsx(p,{className:"w-28",value:N,onChange:m=>k(m.target.value)})]}),b&&e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:"Recruited by"}),e.jsxs(f,{value:_,onValueChange:C,children:[e.jsx(j,{className:"w-44",children:e.jsx(g,{})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"__none__",children:"Nobody"}),c.filter(m=>m.affiliateId!==a.affiliateId).map(m=>e.jsx(i,{value:m.affiliateId,children:m.name},m.affiliateId))]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(t,{className:"text-xs",children:"Status"}),e.jsxs(f,{value:a.status,onValueChange:m=>l({status:m,parentAffiliateId:_==="__none__"?null:_}),children:[e.jsx(j,{className:"w-32",children:e.jsx(g,{})}),e.jsxs(v,{className:"catalog-popover",children:[e.jsx(i,{value:"active",children:"Active"}),e.jsx(i,{value:"paused",children:"Paused"}),e.jsx(i,{value:"pending",children:"Pending"}),e.jsx(i,{value:"rejected",children:"Rejected"})]})]})]}),e.jsx(u,{size:"sm",disabled:V,onClick:()=>l({commissionKind:n||null,commissionBps:n==="percent"?M(N):null,commissionFlatCents:n==="flat"?R(N):null,parentAffiliateId:_==="__none__"?null:_}),children:"Save"})]})]})}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.