PageSourceSearch

https://atlas-os-5me.pages.dev/assets/Employees-CUrXiZkV.js

js atlas-os-5me.pages.dev collected 2026-10-03 06:30:38 UTC 16,153 bytes, 10 lines download raw bytes

1import{r as n,j as e}from"./vendor-react-C1xBbV_L.js";import{u as re}from"./usePageShortcuts-Bj4_agQ8.js";import{u as le}from"./useDebounce-BZyI_rbL.js";import{s as v,C as P,i as K,j as ne,I as te,S as X,B as ie,u as oe,l as H,P as de}from"./index-DrAtO7mt.js";import{L as ce}from"./Layout-3R38yiVd.js";import{P as me}from"./PageEntranceWrapper-BDgP2lq6.js";import{u as ue}from"./useInstantPageRevisit-BdD7qqbh.js";import{B}from"./badge-oWecoZIt.js";import{T as xe,a as pe,b as Z,c as ee}from"./tabs-B5Flo5RK.js";import{T as he,a as fe,b as V,c as q,d as _e,e as A}from"./table-BL2OtIA6.js";import{A as Y,a as se,b as z}from"./avatar-ulQHEkdi.js";import{S as ge}from"./scroll-area-CqQJSU1k.js";import{Y as W,aG as ve,Q as ye,bR as be,c as je,R as Ne,M as G}from"./vendor-icons-BbTy924M.js";import"./vendor-supabase-T83oUHRJ.js";import"./vendor-date-Cgt1Dbyl.js";import"./vite-preload-helper-ckwbz45p.js";import"./vendor-radix-9vIHDKv1.js";import"./vendor-classutils-D19diF5V.js";import"./vendor-query-BE8yb7a_.js";import"./currentEmployee-C9036_7s.js";import"./keyboardShortcuts-CI_Ufw4u.js";import"./useHotkeys-Dl2xjd8w.js";import"./separator-zw99XIYP.js";import"./desktopNotification-B0z-sl3H.js";import"./taskTruth-DCHw4AdJ.js";import"./dropdown-menu-B6DKRztf.js";import"./popover-BPgpAZdR.js";import"./vendor-animation-DBgHXd4L.js";import"./referenceNavigation-CndzatF9.js";import"./AgentAvatar-CvhgNdRs.js";import"./constants-Bk_PJ7xw.js";import"./useFloatingWidgetVisibility-BtWACT_B.js";import"./useAnimationTier-D3L8G5OV.js";const we=()=>null,ae=S=>{const i=S.trim().split(" ");return i.length===1?i[0].substring(0,2).toUpperCase():(i[0][0]+i[i.length-1][0]).toUpperCase()},ke=()=>{const[S,i]=n.useState([]),[r,T]=n.useState(null),[E,M]=n.useState([]),[U,y]=n.useState(!0),[R,j]=n.useState(!1),[_,D]=n.useState(""),[N,F]=n.useState("Chief"),[a,m]=n.useState(null),g=n.useRef(null);n.useEffect(()=>{h(),L()},[]),n.useEffect(()=>{r&&O(r.id)},[r]);const L=async()=>{const{data:t}=await v.from("hr_employee_details").select("user_id, user_profiles:user_id(full_name, profile_picture_url)").eq("hr_permission_level","chief").eq("is_active",!0).limit(1).maybeSingle();if(t){const o=t.user_profiles;o&&(F(o.full_name||"Chief"),m(o.profile_picture_url||null))}},h=async()=>{y(!0);const{data:t,error:o}=await v.from("hr_employee_details").select(`
2        id,
3        profile_photo_url,
4        status,
5        user_profiles:user_id(full_name),
6        department:department_id(department_name),
7        job_roles:hr_employee_job_roles(
8          job_role:job_role_id(role_name)
9        )
10      `).eq("is_active",!0).order("created_at",{ascending:!0});if(o){y(!1);return}const{data:$}=await v.from("tasks").select("assigned_to, status"),d={};($||[]).forEach(l=>{const u=typeof l.assigned_to=="string"?l.assigned_to:null;u&&(d[u]||(d[u]={pending:0,in_progress:0,completed:0}),l.status==="open"||l.status==="blocked"?d[u].pending++:l.status==="in_progress"?d[u].in_progress++:l.status==="completed"&&d[u].completed++)});const w=(t||[]).map(l=>{var u,k,C,I,f,s,c,b;return{id:l.id,full_name:((u=l.user_profiles)==null?void 0:u.full_name)||"Unknown",department_name:((k=l.department)==null?void 0:k.department_name)||null,role_name:((f=(I=(C=l.job_roles)==null?void 0:C[0])==null?void 0:I.job_role)==null?void 0:f.role_name)||null,profile_photo_url:l.profile_photo_url,status:l.status,pending_tasks:((s=d[l.id])==null?void 0:s.pending)||0,in_progress_tasks:((c=d[l.id])==null?void 0:c.in_progress)||0,completed_tasks:((b=d[l.id])==null?void 0:b.completed)||0}});i(w),y(!1)},O=async t=>{j(!0);const{data:o,error:$}=await v.from("tasks").select("id, title, description, priority, status, due_date, due_time, actual_hours, created_at, completed_at, created_by").eq("assigned_to",t).order("created_at",{ascending:!0});if($||!o){j(!1);return}const d=o,w=d.map(s=>s.id),l=[...new Set(d.map(s=>s.created_by).filter(Boolean))],[{data:u},{data:k},{data:C}]=await Promise.all([l.length>0?v.from("hr_employee_details").select("id, user_profiles:user_id(full_name)").in("id",l):Promise.resolve({data:[]}),w.length>0?v.from("task_history").select("task_id, field_changed, old_value, new_value, changed_at").in("task_id",w):Promise.resolve({data:[]}),w.length>0?v.from("task_comments").select("task_id, comment_text, created_at").in("task_id",w):Promise.resolve({data:[]})]),I=new Map;
10(u||[]).forEach(s=>{var c;I.set(String(s.id),String(((c=s.user_profiles)==null?void 0:c.full_name)||N))});const f=[];d.forEach(s=>{const c=s.created_by&&I.get(s.created_by)||N;f.push({id:`${s.id}-assigned`,type:"assigned",task_title:s.title,task_description:s.description,priority:s.priority,status:s.status,due_date:s.due_date,due_time:s.due_time,created_by_name:c,assigned_names:[],timestamp:s.created_at});const b=k==null?void 0:k.find(x=>x.task_id===s.id&&x.field_changed==="status"&&x.new_value==="in_progress");(b||s.status==="in_progress")&&f.push({id:`${s.id}-started`,type:"started",task_title:s.title,priority:s.priority,status:s.status,created_by_name:c,assigned_names:[],timestamp:(b==null?void 0:b.changed_at)||s.created_at}),s.status==="completed"&&s.completed_at&&f.push({id:`${s.id}-completed`,type:"completed",task_title:s.title,priority:s.priority,status:s.status,actual_hours:s.actual_hours,created_by_name:c,assigned_names:[],timestamp:s.completed_at});const Q=C==null?void 0:C.find(x=>x.task_id===s.id&&x.comment_text.startsWith("Quality review ("));if(Q){const x=Q.comment_text.match(/Quality review \((\d)\/5\):\s*(.*)/);f.push({id:`${s.id}-reviewed`,type:"reviewed",task_title:s.title,priority:s.priority,status:s.status,quality_score:x?Number(x[1]):null,review_notes:x?x[2]:Q.comment_text,created_by_name:c,assigned_names:[],timestamp:Q.created_at})}}),f.sort((s,c)=>new Date(s.timestamp).getTime()-new Date(c.timestamp).getTime()),M(f),j(!1),setTimeout(()=>{g.current&&(g.current.scrollTop=g.current.scrollHeight)},100)},J=S.filter(t=>t.full_name.toLowerCase().includes(_.toLowerCase())||(t.department_name||"").toLowerCase().includes(_.toLowerCase())||(t.role_name||"").toLowerCase().includes(_.toLowerCase()));return r&&r.pending_tasks+r.in_progress_tasks+r.completed_tasks,e.jsxs("div",{className:"flex h-[calc(100vh-180px)] gap-4",children:[e.jsxs(P,{className:"w-80 flex-shrink-0 flex flex-col border-navy-200 dark:border-navy-700 shadow-card",children:[e.jsxs(K,{className:"pb-3 border-b",children:[e.jsxs(ne,{className:"flex items-center gap-2 text-navy-900 dark:text-white",children:[e.jsx(W,{className:"h-4 w-4 text-amber-500"}),"Team Members"]}),e.jsxs("div",{className:"relative mt-2",children:[e.jsx(ve,{className:"absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx(te,{placeholder:"Search employees...",value:_,onChange:t=>D(t.target.value),className:"pl-8 h-9"})]})]}),e.jsx(ge,{className:"flex-1",children:e.jsx("div",{className:"p-2",children:U?Array.from({length:5}).map((t,o)=>e.jsx(X,{className:"h-16 w-full mb-2 rounded-lg"},o)):J.length===0?e.jsx("div",{className:"py-8 text-sm",children:" No employees found "}):J.map(t=>e.jsxs("button",{onClick:()=>T(t),className:`w-full flex items-center gap-3 p-2.5 rounded-lg transition-all text-left mb-1 ${(r==null?void 0:r.id)===t.id?"bg-amber-50 border dark:border-amber-500/30 shadow-sm":"hover:bg-navy-50 dark:bg-navy-800 dark:hover:bg-navy-700/50 border border-transparent"}`,children:[" ",e.jsxs(Y,{className:"focus-visible:ring-primary/50 focus-visible:outline-none h-10 w-10 flex-shrink-0",children:[e.jsx(se,{src:t.profile_photo_url||void 0}),e.jsx(z,{className:"bg-gradient-to-br from-navy-400 to-navy-600 text-xs font-bold",children:ae(t.full_name)})]}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"font-medium text-navy-900 dark:text-white truncate",children:t.full_name}),e.jsx("p",{className:"text-muted-foreground truncate",children:t.role_name||t.department_name||"Team Member"})]}),e.jsxs("div",{className:"flex flex-col items-end gap-0.5 flex-shrink-0",children:[t.pending_tasks>0&&e.jsx(B,{className:"bg-amber-100 text-[10px] px-1.5 py-0 h-4",children:t.pending_tasks}),t.in_progress_tasks>0&&e.jsx(B,{className:"bg-navy-100 dark:bg-navy-900/30 dark:text-navy-400 text-[10px] px-1.5 py-0 h-4",children:t.in_progress_tasks})]})]},t.id))})})]}),e.jsx(P,{className:"flex-1 flex flex-col border-navy-200 dark:border-navy-700 shadow-card",children:r?e.jsxs(e.Fragment,{children:[e.jsxs(K,{className:"pb-3 border-b flex flex-row items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(Y,{className:"h-10 w-10",children:[e.jsx(se,{src:r.profile_photo_url||void 0}),e.jsx(z,{className:"bg-gradient-to-br from-navy-400 to-navy-600 text-sm font-bold",children:ae(r.full_name)})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"font-semibold text-navy-900 dark:text-white",children:r.full_name}),e.jsx("p",{className:"text-muted-foreground",children:r.role_name||r.department_name||"Team Member"})]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsxs("span",{className:"flex items-center gap-1 text-amber-600",children:[e.jsx(ye,{className:"h-3.5 w-3.5"}),r.pending_tasks]}),e.jsxs("span",{className:"flex items-center gap-1 text-navy-600 dark:text-navy-400",children:[e.jsx(be,{className:"h-3.5 w-3.5"}),r.in_progress_tasks]}),e.jsxs("span",{className:"flex items-center gap-1 text-emerald-600",children:[e.jsx(je,{className:"h-3.5 w-3.5"}),r.completed_tasks]})]}),e.jsx(ie,{variant:"ghost",size:"sm",onClick:()=>O(r.id),children:e.jsx(Ne,{className:`h-4 w-4 ${R?"animate-spin":""}`})})]})]}),e.jsx("div",{ref:g,className:"flex-1 overflow-y-auto p-4 bg-gradient-to-b from-navy-50/30 to-white dark:from-navy-800/30 dark:to-navy-900",children:R?e.jsx("div",{className:"space-y-4",children:Array.from({length:3}).map((t,o)=>e.jsx(X,{className:"h-24 w-3/4"},o))}):E.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-muted-foreground",children:[e.jsx(G,{className:"h-16 w-16 mb-4 text-navy-200"}),e.jsx("p",{className:"font-medium text-navy-500",children:"No tasks assigned yet"}),e.jsxs("p",{className:"text-navy-400 mt-1",children:["Tasks assigned to ",r.full_name," will appear here"]})]}):e.jsx("div",{className:"space-y-4",children:E.map(t=>e.jsx(we,{event:t,chiefName:N,chiefPhotoUrl:a,employeeName:r.full_name},t.id))})})]}):e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-muted-foreground",children:[e.jsx("div",{className:"w-20 h-20 rounded-full bg-amber-50 dark:bg-amber-500/10 flex items-center justify-center mb-4",children:e.jsx(G,{className:"h-10 w-10 text-amber-300"})}),e.jsx("p",{className:"font-medium text-lg",children:"Select a team member"}),e.jsx("p",{className:"text-navy-400 mt-1",children:"Click on an employee to see their task conversation"})]})})]})};let p=null;const ls=()=>{const S=ue("employees-page"),[i,r]=n.useState(()=>(p==null?void 0:p.employees)??[]),[T,E]=n.useState(()=>p===null),[M,U]=n.useState(""),y=le(M,300),[R,j]=n.useState("team");n.useEffect(()=>{_({silent:p!==null})},[]);const _=async({silent:a=!1}={})=>{(!a||p===null)&&E(!0);const{data:m,error:g}=await v.from("hr_employee_details").select("id, full_name, email, phone_number, department, designation, is_active, created_at").order("full_name");g&&oe.error("Failed to load employees");const L=(m||[]).map(h=>({id:String(h.id??""),full_name:String(h.full_name??""),email:String(h.email??""),phone:h.phone_number??null,role:String(h.designation??""),department:h.department??null,is_active:h.is_active!==!1,created_at:String(h.created_at??"")}));r(L),E(!1)};n.useEffect(()=>{T||(p={employees:i,loadedAt:Date.now()})},[i,T]),n.useEffect(()=>{if(typeof document>"u")return;let a=0;const m=()=>{if(document.visibilityState==="hidden"){a=Date.now();return}const g=a?Date.now()-a:0,L=p!=null&&p.loadedAt?Date.now()-p.loadedAt:Number.POSITIVE_INFINITY;(g>=6e4||L>=6e4)&&_({silent:!0})};return document.addEventListener("visibilitychange",m),()=>document.removeEventListener("visibilitychange",m)},[]);const D=i.filter(a=>{var m;return a.full_name.toLowerCase().includes(y.toLowerCase())||a.email.toLowerCase().includes(y.toLowerCase())||((m=a.department)==null?void 0:m.toLowerCase().includes(y.toLowerCase()))}),N=i.filter(a=>a.is_active).length,F=["team","tasks"];return re({onFilter:()=>{var a;return(a=document.querySelector('input[placeholder*="Search"]'))==null?void 0:a.focus()},onRefresh:_,onTabSwitch:a=>{a<F.length&&j(F[a])}}),e.jsx(ce,{children:e.jsxs(me,{disabled:!S,className:"px-4 sm:px-6 py-4 space-y-4 dark:bg-navy-900",children:[e.jsx("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 bg-navy-100 dark:bg-navy-700/40 rounded-lg",children:e.jsx(W,{className:"h-6 w-6 text-navy-600 dark:text-navy-400"})}),e.jsx("h1",{className:"text-2xl font-bold text-navy-900 dark:text-white",children:"Team Directory"})]}),e.jsx("p",{className:"text-navy-500 dark:text-navy-400 mt-1 ml-12",children:"Your team roster. To add or edit an employee, use HR onboarding."})]})}),e.jsxs(xe,{value:R,onValueChange:j,children:[e.jsxs(pe,{className:"bg-navy-50 dark:bg-navy-800",children:[e.jsxs(Z,{value:"team",className:"flex items-center gap-2",children:[e.jsx(W,{className:"h-4 w-4"}),"Team List"]}),e.jsxs(Z,{value:"tasks",className:"flex items-center gap-2",children:[e.jsx(G,{className:"h-4 w-4"}),"Task Chat"]})]}
10),e.jsxs(ee,{value:"team",className:"space-y-4 mt-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 max-w-md",children:[e.jsx(P,{className:"border-navy-200 dark:border-navy-700 shadow-card",children:e.jsxs(H,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-navy-500 dark:text-navy-400",children:"Total Employees"}),e.jsx("p",{className:"text-3xl font-bold tabular-nums",children:i.length})]})}),e.jsx(P,{className:"border-navy-200 dark:border-navy-700 shadow-card",children:e.jsxs(H,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-navy-500 dark:text-navy-400",children:"Active"}),e.jsx("p",{className:"text-3xl font-bold text-emerald-600 tabular-nums",children:N})]})})]}),e.jsx(te,{placeholder:"Search employees...",value:M,onChange:a=>U(a.target.value),className:"max-w-md"}),e.jsx(P,{className:"border-navy-200 dark:border-navy-700 shadow-card",children:e.jsx(H,{className:"p-0",children:T?e.jsx(de,{variant:"table",rows:5}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(he,{children:[e.jsx(fe,{children:e.jsxs(V,{className:"bg-navy-50 dark:bg-navy-800",children:[e.jsx(q,{className:"text-navy-900 dark:text-white font-semibold",children:"Employee"}),e.jsx(q,{className:"text-navy-900 dark:text-white font-semibold",children:"Role"}),e.jsx(q,{className:"text-navy-900 dark:text-white font-semibold",children:"Department"}),e.jsx(q,{className:"text-navy-900 dark:text-white font-semibold",children:"Status"})]})}),e.jsxs(_e,{children:[D.map(a=>e.jsxs(V,{children:[e.jsx(A,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Y,{className:"h-10 w-10",children:e.jsx(z,{className:"bg-navy-100 text-navy-600 dark:bg-navy-700 dark:text-navy-300",children:a.full_name.split(" ").map(m=>m[0]).join("")})}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:a.full_name}),e.jsx("p",{className:"text-sm text-navy-500 dark:text-navy-400",children:a.email})]})]})}),e.jsx(A,{children:a.role?e.jsx(B,{variant:"outline",className:"capitalize",children:a.role}):e.jsx("span",{className:"text-navy-400",children:"—"})}),e.jsx(A,{children:a.department||"-"}),e.jsx(A,{children:e.jsx(B,{className:a.is_active?"bg-emerald-100 text-emerald-700":"bg-navy-100 dark:bg-navy-700 text-navy-700 dark:text-navy-300",children:a.is_active?"Active":"Inactive"})})]},a.id)),D.length===0&&e.jsx(V,{children:e.jsx(A,{colSpan:4,className:"text-center py-8 text-navy-500",children:"No employees found"})})]})]})})})})]}),e.jsx(ee,{value:"tasks",className:"mt-4",children:e.jsx(ke,{})})]})]})})};export{ls 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.