PageSourceSearch

https://app.renaldo.de/assets/activeUsers-0vlMivOc.js

js renaldo.de collected 2026-10-04 02:47:43 UTC 6,604 bytes, 1 lines download raw bytes

1import{r as y,u as P,gO as B,gP as L,j as t}from"./surfaces-ClxH-EbV.js";import{I as E}from"./InfoHint-DlrQlpIm.js";import{B as O,a as U,b as _}from"./breadcrumbs-BpkG5F7m.js";import"./useTheme-u4G7j20R.js";import{aP as N,aW as b,aX as A,aY as w,aR as S}from"./clientStorage.service-Bf1uW4x5.js";import{L as R}from"./web-DW0ibNQM.js";import{P as W,C as v,a as V}from"./Card-C6HDn0xf.js";import{D as Y}from"./DataTable-BIGmVbhT.js";import{F}from"./FilterBar-2ie3t9ps.js";import{P as H,B as D}from"./Badge-BbIOEte6.js";import{S as M}from"./Input-ChKjgStz.js";import{c as K}from"./constructNow-D8vV19-A.js";import{n as $,g as z,e as q,a as G,f as T,d as g}from"./de-cm-GLlWM.js";import{p as j}from"./parseISO-CXYFl-DJ.js";import"./HorizontalScroll-Cab8SJB5.js";import"./index-CEG8BzbS.js";/* empty css                         */import"./States-PMPQPU6K.js";import"./AdminButton-C2_hDJEU.js";import"./userType-Bo_vIaCY.js";function Z(a,r){const s=+N(a)-+N(r);return s<0?-1:s>0?1:s}function J(a){return r=>{const c=(a?Math[a]:Math.trunc)(r);return c===0?0:c}}function Q(a,r,s){const c=G(),l=s?.locale??c.locale??q,m=Z(a,r);if(isNaN(m))throw new RangeError("Invalid time value");const n=Object.assign({},s,{addSuffix:s?.addSuffix,comparison:m}),[x,e]=$(s?.in,...m>0?[r,a]:[a,r]),d=J(s?.roundingMethod??"round"),p=e.getTime()-x.getTime(),u=p/S,C=z(e)-z(x),h=(p-C)/S,f=s?.unit;let i;if(f?i=f:u<1?i="second":u<60?i="minute":u<b?i="hour":h<A?i="day":h<w?i="month":i="year",i==="second"){const o=d(p/1e3);return l.formatDistance("xSeconds",o,n)}else if(i==="minute"){const o=d(u);return l.formatDistance("xMinutes",o,n)}else if(i==="hour"){const o=d(u/60);return l.formatDistance("xHours",o,n)}else if(i==="day"){const o=d(h/b);return l.formatDistance("xDays",o,n)}else if(i==="month"){const o=d(h/A);return o===12&&f!=="month"?l.formatDistance("xYears",1,n):l.formatDistance("xMonths",o,n)}else{const o=d(h/w);return l.formatDistance("xYears",o,n)}}function X(a,r){return Q(a,K(a),r)}const ee={"30d":"Letzte 30 Tage",allTime:"Gesamt"},I={professional:"Bauexperten",principal:"Bauherren"},te={"30d":3,allTime:5};function Ne(){const[a,r]=y.useState("30d"),[s,c]=y.useState("professional"),[l,m]=y.useState(!0),{data:n}=P({queryKey:[B,a,s,l],queryFn:()=>L({window:a,userType:s,powerUserOnly:l})}),x=te[a];return t.jsxs("div",{className:"space-y-6",children:[t.jsxs(O,{children:[t.jsx(U,{}),t.jsx(_,{}),t.jsx("span",{className:"mx-1 text-dark-300",children:"›"}),t.jsx("span",{className:"text-dark-700",children:"Aktive Nutzer"})]}),t.jsx(W,{title:"Aktive Nutzer",subtitle:`Wer Renaldo wirklich wiederholt produktiv nutzt — gemessen an der Anzahl der Tage mit Aktivität (≥ ${x} aktive Tage). Sortiert nach aktiven Tagen absteigend.`}),t.jsxs(v,{children:[t.jsxs(F,{children:[t.jsxs(M,{label:"Nutzertyp",value:s,onChange:e=>c(e.target.value),children:[t.jsx("option",{value:"professional",children:"Bauexperten"}),t.jsx("option",{value:"principal",children:"Bauherren"})]}),t.jsxs(M,{label:"Zeitfenster",value:a,onChange:e=>r(e.target.value),children:[t.jsx("option",{value:"30d",children:"Letzte 30 Tage"}),t.jsx("option",{value:"allTime",children:"Gesamt"})]}),t.jsxs("label",{className:"flex items-end gap-2 pb-1.5 cursor-pointer",children:[t.jsx("input",{type:"checkbox",checked:l,onChange:e=>m(e.target.checked),className:"w-4 h-4 accent-orange-medium"}),t.jsx("span",{className:"text-sm text-dark-700 select-none",children:"Nur Inhalte-Ersteller"})]})]}),t.jsx(E,{label:"Nutzungsfilter",showLabel:!0,children:"„Inhalte-Ersteller“ = mindestens 1 erstelltes Projekt ODER mindestens einmal SAM (KI-Assistent) genutzt. Deaktiviere den Filter, um auch reine „Klick-durch“-Nutzer zu sehen."})]}),t.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[t.jsx(k,{label:`Aktive ${I[s]}`,value:String(n.summary.totalCount),accent:"success"}),t.jsx(k,{label:"Median aktive Tage",value:String(n.summary.medianActiveDays)}),t.jsx(k,{label:"Davon SAM-Nutzer",value:String(n.summary.samUserCount)})]}),t.jsxs(v,{padded:!1,children:[t.jsx("div",{className:"px-5 py-4 border-b border-dark-100",children:t.jsxs("h3",{className:"text-base font-semibold text-dark-800",children:["Top ",n.rows.length," aktive ",I[s]," · ",ee[a]]})}),t.jsx(Y,{rows:n.rows,rowKey:e=>e.identityId,emptyTitle:"Keine aktiven Nutzer im Filter",emptyDescription:"Lockere die Filter (z. B. Power-User-Toggle aus, anderer Nutzertyp) — oder die Schwelle ist im aktuellen Zeitraum schlicht zu hoch.",columns:[{key:"name",header:"Name",sortable:!0,sortValue:e=>e.name.toLowerCase(),render:e=>t.jsx(R,{to:"/admin/users/$identityId",params:{identityId:e.identityId},className:"font-medium text-dark-800 hover:text-orange-medium hover:underline",children:e.name||"(ohne Name)"})},{key:"email",header:"E-Mail",render:e=>t.jsx("span",{className:"text-xs text-dark-500",children:e.email??"—"})},{key:"plan",header:"Plan",render:e=>t.jsx(H,{plan:e.plan,userType:s})},{key:"activeDays",header:"Aktive Tage",align:"right",sortable:!0,sortValue:e=>e.activeDays,render:e=>t.jsx("span",{className:"font-semibold whitespace-nowrap",children:e.activeDays})},{key:"totalContacts",header:"Requests",align:"right",sortable:!0,sortValue:e=>e.totalContacts,render:e=>t.jsx("span",{className:"whitespace-nowrap text-dark-600",children:e.totalContacts.toLocaleStr
1ing("de-DE")})},{key:"lastActivity",header:"Letzte Aktivität",sortable:!0,sortValue:e=>e.lastActivityAt??"",render:e=>e.lastActivityAt?t.jsxs("span",{className:"whitespace-nowrap text-dark-700",children:[X(j(e.lastActivityAt),{addSuffix:!0,locale:g}),t.jsx("br",{}),t.jsx("span",{className:"text-xs text-dark-400",children:T(j(e.lastActivityAt),"dd. MMM yyyy, HH:mm",{locale:g})})]}):t.jsx("span",{className:"text-dark-400",children:"—"})},{key:"createdProjects",header:"Projekte",align:"right",sortable:!0,sortValue:e=>e.createdProjectsCount,render:e=>t.jsx("span",{className:`whitespace-nowrap ${e.createdProjectsCount>0?"text-dark-800":"text-dark-400"}`,children:e.createdProjectsCount})},{key:"sam",header:"SAM",render:e=>e.hasUsedSam?t.jsx(D,{variant:"success",children:"Ja"}):t.jsx(D,{variant:"neutral",children:"Nein"})},{key:"firstSeen",header:"Erste Anmeldung",sortable:!0,sortValue:e=>e.firstSeen,render:e=>t.jsx("span",{className:"text-xs text-dark-500 whitespace-nowrap",children:T(j(e.firstSeen),"dd. MMM yyyy",{locale:g})})}]})]})]})}function k({label:a,value:r,accent:s}){const c=s==="success"?"text-green-dark":"text-dark-800";return t.jsxs(v,{children:[t.jsx(V,{title:a}),t.jsx("div",{className:`text-3xl font-bold ${c}`,children:r})]})}export{Ne as component};

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.