PageSourceSearch

https://embroidery.io/platform/assets/1791025555-63dd6857ebcc2fc18c55156f334e6e7f1c408f1a/route-CvT5ngP3.js

js embroidery.io collected 2026-10-04 23:29:57 UTC 17,864 bytes, 1 lines download raw bytes

1import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{C as t,a as n,g as r,h as i,k as a,m as o,p as s,t as c}from"./framework-m_1FVxd5.js";import{A as l,B as u,D as d,I as f,X as p,at as m,c as h,ct as g,g as _,k as v,lt as ee,o as y,ot as b,q as x,tt as S,u as C}from"./ui-D0N3zdbQ.js";import{t as w}from"./dropdown-DH9QVmco.js";import{t as T}from"./table-R5mn8JsE.js";import{t as E}from"./SkeletonBlock-HWeXZELV.js";import{_ as D,h as O,r as k,w as A}from"./src-B3rduyys.js";import{n as j}from"./invite-code-D8Hm935v.js";import{t as M}from"./RouteLoading-hk8ouzQf.js";import{t as N}from"./PanelSkeleton-EX1zOPop.js";import{t as P}from"./TableSkeleton-wWZHr6m0.js";import{t as F}from"./PanelHeaderSkeleton-CHFyWqG4.js";var I=O({_action:D().oneOf([`create_invite_code`,`update_invite_code`,`deactivate_invite_code`,`activate_invite_code`]).required(),inviteCode:D().required(),orgName:D().optional(),amount:D().optional(),creditPriceMultiplier:D().optional()});async function L({request:e}){let[t,n]=await g(()=>e.formData());if(t)return[Error(`error reading form data`,{cause:t}),null];let[r,i]=await p(n,I);if(r)return[Error(`error validating invite code form`,{cause:r}),null];let a=i._action===`create_invite_code`||i._action===`update_invite_code`,o=a&&i.amount&&i.amount.trim()!==``?Number(i.amount):void 0;if(o!==void 0&&(!Number.isFinite(o)||o<=0))return[Error(`Signup funds must be greater than zero`),null];let s=Number(i.creditPriceMultiplier);if(a&&(!Number.isFinite(s)||s<=1))return[Error(`Credit mutator must be greater than one`),null];let[c,l]=i._action===`create_invite_code`?await k.post(`/api/v1/invites`,null,{inviteCode:i.inviteCode,orgName:i.orgName??``,amount:o,creditPriceMultiplier:s}):i._action===`update_invite_code`?await k.patch(`/api/v1/invites/{inviteCode}`,{inviteCode:i.inviteCode},{orgName:i.orgName??``,amount:o,creditPriceMultiplier:s}):await k.patch(`/api/v1/invites/{inviteCode}`,{inviteCode:i.inviteCode},{deactivated:i._action===`deactivate_invite_code`});return c?A(c)?.response?.status===403?[Error(`You don't have the required permissions to manage invite codes.`,{cause:c}),null]:[Error(i._action===`create_invite_code`?`Failed to create invite code`:i._action===`update_invite_code`?`Failed to update invite code`:i._action===`deactivate_invite_code`?`Failed to deactivate invite code`:`Failed to activate invite code`,{cause:c}),null]:[null,l]}var R=e(a(),1),z=c();function B({inviteCode:e,orgName:t,disabled:n=!1}){let{showToast:r}=C(),i=async()=>{let n=j({inviteCode:e,orgName:t}),i=new URL(`/platform/invite/${n}`,window.location.origin).toString();if(!await b(i)){r(`Failed to copy invite link`,`error`);return}r(`Invite link copied`,`success`)};return(0,z.jsx)(l,{type:`button`,variant:`secondary`,size:`sm`,"data-click":`admin-invite-codes-copy-link-button`,disabled:n,onClick:()=>void i(),children:`Copy link`})}function V({onSuccess:e,onClose:t}){let r=n(),i=(0,R.useRef)(null),[a,o]=(0,R.useState)(null),s=r.state===`submitting`;return(0,R.useEffect)(()=>{if(r.state!==`idle`||!r.data)return;let[t,n]=r.data;if(t){o(t.message);return}n&&e()},[r.state,r.data,e]),(0,z.jsx)(y,{isOpen:!0,onClose:t,title:`New Invite Code`,description:`Create a single-use code for organization registration.`,children:(0,z.jsxs)(r.Form,{method:`post`,className:`p-6`,children:[(0,z.jsx)(`input`,{type:`hidden`,name:`_action`,value:`create_invite_code`}),(0,z.jsx)(`div`,{className:`mb-4`,children:(0,z.jsx)(h,{id:`orgName`,name:`orgName`,type:`text`,maxLength:255,placeholder:`e.g. Acme Corporation`,label:`Organization Name (optional)`})}),(0,z.jsx)(`div`,{className:`mb-4`,children:(0,z.jsx)(h,{id:`amount`,name:`amount`,type:`number`,min:`0.01`,step:`0.01`,placeholder:`e.g. 100`,label:`Signup funds (USD, optional)`})}),(0,z.jsx)(`div`,{className:`mb-4`,children:(0,z.jsx)(h,{id:`creditPriceMultiplier`,name:`creditPriceMultiplier`,type:`number`,min:`1.5`,step:`0.01`,defaultValue:`2`,required:!0,label:`Credit mutator`})}),(0,z.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,z.jsx)(h,{ref:i,id:`inviteCode`,name:`inviteCode`,type:`text`,required:!0,placeholder:`e.g. EARLYACCESS`,label:`Invite Code`}),(0,z.jsx)(l,{type:`button`,variant:`secondary`,"data-click":`generate-invite-code-button`,onClick:()=>{i.current&&(i.current.value=f(12))},children:`Generate`})]}),a&&(0,z.jsx)(`p`,{className:`mt-4 text-coral-600 text-sm`,children:a}),(0,z.jsxs)(`div`,{className:`mt-6 flex justify-end gap-3`,children:[(0,z.jsx)(l,{type:`button`,variant:`secondary`,"data-click":`create-invite-code-cancel-button`,onClick:t,children:`Cancel`}),(0,z.jsx)(l,{type:`submit`,"data-click":`create-invite-code-submit-button`,disabled:s,loading:s,children:s?`Creating…`:`Create`})]})]})})}function H({inviteCode:e,onClose:t}){let r=n(),[i,a]=(0,R.useState)(!1),o=r.state!==`idle`,s=r.data?.[0]?.message,c=!e.spentAt&&!e.deactivatedAt,u=e.deactivatedAt?`Deactivated`:e.spentAt?`Spent`:`Available`;return(0,R.useEffect)(()=>{r.state!==`idle`||!r.data?.[1]||t()},[r.state,r.data,t]),(0,z.jsx)(y,{isOpen:!0,onClose:t,title:`Invite code details`,description:e.inviteCode,size:`xl`,children:(0,z.jsxs)(`div`,{className:`p-6`,children:[(0,z.jsxs)(r.Form,{method:`post`,children:[(0,z.jsx)(`input`,{type:`hidden`,name:`_action`,value:`update_invite_code`}),(0,z.jsx)(`input`,{type:`hidden`,name:`inviteCode`,value:e.inviteCode}),(0,z.jsxs)(`div`,{className:`mb-5 flex items-center justify-between`,children:[(0,z.jsx)(`h3`,{className:`font-semibold text-burgundy-500 text-sm`,children:`Details`}),!e.spentAt&&!i&&(0,z.jsx)(v,{type:`button`,variant:`ghost`,"data-click":`admin-invite-codes-edit-button`,onClick:()=>a(!0),title:`Edit invite code details`,children:(0,z.jsx)(_,{})})]}),(0,z.jsxs)(`dl`,{className:`grid gap-x-6 gap-y-5 sm:grid-cols-2`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`ID`}),(0,z.jsx)(`dd`,{className:`mt-1 break-all font-medium text-burgundy-500 text-sm`,children:e.inviteCode})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Redeemable`}),(0,z.jsx)(`dd`,{className:`mt-1 font-medium text-burgundy-500 text-sm`,children:c?`Yes`:`No`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Status`}),(0,z.jsx)(`dd`,{className:`mt-1 font-medium text-burgundy-500 text-sm`,children:u})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Organization name`}),(0,z.jsx)(`dd`,{className:`mt-1 font-medium text-burgundy-500 text-sm`,children:i?(0,z.jsx)(h,{id:`editOrgName`,name:`orgName`,type:`text`,maxLength:255,defaultValue:e.orgName,autoF
1ocus:!0}):e.orgName||`—`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Signup funds`}),(0,z.jsx)(`dd`,{className:`mt-1 font-medium text-burgundy-500 text-sm`,children:i?(0,z.jsx)(h,{id:`editAmount`,name:`amount`,type:`number`,min:`0.01`,step:`0.01`,defaultValue:e.amount}):e.amount==null?`—`:m(e.amount,`USD`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Credit mutator`}),(0,z.jsx)(`dd`,{className:`mt-1 font-medium text-burgundy-500 text-sm`,children:i?(0,z.jsx)(h,{id:`editCreditPriceMultiplier`,name:`creditPriceMultiplier`,type:`number`,min:`1.01`,step:`0.01`,defaultValue:e.creditPriceMultiplier,required:!0}):`${e.creditPriceMultiplier}×`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Created by`}),(0,z.jsxs)(`dd`,{className:`mt-1 break-all font-medium text-burgundy-500 text-sm`,children:[e.createdByName||e.createdBy,e.createdByName&&(0,z.jsx)(`span`,{className:`block text-ink-500 text-xs`,children:e.createdBy})]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Created`}),(0,z.jsx)(`dd`,{className:`mt-1 font-medium text-burgundy-500 text-sm`,children:S(e.createdAt)})]}),(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Organization`}),(0,z.jsxs)(`dd`,{className:`mt-1`,children:[e.orgId&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`span`,{className:`block break-all font-medium text-burgundy-500 text-sm`,children:e.orgId}),(0,z.jsx)(`div`,{className:`mt-2`,children:(0,z.jsx)(d,{to:`/admin/organizations?orgId=${e.orgId}`,variant:`ghost`,size:`sm`,"data-click":`admin-invite-code-details-organization-button`,children:`View organization`})})]}),!e.orgId&&(0,z.jsx)(`span`,{className:`font-medium text-burgundy-500 text-sm`,children:`—`})]})]}),(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Spent by`}),(0,z.jsxs)(`dd`,{className:`mt-1 break-all font-medium text-burgundy-500 text-sm`,children:[e.spentByName||e.spentBy||`—`,e.spentByName&&e.spentBy&&(0,z.jsx)(`span`,{className:`block text-ink-500 text-xs`,children:e.spentBy})]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Spent`}),(0,z.jsx)(`dd`,{className:`mt-1 font-medium text-burgundy-500 text-sm`,children:e.spentAt?S(e.spentAt):`—`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Deactivated by`}),(0,z.jsxs)(`dd`,{className:`mt-1 break-all font-medium text-burgundy-500 text-sm`,children:[e.deactivatedByName||e.deactivatedBy||`—`,e.deactivatedByName&&e.deactivatedBy&&(0,z.jsx)(`span`,{className:`block text-ink-500 text-xs`,children:e.deactivatedBy})]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{className:`text-ink-500 text-xs uppercase`,children:`Deactivated`}),(0,z.jsx)(`dd`,{className:`mt-1 font-medium text-burgundy-500 text-sm`,children:e.deactivatedAt?S(e.deactivatedAt):`—`})]})]}),i&&(0,z.jsxs)(`div`,{className:`mt-6 flex justify-end gap-3 border-paper-300 border-t pt-6`,children:[(0,z.jsx)(l,{type:`button`,variant:`secondary`,"data-click":`admin-invite-codes-edit-cancel-button`,onClick:()=>a(!1),disabled:o,children:`Cancel`}),(0,z.jsx)(l,{type:`submit`,"data-click":`admin-invite-codes-update-button`,disabled:o,loading:o,children:o?`Saving…`:`Save`})]})]}),s&&(0,z.jsx)(`p`,{className:`mt-5 text-coral-600 text-sm`,children:s}),(0,z.jsxs)(`div`,{className:`mt-6 flex justify-end gap-3 border-paper-300 border-t pt-6`,children:[(0,z.jsx)(l,{type:`button`,variant:`secondary`,"data-click":`admin-invite-code-details-close-button`,onClick:t,children:`Close`}),!e.spentAt&&!i&&(0,z.jsxs)(r.Form,{method:`post`,children:[(0,z.jsx)(`input`,{type:`hidden`,name:`_action`,value:e.deactivatedAt?`activate_invite_code`:`deactivate_invite_code`}),(0,z.jsx)(`input`,{type:`hidden`,name:`inviteCode`,value:e.inviteCode}),(0,z.jsx)(l,{type:`submit`,variant:e.deactivatedAt?`secondary`:`danger`,"data-click":e.deactivatedAt?`admin-invite-codes-activate-button`:`admin-invite-codes-deactivate-button`,disabled:o,loading:o,onClick:t=>
1{window.confirm(e.deactivatedAt?`Activate ${e.inviteCode}? It will become available for organization creation.`:`Deactivate ${e.inviteCode}? It cannot be used until it is activated again.`)||t.preventDefault()},children:e.deactivatedAt?`Activate`:`Deactivate`})]})]})]})})}var U=[{label:`All codes`,value:``},{label:`Available`,value:`false`},{label:`Spent`,value:`true`}],W=[{label:`Newest first`,value:`date:desc`},{label:`Oldest first`,value:`date:asc`},{label:`Code A–Z`,value:`code:asc`},{label:`Code Z–A`,value:`code:desc`}];function G(){let e=r(),t=n(),[i,a]=(0,R.useState)(e.search.q),[o,s]=(0,R.useState)(e.search.spent),[c,d]=(0,R.useState)(!1),[f,p]=(0,R.useState)(null),g=t.data??e,_=t.state===`loading`,{inviteCodes:v,search:y}=g,b=e=>{let n={order:e.order,from:e.from,to:e.to,sortBy:e.sortBy};e.q&&(n.q=e.q),e.spent&&(n.spent=e.spent);let r=u(n);t.load(`/admin/invite-codes?index&${r}`),window.history.replaceState(null,``,`?${r}`)},x=()=>{b({q:i,spent:o,sortBy:y.sortBy,order:y.order,from:0,to:y.limit-1})};return(0,z.jsxs)(`div`,{className:`space-y-6`,children:[(0,z.jsx)(`div`,{className:`rounded-xl border border-paper-300 bg-paper-100 p-4 sm:p-6`,children:(0,z.jsxs)(`form`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-12 xl:items-end`,onSubmit:e=>{e.preventDefault(),x()},children:[(0,z.jsx)(`div`,{className:`sm:col-span-2 xl:col-span-7`,children:(0,z.jsx)(h,{id:`invite-code-search`,name:`q`,type:`search`,value:i,onChange:e=>a(e.target.value),label:`Search`,placeholder:`Invite code`})}),(0,z.jsx)(`div`,{className:`xl:col-span-2`,children:(0,z.jsx)(w,{id:`invite-code-spent-filter`,"data-click":`admin-invite-codes-status-filter`,label:`Status`,options:U,value:o,onChange:e=>{s(e),b({q:i,spent:e,sortBy:y.sortBy,order:y.order,from:0,to:y.limit-1})}})}),(0,z.jsx)(`div`,{className:`xl:col-span-2`,children:(0,z.jsx)(w,{id:`invite-code-sort`,"data-click":`admin-invite-codes-sort`,label:`Sort`,options:W,value:`${y.sortBy}:${y.order}`,onChange:e=>{let[t,n]=e.split(`:`);t!==`date`&&t!==`code`||n!==`asc`&&n!==`desc`||b({q:i,spent:o,sortBy:t,order:n,from:0,to:y.limit-1})}})}),(0,z.jsx)(`div`,{className:`sm:col-span-2 xl:col-span-1`,children:(0,z.jsx)(l,{type:`submit`,variant:`secondary`,"data-click":`admin-invite-codes-search-button`,fullWidth:!0,children:`Search`})})]})}),c&&(0,z.jsx)(V,{onClose:()=>d(!1),onSuccess:()=>d(!1)}),f&&(0,z.jsx)(H,{inviteCode:f,onClose:()=>p(null)}),(0,z.jsxs)(`div`,{className:`flex flex-col overflow-hidden rounded-xl border border-paper-300 bg-paper-100`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between border-paper-300 border-b px-6 py-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h2`,{className:`font-semibold text-ink-900 text-lg`,children:q}),(0,z.jsx)(`p`,{className:`mt-1 text-ink-500 text-sm`,children:`Single-use access codes for creating organizations.`})]}),(0,z.jsx)(l,{type:`button`,"data-click":`admin-invite-codes-create-button`,onClick:()=>d(!0),children:`New Invite Code`})]}),v.data.length>0&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(T,{children:[(0,z.jsxs)(T.Header,{children:[(0,z.jsx)(T.HeaderCell,{width:`sixth`,children:`Organization name`}),(0,z.jsx)(T.HeaderCell,{width:`sixth`,children:`ID`}),(0,z.jsx)(T.HeaderCell,{width:`sixth`,children:`Signup funds`}),(0,z.jsx)(T.HeaderCell,{width:`sixth`,children:`Credit mutator`}),(0,z.jsx)(T.HeaderCell,{width:`sixth`,children:`Redeemable`}),(0,z.jsx)(T.HeaderCell,{width:`sixth`,align:`right`,children:`Actions`})]}),(0,z.jsx)(T.Body,{isLoading:_,children:v.data.map(e=>(0,z.jsxs)(T.Row,{className:ee(!!(e.spentAt||e.deactivatedAt)&&`bg-paper-200/70 hover:bg-paper-200`),children:[(0,z.jsx)(T.Cell,{children:e.orgName||`—`}),(0,z.jsx)(T.Cell,{noWrap:!0,children:e.inviteCode}),(0,z.jsx)(T.Cell,{noWrap:!0,variant:`secondary`,children:e.amount==null?`—`:m(e.amount,`USD`)}),(0,z.jsxs)(T.Cell,{noWrap:!0,variant:`secondary`,children:[e.creditPriceMultiplier,`×`]}),(0,z.jsx)(T.Cell,{noWrap:!0,variant:`secondary`,children:!e.spentAt&&!e.deactivatedAt?`Yes`:`No`}),(0,z.jsx)(T.Cell,{noWrap:!0,align:`right`,children:(0,z.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,z.jsx)(B,{inviteCode:e.inviteCode,orgName:e.orgName,disabled:!!(e.spentAt||e.deactivatedAt)}),(0,z.jsx)(l,{type:`button`,variant:`ghost`,size:`sm`,"data-click":`admin-invite-codes-view-button`,onClick:()=>p(e),children:`View`})]})})]}
1,e.inviteCode))})]}),(0,z.jsx)(T.Pagination,{from:y.from+1,to:Math.min(y.to+1,v.total),total:v.total,onPrevPage:()=>{let e=Math.max(0,y.from-y.limit);b({q:i,spent:o,sortBy:y.sortBy,order:y.order,from:e,to:e+y.limit-1})},onNextPage:()=>{b({q:i,spent:o,sortBy:y.sortBy,order:y.order,from:y.from+y.limit,to:y.to+y.limit})},prevDisabled:y.from===0,nextDisabled:v.total<=y.to+1,prevClickId:`admin-invite-codes-pagination-prev-button`,nextClickId:`admin-invite-codes-pagination-next-button`})]}),v.data.length===0&&(0,z.jsx)(T.Empty,{message:`No invite codes matched your filters.`})]})]})}function K(){return(0,z.jsxs)(`div`,{className:`space-y-6`,children:[(0,z.jsx)(N,{className:`p-4 sm:p-6`,children:(0,z.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-12`,children:[(0,z.jsx)(E,{className:`h-10 sm:col-span-2 xl:col-span-7`}),(0,z.jsx)(E,{className:`h-10 xl:col-span-2`}),(0,z.jsx)(E,{className:`h-10 xl:col-span-2`}),(0,z.jsx)(E,{className:`h-10 xl:col-span-1`})]})}),(0,z.jsxs)(N,{children:[(0,z.jsx)(F,{title:q}),(0,z.jsx)(P,{columns:6})]})]})}var q=`Invite Codes`;function J(){let e=t(),n=e instanceof Error?e.message:`Failed to load invite codes`;return(0,z.jsxs)(`div`,{className:`rounded-xl border border-paper-300 bg-paper-100 p-6 text-center`,children:[(0,z.jsx)(`h2`,{className:`font-bold text-ink-900 text-lg`,children:`Failed to load invite codes`}),(0,z.jsx)(`p`,{className:`mt-2 text-ink-500 text-sm`,children:n})]})}function Y(){return(0,z.jsx)(K,{})}async function X({request:e}){let t=new URL(e.url),n=t.searchParams.get(`q`)??``,r=t.searchParams.get(`spent`)??``,i=t.searchParams.get(`sortBy`)===`code`?`code`:`date`,a=t.searchParams.get(`order`)===`asc`?`asc`:`desc`,o=Math.max(0,x(t.searchParams.get(`from`),0)),s=x(t.searchParams.get(`to`),14),c=Math.max(1,s-o+1),l=o+c-1,[u,d]=await k.get(`/api/v1/invites`,{$search:{from:o,to:l,sortBy:i,order:a,...n&&{q:n},...r&&{spent:r}}});if(u)throw A(u)?.response?.status===403?Error(`You don't have the required permissions to view invite codes.`,{cause:u}):Error(`Failed to load invite codes`,{cause:u});return{inviteCodes:d,search:{q:n,spent:r,sortBy:i,order:a,from:o,to:l,limit:c}}}function Z(){return[{title:`Invite Codes | embroidery`},{name:`description`,content:`Create and review organization invite codes.`}]}var Q=X,$=L,te=Z,ne=i(Y),re=M(Y),ie=o(J),ae=s(G);export{ie as ErrorBoundary,ne as HydrateFallback,$ as clientAction,Q as clientLoader,ae as default,re as handle,te as meta};

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.