1import{c as re,b5 as le,r as o,k as de,al as b,j as e,K as C,B as d,o as ce,p as oe,M as me,U as k,V as E,W as H,Y as T,ak as M,b9 as t,I as l,ab as K,X as Q,af as O,b6 as m,av as D}from"./index-BSzugPmD.js";import{A as z}from"./AdminLayout-DX5QK5VW.js";import{A as pe,a as ge,b as he,c as ue,d as xe,e as je,f as fe,g as ye}from"./alert-dialog-C04MbkRK.js";import{T as ve,a as Ne,b as W,c as g,d as be,e as h}from"./table-CuuXoiRk.js";import{P as V}from"./plus-CgsdN2uq.js";import{C as Ce}from"./camera-BtsHOR7F.js";import{S as De}from"./square-pen-BDhzv9_k.js";import"./separator-BqR3PEuT.js";import"./index-wSwMCRPK.js";import"./house-BGxODrgI.js";import"./file-text-DJyMjD3v.js";import"./building-2-DIE5oqIV.js";import"./sparkles-BR-YgngI.js";/** 2 * @license lucide-react v0.453.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const Ie=re("Trash",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}]]);function qe(){const j=le(),[B,f]=o.useState(!1),[Y,y]=o.useState(!1),[X,v]=o.useState(!1),[c,P]=o.useState(null),[G,I]=o.useState(!1),[u,q]=o.useState(null),[i,A]=o.useState({name:"",amiliaId:"",description:"",address:"",capacity:"0",amenities:"",operatingHours:"Monday-Saturday 9am-9pm, Sunday closed"}),[x,F]=o.useState(["","","",""]),{data:L,isLoading:J}=de({queryKey:["/api/facility-locations"],staleTime:1e3*60}),S=b({mutationFn:a=>D("/api/facility-locations",{method:"POST",data:a}),onSuccess:()=>{j.invalidateQueries({queryKey:["/api/facility-locations"]}),m({title:"Success!",description:"Facility location created successfully"}),f(!1),R()},onError:a=>{console.error("Error creating facility location:",a),m({variant:"destructive",title:"Error",description:"Failed to create facility location"})}}),w=b({mutationFn:({id:a,data:s})=>D(`/api/facility-locations/${a}`,{method:"PUT",data:s}),onSuccess:()=>{j.invalidateQueries({queryKey:["/api/facility-locations"]}),m({title:"Success!",description:"Facility location updated successfully"}),y(!1)},onError:a=>{console.error("Error updating facility location:",a),m({variant:"destructive",title:"Error",description:"Failed to update facility location"})}}),U=b({mutationFn:({id:a,imageUrls:s})=>D(`/api/facility-locations/${a}/images`,{method:"PUT",data:{imageUrls:s}}),onSuccess:()=>{j.invalidateQueries({queryKey:["/api/facility-locations"]}),m({title:"Success!",description:"Facility images updated successfully"}),v(!1)},onError:a=>{console.error("Error updating facility images:",a),m({variant:"destructive",title:"Error",description:"Failed to update facility images"})}}),Z=b({mutationFn:a=>D(`/api/facility-locations/${a}`,{method:"DELETE"}),onSuccess:()=>{j.invalidateQueries({queryKey:["/api/facility-locations"]}),m({title:"Success!",description:"Facility location deleted successfully"})},onError:a=>{console.error("Error deleting facility location:",a),m({variant:"destructive",title:"Error",description:"Failed to delete facility location"})}}),R=()=>{A({name:"",amiliaId:"",description:"",address:"",capacity:"0",amenities:"",operatingHours:"Monday-Saturday 9am-9pm, Sunday closed"}),F(["","","",""])},n=a=>{A({...i,[a.target.name]:a.target.value})},N=(a,s)=>{const r=[...x];r[a]=s,F(r)},_=a=>{a.preventDefault();const s=x.filter(p=>p.trim()!==""),r={name:i.name,amiliaId:i.amiliaId?Number(i.amiliaId):null,description:i.description,address:i.address,imageUrls:s,capacity:Number(i.capacity),amenities:i.amenities.split(",").map(p=>p.trim()),operatingHours:i.operatingHours};S.mutate(r)},ee=a=>{if(a.preventDefault(),!c)return;const s={name:i.name,amiliaId:i.amiliaId?Number(i.amiliaId):null,description:i.description,address:i.address,capacity:Number(i.capacity),amenities:i.amenities.split(",").map(r=>r.trim()),operatingHours:i.operatingHours};w.mutate({id:c.id,data:s})},ae=a=>{if(a.preventDefault(),!c)return;const s=x.filter(r=>r.trim()!=="");U.mutate({id:c.id,imageUrls:s})},ie=a=>{var s;P(a),A({name:a.name,amiliaId:((s=a.amiliaId)==null?void 0:s.toString())||"",description:a.description,address:a.address,capacity:a.capacity.toString(),amenities:a.amenities.join(", "),operatingHours:a.operatingHours}),y(!0)},se=a=>{P(a);const s=["","","",""];
6a.imageUrls.forEach((r,p)=>{p<4&&(s[p]=r)}),F(s),v(!0)},te=a=>{q(a),I(!0)},ne=()=>{u&&(Z.mutate(u.id),I(!1),q(null))},$=()=>{R(),f(!0)};return J?e.jsx(z,{children:e.jsxs("div",{className:"container mx-auto px-4 py-8",children:[e.jsx("h1",{className:"text-4xl font-bold mb-8 font-kobe",children:"Location Details"}),e.jsxs("div",{className:"flex justify-center p-12",children:[e.jsx(C,{className:"h-8 w-8 animate-spin"}),e.jsx("span",{className:"ml-2",children:"Loading facility locations..."})]})]})}):e.jsx(z,{children:e.jsxs("div",{className:"container mx-auto px-4 py-8",children:[e.jsx("h1",{className:"text-4xl font-bold mb-8 font-kobe",children:"Location Details"}),e.jsxs("div",{className:"mb-6 flex justify-between items-center",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold font-kobe",children:"Amilia Location Details"}),e.jsx("p",{className:"text-muted-foreground",children:"View and edit details for existing facility locations"})]}),e.jsxs(d,{onClick:$,className:"flex items-center gap-1",children:[e.jsx(V,{className:"h-4 w-4"}),"Add Location Details"]})]}),e.jsx("div",{className:"grid gap-6",children:L&&L.length>0?e.jsxs(ve,{children:[e.jsx(Ne,{children:e.jsxs(W,{children:[e.jsx(g,{children:"Name"}),e.jsx(g,{children:"Amilia ID"}),e.jsx(g,{children:"Address"}),e.jsx(g,{children:"Capacity"}),e.jsx(g,{children:"Images"}),e.jsx(g,{className:"text-right",children:"Actions"})]})}),e.jsx(be,{children:L.map(a=>e.jsxs(W,{children:[e.jsx(h,{className:"font-medium",children:a.name}),e.jsx(h,{children:a.amiliaId||"N/A"}),e.jsx(h,{children:a.address}),e.jsx(h,{children:a.capacity}),e.jsx(h,{children:a.imageUrls.length}),e.jsx(h,{className:"text-right",children:e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(d,{variant:"outline",size:"sm",onClick:()=>se(a),title:"Manage Images",children:e.jsx(Ce,{className:"h-4 w-4"})}),e.jsx(d,{variant:"outline",size:"sm",onClick:()=>ie(a),title:"Edit",children:e.jsx(De,{className:"h-4 w-4"})}),e.jsx(d,{variant:"outline",size:"sm",onClick:()=>te(a),title:"Delete",children:e.jsx(Ie,{className:"h-4 w-4"})})]})})]},a.id))})]}):e.jsx(ce,{children:e.jsx(oe,{className:"pt-6",children:e.jsxs("div",{className:"flex flex-col items-center justify-center text-center p-6 bg-muted/50 rounded-lg",children:[e.jsx(me,{className:"h-10 w-10 text-muted-foreground mb-2"}),e.jsx("h3",{className:"text-lg font-medium",children:"No Location Details Found"}),e.jsx("p",{className:"text-sm text-muted-foreground max-w-sm mt-1 mb-4",children:"There are currently no location details in the system. Add details for Amilia locations to get started."}),e.jsxs(d,{onClick:$,variant:"default",children:[e.jsx(V,{className:"h-4 w-4 mr-2"}),"Add Location Details"]})]})})})}),e.jsx(k,{open:B,onOpenChange:f,children:e.jsxs(E,{className:"max-w-lg",children:[e.jsxs(H,{
6children:[e.jsx(T,{className:"font-kobe",children:"Add Location Details"}),e.jsx(M,{children:"Add details for an existing Amilia location, including images and information."})]}),e.jsxs("form",{onSubmit:_,children:[e.jsxs("div",{className:"grid gap-4 py-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"name",children:"Location Name"}),e.jsx(l,{id:"name",name:"name",value:i.name,onChange:n,required:!0})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"amiliaId",children:"Amilia ID (Optional)"}),e.jsx(l,{id:"amiliaId",name:"amiliaId",value:i.amiliaId,onChange:n,type:"number"})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"address",children:"Address"}),e.jsx(l,{id:"address",name:"address",value:i.address,onChange:n,required:!0})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"description",children:"Description"}),e.jsx(K,{id:"description",name:"description",value:i.description,onChange:n,rows:3})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"capacity",children:"Capacity"}),e.jsx(l,{id:"capacity",name:"capacity",value:i.capacity,onChange:n,type:"number",min:0})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"operatingHours",children:"Operating Hours"}),e.jsx(l,{id:"operatingHours",name:"operatingHours",value:i.operatingHours,onChange:n})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"amenities",children:"Amenities (comma-separated)"}),e.jsx(l,{id:"amenities",name:"amenities",value:i.amenities,onChange:n,placeholder:"WiFi, Restrooms, Parking"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{children:"Image URLs (Maximum: 4)"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Add Cloudinary image URLs for the location. We recommend 16:9 aspect ratio."}),e.jsx("div",{className:"grid gap-2",children:x.map((a,s)=>e.jsxs("div",{className:"flex gap-2",children:[e.jsx(l,{placeholder:`Image ${s+1} URL`,value:a,onChange:r=>N(s,r.target.value)}),a&&e.jsx(d,{type:"button",variant:"outline",size:"icon",onClick:()=>N(s,""),children:e.jsx(Q,{className:"h-4 w-4"})})]},s))})]})]}),e.jsxs(O,{children:[e.jsx(d,{type:"button",variant:"outline",onClick:()=>f(!1),children:"Cancel"}),e.jsx(d,{type:"submit",disabled:S.isPending,children:S.isPending?e.jsxs(e.Fragment,{children:[e.jsx(C,{className:"mr-2 h-4 w-4 animate-spin"}),"Saving..."]}):"Save Location Details"})]})]})]})}),e.jsx(k,{open:Y,onOpenChange:y,children:e.jsxs(E,{className:"max-w-lg",children:[e.jsxs(H,{
6children:[e.jsx(T,{className:"font-kobe",children:"Edit Location Details"}),e.jsx(M,{children:"Update the details and information for this Amilia location."})]}),e.jsxs("form",{onSubmit:ee,children:[e.jsxs("div",{className:"grid gap-4 py-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"edit-name",children:"Location Name"}),e.jsx(l,{id:"edit-name",name:"name",value:i.name,onChange:n,required:!0})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"edit-amiliaId",children:"Amilia ID (Optional)"}),e.jsx(l,{id:"edit-amiliaId",name:"amiliaId",value:i.amiliaId,onChange:n,type:"number"})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"edit-address",children:"Address"}),e.jsx(l,{id:"edit-address",name:"address",value:i.address,onChange:n,required:!0})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"edit-description",children:"Description"}),e.jsx(K,{id:"edit-description",name:"description",value:i.description,onChange:n,rows:3})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"edit-capacity",children:"Capacity"}),e.jsx(l,{id:"edit-capacity",name:"capacity",value:i.capacity,onChange:n,type:"number",min:0})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"edit-operatingHours",children:"Operating Hours"}),e.jsx(l,{id:"edit-operatingHours",name:"operatingHours",value:i.operatingHours,onChange:n})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{htmlFor:"edit-amenities",children:"Amenities (comma-separated)"}),e.jsx(l,{id:"edit-amenities",name:"amenities",value:i.amenities,onChange:n,placeholder:"WiFi, Restrooms, Parking"})]})]}),e.jsxs(O,{children:[e.jsx(d,{type:"button",variant:"outline",onClick:()=>y(!1),children:"Cancel"}),e.jsx(d,{type:"submit",disabled:w.isPending,children:w.isPending?e.jsxs(e.Fragment,{children:[e.jsx(C,{className:"mr-2 h-4 w-4 animate-spin"}),"Updating..."]}):"Update Location Details"})]})]})]})}),e.jsx(k,{open:X,onOpenChange:v,children:e.jsxs(E,{className:"max-w-lg",children:[e.jsxs(H,{
6children:[e.jsx(T,{className:"font-kobe",children:"Manage Location Images"}),e.jsx(M,{children:c&&`Update images for ${c.name}. You can add up to 4 images.`})]}),e.jsxs("form",{onSubmit:ae,children:[e.jsx("div",{className:"grid gap-4 py-4",children:e.jsxs("div",{className:"grid gap-2",children:[e.jsx(t,{children:"Image URLs (Maximum: 4)"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Add Cloudinary image URLs for the location. We recommend 16:9 aspect ratio."}),c&&c.imageUrls.length>0&&e.jsx("div",{className:"grid grid-cols-2 gap-2 mb-4",children:c.imageUrls.map((a,s)=>e.jsx("div",{className:"relative",children:e.jsx("img",{src:a,alt:`${c.name} - Image ${s+1}`,className:"w-full h-32 object-cover rounded-md"})},s))}),e.jsx("div",{className:"grid gap-2",children:x.map((a,s)=>e.jsxs("div",{className:"flex gap-2",children:[e.jsx(l,{placeholder:`Image ${s+1} URL`,value:a,onChange:r=>N(s,r.target.value)}),a&&e.jsx(d,{type:"button",variant:"outline",size:"icon",onClick:()=>N(s,""),children:e.jsx(Q,{className:"h-4 w-4"})})]},s))})]})}),e.jsxs(O,{children:[e.jsx(d,{type:"button",variant:"outline",onClick:()=>v(!1),children:"Cancel"}),e.jsx(d,{type:"submit",disabled:U.isPending,children:U.isPending?e.jsxs(e.Fragment,{children:[e.jsx(C,{className:"mr-2 h-4 w-4 animate-spin"}),"Updating..."]}):"Update Images"})]})]})]})}),e.jsx(pe,{open:G,onOpenChange:I,children:e.jsxs(ge,{children:[e.jsxs(he,{children:[e.jsx(ue,{children:"Delete Location"}),e.jsxs(xe,{children:["Are you sure you want to delete ",u==null?void 0:u.name,"? This action cannot be undone."]})]}),e.jsxs(je,{children:[e.jsx(fe,{children:"Cancel"}),e.jsx(ye,{onClick:ne,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Delete"})]})]})})]})})}export{qe 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.