1import{r,s as O,l as D,j as e,D as H,p as F,q as z,t as K,aZ as ae,aB as te,aD as X,ad as Y,aF as Z,L as M,a3 as me,a4 as ge,I as T,T as E,v as re,B as d,X as c,a$ as ne,b1 as ue,cY as xe,cZ as he,d9 as fe,c$ as je,da as pe,db as _e,dc as ke,e as J,dd as W,de as ve,df as be,ar as ie,a1 as Ne,h as ye,g as we,A as Se,c8 as Ce,W as V,aN as De,k as $,C as le,aH as qe,aI as Me,aJ as ee,b5 as Le,aa as Re,aK as se}from"./index-CobRY8C4.js";const P="__platform__";function Ie({open:a,onOpenChange:u,onSubmitted:l}){const[x,w]=r.useState(""),[m,C]=r.useState(""),[v,b]=r.useState(""),[j,N]=r.useState(!1),[p,o]=r.useState(null),[_,h]=r.useState([]),[f,y]=r.useState("");r.useEffect(()=>{a&&(async()=>{const[{data:n},{data:s}]=await Promise.all([O.from("system_config").select("value").eq("key","user_invites_enabled").maybeSingle(),D("get_user_sender_orgs")]),g=n==null?void 0:n.value;o(g===!0||g==="true");const k=s??[];if(h(k),k.length>0){const L=k.find(A=>!A.is_platform);y(L?String(L.org_id):P)}})()},[a]);const S=async()=>{if(!x.includes("@"))return c.error("Ogiltig e-post");if(!m.trim())return c.error("Namn krävs");N(!0);const n=f&&f!==P?f:null,{error:s}=await D("submit_user_recommendation",{_target_email:x.trim().toLowerCase(),_target_name:m.trim(),_personal_message:v.trim()||null,_sender_org_id:n});if(N(!1),s)return c.error(s.message);c.success("Rekommendationen är sparad"),w(""),C(""),b(""),u(!1),l==null||l()},t=_.length>=2;return e.jsx(H,{open:a,onOpenChange:u,children:e.jsxs(F,{className:"max-w-lg",children:[e.jsxs(z,{children:[e.jsxs(K,{className:"flex items-center gap-2",children:[e.jsx(ae,{className:"h-5 w-5 text-primary"}),"Rekommendera plattformen"]}),e.jsx(te,{children:"Skicka en personlig rekommendation till en kollega eller yrkesperson. Mottagaren fÃ¥r ett info-mejl med en länk till en publik sida â inget konto skapas automatiskt."})]}),p===!1&&e.jsxs(X,{children:[e.jsx(Y,{className:"h-4 w-4"}),e.jsx(Z,{children:"Utskicket är i testfas. Din rekommendation sparas men mejlet skickas först när funktionen aktiveras."})]}),p===!0&&e.jsxs(X,{children:[e.jsx(Y,{className:"h-4 w-4"}),e.jsx(Z,{children:"Mejlet skickas tidigast 24 timmar efter att du klickar â sÃ¥ du hinner Ã¥ngra om nÃ¥got blev fel. Mottagaren kan avregistrera sig med en klick i mejlet."})]}),e.jsxs("div",{className:"space-y-3",children:[t&&e.jsxs("div",{children:[e.jsx(M,{children:"Skicka som"}),e.jsx(me,{value:f,onValueChange:y,className:"mt-2 space-y-1",children:_.map(n=>{const s=n.is_platform?P:String(n.org_id);return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ge,{value:s,id:`sender-${s}`}),e.jsx(M,{htmlFor:`sender-${s}`,className:"font-normal cursor-pointer",children:n.display_name})]},s)})}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:'Detta är namnet som visas i mejlet som "frÃ¥n â¦".'})]}),e.jsxs("div",{children:[e.jsx(M,{htmlFor:"rec-name",children:"Mottagarens namn *"}),e.jsx(T,{id:"rec-name",value:m,onChange:n=>C(n.target.value),placeholder:"För- och efternamn"})]}),e.jsxs("div",{children:[e.jsx(M,{htmlFor:"rec-email",children:"Mottagarens e-post *"}),e.jsx(T,{id:"rec-email",type:"email",value:x,onChange:n=>w(n.target.value),placeholder:"[email protected]"})]}),e.jsxs("div",{children:[e.jsx(M,{htmlFor:"rec-msg",children:"Personligt meddelande (valfritt)"}),e.jsx(E,{id:"rec-msg",value:v,onChange:n=>b(n.target.value),rows:3,placeholder:"Varför tycker du att personen borde titta pÃ¥ plattformen?",maxLength:500}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-1",children:[v.length,"/500"]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Vi skickar max 1 rekommendation per person per 90 dagar. Ditt namn och den valda organisationen visas i mejlet enligt"," ",e.jsx("a",{href:"/villkor",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-foreground",children:"användarvillkoren §4.1"}),"."]})]}),e.jsxs(re,{children:[e.jsx(d,{variant:"outline",onClick:()=>u(!1),children:"Avbryt"}),e.jsx(d,{onClick:S,disabled:j||!x||!m,children:j?"Spararâ¦":"Skicka rekommendation"})]})]})})}function Be({source:a="recommendation_prompt",buttonLabel:u="Rekommendera ett HVB",buttonVariant:l="outline",buttonSize:x="default"}){const[w,m]=r.useState(!1),[C,v]=r.useState(!1),[b,j]=r.useState(""),[N,p]=r.useState([]),[o,_]=r.useState(null),[h,f]=r.useState(!1),[y,S]=r.useState(!1);async function t(s){if(j(s),s.length<2){p([]);return}f(!0);const{data:g,error:k}=await O.from("hvb_catalog").select("id, name, city").eq("is_active",!0).or(`name.ilike.%${s}%,city.ilike.%${s}%`).order("name").limit(25);if(f(!1),k){c.error(k.message);return}p(g??[])}async function n(){if(!o)return;S(!0);const{error:s}=await D("submit_hvb_recommendation",{_hvb_catalog_id:o.id,_source:a});if(S(!1),s){c.error(s.message);return}c.success(`Tack! ${o.name}
1 har fÃ¥tt din rekommendation.`),_(null),j(""),p([]),m(!1)}return e.jsxs(H,{open:w,onOpenChange:m,children:[e.jsx(ne,{asChild:!0,children:e.jsxs(d,{variant:l,size:x,children:[e.jsx(ue,{className:"h-4 w-4 mr-2"}),u]})}),e.jsxs(F,{className:"sm:max-w-md",children:[e.jsxs(z,{children:[e.jsx(K,{children:"Rekommendera ett behandlingshem"}),e.jsx(te,{children:"Har du erfarenhet av ett HVB som du vill lyfta fram? Din rekommendation aggregeras anonymt och hjälper andra att fatta bättre placeringsbeslut."})]}),e.jsxs("div",{className:"space-y-3 py-2",children:[e.jsx(M,{htmlFor:"hvb-search",children:"Välj HVB"}),e.jsxs(xe,{open:C,onOpenChange:v,children:[e.jsx(he,{asChild:!0,children:e.jsxs(d,{variant:"outline",role:"combobox","aria-expanded":C,className:"w-full justify-between font-normal",children:[o?e.jsxs("span",{children:[o.name,o.city&&e.jsxs("span",{className:"text-muted-foreground",children:[" · ",o.city]})]}):e.jsx("span",{className:"text-muted-foreground",children:"Sök pÃ¥ namn eller ortâ¦"}),e.jsx(fe,{className:"h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(je,{className:"w-[--radix-popover-trigger-width] p-0",align:"start",children:e.jsxs(pe,{shouldFilter:!1,children:[e.jsx(_e,{id:"hvb-search",placeholder:"Sök HVBâ¦",value:b,onValueChange:t}),e.jsxs(ke,{children:[h&&e.jsxs("div",{className:"p-4 flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(J,{className:"h-4 w-4 animate-spin"})," Sökerâ¦"]}),!h&&b.length>=2&&N.length===0&&e.jsxs(W,{children:['Inga HVB matchar "',b,'".']}),!h&&b.length<2&&e.jsx(W,{children:"Skriv minst 2 tecken för att söka."}),e.jsx(ve,{children:N.map(s=>e.jsxs(be,{value:s.id,onSelect:()=>{_(s),v(!1)},children:[e.jsx(ie,{className:Ne("h-4 w-4 mr-2",(o==null?void 0:o.id)===s.id?"opacity-100":"opacity-0")}),e.jsxs("span",{children:[s.name,s.city&&e.jsxs("span",{className:"text-muted-foreground",children:[" · ",s.city]})]})]},s.id))})]})]})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Din rekommendation är anonym för mottagande HVB â de fÃ¥r bara en aggregerad siffra, aldrig ditt namn."})]}),e.jsxs(re,{children:[e.jsx(d,{variant:"outline",onClick:()=>m(!1),children:"Avbryt"}),e.jsxs(d,{onClick:n,disabled:!o||y,children:[y&&e.jsx(J,{className:"h-4 w-4 mr-2 animate-spin"}),"Skicka rekommendation"]})]})]})]})}function Te(){const{user:a}=ye(),u=we(),[l,x]=r.useState([]),[w,m]=r.useState(!0),[C,v]=r.useState(!1),[b,j]=r.useState(!1),[N,p]=r.useState([]),o=async()=>{if(!(a!=null&&a.id))return;const{data:s}=await O.from("hvb_recommendations").select("id,target_email,target_name,personal_message,created_at").eq("recommended_by_user_id",a.id).eq("target_type","user").order("created_at",{ascending:!1}).limit(50);p(s||[])},_=async()=>{if(!(a!=null&&a.id))return;m(!0);const{data:s,error:g}=await O.from("colleague_links").select("*").or(`requester_user_id.eq.${a.id},target_user_id.eq.${a.id}`).order("created_at",{ascending:!1});if(g){c.error("Kunde inte hämta kollegor"),m(!1);return}const k=s||[],L=Array.from(new Set(k.flatMap(i=>[i.requester_user_id,i.target_user_id]).filter(Boolean))),A=Array.from(new Set(k.flatMap(i=>[i.requester_org_id,i.target_org_id]).filter(Boolean))),[oe,ce]=await Promise.all([L.length?D("get_profile_contact_names",{_ids:L}):Promise.resolve({data:[]}),A.length?O.from("organizations").select("id,name").in("id",A):Promise.resolve({data:[]})]),de=new Map((oe.data||[]).map(i=>[i.id,i])),G=new Map((ce.data||[]).map(i=>[i.id,i])),U=i=>{if(!i)return"";const q=de.get(i);return q&&(`${q.first_name||""} ${q.last_name||""}`.trim()||q.email)||""};x(k.map(i=>{var q,Q;return{...i,requester_name:U(i.requester_user_id),target_name:i.target_user_id?U(i.target_user_id):i.target_email||"",requester_org_name:i.requester_org_id?(q=G.get(i.requester_org_id))==null?void 0:q.name:"",target_org_name:i.target_org_id?(Q=G.get(i.target_org_id))==null?void 0:Q.name:""}})),m(!1)};r.useEffect(()=>{_(),o()},[a==null?void 0:a.id]);const h=r.useMemo(()=>l.filter(s=>s.status==="accepted"),[l]),f=r.useMemo(()=>l.filter(s=>s.status==="pending_link"&&s.target_user_id===(a==null?void 0:a.id)),[l,a==null?void 0:a.id]),y=r.useMemo(()=>l.filter(s=>s.status==="pending_link"&&s.requester_user_id===(a==null?void 0:a.id)),[l,a==null?void 0:a.id]),S=r.useMemo(()=>l.filter(s=>s.status==="pending_invite"),[l]),t=async(s,g)=>{const{error:k}=await D("respond_colleague_link",{_link_id:s,_accept:g});if(k)return c.error(k.message);c.success(g?"Accepterad":"Avvisad"),_()},n=async s=>{const{error:g}=await D("revoke_colleague_link",{_link_id:s});if(g)return c.error(g.message);c.success("Ã
terkallad"),_()};return e.jsxs("div",{className:"max-w-5xl mx-auto p-6",children:[e.jsxs("div",{className:"flex items-center justify-between mb-6",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(d,{variant:"ghost",size:"sm",onClick:()=>u(-1),children:[e.jsx(Se,{className:"h-4 w-4 mr-1"})," Tillbaka"]}),e.jsx("h1",{className:"text-2xl font-semibold",children:"Kollegor"})]}),e.jsxs("div",{className:"flex gap-2 flex-wrap",children:[e.jsx(Be,{buttonVariant:"outline",buttonLabel:"Rekommendera HVB"}),e.jsxs(d,{variant:"outline",onClick:()=>j(!0),children:[e.jsx(ae,{className:"h-4 w-4 mr-2"}),"Rekommendera plattformen"]}),e.jsxs(H,{open:C,onOpenChange:v,children:[e.jsx(ne,{asChild:!0,children:e.jsxs(d,{children:[e.jsx(Ce,{className:"h-4 w-4 mr-2"}),"Lägg till kollega"]})}),e.jsxs(F,{className:"max-w-2xl",children:[e.jsx(z,{children:e.jsx(K,{children:"Lägg till kollega"})}),e.jsx(Oe,{onDone:()=>
1{v(!1),_()}})]})]})]})]}),e.jsx(Ie,{open:b,onOpenChange:j,onSubmitted:o}),w?e.jsx("div",{className:"text-muted-foreground",children:"Laddarâ¦"}):e.jsxs("div",{className:"space-y-8",children:[e.jsxs(R,{title:"Mina kollegor",count:h.length,children:[h.length===0&&e.jsx(I,{text:"Inga kollegor än. Lägg till din första."}),h.map(s=>{const g=s.requester_user_id===(a==null?void 0:a.id)?{name:s.target_name,org:s.target_org_name}:{name:s.requester_name,org:s.requester_org_name};return e.jsx(B,{title:g.name||"â",subtitle:g.org||"",right:e.jsxs(d,{variant:"ghost",size:"sm",onClick:()=>n(s.id),children:[e.jsx(V,{className:"h-4 w-4 mr-1"})," Ta bort"]})},s.id)})]}),e.jsxs(R,{title:"Inkomna förfrÃ¥gningar",count:f.length,children:[f.length===0&&e.jsx(I,{text:"Inga inkomna förfrÃ¥gningar."}),f.map(s=>e.jsx(B,{title:s.requester_name||"â",subtitle:s.requester_org_name||"",message:s.message,right:e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(d,{size:"sm",onClick:()=>t(s.id,!0),children:[e.jsx(ie,{className:"h-4 w-4 mr-1"}),"Acceptera"]}),e.jsxs(d,{size:"sm",variant:"outline",onClick:()=>t(s.id,!1),children:[e.jsx(De,{className:"h-4 w-4 mr-1"}),"Avvisa"]})]})},s.id))]}),e.jsxs(R,{title:"Skickade förfrÃ¥gningar",count:y.length,children:[y.length===0&&e.jsx(I,{text:"Inga skickade förfrÃ¥gningar."}),y.map(s=>e.jsx(B,{title:s.target_name||"â",subtitle:s.target_org_name||"",message:s.message,badge:e.jsx($,{variant:"secondary",children:"Väntar svar"}),right:e.jsxs(d,{variant:"ghost",size:"sm",onClick:()=>n(s.id),children:[e.jsx(V,{className:"h-4 w-4 mr-1"}),"Ã
terkalla"]})},s.id))]}),e.jsxs(R,{title:"Inbjudna till plattformen",count:S.length,children:[S.length===0&&e.jsx(I,{text:"Inga aktiva inbjudningar."}),S.map(s=>e.jsx(B,{title:s.target_email||"â",subtitle:"Väntar pÃ¥ registrering",message:s.message,badge:e.jsx($,{variant:"outline",children:"Inbjuden"}),right:e.jsxs(d,{variant:"ghost",size:"sm",onClick:()=>n(s.id),children:[e.jsx(V,{className:"h-4 w-4 mr-1"}),"Ã
terkalla"]})},s.id))]}),e.jsxs(R,{title:"Mina rekommendationer",count:N.length,children:[N.length===0&&e.jsx(I,{text:"Du har inte rekommenderat plattformen till nÃ¥gon än. Klicka pÃ¥ âRekommendera plattformenâ ovan."}),N.map(s=>e.jsx(B,{title:s.target_name||s.target_email,subtitle:s.target_name?s.target_email:new Date(s.created_at).toLocaleDateString("sv-SE"),message:s.personal_message,badge:e.jsx($,{variant:"secondary",children:"Skickad"})},s.id))]})]})]})}function R({title:a,count:u,children:l}){return e.jsxs("div",{children:[e.jsxs("h2",{className:"text-lg font-semibold mb-3",children:[a," ",e.jsxs("span",{className:"text-muted-foreground text-sm",children:["(",u,")"]})]}),e.jsx("div",{className:"space-y-2",children:l})]})}function I({text:a}){return e.jsx("div",{className:"text-sm text-muted-foreground italic",children:a})}function B({title:a,subtitle:u,message:l,badge:x,right:w}){return e.jsxs(le,{className:"p-4 flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"font-medium",children:a}),x]}),u&&e.jsx("div",{className:"text-sm text-muted-foreground",children:u}),l&&e.jsxs("div",{className:"text-sm mt-1 italic",children:['"',l,'"']})]}),e.jsx("div",{className:"shrink-0",children:w})]})}function Oe({onDone:a}){const[u,l]=r.useState("search"),[x,w]=r.useState(""),[m,C]=r.useState([]),[v,b]=r.useState(!1),[j,N]=r.useState(""),[p,o]=r.useState(""),[_,h]=r.useState(!1),f=async()=>{if(x.trim().length<2)return;b(!0);const{data:t,error:n}=await D("search_colleagues_cross_org",{_query:x.trim()});if(b(!1),n)return c.error(n.message);C(t||[])},y=async t=>{h(!0);const{error:n}=await D("request_colleague_link",{_target_user_id:t,_message:j||null});if(h(!1),n)return c.error(n.message);c.success("FörfrÃ¥gan skickad"),a()},S=async()=>{if(!p.includes("@"))return c.error("Ogiltig e-post");h(!0);const{error:t}=await D("invite_colleague_by_email",{_email:p.trim().toLowerCase(),_message:j||null});if(h(!1),t)return c.error(t.message);c.success("Inbjudan skapad"),a()};return e.jsxs(qe,{value:u,onValueChange:l,children:[e.jsxs(Me,{className:"grid grid-cols-2 w-full",children:[e.jsxs(ee,{value:"search",children:[e.jsx(Le,{className:"h-4 w-4 mr-2"}),"Sök befintlig"]}),e.jsxs(ee,{value:"invite",children:[e.jsx(Re,{className:"h-4 w-4 mr-2"}),"Bjud in via e-post"]})]}),e.jsxs(se,{value:"search",className:"space-y-3 mt-4",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(T,{placeholder:"Sök pÃ¥ namn, e-post eller organisationâ¦",value:x,onChange:t=>w(t.target.value),onKeyDown:t=>t.key==="Enter"&&f()}),e.jsx(d,{onClick:f,disabled:v,children:"Sök"})]}),e.jsx(E,{placeholder:"Meddelande (valfritt)",value:j,onChange:t=>N(t.target.value),rows:2}),e.jsxs("div",{className:"space-y-2 max-h-72 overflow-auto",children:[m.length===0&&!v&&e.jsx("div",{className:"text-sm text-muted-foreground",children:"Skriv minst 2 tecken och tryck Sök."}),m.map(t=>e.jsxs(le,{className:"p-3 flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-medium",children:`${t.first_name||""} ${t.last_name||""}`.trim()||t.email}),e.jsxs("div",{className:"text-sm text-muted-foreground",children:[t.organization_name," ",t.professional_title?`· ${t.professional_title}`:""]})]}),e.jsx(d,{size:"sm",disabled:_,onClick:()=>y(t.user_id),children:"Skicka förfrÃ¥gan"})]},t.user_id))]})]}),e.jsxs(se,{value:"invite",className:"space-y-3 mt-4",children:[e.jsx(T,{type:"email",placeholder:"[email protected]",value:p,onChange:t=>o(t.target.value)}),e.jsx(E,{placeholder:"Meddelande (valfritt)",value:j,onChange:t=>N(t.target.value),rows:3}),e.jsx("div",{className:"text-xs text-muted-foreground",children:"Om personen redan finns pÃ¥ plattformen skickas en vanlig kollegaförfrÃ¥gan. Annars skapas en pending inbjudan som aktiveras automatiskt när personen registrerar sig."}),e.jsx(d,{onClick:S,disabled:_||!p,children:"Bjud in"})]})]})}export{Te 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.