PageSourceSearch

https://digitalbehandling.se/assets/Dashboard-CzcSkyc5.js

js digitalbehandling.se collected 2026-09-30 08:26:15 UTC 26,214 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StuckDemoInvitesWidget-ClWq3MOs.js","assets/index-CobRY8C4.js","assets/index-DDfni-Mu.css","assets/invites-4lcWhzv1.js","assets/BulletinPriorityWidget-Cp5d5K1E.js","assets/bulletinAttention-DFXpqnZ7.js","assets/CosignQueueWidget-M7VFOqfW.js","assets/useJournalEntries-DJh3CUZb.js","assets/queries-BFyMAaOj.js","assets/mutations-BeX98_Q3.js","assets/parseInfoSocJournal-4PxQthwK.js","assets/GallringPurgeWidget-BdfCuGds.js","assets/purgeRequests-kLD5-wG4.js","assets/Pass3ApprovalWidget-DqT1g0RU.js","assets/InactiveLoginsWidget-XaJCIgrH.js","assets/useProfileChangeRequests-D-eRCPl_.js","assets/ProfileChangeRequestCard-UGJ4LAvw.js","assets/ClientFormFields-107a_yyD.js","assets/clientStatus-DF5CMPjw.js","assets/queries-Dr9EwtOt.js","assets/useProfileNames-CNn6j79r.js","assets/settings-2-CBVOlXa6.js","assets/PasswordResetRequestsWidget-DmbVtb6t.js","assets/ResetClientPasswordModal-CdsyPDab.js","assets/phone-CS1Zmng8.js","assets/JournalDraftsToReviewWidget-1BVl-Ybi.js","assets/useAutoJournalDrafts-BQV8Yt-6.js","assets/UrineTodayWidget-BddghBO6.js","assets/DagensTextWidget-DEtWNGwG.js","assets/DemoQuickLinkWidget-CMsH0fKO.js","assets/DemoQuickLinkCard-BZMcnMDo.js","assets/DashboardNotificationsWidget-BYPTzeFl.js","assets/AppealInfoPanel-C_7JeRg6.js","assets/collapsible-akAvtlAp.js","assets/globe-B6XoPFpG.js","assets/file-warning-ClB0o2s6.js","assets/dashboardQueries-C9nlbXzH.js","assets/CrossOrgDocumentReviewWidget-BehX8RPC.js","assets/JournalEntryView-Dtshjh0_.js","assets/download-3GrjRmzB.js","assets/lock-open-CgtwVVEO.js","assets/pen-line-DGOIxOA2.js","assets/TherapistTodayWidget-tNpR-SoA.js","assets/TodayStreamWidget-DsIoVujh.js","assets/periodicReports-DdiKheBf.js","assets/usePrepEntries-DZCfVLVa.js","assets/WeeklyReportsBatchWidget-Bm-u3Wxk.js","assets/file-plus-2-BHIdg0ln.js","assets/InternalTemplatesWidget-Bdi9MM72.js","assets/QualityIndexWidget-C21GQ0PJ.js","assets/QualityIndexPlaceholderCard-DagVyRTL.js","assets/PomodoroWidget-DOzwQz_E.js","assets/PomodoroTimer-CE6_g_8y.js","assets/play-CqtS4evW.js","assets/pause-C2v0IkeI.js","assets/StatsTilesWidget-BKENpgXT.js","assets/OrderNotificationSettingsWidget-B_znhlUJ.js","assets/UpcomingHelpPolicyActivationsWidget-KIQG2thD.js","assets/circle-user-round-CsX2FBlR.js","assets/EducatorStatsWidget-lnEyaCxq.js","assets/types-BDUyBKaA.js","assets/SubmissionInboxWidget-CBaFKu0j.js","assets/inbox-BkbUQ5aR.js","assets/check-check-BdeZ8iwK.js"])))=>i.map(i=>d[i]);
2import{s as x,h as z,b7 as ae,a2 as se,r as l,ah as ne,ag as V,af as D,ak as ce,aj as ue,j as e,D as re,p as ie,q as le,t as oe,m as me,L as v,I as R,v as _e,B as k,X,x as pe,S as N,J as L,K as w,M as C,N as T,aD as he,aF as fe,T as M,l as ge,bM as u,b8 as ve,cq as xe,cr as be,cC as ye,cD as je,i as ke,cE as Oe,cs as Ee,Q as qe,cI as Se,ck as Ve,cl as De,cv as Ne,cw as Le,cB as we,bD as Ce,ar as Te,cm as Ae,cn as Pe,co as Re,fv as Ie,H as ze}from"./index-CobRY8C4.js";import{d as Z}from"./useProfileChangeRequests-D-eRCPl_.js";import"./ProfileChangeRequestCard-UGJ4LAvw.js";import"./ClientFormFields-107a_yyD.js";import{s as Fe}from"./queries-Dr9EwtOt.js";import{u as Ke}from"./useProfileNames-CNn6j79r.js";import{S as Me}from"./settings-2-CBVOlXa6.js";async function Be(t){const a=new Date().toISOString().split("T")[0],{data:s,error:o}=await x.from("sobriety_followups").select("id, client_id, scheduled_date, clients!inner(first_name, last_name)").eq("therapist_id",t).lte("scheduled_date",a).is("response",null).order("scheduled_date",{ascending:!0});return o?(console.error("Error fetching pending followups:",o),[]):(s??[]).map(r=>{var d,m;return{id:r.id,client_id:r.client_id,scheduled_date:r.scheduled_date,client_first_name:((d=r.clients)==null?void 0:d.first_name)??"",client_last_name:((m=r.clients)==null?void 0:m.last_name)??""}})}function Ue(){const{user:t}=z(),a=(t==null?void 0:t.id)??null,s=ae(),o=se({queryKey:Z.pendingSobrietyFollowups(a),queryFn:()=>Be(a),enabled:!!a,staleTime:60*1e3}),r=l.useCallback(async()=>{await s.invalidateQueries({queryKey:Z.pendingSobrietyFollowups(a)})},[s,a]);return{pending:o.data??[],loading:!!a&&o.isLoading,refetch:r}}const $e=["yes","no","unknown","yes_after_relapse","deceased_deregistered"],Qe={yes:"Ja",no:"Nej",unknown:"Vet ej",yes_after_relapse:"Ja men efter återfall",deceased_deregistered:"Avliden / Avregistrerad"}
2,B=ne().trim().max(2e3).optional(),He=V({q1_sobriety:D($e),q2_relapse:V({occurred:D(["yes","no","unknown"]).optional(),count:ce().int().min(0).max(999).optional(),latest_date:ne().optional()}).optional(),q3_housing:V({stable:D(["yes","no","unknown"]).optional(),note:B}).optional(),q4_employment:V({type:D(["arbete","studier","sjukskriven","soker","annat","unknown"]).optional()}).optional(),q5_health:V({level:D(["bra","okej","dalig","unknown"]).optional(),note:B}).optional(),q6_support:V({sources:ue(D(["na_aa","familj","van","inget","unknown"])).max(5).optional(),note:B}).optional()}),We={arbete:"Arbete",studier:"Studier",sjukskriven:"Sjukskriven",soker:"Söker",annat:"Annat",unknown:"Vet ej"},Ge={bra:"Bra",okej:"Okej",dalig:"Dålig",unknown:"Vet ej"},Ye={na_aa:"NA / AA",familj:"Familj",van:"Vän",inget:"Inget",unknown:"Vet ej"},ee={yes:"Ja",no:"Nej",unknown:"Vet ej"};async function Je(t,a){return x.from("sobriety_followups").update({relapse_context:a}).eq("id",t)}function Xe({open:t,onOpenChange:a,followupId:s,onSaved:o}){const[r,d]=l.useState({}),[m,i]=l.useState(!1),h=async()=>{i(!0);const{error:c}=await Je(s,r);if(i(!1),c){X.error(`Kunde inte spara kontext: ${c.message}`);return}X.success("Kontext sparad"),a(!1),o==null||o()};return e.jsx(re,{open:t,onOpenChange:a,children:e.jsxs(ie,{children:[e.jsx(le,{children:e.jsx(oe,{children:"Återfallskontext"})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(me,{id:"has-sponsor",checked:!!r.has_sponsor,onCheckedChange:c=>d(p=>({...p,has_sponsor:!!c}))}),e.jsx(v,{htmlFor:"has-sponsor",children:"Har sponsor"})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"mpw",children:"Möten per vecka"}),e.jsx(R,{id:"mpw",type:"number",min:0,max:21,value:r.meetings_per_week??"",onChange:c=>d(p=>({...p,meetings_per_week:c.target.value===""?void 0:Number(c.target.value)}))})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"cs",children:"Nuvarande steg (0–12)"}),e.jsx(R,{id:"cs",type:"number",min:0,max:12,value:r.current_step??"",onChange:c=>d(p=>({...p,current_step:c.target.value===""?void 0:Number(c.target.value)}))})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"lmd",children:"Senaste möte (datum)"}),e.jsx(R,{id:"lmd",type:"date",max:new Date().toISOString().slice(0,10),value:r.last_meeting_date??"",onChange:c=>d(p=>({...p,last_meeting_date:c.target.value||void 0}))})]})]}),e.jsxs(_e,{children:[e.jsx(k,{variant:"outline",onClick:()=>a(!1),children:"Avbryt"}),e.jsx(k,{onClick:h,disabled:m,children:m?"Sparar…":"Spara"})]})]})})}const Ze=["yes","no","unknown","yes_after_relapse","deceased_deregistered"];function et({pendingFollowups:t,onComplete:a}){var y,E,q,I,S,$,Q,H,W,G,Y,J;const{toast:s}=pe(),[o,r]=l.useState(0),[d,m]=l.useState(!1),[i,h]=l.useState({}),[c,p]=l.useState(!1),b=t[o];if(!b)return null;const F=`${b.client_first_name} ${b.client_last_name}`,O=t.length,_=(n,f)=>h(A=>({...A,[n]:f})),j=async()=>{if(!i.q1_sobriety){s({title:"Saknat svar",description:"Fråga 1 är obligatorisk.",variant:"destructive"});return}const n=He.safeParse(i);if(!n.success){s({title:"Fel i formuläret",description:"Kontrollera fälten.",variant:"destructive"});return}m(!0);const{error:f}=await Fe({followupId:b.id,clientId:b.client_id,checklist:n.data});if(f){s({title:"Fel",description:f.message,variant:"destructive"}),m(!1);return}if(o===O-1&&i.q1_sobriety!=="deceased_deregistered"){const A=new Set(t.map(K=>K.client_id));for(const K of A)await ge("generate_next_followup_batch",{_client_id:K})}m(!1),h({}),o<O-1?r(A=>A+1):a()},g=i.q1_sobriety==="deceased_deregistered";return e.jsx(re,{open:!0,onOpenChange:()=>{},children:e.jsxs(ie,{className:"sm:max-w-lg max-h-[90vh] overflow-y-auto bg-card rounded-xl shadow-lg",onPointerDownOutside:n=>n.preventDefault(),children:[e.jsx(le,{children:e.jsxs(oe,{children:["Uppföljning – ",F,O>1&&e.jsxs("span",{className:"ml-2 text-sm font-normal text-muted-foreground",children:["(",o+1," av ",O,")"]})]})}),e.jsxs("div",{className:"space-y-5 mt-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{className:"font-medium",children:"1. Drogfrihet sedan senaste kontakt? *"}),e.jsxs(N,{value:i.q1_sobriety??"",onValueChange:n=>_("q1_sobriety",n),children:[e.jsx(L,{children:e.jsx(w,{placeholder:"Välj…"})}),e.jsx(C,{children:Ze.map(n=>e.jsx(T,{value:n,children:Qe[n]},n))})]})]}),i.q1_sobriety==="yes_after_relapse"&&e.jsx("div",{children:e.jsx(k,{type:"button",variant:"outline",size:"sm",onClick:()=>
2p(!0),children:"Lägg till återfallskontext (sponsor, möten, steg)"})}),e.jsx(Xe,{open:c,onOpenChange:p,followupId:b.id}),g&&e.jsx(he,{children:e.jsx(fe,{children:"Klienten registreras som avliden/avregistrerad. Övriga fält behöver inte fyllas i."})}),!g&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{className:"font-medium",children:"2. Återfall sedan senaste kontakt?"}),e.jsxs(N,{value:((y=i.q2_relapse)==null?void 0:y.occurred)??"",onValueChange:n=>_("q2_relapse",{...i.q2_relapse??{},occurred:n}),children:[e.jsx(L,{children:e.jsx(w,{placeholder:"Välj…"})}),e.jsx(C,{children:Object.entries(ee).map(([n,f])=>e.jsx(T,{value:n,children:f},n))})]}),((E=i.q2_relapse)==null?void 0:E.occurred)==="yes"&&e.jsxs("div",{className:"grid grid-cols-2 gap-2 mt-2",children:[e.jsxs("div",{children:[e.jsx(v,{className:"text-xs",children:"Antal (valfritt)"}),e.jsx(R,{type:"number",min:0,value:((q=i.q2_relapse)==null?void 0:q.count)??"",onChange:n=>_("q2_relapse",{...i.q2_relapse??{},count:n.target.value===""?void 0:Number(n.target.value)})})]}),e.jsxs("div",{children:[e.jsx(v,{className:"text-xs",children:"Datum senaste (valfritt)"}),e.jsx(R,{type:"date",value:((I=i.q2_relapse)==null?void 0:I.latest_date)??"",onChange:n=>_("q2_relapse",{...i.q2_relapse??{},latest_date:n.target.value||void 0})})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{className:"font-medium",children:"3. Boendesituation stabil?"}),e.jsxs(N,{value:((S=i.q3_housing)==null?void 0:S.stable)??"",onValueChange:n=>_("q3_housing",{...i.q3_housing??{},stable:n}),children:[e.jsx(L,{children:e.jsx(w,{placeholder:"Välj…"})}),e.jsx(C,{children:Object.entries(ee).map(([n,f])=>e.jsx(T,{value:n,children:f},n))})]}),e.jsx(M,{placeholder:"Anteckning (valfri)",value:(($=i.q3_housing)==null?void 0:$.note)??"",onChange:n=>_("q3_housing",{...i.q3_housing??{},note:n.target.value}),rows:2})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{className:"font-medium",children:"4. Sysselsättning"}),e.jsxs(N,{value:((Q=i.q4_employment)==null?void 0:Q.type)??"",onValueChange:n=>_("q4_employment",{type:n}),children:[e.jsx(L,{children:e.jsx(w,{placeholder:"Välj…"})}),e.jsx(C,{children:Object.entries(We).map(([n,f])=>e.jsx(T,{value:n,children:f},n))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{className:"font-medium",children:"5. Fysisk + psykisk hälsa"}),e.jsxs(N,{value:((H=i.q5_health)==null?void 0:H.level)??"",onValueChange:n=>_("q5_health",{...i.q5_health??{},level:n}),children:[e.jsx(L,{children:e.jsx(w,{placeholder:"Välj…"})}),e.jsx(C,{children:Object.entries(Ge).map(([n,f])=>e.jsx(T,{value:n,children:f},n))})]}),e.jsx(M,{placeholder:"Anteckning (valfri)",value:((W=i.q5_health)==null?void 0:W.note)??"",onChange:n=>_("q5_health",{...i.q5_health??{},note:n.target.value}),rows:2})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{className:"font-medium",children:"6. Stödnätverk (välj främsta)"}),e.jsxs(N,{value:((Y=(G=i.q6_support)==null?void 0:G.sources)==null?void 0:Y[0])??"",onValueChange:n=>_("q6_support",{...i.q6_support??{},sources:[n]}),children:[e.jsx(L,{children:e.jsx(w,{placeholder:"Välj…"})}),e.jsx(C,{children:Object.entries(Ye).map(([n,f])=>e.jsx(T,{value:n,children:f},n))})]}),e.jsx(M,{placeholder:"Anteckning (valfri)",value:((J=i.q6_support)==null?void 0:J.note)??"",onChange:n=>_("q6_support",{...i.q6_support??{},note:n.target.value}),rows:2})]})]})]}),e.jsx("div",{className:"flex justify-end mt-6 gap-2",children:e.jsx(k,{onClick:j,disabled:d||!i.q1_sobriety,children:d?"Sparar…":"Spara svar"})})]})})}const P=["superuser","conglomerate_admin","company_admin","therapist","client","referrer","unit_manager"],tt=[{id:"stuck-demo-invites",title:"Fastnade demoinbjudningar",component:l.lazy(()=>u(()=>import("./StuckDemoInvitesWidget-ClWq3MOs.js"),__vite__mapDeps([0,1,2,3]))),roles:["superuser"],locked:!0,defaultOrder:1,defaultVisible:!0},{id:"bulletin-priority",title:"Prioriterade anslag",component:l.lazy(()=>u(()=>import("./BulletinPriorityWidget-Cp5d5K1E.js"),__vite__mapDeps([4,1,2,5]))),roles:["conglomerate_admin","company_admin","therapist","client","referrer","unit_manager"],locked:!0,defaultOrder:2,defaultVisible:!0},{id:"cosign-queue",title:"Att medsignera",component:l.lazy(()=>u(()=>import("./CosignQueueWidget-M7VFOqfW.js"),__vite__mapDeps([6,1,2,7,8,9,10]))),roles:[...P],locked:!0,defaultOrder:3,defaultVisible:!0}
2,{id:"gallring-purge",title:"Gallring att godkänna",component:l.lazy(()=>u(()=>import("./GallringPurgeWidget-BdfCuGds.js"),__vite__mapDeps([11,1,2,12]))),roles:[...P],locked:!0,defaultOrder:4,defaultVisible:!0},{id:"pass3-approval",title:"Pass 3-godkännande",component:l.lazy(()=>u(()=>import("./Pass3ApprovalWidget-DqT1g0RU.js"),__vite__mapDeps([13,1,2]))),roles:["superuser"],locked:!0,defaultOrder:5,defaultVisible:!0},{id:"inactive-logins",title:"Klienter utan inloggning",component:l.lazy(()=>u(()=>import("./InactiveLoginsWidget-XaJCIgrH.js"),__vite__mapDeps([14,1,2,15,16,17,18,19,20,21]))),roles:["company_admin","conglomerate_admin","therapist"],locked:!0,defaultOrder:6,defaultVisible:!0},{id:"password-reset-requests",title:"Lösenordsförfrågningar",component:l.lazy(()=>u(()=>import("./PasswordResetRequestsWidget-DmbVtb6t.js"),__vite__mapDeps([22,1,2,23,24,15,16,17,18,19,20,21]))),roles:["company_admin","conglomerate_admin","therapist","superuser"],locked:!0,defaultOrder:7,defaultVisible:!0},{id:"journal-auto-drafts",title:"Auto-utkast att granska",component:l.lazy(()=>u(()=>import("./JournalDraftsToReviewWidget-1BVl-Ybi.js"),__vite__mapDeps([25,1,2,26,10]))),roles:["therapist","company_admin","conglomerate_admin"],locked:!0,defaultOrder:8,defaultVisible:!0},{id:"urine-today",title:"Dagens urinprover",component:l.lazy(()=>u(()=>import("./UrineTodayWidget-BddghBO6.js"),__vite__mapDeps([27,1,2]))),roles:["therapist","company_admin","conglomerate_admin"],locked:!0,defaultOrder:8.5,defaultVisible:!0},{id:"daily-text",title:"Dagens text",component:l.lazy(()=>u(()=>import("./DagensTextWidget-DEtWNGwG.js"),__vite__mapDeps([28,1,2]))),roles:[...P],defaultOrder:10,defaultVisible:!0},{id:"demo-quick-link",title:"Demo-snabblänk",component:l.lazy(()=>u(()=>import("./DemoQuickLinkWidget-CMsH0fKO.js"),__vite__mapDeps([29,1,2,30]))),roles:[...P],defaultOrder:11,defaultVisible:!0},{id:"dashboard-notifications",title:"Notiser",component:l.lazy(()=>u(()=>import("./DashboardNotificationsWidget-BYPTzeFl.js"),__vite__mapDeps([31,1,2,32,33,34,35,24,36]))),roles:[...P],defaultOrder:12,defaultVisible:!0},{id:"cross-org-document-review",title:"Dokumentgranskning (koncern)",component:l.lazy(()=>u(()=>import("./CrossOrgDocumentReviewWidget-BehX8RPC.js"),__vite__mapDeps([37,1,2,38,39,40,41,33,32,34,35,24]))),roles:["company_admin","conglomerate_admin","therapist"],defaultOrder:13,defaultVisible:!0},{id:"therapist-today",title:"Min dag",component:l.lazy(()=>u(()=>import("./TherapistTodayWidget-tNpR-SoA.js"),__vite__mapDeps([42,1,2,16,17,18,15,19,20,21]))),roles:["therapist"],defaultOrder:20,defaultVisible:!0},{id:"today-stream",title:"Min dag — händelser",component:l.lazy(()=>u(()=>import("./TodayStreamWidget-DsIoVujh.js"),__vite__mapDeps([43,1,2,44,45,41]))),roles:["therapist"],defaultOrder:20.5,defaultVisible:!0},{id:"weekly-reports-batch",title:"Veckorapporter att skapa",component:l.lazy(()=>u(()=>import("./WeeklyReportsBatchWidget-Bm-u3Wxk.js"),__vite__mapDeps([46,1,2,44,47]))),roles:["therapist","company_admin","conglomerate_admin"],defaultOrder:21,defaultVisible:!0},{id:"internal-templates",title:"Mall-katalog",component:l.lazy(()=>u(()=>import("./InternalTemplatesWidget-Bdi9MM72.js"),__vite__mapDeps([48,1,2,47,39]))),roles:["therapist","company_admin"],defaultOrder:22,defaultVisible:!0},{id:"quality-index",title:"Kvalitetsindex",component:l.lazy(()=>u(()=>import("./QualityIndexWidget-C21GQ0PJ.js"),__vite__mapDeps([49,1,2,50]))),roles:["therapist","company_admin","conglomerate_admin"],defaultOrder:23,defaultVisible:!0},{id:"pomodoro",title:"Pomodoro-timer",component:l.lazy(()=>u(()=>import("./PomodoroWidget-DOzwQz_E.js"),__vite__mapDeps([51,1,2,52,53,54]))),roles:["therapist","company_admin"],defaultOrder:30,defaultVisible:!0},{id:"stats-tiles",title:"Översiktsrutor",component:l.lazy(()=>u(()=>import("./StatsTilesWidget-BKENpgXT.js"),__vite__mapDeps([55,1,2,15,16,17,18,19,20,21]))),roles:["superuser","conglomerate_admin","company_admin"],defaultOrder:40,defaultVisible:!0},{id:"order-notification-settings",title:"Beställningsnotiser",component:l.lazy(()=>u(()=>import("./OrderNotificationSettingsWidget-B_znhlUJ.js"),__vite__mapDeps([56,1,2]))),roles:["company_admin","conglomerate_admin"],defaultOrder:50,defaultVisible:!0},{id:"upcoming-help-policy-activations",title:"Kommande efterkontakt-aktiveringar",component:l.lazy(()=>u(()=>import("./UpcomingHelpPolicyActivationsWidget-KIQG2thD.js"),__vite__mapDeps([57,1,2,16,17,18,15,58]))),roles:["company_admin","conglomerate_admin","therapist","superuser"],defaultOrder:51,defaultVisible:!0},{id:"educator-stats",title:"Utbildar-/handledar-statistik",component:l.lazy(()=>u(()=>import("./EducatorStatsWidget-lnEyaCxq.js"),__vite__mapDeps([59,1,2,60]))),roles:["therapist","company_admin","conglomerate_admin","superuser"],defaultOrder:52,defaultVisible:!0},{id:"submission-inbox",title:"Nya inlämningar",component:l.lazy(()=>u(()=>import("./SubmissionInboxWidget-CBaFKu0j.js"),__vite__mapDeps([61,1,2,62,63]))),roles:["therapist","company_admin","conglomerate_admin"],defaultOrder:9,defaultVisible:!0}];function at(t,a){const s=new Map;for(const r of a??[])s.set(r.id,r);const o=[];for(const r of tt){if(!r.roles.includes(t))continue;if(r.locked){o.push({...r,visible:!0,order:r.defaultOrder});continue}const d=s.get(r.id);o.push({...r,visible:(d==null?void 0:d.visible)??r.defaultVisible,order:(d==null?void 0:d.order)??r.defaultOrder})}return o.sort((r,d)=>
2r.locked&&!d.locked?-1:!r.locked&&d.locked?1:r.order-d.order),o}async function st(t){const{data:a,error:s}=await x.from("user_dashboard_layout").select("layout").eq("user_id",t).maybeSingle();if(s)throw s;return(a==null?void 0:a.layout)??{}}async function te(t,a){const{error:s}=await x.from("user_dashboard_layout").upsert([{user_id:t,layout:a}],{onConflict:"user_id"});if(s)throw s}async function ft(){const t=new Date;t.setDate(t.getDate()-10);const{data:a}=await x.from("clients").select("first_name, last_name, account_created_at, account_activated, user_id").eq("account_activated",!1).not("user_id","is",null).lt("account_created_at",t.toISOString());return(a??[]).map(s=>({first_name:s.first_name,last_name:s.last_name}))}async function gt(){const{data:t,error:a}=await x.from("password_reset_requests").select("id, client_id, requested_at, preferred_contact, contact_detail, clients(first_name, last_name, phone, email)").is("resolved_at",null).order("requested_at",{ascending:!1});return a||!t?[]:t.map(s=>{var o,r;return{id:s.id,client_id:s.client_id,requested_at:s.requested_at,client_name:s.clients?`${s.clients.first_name} ${s.clients.last_name}`:"Okänd klient",preferred_contact:s.preferred_contact||null,contact_detail:s.contact_detail||null,client_phone:((o=s.clients)==null?void 0:o.phone)||null,client_email:((r=s.clients)==null?void 0:r.email)||null}})}async function vt(t){const{data:a}=await x.from("unit_managers").select("is_active").eq("organization_id",t),s=a??[];return{active:s.filter(o=>o.is_active).length,inactive:s.filter(o=>!o.is_active).length}}async function xt(){const[t,a]=await Promise.all([x.from("purchase_requests").select("id",{count:"exact",head:!0}).in("status",["new","pending"]),x.from("license_renewal_requests").select("id",{count:"exact",head:!0}).eq("status","pending")]);return(t.count||0)+(a.count||0)}function bt(t,a){const s=x.channel(`dashboard-orders-${t}`).on("postgres_changes",{event:"*",schema:"public",table:"purchase_requests"},a).on("postgres_changes",{event:"*",schema:"public",table:"license_renewal_requests"},a).subscribe();return()=>{x.removeChannel(s)}}const U=["dashboard-layout"];function de(){const{user:t,effectiveRole:a}=z(),s=ae(),o=se({queryKey:[...U,t==null?void 0:t.id],enabled:!!(t!=null&&t.id),staleTime:5*6e4,queryFn:()=>st(t.id)}),r=l.useMemo(()=>o.data??{},[o.data]),d=a??null,m=d?r[d]:void 0,i=ve({mutationFn:async c=>{if(!(t!=null&&t.id)||!d)return;const p={...r,[d]:c};return await te(t.id,p),p},onSuccess:c=>{c&&s.setQueryData([...U,t==null?void 0:t.id],c)}}),h=l.useCallback(async()=>{if(!(t!=null&&t.id)||!d)return;const c={...r};delete c[d],await te(t.id,c),s.setQueryData([...U,t==null?void 0:t.id],c)},[t==null?void 0:t.id,d,r,s]);return{saved:m,loading:o.isLoading,save:i.mutate,saving:i.isPending,reset:h}}function nt(){const{effectiveRole:t}=z(),{saved:a,loading:s}=de();return{widgets:l.useMemo(()=>t?at(t,a):[],[t,a]),loading:s}}function rt({widget:t,editMode:a,onToggleVisible:s}
2){const o=xe({id:t.id,disabled:!a||t.locked}),{attributes:r,listeners:d,setNodeRef:m,transform:i,transition:h,isDragging:c}=o,p=t.component,b={transform:be.Transform.toString(i),transition:h,opacity:c?.5:void 0};return!t.visible&&!a?null:e.jsxs("div",{ref:m,style:b,className:"relative","data-testid":"widget-frame","data-widget-id":t.id,"data-widget-locked":t.locked?"true":"false","data-widget-visible":t.visible?"true":"false",children:[a&&e.jsx("div",{className:"absolute -top-2 right-2 z-10 flex items-center gap-1 rounded-md border border-border bg-background px-1.5 py-0.5 shadow-sm",children:t.locked?e.jsxs(ye,{children:[e.jsx(je,{asChild:!0,children:e.jsxs("span",{className:"flex items-center gap-1 text-xs text-muted-foreground px-1",children:[e.jsx(ke,{className:"w-3 h-3"})," Säkerhetskritisk"]})}),e.jsx(Oe,{children:"Kan inte döljas eller flyttas"})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",...r,...d,className:"cursor-grab active:cursor-grabbing p-1 text-muted-foreground hover:text-foreground","aria-label":`Flytta ${t.title}`,children:e.jsx(Ee,{className:"w-3.5 h-3.5"})}),e.jsx(k,{type:"button",size:"sm",variant:"ghost",className:"h-6 px-2 text-xs",onClick:()=>s(t.id),"aria-label":t.visible?`Dölj ${t.title}`:`Visa ${t.title}`,children:t.visible?e.jsx(qe,{className:"w-3.5 h-3.5"}):e.jsx(Se,{className:"w-3.5 h-3.5"})})]})}),e.jsx("div",{className:a&&!t.visible?"opacity-40":void 0,children:e.jsx(l.Suspense,{fallback:e.jsx("div",{className:"h-24 rounded-lg border border-dashed border-border animate-pulse"}),children:e.jsx(p,{})})})]})}function it(t){return t.filter(a=>!a.locked).map((a,s)=>({id:a.id,visible:a.visible,order:s+100}))}function lt(){const{widgets:t,loading:a}=nt(),{save:s,reset:o,saving:r}=de(),[d,m]=l.useState(!1),[i,h]=l.useState([]);l.useEffect(()=>{h(t)},[t]);const c=Ve(De(Ne,{activationConstraint:{distance:6}})),p=l.useCallback(_=>{const{active:j,over:g}=_;!g||j.id===g.id||h(y=>{const E=y.findIndex(S=>S.id===j.id),q=y.findIndex(S=>S.id===g.id);if(E===-1||q===-1)return y;const I=y[q];return y[E].locked||I.locked?y:Le(y,E,q)})},[]),b=l.useCallback(_=>{h(j=>j.map(g=>g.id===_&&!g.locked?{...g,visible:!g.visible}:g))},[]),F=l.useCallback(()=>{s(it(i)),m(!1)},[i,s]),O=l.useCallback(async()=>{await o(),m(!1)},[o]);return a?e.jsx("div",{className:"space-y-4",children:[...Array(3)].map((_,j)=>e.jsx("div",{className:"h-24 rounded-lg border border-dashed border-border animate-pulse"},j))}):e.jsxs(we,{children:[e.jsx("div",{className:"flex items-center justify-end gap-2","data-testid":"dashboard-toolbar",children:d?e.jsxs(e.Fragment,{children:[e.jsxs(k,{size:"sm",variant:"ghost",onClick:O,className:"gap-1.5","data-testid":"dashboard-reset-btn",children:[e.jsx(Ce,{className:"w-3.5 h-3.5"})," Återställ standard"]}),e.jsxs(k,{size:"sm",onClick:F,disabled:r,className:"gap-1.5","data-testid":"dashboard-save-btn",children:[e.jsx(Te,{className:"w-3.5 h-3.5"})," Klar"]})]}):e.jsxs(k,{size:"sm",variant:"outline",onClick:()=>m(!0),className:"gap-1.5","data-testid":"dashboard-edit-btn",children:[e.jsx(Me,{className:"w-3.5 h-3.5"})," Redigera skrivbord"]})}),e.jsx(Ae,{sensors:c,collisionDetection:Pe,onDragEnd:p,children:e.jsx(Re,{items:i.map(_=>_.id),strategy:Ie,children:e.jsx("div",{className:"space-y-6","data-testid":"dashboard-grid",children:i.map(_=>e.jsx(rt,{widget:_,editMode:d,onToggleVisible:b},_.id))})})})]})}function ot(){var c,p;const{user:t,effectiveRole:a}=z(),{pending:s,loading:o,refetch:r}=Ue(),{labels:d}=ze(),{data:m}=Ke([t==null?void 0:t.id]),i=((p=t!=null&&t.id?(c=m==null?void 0:m.get(t.id))==null?void 0:c.full_name:null)==null?void 0:p.split(" ")[0])||"där",h={developer:"Programutvecklare",superuser:"Superanvändare",conglomerate_admin:"Koncernadministratör",company_admin:"Företagsadministratör",therapist:"Terapeut",client:"Klient",referrer:d.referrer.singular,unit_manager:d.unit_manager.singular};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-semibold tracking-tight",children:["Hej ",i,"!"]}),e.jsxs("p",{className:"text-muted-foreground mt-1",children:["Inloggad som ",h[a||""]||"användare"]})]}),e.jsx(lt,{}
2),!o&&s.length>0&&e.jsx(et,{pendingFollowups:s,onComplete:r})]})}const yt=Object.freeze(Object.defineProperty({__proto__:null,default:ot},Symbol.toStringTag,{value:"Module"}));export{yt as D,gt as a,vt as b,xt as c,ft as f,bt as s,Ue as u};

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.