2 lines
9.4 KiB
JavaScript
2 lines
9.4 KiB
JavaScript
import{aO as M,r as w,c as f,bm as x,bn as L,bo as N,bp as Y,bq as G,b0 as z}from"./index-BUdRbiwj.js";const n={ASSET:"asset-categories",WORK_ORDER:"work-order-categories",PART:"part-categories",COST:"cost-categories",METER:"meter-categories",PURCHASE_ORDER:"purchase-order-categories"},V={[n.ASSET]:"Asset Categories",[n.WORK_ORDER]:"Work Order Categories",[n.PART]:"Parts Categories",[n.COST]:"Cost Categories",[n.METER]:"Meter Categories",[n.PURCHASE_ORDER]:"Purchase Order Categories"},Z={[n.ASSET]:"Organize assets by type, location, or function",[n.WORK_ORDER]:"Classify work orders by maintenance type or urgency",[n.PART]:"Group spare parts and inventory items",[n.COST]:"Track and analyze maintenance costs by category",[n.METER]:"Organize different meter types and readings",[n.PURCHASE_ORDER]:"Classify purchase orders by vendor or department"},W={id:null,name:"",description:"",type:"",color:"#6B7280",icon:"folder",isActive:!0,sortOrder:0,createdAt:null,updatedAt:null,createdBy:null,updatedBy:null},j={name:{minLength:2,maxLength:100,pattern:/^[a-zA-Z0-9\s\-_()]+$/},description:{maxLength:500},color:{pattern:/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/},sortOrder:{min:0,max:9999}},J=["#EF4444","#F97316","#F59E0B","#EAB308","#84CC16","#22C55E","#10B981","#06B6D4","#0EA5E9","#3B82F6","#6366F1","#8B5CF6","#A855F7","#D946EF","#EC4899","#F43F5E","#6B7280","#374151"],Q=["folder","folder-open","tag","bookmark","star","heart","home","building","cog","wrench","hammer","truck","clipboard","document","chart","calculator","package","shopping-cart","dollar-sign","credit-card","users","user","calendar","clock","bell","shield","lock","key","mail","phone","map-pin","globe","server","database","cpu","hard-drive","wifi","bluetooth"],U={ACTIVE:"active",INACTIVE:"inactive"},P={[U.ACTIVE]:"Active",[U.INACTIVE]:"Inactive"},H=[{label:"Name (A-Z)",value:"name_asc"},{label:"Name (Z-A)",value:"name_desc"},{label:"Created Date (Newest)",value:"created_desc"},{label:"Created Date (Oldest)",value:"created_asc"},{label:"Sort Order",value:"sort_order_asc"},{label:"Most Used",value:"usage_desc"}],K={[n.ASSET]:[{name:"HVAC Systems",color:"#3B82F6",icon:"wind"},{name:"Electrical",color:"#F59E0B",icon:"zap"},{name:"Plumbing",color:"#06B6D4",icon:"droplet"},{name:"Mechanical",color:"#6B7280",icon:"cog"},{name:"Safety Equipment",color:"#EF4444",icon:"shield"}],[n.WORK_ORDER]:[{name:"Preventive Maintenance",color:"#22C55E",icon:"calendar"},{name:"Corrective Maintenance",color:"#F97316",icon:"wrench"},{name:"Emergency Repair",color:"#EF4444",icon:"alert-triangle"},{name:"Inspection",color:"#8B5CF6",icon:"search"},{name:"Installation",color:"#10B981",icon:"plus-circle"}],[n.PART]:[{name:"Electrical Components",color:"#F59E0B",icon:"zap"},{name:"Mechanical Parts",color:"#6B7280",icon:"cog"},{name:"Filters",color:"#06B6D4",icon:"filter"},{name:"Fasteners",color:"#84CC16",icon:"link"},{name:"Consumables",color:"#A855F7",icon:"package"}],[n.COST]:[{name:"Labor",color:"#3B82F6",icon:"users"},{name:"Materials",color:"#22C55E",icon:"package"},{name:"Equipment",color:"#F97316",icon:"truck"},{name:"Contractors",color:"#8B5CF6",icon:"briefcase"},{name:"Utilities",color:"#06B6D4",icon:"zap"}]},X=M("categories",()=>{const s=w(new Map),l=w(!1),c=w(null),h=w(new Map),C=e=>{switch(e){case n.WORK_ORDER:return z;case n.ASSET:return G;case n.PART:return Y;case n.COST:return N;case n.METER:return L;case n.PURCHASE_ORDER:return x;default:throw new Error(`Unknown category type: ${e}`)}},A=f(()=>e=>s.value.get(e)||[]),F=f(()=>e=>(s.value.get(e)||[]).filter(a=>a.isActive)),D=f(()=>(e,r)=>(s.value.get(e)||[]).find(o=>o.id===r)),k=f(()=>e=>F.value(e).sort((a,o)=>a.sortOrder-o.sortOrder||a.name.localeCompare(o.name)).map(a=>({label:a.name,value:a.id,color:a.color,icon:a.icon}))),_=f(()=>e=>{const r=s.value.get(e)||[];return{total:r.length,active:r.filter(a=>a.isActive).length,inactive:r.filter(a=>!a.isActive).length}}),B=f(()=>e=>l.value),T=f(()=>e=>s.value.has(e)&&s.value.get(e).length>0),b=async(e,r=!1)=>{const a=e,o=Date.now(),u=h.value.get(a),y=5*60*1e3;if(!(!r&&u&&o-u<y)){l.value=!0,c.value=null;try{const E=await C(e).getAll();s.value.set(e,E),h.value.set(a,o)}catch(g){throw c.value=g.message,console.error(`Failed to fetch ${e} categories:`,g),g}finally{l.value=!1}}},I=async(e,r)=>{l.value=!0,c.value=null;try{const o=await C(e).create(r),u=s.value.get(e)||[];return s.value.set(e,[...u,o]),o}catch(a){throw c.value=a.message,console.error(`Failed to create ${e} category:`,a),a}finally{l.value=!1}},t=async(e,r,a)=>{l.value=!0,c.value=null;try{const u=await C(e).update(r,a),y=s.value.get(e)||[],g=y.findIndex(E=>E.id===r);return g!==-1&&(y[g]=u,s.value.set(e,[...y])),u}catch(o){throw c.value=o.message,console.error(`Failed to update ${e} category:`,o),o}finally{l.value=!1}},i=async(e,r)=>{l.value=!0,c.value=null;try{await C(e).delete(r);const o=s.value.get(e)||[];s.value.set(e,o.filter(u=>u.id!==r))}catch(a){throw c.value=a.message,console.error(`Failed to delete ${e} category:`,a),a}finally{l.value=!1}},m=async(e,r={})=>{l.value=!0,c.value=null;try{const o=await C(e).getByFilters(r);return s.value.set(e,o),o}catch(a){throw c.value=a.message,console.error(`Failed to search ${e} categories:`,a),a}finally{l.value=!1}},v=async(e,r)=>{l.value=!0,c.value=null;try{const o=await C(e).updateSortOrders(r);return s.value.set(e,o),o}catch(a){throw c.value=a.message,console.error(`Failed to bulk update ${e} category sort orders:`,a),a}finally{l.value=!1}},p=async e=>{l.value=!0,c.value=null;try{await b(e);const r=s.value.get(e)||[];if(r.length>0)return console.log(`Categories for ${e} already exist, skipping default initialization`),r;const a=K[e]||[],o=C(e),u=[];for(let y=0;y<a.length;y++){const g=a[y],E={...W,name:g.name,type:e,color:g.color,icon:g.icon,sortOrder:y,isActive:!0},$=await o.create(E);u.push($)}return s.value.set(e,u),console.log(`Created ${u.length} default categories for ${e}`),u}catch(r){throw c.value=r.message,console.error(`Failed to initialize default categories for ${e}:`,r),r}finally{l.value=!1}},O=async e=>await b(e,!0),R=e=>{e?(s.value.delete(e),h.value.delete(e)):(s.value.clear(),h.value.clear())},S=()=>{c.value=null},d=async(e=Object.values(n),r=!1)=>{const a=e.map(o=>b(o,r));await Promise.allSettled(a)};return{categories:f(()=>s.value),loading:f(()=>l.value),error:f(()=>c.value),getCategoriesByType:A,getActiveCategoriesByType:F,getCategoryById:D,getCategoryOptions:k,getCategoryStats:_,isLoading:B,hasCategories:T,fetchCategories:b,createCategory:I,updateCategory:t,deleteCategory:i,searchCategories:m,bulkUpdateSortOrder:v,initializeWithDefaults:p,refreshCategories:O,clearCache:R,clearError:S,fetchAllCategories:d}});function ee(){const s=t=>t?P.active:P.inactive,l=t=>t?"success":"secondary",c=t=>t===0?"secondary":t<=5?"warning":t<=20?"info":"success",h=t=>V[t]||t,C=t=>t?t.startsWith("#")?t:`#${t}`:"#6B7280",A=t=>{if(!t)return"#FFFFFF";const i=t.replace("#",""),m=parseInt(i.substr(0,2),16),v=parseInt(i.substr(2,2),16),p=parseInt(i.substr(4,2),16);return(.299*m+.587*v+.114*p)/255>.5?"#000000":"#FFFFFF"};return{formatCategoryStatus:s,formatCategoryType:h,formatCategoryColor:C,formatCategoryIcon:t=>t?t.toLowerCase().replace(/_/g,"-"):"folder",formatCategoryDate:t=>{if(!t)return"N/A";const i=new Date(t),v=(new Date-i)/(1e3*60*60);return v<24?"Today":v<48?"Yesterday":v<168?`${Math.floor(v/24)} days ago`:i.toLocaleDateString()},getCategoryStatusVariant:l,getCategoryUsageVariant:c,getContrastTextColor:A,getCategoryStyles:t=>{const i=C(t.color);return{backgroundColor:i,color:A(i),border:`1px solid ${i}`,borderRadius:"6px",padding:"4px 8px"}},getCategoryStats:t=>{if(!t||t.length===0)return{total:0,active:0,inactive:0,recentlyCreated:0,mostUsed:null,leastUsed:null};const i=t.length,m=t.filter(d=>d.isActive).length,v=i-m,p=new Date;p.setDate(p.getDate()-30);const O=t.filter(d=>d.createdAt&&new Date(d.createdAt)>=p).length;let R=null,S=null;if(t.some(d=>d.usageCount!==void 0)){const d=t.filter(e=>e.isActive);R=d.reduce((e,r)=>(r.usageCount||0)>(e.usageCount||0)?r:e,d[0]),S=d.reduce((e,r)=>(r.usageCount||0)<(e.usageCount||0)?r:e,d[0])}return{total:i,active:m,inactive:v,recentlyCreated:O,mostUsed:R,leastUsed:S}},formatCategoryStatsForDisplay:(t,i)=>[{label:"Total Categories",value:t.total,change:t.recentlyCreated>0?`+${t.recentlyCreated} this month`:null,trend:t.recentlyCreated>0?"up":"neutral",icon:"folder"},{label:"Active",value:t.active,sublabel:t.total>0?`${Math.round(t.active/t.total*100)}% of total`:"0%",trend:"neutral",icon:"check-circle"},{label:"Inactive",value:t.inactive,sublabel:t.total>0?`${Math.round(t.inactive/t.total*100)}% of total`:"0%",trend:"neutral",icon:"x-circle"},{label:"Most Used",value:t.mostUsed?t.mostUsed.name:"N/A",sublabel:t.mostUsed?`${t.mostUsed.usageCount||0} uses`:"No usage data",trend:"neutral",icon:"trending-up"}],getCategoryTableColumns:(t=!1)=>t?[{key:"name",label:"Category",sortable:!0,width:"60%"},{key:"status",label:"Status",sortable:!0,width:"25%"},{key:"actions",label:"Actions",sortable:!1,width:"15%"}]:[{key:"name",label:"Name",sortable:!0,width:"25%"},{key:"description",label:"Description",sortable:!1,width:"30%"},{key:"appearance",label:"Appearance",sortable:!1,width:"15%"},{key:"status",label:"Status",sortable:!0,width:"10%"},{key:"sortOrder",label:"Order",sortable:!0,width:"10%"},{key:"actions",label:"Actions",sortable:!1,width:"10%"}],getCategoryStatusTabs:t=>[{key:"all",label:"All Categories",count:t.total},{key:"active",label:"Active",count:t.active},{key:"inactive",label:"Inactive",count:t.inactive}],getCategorySortOptions:()=>H}}export{Z as C,V as a,n as b,ee as c,J as d,Q as e,W as f,j as g,X as u};
|