PageSourceSearch

https://frimurer.no/assets/IdActivityList-BP0VBbrV.js

js frimurer.no collected 2026-09-25 00:00:54 UTC 15,710 bytes, 1 lines download raw bytes

1import{u as De,r as a,j as e}from"./vendor-react-GnwsTJfO.js";import{f as l,U as n,N as M,F as Y,B as o,Y as Fe,R as W,C as X,g as J,E as Te,G as Ie,a0 as Ee,i as R,j as D,k as F,l as T,m as h,I as u,T as Le,o as Me,p as O,q as m,r as Oe,t as d,x as q,n as Q,aA as qe,aB as $e,a8 as Z,a9 as ee,aa as se,ab as te,a4 as Be,ad as re}from"./index-Bj2Y77AF.js";import{e as Ke}from"./AdminNavigation-DYLQ05kD.js";import{L as g}from"./label-9b9pu6HH.js";import{T as Ue}from"./textarea-B-AJzF_c.js";import{C as Ve}from"./checkbox-BAFwp2Vs.js";import{S as ze}from"./settings-2-DgZRW83o.js";import{U as Pe}from"./users-CHiFHZvy.js";import{T as ae}from"./trash-2-D673yTlG.js";import"./vendor-cjs-BcELrC9x.js";import"./vendor-supabase-BWPZKnGU.js";import"./vendor-ui-C1xCQL2z.js";import"./vendor-utils-B2rm_Apj.js";import"./vendor-query-Dp4tHR6-.js";import"./MasonicCross-CB_Vslf8.js";import"./image-l440pP5V.js";const ne=["Omvisning","Informasjonsmøte","Pep-talk","Foredrag","Annet"],ie={activity_date:q(new Date,"yyyy-MM-dd"),category:"Omvisning",responsibles:[],group_name:"",external_count:"0",norwegian_brothers_count:"0",foreign_brothers_count:"0",comment:""};function cs(){const $=De(),[le,oe]=a.useState(!0),[ce,de]=a.useState(!1),[x,me]=a.useState([]),[j,ue]=a.useState([]),[ge,I]=a.useState(!1),[B,K]=a.useState(""),[he,p]=a.useState(!1),[y,E]=a.useState(null),[r,c]=a.useState({...ie}),[U,V]=a.useState(!1),[N,xe]=a.useState("all"),[w,pe]=a.useState("all"),[k,ve]=a.useState("all"),[L,je]=a.useState("");a.useEffect(()=>{(async()=>{const{data:s}=await l.auth.getUser();if(!s.user){$("/auth");return}const{data:t}=await l.rpc("is_id_activity_manager",{_user_id:s.user.id});de(!!t),t&&await Promise.all([C(),b()]),oe(!1)})()},[]);const C=async()=>{const{data:s,error:t}=await l.from("id_activities").select("*").order("activity_date",{ascending:!1});if(t){n.error("Kunne ikke hente aktiviteter");return}me(s||[])},b=async()=>{const{data:s,error:t}=await l.from("id_activity_responsibles").select("id, name, is_active, sort_order").order("sort_order",{ascending:!0}).order("name",{ascending:!0});if(t){n.error("Kunne ikke hente ansvarlige");return}ue(s||[])},S=a.useMemo(()=>j.filter(s=>s.is_active).map(s=>s.name),[j]),be=a.useMemo(()=>{const s=new Set(S);return x.forEach(t=>(t.responsibles||[]).forEach(i=>s.add(i))),Array.from(s).sort((t,i)=>t.localeCompare(i,"nb"))},[x,S]),z=async()=>{const s=B.trim();if(!s)return;if(j.some(i=>i.name.toLowerCase()===s.toLowerCase())){n.error("Navnet finnes allerede");return}const{error:t}=await l.from("id_activity_responsibles").insert({name:s});if(t){n.error(t.message);return}K(""),await b()},fe=async(s,t)=>{const i=t.trim();if(!i||i===s.name)return;const{error:G}=await l.from("id_activity_responsibles").update({name:i}).eq("id",s.id);if(G){n.error(G.message);return}const{data:_,error:Re}=await l.from("id_activities").select("id, responsible, responsibles").or(`responsibles.cs.{"${s.name}"},responsible.eq.${s.name}`);Re?n.error("Navnet ble endret, men historikken kunne ikke oppdateres"):_!=null&&_.length&&((await Promise.all(_.map(v=>l.from("id_activities").update({responsibles:(v.responsibles||[]).map(H=>H===s.name?i:H),responsible:v.responsible===s.name?i:v.responsible}).eq("id",v.id)))).some(v=>v.error)?n.error("Noen aktiviteter kunne ikke oppdateres med nytt navn"):n.success(`Navn oppdatert i ${_.length} aktivitet(er)`),await C()),await b()},_e=async s=>{const{error:t}=await l.from("id_activity_responsibles").update({is_active:!s.is_active}).eq("id",s.id);if(t){n.error(t.message);return}await b()},ye=async s=>{if(!confirm(`Slette «${s.name}» fra listen over ansvarlige?`))return;const{error:t}=await l.from("id_activity_responsibles").delete().eq("id",s.id);if(t){n.error(t.message);return}await b()},P=s=>{c(t=>({...t,responsibles:t.responsibles.includes(s)?t.responsibles.filter(i=>i!==s):[...t.responsibles,s]}))},Ne=a.useMemo(()=>{const s=new Set;return x.forEach(t=>s.add(t.activity_date.slice(0,4))),Array.from(s).sort().reverse()},[x]),A=a.useMemo(()=>{const s=L.trim().toLowerCase();return x.filter(t=>!(N!=="all"&&!t.activity_date.startsWith(N)||w!=="all"&&t.category!==w||k!=="all"&&!(t.responsibles||[]).includes(k)||s&&!`${t.group_name||""} ${(t.responsibles||[]).join(" ")} ${t.comment||""}`.toLowerCase().includes(s)))}
1,[x,N,w,k,L]),f=a.useMemo(()=>A.reduce((s,t)=>({count:s.count+1,external:s.external+t.external_count,norwegian:s.norwegian+t.norwegian_brothers_count,foreign:s.foreign+t.foreign_brothers_count,total:s.total+(t.total_attendees??t.external_count+t.norwegian_brothers_count+t.foreign_brothers_count)}),{count:0,external:0,norwegian:0,foreign:0,total:0}),[A]),we=()=>{E(null),c({...ie}),p(!0)},ke=s=>{var t;E(s.id),c({activity_date:s.activity_date,category:s.category,responsibles:(t=s.responsibles)!=null&&t.length?s.responsibles:s.responsible?[s.responsible]:[],group_name:s.group_name||"",external_count:String(s.external_count),norwegian_brothers_count:String(s.norwegian_brothers_count),foreign_brothers_count:String(s.foreign_brothers_count),comment:s.comment||""}),p(!0)},Ce=s=>{var t;E(null),c({activity_date:q(new Date,"yyyy-MM-dd"),category:s.category,responsibles:(t=s.responsibles)!=null&&t.length?s.responsibles:s.responsible?[s.responsible]:[],group_name:s.group_name||"",external_count:String(s.external_count),norwegian_brothers_count:String(s.norwegian_brothers_count),foreign_brothers_count:String(s.foreign_brothers_count),comment:s.comment||""}),p(!0)},Se=async()=>{if(!r.activity_date||!r.category){n.error("Dato og kategori er påkrevd");return}V(!0);const s={activity_date:r.activity_date,category:r.category,responsible:r.responsibles[0]||null,responsibles:r.responsibles,group_name:r.group_name.trim()||null,external_count:Number(r.external_count)||0,norwegian_brothers_count:Number(r.norwegian_brothers_count)||0,foreign_brothers_count:Number(r.foreign_brothers_count)||0,comment:r.comment.trim()||null},{error:t}=y?await l.from("id_activities").update(s).eq("id",y):await l.from("id_activities").insert(s);if(V(!1),t){n.error(t.message);return}n.success(y?"Aktivitet oppdatert":"Aktivitet registrert"),p(!1),await C()},Ae=async s=>{if(!confirm("Slette denne aktiviteten?"))return;const{error:t}=await l.from("id_activities").delete().eq("id",s);if(t){n.error(t.message);return}n.success("Aktivitet slettet"),await C()};return le?e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(M,{}),e.jsx("div",{className:"container mx-auto px-4 py-12 text-muted-foreground",children:"Laster…"})]}):ce?e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(M,{}),e.jsx(Ke,{}),e.jsxs("main",{className:"container mx-auto px-4 py-8 space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsxs(o,{variant:"ghost",size:"sm",onClick:()=>$("/admin"),className:"mb-2",children:[e.jsx(Fe,{className:"w-4 h-4 mr-2"})," Tilbake"]}),e.jsx("h1",{className:"text-3xl font-bold",children:"ID-aktiviteter"}),e.jsx("p",{className:"text-muted-foreground",children:"Registrering av Informasjonsdirektoriets aktiviteter"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs(o,{variant:"outline",onClick:()=>I(!0),children:[e.jsx(ze,{className:"w-4 h-4 mr-2"})," Rediger ansvarlige"]}),e.jsxs(o,{onClick:we,children:[e.jsx(W,{className:"w-4 h-4 mr-2"})," Registrer aktivitet"]})]})]}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-5 gap-4",children:[{label:"Aktiviteter",value:f.count},{label:"Eksterne",value:f.external},{label:"Norske brødre",value:f.norwegian},{label:"Utenlandske brødre",value:f.foreign},{label:"Totalt deltakere",value:f.total}].map(s=>e.jsx(X,{className:"bg-muted/50",children:e.jsxs(J,{className:"pt-6",children:[e.jsx("p",{className:"text-2xl font-bold",children:s.value.toLocaleString("nb-NO")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s.label})]})},s.label))}),e.jsxs(X,{children:[e.jsxs(Te,{children:[e.jsxs(Ie,{className:"flex items-center gap-2",children:[e.jsx(Pe,{className:"w-5 h-5"})," Registrerte aktiviteter"]}),e.jsx(Ee,{children:"Filtrer på år, kategori eller søk i gruppe/ansvarlig"})]}),e.jsxs(J,{className:"space-y-4",children:[e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs(R,{value:N,onValueChange:xe,children:[e.jsx(D,{className:"w-36",children:e.jsx(F,{placeholder:"År"})}),e.jsxs(T,{children:[e.jsx(h,{value:"all",children:"Alle år"}),Ne.map(s=>e.jsx(h,{value:s,children:s},s))]})]}),e.jsxs(R,{value:w,onValueChange:pe,children:[e.jsx(D,{className:"w-52",children:e.jsx(F,{placeholder:"Kategori"})}),e.jsxs(T,{children:[e.jsx(h,{value:"all",children:"Alle kategorier"}),ne.map(s=>e.jsx(h,{value:s,children:s},s))]})]}),e.jsx(u,{placeholder:"Søk…",value:L,onChange:s=>je(s.target.value),className:"w-full sm:w-64"}),e.jsxs(R,{value:k,onValueChange:ve,children:[e.jsx(D,{className:"w-52",children:e.jsx(F,{placeholder:"Ansvarlig"})}),e.jsxs(T,{children:[e.jsx(h,{value:"all",children:"Alle ansvarlige"}),be.map(s=>e.jsx(h,{value:s,children:s},s))]})]})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(Le,{children:[e.jsx(Me,{children:e.jsxs(O,{children:[e.jsx(m,{children:"Dato"}),e.jsx(m,{children:"Kategori"}),e.jsx(m,{children:"Ansvarlig"}),e.jsx(m,{children:"Gruppe"}),e.jsx(m,{className:"text-right",children:"Eksterne"}),e.jsx(m,{className:"text-right",children:"Norske"}),e.jsx(m,{className:"text-right",children:"Utenl."}),e.jsx(m,{className:"text-right",children:"Totalt"}),e.jsx(m,{})]})}),e.jsxs(Oe,{children:[A.map(s=>{var t;return e.jsxs(O,{children:[e.jsx(d,{className:"whitespace-nowrap",children:q(ne
1w Date(s.activity_date),"dd.MM.yyyy")}),e.jsx(d,{children:e.jsx(Q,{variant:"secondary",className:"whitespace-nowrap",children:s.category})}),e.jsx(d,{className:"max-w-[14rem]",children:(t=s.responsibles)!=null&&t.length?s.responsibles.join(", "):s.responsible||"—"}),e.jsx(d,{className:"max-w-xs",children:s.group_name||"—"}),e.jsx(d,{className:"text-right",children:s.external_count}),e.jsx(d,{className:"text-right",children:s.norwegian_brothers_count}),e.jsx(d,{className:"text-right",children:s.foreign_brothers_count}),e.jsx(d,{className:"text-right font-medium",children:s.total_attendees??s.external_count+s.norwegian_brothers_count+s.foreign_brothers_count}),e.jsxs(d,{className:"text-right whitespace-nowrap",children:[e.jsx(o,{variant:"ghost",size:"icon","aria-label":"Rediger aktivitet",onClick:()=>ke(s),children:e.jsx(qe,{className:"w-4 h-4"})}),e.jsx(o,{variant:"ghost",size:"icon","aria-label":"Dupliser aktivitet",title:"Dupliser aktivitet",onClick:()=>Ce(s),children:e.jsx($e,{className:"w-4 h-4"})}),e.jsx(o,{variant:"ghost",size:"icon","aria-label":"Slett aktivitet",onClick:()=>Ae(s.id),children:e.jsx(ae,{className:"w-4 h-4"})})]})]},s.id)}),A.length===0&&e.jsx(O,{children:e.jsx(d,{colSpan:9,className:"text-center text-muted-foreground py-8",children:"Ingen aktiviteter funnet"})})]})]})})]})]})]}),e.jsx(Y,{}),e.jsx(Z,{open:he,onOpenChange:p,children:e.jsxs(ee,{className:"sm:max-w-lg",children:[e.jsx(se,{children:e.jsx(te,{children:y?"Rediger aktivitet":"Registrer aktivitet"})}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"activity_date",children:"Dato"}),e.jsx(u,{id:"activity_date",type:"date",value:r.activity_date,onChange:s=>c({...r,activity_date:s.target.value})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"category",children:"Kategori"}),e.jsxs(R,{value:r.category,onValueChange:s=>c({...r,category:s}),children:[e.jsx(D,{id:"category",children:e.jsx(F,{})}),e.jsx(T,{children:ne.map(s=>e.jsx(h,{value:s,children:s},s))})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{children:"Ansvarlige"}),e.jsxs("div",{className:"rounded-md border p-3 max-h-44 overflow-y-auto grid grid-cols-2 gap-2",children:[S.length===0&&e.jsx("p",{className:"text-sm text-muted-foreground col-span-2",children:"Ingen ansvarlige registrert ennå."}),S.map(s=>e.jsxs("label",{className:"flex items-center gap-2 text-sm cursor-pointer",children:[e.jsx(Ve,{checked:r.responsibles.includes(s),onCheckedChange:()=>P(s)}),e.jsx("span",{children:s})]},s))]}),r.responsibles.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1.5",children:r.responsibles.map(s=>e.jsxs(Q,{variant:"secondary",className:"gap-1",children:[s,e.jsx("button",{type:"button","aria-label":`Fjern ${s}`,onClick:()=>P(s),children:e.jsx(Be,{className:"w-3 h-3"})})]},s))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"group_name",children:"Gruppe / beskrivelse"}),e.jsx(u,{id:"group_name",value:r.group_name,onChange:s=>c({...r,group_name:s.target.value}),placeholder:"F.eks. Rotary Oslo"})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"external_count",children:"Eksterne"}),e.jsx(u,{id:"external_count",type:"number",min:"0",value:r.external_count,onChange:s=>c({...r,external_count:s.target.value})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"norwegian_brothers_count",children:"Norske brødre"}),e.jsx(u,{id:"norwegian_brothers_count",type:"number",min:"0",value:r.norwegian_brothers_count,onChange:s=>c({...r,norwegian_brothers_count:s.target.value})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"foreign_brothers_count",children:"Utenlandske"}),e.jsx(u,{id:"foreign_brothers_count",type:"number",min:"0",value:r.foreign_brothers_count,onChange:s=>c({...r,foreign_brothers_count:s.target.value})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"comment",children:"Kommentar"}),e.jsx(Ue,{id:"comment",rows:2,value:r.comment,onChange:s=>c({...r,comment:s.target.value})})]})]}),e.jsxs(re,{children:[e.jsx(o,{variant:"outline",onClick:()=>p(!1),children:"Avbryt"}),e.jsx(o,{onClick:Se,disabled:U,children:U?"Lagrer…":"Lagre"})]})]})}),e.jsx(Z,{open:ge,onOpenChange:I,children:e.jsxs(ee,{className:"sm:max-w-lg",children:[e.jsx(se,{children:e.jsx(te,{children:"Ansvarlige"})}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(u,{placeholder:"Nytt navn",value:
1B,onChange:s=>K(s.target.value),onKeyDown:s=>{s.key==="Enter"&&(s.preventDefault(),z())}}),e.jsxs(o,{onClick:z,children:[e.jsx(W,{className:"w-4 h-4 mr-2"})," Legg til"]})]}),e.jsxs("div",{className:"space-y-2 max-h-80 overflow-y-auto",children:[j.map(s=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(u,{defaultValue:s.name,onBlur:t=>fe(s,t.target.value),className:s.is_active?"":"text-muted-foreground line-through"}),e.jsx(o,{variant:"outline",size:"sm",onClick:()=>_e(s),children:s.is_active?"Skjul":"Aktiver"}),e.jsx(o,{variant:"ghost",size:"icon","aria-label":`Slett ${s.name}`,onClick:()=>ye(s),children:e.jsx(ae,{className:"w-4 h-4"})})]},s.id)),j.length===0&&e.jsx("p",{className:"text-sm text-muted-foreground",children:"Ingen ansvarlige registrert."})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"«Skjul» fjerner navnet fra valglisten uten å endre registrerte aktiviteter."})]}),e.jsx(re,{children:e.jsx(o,{onClick:()=>I(!1),children:"Lukk"})})]})})]}):e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(M,{}),e.jsxs("div",{className:"container mx-auto px-4 py-12",children:[e.jsx("h1",{className:"text-2xl font-semibold mb-2",children:"Ingen tilgang"}),e.jsx("p",{className:"text-muted-foreground",children:"Du har ikke tilgang til Informasjonsdirektoriets aktivitetsregister."})]}),e.jsx(Y,{})]})}export{ne as ID_ACTIVITY_CATEGORIES,cs 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.