PageSourceSearch

https://digitalbehandling.se/assets/AnhorigInvitesAdminPage-CrfUi7Yr.js

js digitalbehandling.se collected 2026-09-30 08:27:50 UTC 7,988 bytes, 1 lines download raw bytes

1import{x as K,r as s,j as e,C,c as I,d as F,aO as M,a as A,e as v,L as g,B as _,n as z,I as E,_ as H,aa as L,as as J}from"./index-CobRY8C4.js";import{b as P,e as T,s as V,g as R,h as U,i as $}from"./admin-BvaJXNdF.js";import{A as q}from"./AnhorigAdminTabs-CY8CJAJS.js";import{M as G}from"./mail-check-CEbLDMgM.js";function O(i){return i==null?"inherit":i?"on":"off"}function D(i){return i==="inherit"?null:i==="on"}function Q({orgId:i}){const{toast:r}=K(),[o,b]=s.useState([]),[c,m]=s.useState([]),[n,f]=s.useState(""),[u,h]=s.useState("inherit"),[x,j]=s.useState("inherit"),[N,k]=s.useState(!0),[l,d]=s.useState(!1);s.useEffect(()=>{(async()=>{try{const[t,a]=await Promise.all([P(i),T(i)]);b(t),m(a)}catch(t){r({title:"Kunde inte läsa undantag",description:t.message,variant:"destructive"})}finally{k(!1)}})()},[i,r]);function w(t){f(t);const a=c.find(p=>p.client_id===t);h(O(a==null?void 0:a.therapist_invite_enabled)),j(O(a==null?void 0:a.client_invite_enabled))}async function y(){if(n){d(!0);try{await V({client_id:n,therapist_invite_enabled:D(u),client_invite_enabled:D(x)}),m(await T(i)),r({title:"Sparat",description:"Företagsadmin har fått en avisering om ändringen."})}catch(t){r({title:"Fel",description:t.message,variant:"destructive"})}finally{d(!1)}}}const S=t=>{const a=o.find(p=>p.id===t);return a?`${a.first_name??""} ${a.last_name??""}`.trim()||"Namnlös klient":t};return e.jsxs(C,{className:"mb-6",children:[e.jsxs(I,{children:[e.jsx(F,{className:"text-lg",children:"Inbjudningsrätt för enskild klient"}),e.jsx(M,{children:"Standard sätts på organisationen. Här kan du avvika för en klient — «Följer organisationen» tar bort undantaget."})]}),e.jsx(A,{className:"space-y-3",children:N?e.jsx(v,{className:"w-5 h-5 animate-spin"}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx(g,{htmlFor:"override-client",children:"Klient"}),e.jsxs("select",{id:"override-client",className:"w-full border rounded p-2 mt-1",value:n,onChange:t=>w(t.target.value),children:[e.jsx("option",{value:"",children:"Välj klient …"}),o.map(t=>e.jsx("option",{value:t.id,children:`${t.first_name??""} ${t.last_name??""}`.trim()||"Namnlös klient"},t.id))]})]}),e.jsxs("div",{children:[e.jsx(g,{htmlFor:"override-therapist",children:"Terapeut får bjuda in"}),e.jsxs("select",{id:"override-therapist",className:"w-full border rounded p-2 mt-1",value:u,disabled:!n,onChange:t=>h(t.target.value),children:[e.jsx("option",{value:"inherit",children:"Följer organisationen"}),e.jsx("option",{value:"on",children:"Ja"}),e.jsx("option",{value:"off",children:"Nej"})]})]}),e.jsxs("div",{children:[e.jsx(g,{htmlFor:"override-client-invite",children:"Klienten får bjuda in"}),e.jsxs("select",{id:"override-client-invite",className:"w-full border rounded p-2 mt-1",value:x,disabled:!n,onChange:t=>j(t.target.value),children:[e.jsx("option",{value:"inherit",children:"Följer organisationen"}),e.jsx("option",{value:"on",children:"Ja"}),e.jsx("option",{value:"off",children:"Nej"})]})]}),e.jsxs(_,{onClick:y,disabled:!n||l,children:[l&&e.jsx(v,{className:"w-4 h-4 mr-2 animate-spin"}),"Spara undantag"]}),c.length>0&&e.jsx("ul",{className:"text-xs text-muted-foreground divide-y pt-2",children:c.map(t=>e.jsxs("li",{className:"py-1.5",children:[S(t.client_id)," — terapeut:"," ",t.therapist_invite_enabled===null?"org":t.therapist_invite_enabled?"ja":"nej",", klient:"," ",t.client_invite_enabled===null?"org":t.client_invite_enabled?"ja":"nej"]},t.client_id))})]})})]})}function ee(){const i=z(),{toast:r}=K(),[o,b]=s.useState([]),[c,m]=s.useState(""),[n,f]=s.useState(""),[u,h]=s.useState(!1),[x,j]=s.useState(null),[N,k]=s.useState(!0),l=s.useCallback(async t=>{b(await R(t))},[]);s.useEffect(()=>{(async()=>{if(!i){k(!1);return}await l(i),k(!1)})()},[i,l]);const d=n.trim()===""||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n.trim());async function w(){if(!(!i||!d)){h(!0);try{const t=await U({organization_id:i,invited_by_role:"company_admin",label:c||null,invited_email:n.trim()||null});if(t&&n.trim())try{await $(t.invite_id),r({title:"Inbjudan skickad",description:`Mejl skickat till ${n.trim()}.`})}catch(a){r({title:"Koden skapades men mejlet gick inte ut",description:`${a.message}
1 — kopiera länken och skicka manuellt.`,variant:"destructive"})}else r({title:"Inbjudningskod skapad",description:(t==null?void 0:t.code)??""});m(""),f(""),await l(i)}catch(t){r({title:"Fel",description:t.message,variant:"destructive"})}finally{h(!1)}}}async function y(t){if(i){j(t.id);try{await $(t.id),r({title:"Mejlet är skickat igen"}),await l(i)}catch(a){r({title:"Kunde inte skicka",description:a.message,variant:"destructive"})}finally{j(null)}}}function S(t){navigator.clipboard.writeText(`${window.location.origin}/anhorig/invite/${t}`),r({title:"Länk kopierad"})}return N?e.jsx("div",{className:"p-8",children:e.jsx(v,{className:"w-6 h-6 animate-spin"})}):e.jsxs("main",{className:"max-w-3xl mx-auto p-6",children:[e.jsx(q,{}),e.jsx("h1",{className:"text-2xl font-semibold mb-4",children:"Anhörig-inbjudningar"}),e.jsxs(C,{className:"mb-6",children:[e.jsxs(I,{children:[e.jsx(F,{className:"text-lg",children:"Skapa ny inbjudan"}),e.jsx(M,{children:"Fyll i e-postadressen sÃ¥ skickas inbjudan direkt. Lämnar du den tom fÃ¥r du en kod att lämna över själv."})]}),e.jsxs(A,{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx(g,{htmlFor:"invite-label",children:"Etikett (valfritt)"}),e.jsx(E,{id:"invite-label",value:c,onChange:t=>m(t.target.value),placeholder:"t.ex. mamma till klient A"})]}),e.jsxs("div",{children:[e.jsx(g,{htmlFor:"invite-email",children:"E-postadress (valfritt)"}),e.jsx(E,{id:"invite-email",type:"email",value:n,onChange:t=>f(t.target.value),placeholder:"[email protected]","aria-invalid":!d}),!d&&e.jsx("p",{className:"text-xs text-destructive mt-1",children:"Adressen ser inte ut att stämma."})]}),e.jsxs(_,{onClick:w,disabled:u||!d,children:[u&&e.jsx(v,{className:"w-4 h-4 mr-2 animate-spin"}),n.trim()?"Skapa och skicka":"Skapa kod"]})]})]}),i&&e.jsx(Q,{orgId:i}),e.jsxs(C,{children:[e.jsx(I,{children:e.jsx(F,{className:"text-lg",children:"Befintliga inbjudningar"})}),e.jsxs(A,{children:[o.length===0&&e.jsx("p",{className:"text-sm text-muted-foreground",children:"Inga koder än."}),e.jsx("ul",{className:"divide-y",children:o.map(t=>{const a=new Date(t.expires_at)<new Date,p=t.revoked_at?"Återkallad":t.redeemed_at?"Använd":a?"UtgÃ¥ngen":"Aktiv",B=!t.revoked_at&&!t.redeemed_at&&!a;return e.jsxs("li",{className:"py-3 flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-mono text-sm",children:t.code}),e.jsxs("div",{className:"text-xs text-muted-foreground truncate",children:[t.label??"Ingen etikett"," · ",p," · gÃ¥r ut"," ",new Date(t.expires_at).toLocaleDateString("sv-SE")]}),t.invited_email&&e.jsx("div",{className:"text-xs mt-0.5 flex items-center gap-1 text-muted-foreground",children:t.email_sent_at?e.jsxs(e.Fragment,{children:[e.jsx(G,{className:"w-3 h-3 text-primary","aria-hidden":!0}),e.jsxs("span",{children:["Skickat till ",t.invited_email," ",new Date(t.email_sent_at).toLocaleDateString("sv-SE")]})]}):t.email_send_error?e.jsxs(e.Fragment,{children:[e.jsx(H,{className:"w-3 h-3 text-destructive","aria-hidden":!0}),e.jsxs("span",{className:"text-destructive",children:["Mejlet gick inte ut till ",t.invited_email]})]}):e.jsxs(e.Fragment,{children:[e.jsx(L,{className:"w-3 h-3","aria-hidden":!0}),e.jsxs("span",{children:["Inte skickat än (",t.invited_email,")"]})]})})]}),B&&e.jsxs("div",{className:"flex gap-2 shrink-0",children:[t.invited_email&&e.jsxs(_,{size:"sm",variant:"outline",onClick:()=>y(t),disabled:x===t.id,children:[x===t.id?e.jsx(v,{className:"w-4 h-4 mr-1 animate-spin"}):e.jsx(L,{className:"w-4 h-4 mr-1"}),t.email_sent_at?"Skicka igen":"Skicka"]}),e.jsxs(_,{size:"sm",variant:"outline",onClick:()=>S(t.code),children:[e.jsx(J,{className:"w-4 h-4 mr-1"})," Kopiera länk"]})]})]},t.id)})})]})]})]})}export{ee 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.