PageSourceSearch

https://restaurant-app-production.web.app/assets/AuditLog-O3ZBrArb.js

js restaurant-app-production.web.app collected 2026-10-03 12:36:02 UTC 7,444 bytes, 1 lines download raw bytes

1import{r as D}from"./rolldown-runtime-b3L32Ng1.js";import{a as T}from"./app-DWbpOmbp.js";import{Cn as C,Ct as E,D as L,Lt as k,P as U,S as A,Sn as I,bn as q,cn as H,h as c,kn as R,nr as F,qt as M,xn as V}from"./module-B8BOkXXh.js";import{n as B,r as x}from"./PremiumShell-B_wt6ND8.js";var d=D(F(),1),e=E();function J({user:O,profile:b}){const p=U(),{t:s}=T(),[i,g]=(0,d.useState)([]),[N,o]=(0,d.useState)(!0),[a,w]=(0,d.useState)("all"),[m,y]=(0,d.useState)("7");(0,d.useEffect)(()=>{const t=p?.tenantId;if(!t){o(!1);return}o(!0);const r=new Date;return r.setDate(r.getDate()-parseInt(m)),V(C(H(M,k.auditLog),R("tenantId","==",t),I("timestamp","desc"),q(500)),f=>{g(f.docs.map(l=>({id:l.id,...l.data()})).filter(l=>{const j=l.timestamp?.toDate?l.timestamp.toDate():null;return j&&j>=r}).slice(0,200)),o(!1)},f=>{o(!1)})},[m,p?.tenantId]);const n=a==="all"?i:i.filter(t=>t.eventType===a),z=t=>{switch(t){case"form_submitted":return"Send";case"recipe_viewed":return"BookOpen";case"email_sent":return"Mail";default:return"Activity"}},S=t=>{switch(t){case"form_submitted":return"text-green-400 bg-green-500/20";case"recipe_viewed":return"text-blue-400 bg-blue-500/20";case"email_sent":return"text-purple-400 bg-purple-500/20";default:return"text-zinc-400 bg-zinc-500/20"}},v=t=>(typeof t=="string"&&t.length?t:"unknown_event").replace(/_/g," ").replace(/\b\w/g,r=>r.toUpperCase()),h=t=>typeof t=="string"&&t.length?t:"unknown_event",u={total:i.length,forms:i.filter(t=>t.eventType==="form_submitted").length,recipes:i.filter(t=>t.eventType==="recipe_viewed").length,uniqueUsers:[...new Set(i.map(t=>t.userName))].length};if(N)return(0,e.jsx)("div",{className:"flex items-center justify-center h-64",children:(0,e.jsx)(A,{size:"lg"})});if(!p?.tenantId)return(0,e.jsx)("div",{className:"flex items-center justify-center py-20 text-zinc-400",children:s("common.loading")});const _=String(b?.role||"").toLowerCase();return["owner","admin","super_admin"].includes(_)?(0,e.jsxs)("div",{className:"space-y-6 stagger-children",children:[(0,e.jsx)(B,{icon:"ScrollText",eyebrow:s("audit.shellEyebrow"),title:s("audit.shellTitle"),description:s("audit.shellDescription"),chips:[{label:s("audit.visibleEventsChip",{count:n.length}),icon:"Activity"},{label:s("audit.dayWindowChip",{days:m}),icon:"CalendarDays",tone:"info"},{label:a==="all"?s("audit.allEvents"):v(a),icon:"Filter",tone:"warning"}],action:(0,e.jsxs)("button",{onClick:()=>L(n.map(t=>({Date:t.timestamp?.toDate?.().toLocaleDateString()||"",User:t.userName||"",Action:h(t.eventType).replace(/_/g," ").toUpperCase(),Module:t.module||"",Details:t.details||""})),"audit-log.csv"),className:"inline-flex items-center gap-2 rounded-2xl border border-zinc-200 bg-white/90 px-3 py-2 text-sm font-semibold text-zinc-700 shadow-sm hover:border-zinc-300 hover:text-zinc-900",children:[(0,e.jsx)(c,{name:"Download",size:14})," ",s("audit.export")]})}),(0,e.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4",children:[(0,e.jsx)(x,{label:s("audit.totalEvents"),value:u.total,helper:s("audit.statHelper.totalEvents"),icon:"Activity"}),(0,e.jsx)(x,{label:s("audit.formsSubmitted"),value:u.forms,helper:s("audit.statHelper.formsSubmitted"),tone:"success",icon:"Send"}),(0,e.jsx)(x,{label:s("audit.recipesViewed"),value:u.recipes,helper:s("audit.statHelper.recipesViewed"),tone:"info",icon:"BookOpen"}),(0,e.jsx)(x,{label:s("audit.activeUsers"),value:u.uniqueUsers,helper:s("audit.statHelper.activeUsers"),tone:"warning",icon:"Users"})]}),(0,e.jsx)("div",{className:"rounded-[24px] border border-zinc-200 bg-white/95 p-4 shadow-sm",children:(0,e.jsxs)("div",{className:"flex items-center gap-4",children:[(0,e.jsxs)("div",{children:[(0,e.jsx)("label",{className:"text-sm text-zinc-400 mr-2",children:s("audit.eventType")}),(0,e.jsxs)("select",{value:a,onChange:t=>w(t.target.value),className:"px-3 py-2 bg-white border border-zinc-200 rounded-lg text-zinc-900 text-sm",children:[(0,e.jsx)("option",{value:"all",children:s("audit.allEvents")}),(0,e.jsx)("option",{value:"form_submitted",children:s("audit.formSubmissions")}),(0,e.jsx)("option",{value:"recipe_viewed",children:s("audit.recipeViews")})]})]}),(0,e.jsxs)("div",{children:[(0,e.jsx)("label",{className:"text-sm text-zinc-400 mr-2",children:s("audit.timeRange")}),(0,e.jsxs)("select",{value:m,onChange:t=>y(t.target.value),className:"px-3 py-2 bg-white border border-zinc-200 rounded-lg text-zinc-900 text-sm",children:[(0,e.jsx)("option",{value:"1",children:s("audit.last24h")}),(0,e.jsx)("option",{value:"7",children:s("audit.last7d")}),(0,e.jsx)("option",{value:"30",children:s("audit.last30d")}),(0,e.jsx)("option",{value:"90",children:s("audit.last90d")})]})]}),(0,e.jsx)("div",{className:"ml-auto text-sm text-zinc-500",children:s("audit.showingEvents",{count:n.length})})]})}),(0,e.jsxs)("div",{className:"card overflow-hidden",children:[(0,e.jsx)("div",{className:"px-4 py-3 border-b border-zinc-800 bg-zinc-800/50",children:(0,e.jsxs)("h3",{className:"font-semibold text-white flex items-center gap-2",children:[(0,e.jsx)(c,{name:"FileText",size:18,className:"text-brand-500"}),s("audit.activityLog")]})}),n.length===0?(0,e.jsxs)("div",{className:"p-8 text-center",children:[(0,e.jsx)("div",{className:"w-16 h-16 bg-zinc-800 rounded-full flex items-center justify-center mx-auto mb-4",children:(0,e.jsx)(c,{name:"FileText",size:32,className:"text-zinc-600"})}),(0,e.jsx)("p",{className:"text-zinc-400",children:s("audit.noActivity")})]}):(0,e.jsx)("div",{className:"divide-y divide-zinc-800 max-h-[500px] overflow-y-auto",children:n.map(t=>(0,e.jsx)("div",{className:"p-4 hover:bg-zinc-800/30 transition-colors",children:(0,e.jsxs)("div",{className:"flex items-start gap-4",children:[(0,e.jsx)("div",{className:`w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 ${S(h(t.eventType))}`,children:(0,e.jsx)(c,{name:z(h(t.eventType)),size:20})}),(0,e.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,e.jsxs)("div",{className:"flex items-center justify-between mb-1",children:[(0,e.jsx)("p",{className:"text-white font-medium",children:v(t.eventType)}),(0,e.jsx)("span",{className:"text-zinc-500 text-xs",children:t.timestamp?.toDate?.().toLocaleStr
1ing()||s("audit.unknownTime")})]}),(0,e.jsxs)("p",{className:"text-zinc-400 text-sm",children:[(0,e.jsx)("span",{className:"text-brand-400",children:t.userName})," • ",(0,e.jsx)("span",{className:"text-zinc-500",children:t.store})]}),t.details&&(0,e.jsxs)("div",{className:"mt-2 p-2 bg-zinc-800/50 rounded-lg text-xs text-zinc-400",children:[t.details.formName&&(0,e.jsxs)("p",{children:[s("audit.detail.form")," ",(0,e.jsx)("span",{className:"text-white",children:t.details.formName})]}),t.details.recipeName&&(0,e.jsxs)("p",{children:[s("audit.detail.recipe")," ",(0,e.jsx)("span",{className:"text-white",children:t.details.recipeName})]}),t.details.category&&(0,e.jsxs)("p",{children:[s("audit.detail.category")," ",(0,e.jsx)("span",{className:"text-white",children:t.details.category})]})]})]})]})},t.id))})]})]}):(0,e.jsx)("div",{className:"flex items-center justify-center min-h-[40vh]",children:(0,e.jsxs)("div",{className:"text-center",children:[(0,e.jsx)(c,{name:"ShieldAlert",size:48,className:"mx-auto mb-4 text-red-400"}),(0,e.jsx)("h2",{className:"text-lg font-semibold text-white mb-2",children:s("audit.accessDenied")}),(0,e.jsx)("p",{className:"text-zinc-400 text-sm",children:s("audit.accessRestricted")})]})})}export{J 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.