PageSourceSearch

https://nashobahub-prod.onrender.com/assets/EnhancementRequests-BnFloDxX.js

js nashobahub-prod.onrender.com collected 2026-10-03 11:41:57 UTC 13,440 bytes, 1 lines download raw bytes

1import{br as ee,u as te,r as o,o as se,a as x,j as e,aV as ie,B as d,aw as ae,b as ne,C as de,E as S,F as E,G as D,H as F,J as p,a9 as q,b0 as le,aU as re,d as V,T as oe,U as O,V as A,W as L,Y as I,L as a,I as m,K as j,a0 as U,at as W,au as ce,Q as g,q as v}from"./index-CU4TP-S4.js";import{P as me}from"./pencil-C0OXxJ_w.js";import{S as ue}from"./send-DuajP-GK.js";import{C as he}from"./circle-dot-DhASYOOM.js";import{C as xe}from"./clock-BHlwe1eO.js";import{W as pe}from"./wrench-DmI5MxeC.js";const z=["Admin Dashboard","B2B Wholesale","Command Center","Compliance","Contracts","Daily Procedures","Daily Reports","Department Calendar","LMS / Training","Maintenance","Reservations","Spot Inventory","Staff Portal","Support","Tasting Experience","Toast Connect","Other"],T={new:{label:"New",variant:"destructive",icon:he},reviewing:{label:"Reviewing",variant:"default",icon:xe},in_progress:{label:"In Progress",variant:"default",icon:pe},completed:{label:"Completed",variant:"secondary",icon:W},declined:{label:"Declined",variant:"outline",icon:ce}};function Ne(){const{user:R}=ee(),{toast:u}=te(),Y=(R==null?void 0:R.role)==="admin",[B,H]=o.useState("all"),[_,b]=o.useState(!1),[M,w]=o.useState(null),[n,f]=o.useState(null),[l,c]=o.useState({title:"",description:"",module:"",submittedBy:"",submitterEmail:""}),[s,r]=o.useState({title:"",description:"",module:"",status:"",adminNotes:"",submittedBy:"",submitterEmail:""}),[h,N]=o.useState({changesDescription:"",responseMessage:""}),{data:K=[],isLoading:G}=se({queryKey:["/api/enhancement-requests"]}),P=x({mutationFn:async t=>(await g("POST","/api/enhancement-requests",t)).json(),onSuccess:()=>{v.invalidateQueries({queryKey:["/api/enhancement-requests"]}),b(!1),c({title:"",description:"",module:"",submittedBy:"",submitterEmail:""}),u({title:"Request submitted",description:"Your enhancement request has been submitted."})},onError:()=>{u({title:"Error",description:"Failed to submit request.",variant:"destructive"})}}),k=x({mutationFn:async({id:t,data:i})=>(await g("PATCH",`/api/enhancement-requests/${t}`,i)).json(),onSuccess:()=>{v.invalidateQueries({queryKey:["/api/enhancement-requests"]}),w(null),u({title:"Updated",description:"Enhancement request updated."})}}),$=x({mutationFn:async({id:t,data:i})=>(await g("POST",`/api/enhancement-requests/${t}/complete`,i)).json(),onSuccess:()=>{v.invalidateQueries({queryKey:["/api/enhancement-requests"]}),f(null),N({changesDescription:"",responseMessage:""}),u({title:"Completed",description:"Request marked as completed and notification sent."})}}),Q=x({mutationFn:async({id:t,direction:i})=>(await g("POST",`/api/enhancement-requests/${t}/vote`,{direction:i})).json(),onSuccess:()=>{v.invalidateQueries({queryKey:["/api/enhancement-requests"]})}}),J=x({mutationFn:async t=>{await g("DELETE",`/api/enhancement-requests/${t}`)},onSuccess:()=>{v.invalidateQueries({queryKey:["/api/enhancement-requests"]}),u({title:"Deleted",description:"Enhancement request removed."})}}),C=B==="all"?K:K.filter(t=>t.status===B),X=t=>{r({title:t.title,description:t.description,module:t.module||"",status:t.status,adminNotes:t.adminNotes||"",submittedBy:t.submittedBy,submitterEmail:t.submitterEmail||""}),w(t)},Z=t=>{N({changesDescription:"",responseMessage:""}),f(t)};return e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsxs("div",{className:"max-w-4xl mx-auto p-4 sm:p-6",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx(ie,{href:"/",children:e.jsx(d,{variant:"ghost",size:"icon","data-testid":"button-back",children:e.jsx(ae,{className:"h-4 w-4"})})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-2xl font-bold","data-testid":"text-page-title",children:"Enhancement Requests"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Submit and track system enhancement requests"})]}),e.jsxs(d,{onClick:()=>b(!0),"data-testid":"button-new-request",children:[e.jsx(ne,{className:"h-4 w-4 mr-2"}),"New Request"]})]}),e.jsxs(de,{className:"mt-6 p-4",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-4 flex-wrap",children:[e.jsxs(S,{value:B,onValueChange:H,children:[e.jsx(E,{className:"w-[180px]","data-testid":"select-status-filter",children:e.jsx(D,{placeholder:"All Statuses"})}),e.jsxs(F,{children:[e.jsx(p,{value:"all",children:"All Statuses"}
1),Object.entries(T).map(([t,i])=>e.jsx(p,{value:t,children:i.label},t))]})]}),e.jsxs("span",{className:"text-sm text-muted-foreground","data-testid":"text-request-count",children:[C.length," request",C.length!==1?"s":""]})]}),G?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(q,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):C.length===0?e.jsx("div",{className:"text-center py-12 text-muted-foreground","data-testid":"text-empty-state",children:'No enhancement requests found. Click "New Request" to submit one.'}):e.jsx("div",{className:"space-y-3",children:C.map(t=>{const i=T[t.status]||T.new,y=i.icon;return e.jsxs("div",{className:"flex gap-3 p-4 border rounded-md","data-testid":`card-request-${t.id}`,children:[e.jsxs("div",{className:"flex flex-col items-center gap-1 pt-1",children:[e.jsx(d,{variant:"ghost",size:"icon",onClick:()=>Q.mutate({id:t.id,direction:"up"}),"data-testid":`button-vote-up-${t.id}`,children:e.jsx(le,{className:"h-4 w-4"})}),e.jsx("span",{className:"text-sm font-medium tabular-nums","data-testid":`text-votes-${t.id}`,children:t.votes}),e.jsx(d,{variant:"ghost",size:"icon",onClick:()=>Q.mutate({id:t.id,direction:"down"}),"data-testid":`button-vote-down-${t.id}`,children:e.jsx(re,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap mb-1",children:[e.jsxs(V,{variant:i.variant,"data-testid":`badge-status-${t.id}`,children:[e.jsx(y,{className:"h-3 w-3 mr-1"}),i.label]}),t.module&&e.jsx(V,{variant:"outline","data-testid":`badge-module-${t.id}`,children:t.module}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:["by ",t.submittedBy]})]}),e.jsx("h3",{className:"font-medium mb-1","data-testid":`text-title-${t.id}`,children:t.title}),e.jsx("p",{className:"text-sm text-muted-foreground line-clamp-3","data-testid":`text-description-${t.id}`,children:t.description}),t.status==="completed"&&t.changesDescription&&e.jsxs("div",{className:"mt-2 p-2 bg-muted/50 rounded text-sm",children:[e.jsx("span",{className:"font-medium",children:"Changes made:"})," ",t.changesDescription]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-2",children:["Submitted ",new Date(t.createdAt).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})," at ",new Date(t.createdAt).toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"})]})]}),Y&&e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(d,{variant:"ghost",size:"icon",onClick:()=>X(t),"data-testid":`button-edit-${t.id}`,children:e.jsx(me,{className:"h-4 w-4"})}),t.status!=="completed"&&e.jsx(d,{variant:"ghost",size:"icon",onClick:()=>Z(t),"data-testid":`button-complete-${t.id}`,children:e.jsx(ue,{className:"h-4 w-4"})}),e.jsx(d,{variant:"ghost",size:"icon",onClick:()=>{confirm("Delete this enhancement request?")&&J.mutate(t.id)},"data-testid":`button-delete-${t.id}`,children:e.jsx(oe,{className:"h-4 w-4"})})]})]},t.id)})})]})]}),e.jsx(O,{open:_,onOpenChange:b,children:e.jsxs(A,{className:"max-w-lg",children:[e.jsx(L,{children:e.jsx(I,{children:"New Enhancement Request"})}),e.jsxs("form",{onSubmit:t=>{t.preventDefault(),P.mutate(l)},className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(a,{htmlFor:"new-name",children:"Your Name"}),e.jsx(m,{id:"new-name",value:l.submittedBy,onChange:t=>c({...l,submittedBy:t.target.value}),required:!0,"data-testid":"input-submitter-name"})]}),e.jsxs("div",{children:[e.jsx(a,{htmlFor:"new-email",children:"Your Email (for notifications)"}),e.jsx(m,{id:"new-email",type:"email",value:l.submitterEmail,onChange:t=>c({...l,submitterEmail:t.target.value}),"data-testid":"input-submitter-email"})]}),e.jsxs("div",{children:[e.jsx(a,{htmlFor:"new-module",children:"Module"}),e.jsxs(S,{value:l.module,onValueChange:t=>c({...l,module:t}),children:[e.jsx(E,{id:"new-module","data-testid":"select-module",children:e.jsx(D,{placeholder:"Select a module"})}),e.jsx(F,{children:z.map(t=>e.jsx(p,{value:t,children:t},t))})]})]}),e.jsxs("div",{children:[e.jsx(a,{htmlFor:"new-title",children:"Title"}),e.jsx(m,{id:"new-title",value:l.title,onChange:t=>c({...l,title:t.target.value}),required:!0,placeholder:"Brief summary of the enhancement","data-testid":"input-title"})]}),e.jsxs("div",{children:[e.jsx(a,{htmlFor:"new-description",children:"Description"}),e.jsx(j,{id:"new-description",value:l.description,onChange:t=>c({...l,description:t.target.value}),required:!0,rows:5,placeholder:"Describe what you would like to see changed or added...","data-testid":"input-description"})]}),e.jsxs(U,{children:[e.jsx(d,{type:"button",variant:"outline",onClick:()=>b(!1),children:"Cancel"}),e.jsxs(d,{type:"submit",disabled:P.isPending,"data-testid":"button-submit-request",children:[P.isPending&&e.jsx(q,{className:"h-4 w-4 mr-2 animate-spin"}),"Submit Request"]})]})]})]})}),e.jsx(O,{open:!!M,onOpenChange:t=>!t&&w(null),children:e.jsxs(A,{className:"max-w-lg",children:[e.jsx(L,{children:e.jsx(I,{children:"Edit Enhancement Request"})}),e.jsxs("form",{onSubmit:t=>{t.preventDefault(),M&&k.mutate({id:M.id,data:s})},className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(a,{htmlFor:"edit-name",children:"Submitted By"}),e.jsx(m,{id:"edit-name",value:s.submittedBy,onChange:t=>r({...s,submittedBy:t.target.value}),required:!0,"data-testid":"input-edit-submitter"})]}),e.jsxs("div",{children:[e.jsx(a,{htmlFor:"edit-email",children:"Submitter Email"}),e.jsx(m,{id:"edit-email",type:"email",value:s.submitterEmail,onChange:t=>r({...s,submitterEmail:t.target.value}),"data-testid":"input-edit-email"})]}),e.jsxs("div",{children:[e.jsx(a,{htmlFor:"edit-status",children:"Status"}),e.jsxs(S,{value:s.status,onValueChange:t=>r({...s,status:t}),children:[e.jsx(E,{id:"edit-status","data-testid":"select-edit-status",children:e.jsx(D,{})}),e.jsx(F,{children:Object.entries(T).map(([t,i])=>e.jsx(p,{value:t,children:i.label},t))})]})]}),e.jsxs("div",{children:[e.jsx(a,{htmlFor:"edit-module",children:"Module"}),e.jsxs(S,{value:s.module,onValueChange:t=>r({...s,module:t}),children:[e.jsx(E,{id:"edit-module","data-testid":"select-edit-module",children:e.jsx(D,{placeholder:"Select a module"})}),e.jsx(F,{children:z.map(t=>e.jsx(p,{value:t,children:t},t))})]})]}),e.jsxs("div",{children:[e.jsx(a,{htmlFor:"edit-title",children:"Title"}),e.jsx(m,{id:"edit-title",value:s.title,onChange:t=>r({...s,title:t.target.value}),required:!0,"data-testid":"input-edit-title"})]}),e.jsxs("div",{children:[e.jsx(a,{htmlFor:"edit-description",children:"Description"}),e.jsx(j,{id:"edit-description",value:s.description,onChange:t=>r({...s,description:t.target.value}),required:!0,rows:4,"data-testid":"input-edit-description"})]}),e.jsxs("div",{children:[e.jsx(a,{htmlFor:"edit-admin-notes",children:"Admin Notes (internal only
1)"}),e.jsx(j,{id:"edit-admin-notes",value:s.adminNotes,onChange:t=>r({...s,adminNotes:t.target.value}),rows:3,placeholder:"Internal notes about this request...","data-testid":"input-edit-admin-notes"})]}),e.jsxs(U,{children:[e.jsx(d,{type:"button",variant:"outline",onClick:()=>w(null),children:"Cancel"}),e.jsxs(d,{type:"submit",disabled:k.isPending,"data-testid":"button-save-edit",children:[k.isPending&&e.jsx(q,{className:"h-4 w-4 mr-2 animate-spin"}),"Save Changes"]})]})]})]})}),e.jsx(O,{open:!!n,onOpenChange:t=>!t&&f(null),children:e.jsxs(A,{className:"max-w-lg",children:[e.jsx(L,{children:e.jsx(I,{children:"Complete Enhancement Request"})}),n&&e.jsxs("div",{className:"mb-4 p-3 bg-muted rounded-md",children:[e.jsx("p",{className:"font-medium",children:n.title}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:n.description}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-2",children:["Requested by ",n.submittedBy,n.submitterEmail&&` (${n.submitterEmail})`]})]}),e.jsxs("form",{onSubmit:t=>{t.preventDefault(),n&&$.mutate({id:n.id,data:h})},className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(a,{htmlFor:"complete-changes",children:"Changes Made"}),e.jsx(j,{id:"complete-changes",value:h.changesDescription,onChange:t=>N({...h,changesDescription:t.target.value}),rows:4,placeholder:"Describe the changes that were implemented...",required:!0,"data-testid":"input-changes-description"})]}),e.jsxs("div",{children:[e.jsxs(a,{htmlFor:"complete-response",children:["Response to Submitter",(n==null?void 0:n.submitterEmail)&&e.jsxs("span",{className:"text-xs text-muted-foreground ml-2",children:["(will be emailed to ",n.submitterEmail,")"]})]}),e.jsx(j,{id:"complete-response",value:h.responseMessage,onChange:t=>N({...h,responseMessage:t.target.value}),rows:4,placeholder:"Write a message to the person who submitted this request...",required:!0,"data-testid":"input-response-message"})]}),e.jsxs(U,{children:[e.jsx(d,{type:"button",variant:"outline",onClick:()=>f(null),children:"Cancel"}),e.jsxs(d,{type:"submit",disabled:$.isPending,"data-testid":"button-complete-request",children:[$.isPending&&e.jsx(q,{className:"h-4 w-4 mr-2 animate-spin"}),e.jsx(W,{className:"h-4 w-4 mr-2"}),"Complete & Notify"]})]})]})]})})]})}export{Ne 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.