1import{u as S,j as e,B as W,r,W as z,cQ as F,k as D,q as j,S as U}from"./elements-5kxJS_4j.js";import{W as T}from"./Widget-Dku3WMLx.js";import{aA as $,L,G as P,j as V}from"./index-CtCeyryw.js";import{g as K,f as Q,i as Z}from"./amenityReservationRules-YcrKH3aG.js";import{F as J}from"./FilterableGridWidget-CTujm4JR.js";import{u as X}from"./useSelectedProperty-CronaFcx.js";import{u as Y,a as ee}from"./portal-requests-pSSQdVkY.js";import{a as se,b as te,u as ae,i as re}from"./reservations-BJ4iGbMv.js";import{n as ne}from"./requests-list-utils-C5cdaefJ.js";import{A as ie}from"./authorization-DRCBMAi9.js";import"./grids-DGmfp9GI.js";import"./startOfDay-AazlW55I.js";import"./addDays-Le9Cqm9z.js";import"./useIsMobile-DE0QDUth.js";import"./FilterableGridFilters-BSwkYGCZ.js";import"./useMutation-jkV-6MpM.js";import"./useIsNonHomeownerBoardMember-Cs-SpCXk.js";import"./useAuthorization-XS6cSJ0I.js";function le(s){return s.length===0?"":s.length===7?"Daily":s.length===1?s[0]:`${s[0]}-${s[s.length-1]}`}function oe({amenity:s}){var o,d;const{t:a}=S();return e.jsx(T,{bodyWrapperClassName:"flex h-full flex-col py-6 px-6",children:e.jsx(T.Body,{className:"min-h-0 flex-1",children:e.jsxs("div",{className:"flex h-full flex-col gap-4 w-full",children:[e.jsx("img",{src:s.imageUrl??K(s),alt:s.name,className:"w-full h-[200px] shrink-0 rounded object-cover"}),e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-3",children:[e.jsxs("div",{className:"flex flex-col gap-1 shrink-0",children:[e.jsx("h3",{className:"text-[20px] font-semibold text-base-header leading-5 font-dm-sans",children:s.name}),e.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:[(o=s.reservationBlocks)==null?void 0:o.trim(),(d=s.reservationLimit)==null?void 0:d.trim(),`${le(s.availableDays)} ${$(new Date(2e3,0,1,...s.availableStartTime.split(":").map(Number)),"h:mm a")} â ${$(new Date(2e3,0,1,...s.availableEndTime.split(":").map(Number)),"h:mm a")}`.trim()].filter(Boolean).map((p,l)=>e.jsxs("span",{className:"flex items-center gap-2",children:[l>0&&e.jsx("span",{className:"w-1 h-1 rounded-full bg-base-header opacity-50 shrink-0"}),e.jsx("span",{className:"text-[13px] text-base-header opacity-70",children:p})]},l))})]}),e.jsx("p",{className:"text-[13px] text-base-header leading-normal line-clamp-2 shrink-0",children:s.description}),e.jsx("div",{className:"mt-auto pt-1",children:e.jsx(L,{to:`/community/reservations/${s.id}`,className:"amenity-card-link amenity-card-link-view-availability",children:e.jsx(W,{variant:"primary",size:"sm",className:"amenity-card-view-availability-button w-full !rounded-lg !py-2 !px-6 !bg-primary hover:!bg-primary/90 !text-sm !font-semibold",children:a("main.reservations.viewAvailability")})})})]})]})})})}const w=5,A="all",de={pending:"Pending",approved:"Approved",cancelled:"Cancelled"},ce=["pending","approved","cancelled"];function me(){const{t:s}=S(),a=P(),[o]=X(),d=o==null?void 0:o.ownerId,p=V(t=>t.userId??void 0),[l,g]=r.useState(A),[x,n]=r.useState(!1),[c,b]=r.useState(0),{data:C}=Y({ownerId:d}),{mutate:k}=ee(),O=r.useCallback((t,i)=>{!t||!i||k({actionItemId:t,actionItemNoteId:null})},[k]),{data:f=[],isLoading:q,error:B}=se(),G=r.useMemo(()=>Array.from(new Set(f.map(t=>t.amenityId))).sort((t,i)=>t-i),[f]),{data:u}=te({associationId:(a==null?void 0:a.id)||0,userId:p||0,amenityIds:G}),R=r.useMemo(()=>{const t=new Set;for(const i of ne(C)){const m=i.actionItemId??0;(i.hasUnread??0)>0&&m>0&&t.add(m)}return t},[C]),E=r.useCallback(t=>{const i=u==null?void 0:u.get(t.id);return!!(i&&R.has(i))},[u,R]),v=r.useMemo(()=>x?f.filter(E):f,[f,E,x]),y=r.useMemo(()=>ce.map(t=>{const i=v.filter(m=>m.status===t).length;return{label:de[t],count:i,value:t}}).filter(t=>t.count>0),[v]),N=r.useMemo(()=>y.length>1?[{label:"All",count:v.length,value:A},...y]:y,[v.length,y]);r.useEffect(()=>{var i;new Set(N.map(m=>m.value)).has(l)||g(((i=N[0])==null?void 0:i.value)??A)},[N,l]);const h=r.useMemo(()=>l===A?v:v.filter(t=>t.status===l),[v,l]);r.useEffect(()=>{b(0)},[l,x]),r.useEffect(()=>{const t=h.length>0?Math.floor((h.length-1)/w):0;c>t&&b(t)},[h.length,c]);const I=r.useMemo(()=>{const t=c*w;return h.slice(t,t+w)},[h,c]),H=B?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx("p",{className:"text-base-body",children:s("main.dashboard.widget.reservations.loadError")})}):f.length===0?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx("p",{className:"text-base-body",children:s("main.dashboard.widget.reservations.noBookingsFound")})}):h.length===0?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx("p",{className:"text-base-body",children:s("main.dashboard.widget.reservations.noBookingsFound")})}):e.jsx(e.Fragment,{children:I.map((t,i)=>{const m=u==null?void 0:u.get(t.id),M=!!(m&&R.has(m));return e.jsx(pe,{booking:t,isLast:i===I.length-1,actionItemId:m,hasUnread:M,onClick:()=>O(m,M)},t.id)})}),_=!B&&f.length>0&&h.length>0?e.jsxs("div",{className:"flex gap-[29px] h-[50px] items-center px-[22px] py-[14px] min-w-0 overflow-hidden border-b border-[#d9d9d9] text-sm font-bold text-base-header",children:[e.jsx("div",{className:"w-[8px] shrink-0"}),e.jsx("div",{className:"flex-1 min-w-0 overflow-hidden pr-[30px] text-left",children:s("main.dashboard.widget.reservations.tableHeaderAmenityName")}),e.jsx("div",{className:"w-[80px] shrink-0 overflow-hidden text-left",children:s("main.dashboard.widget.reservations.tableHeaderDate")}),e.jsx("div",{className:"w-[140px] shrink-0 overflow-hidden text-left",children:s("main.dashboard.widget.reservations.tableHeaderTime")}),e.jsx("div",{className:"w-[100px] shrink-0 flex justify-start overflow-hidden",children:e.jsx("span",{className:"truncate",children:s("main.dashboard.widget.reservations.tableHeaderStatus")})})]}):void 0;return e.jsx(J,{title:s("main.dashboard.widget.reservations.myReservations"),filters:N,selectedFilter:l,onFilterChange:g,filterRightContent:e.jsx(z,{id:"reservations-unread-only",value:x,onChange:n,label:s("main.inbox.unreadOnly")}),loading:q,columnHeaders:_,pagination:h.length>0?{page:c,pageSize:w,totalCount:h.length,onPageChange:b}:void 0,children:H})}function xe({status:s}){const a=s==="pending"?"Pending":s==="cancelled"?"Cancelled":"Approved";return e.jsx("div",{className:j("h-[24px] px-[10px] flex items-center justify-center rounded-[50px]",s==="pending"&&"bg-orange-100 text-orange-700",s==="approved"&&"bg-[#d9ebfa] text-base-header",s==="cancelled"&&"bg-[#dfeaf0] text-base-header"),children:e.jsx("span",{className:"text-[13px] font-semibold",children:a})})}function pe({booking:s,isLast:a,actionItemId:o,hasUnread:d,onClick:p}){const l=Q(s.start,s.end),g=Z(s.start,s.end)?`${F(s.start)} - ${F(s.end)}`:`${D(s.start,{format:"datetime"})} - ${D(s.end,{format:"datetime"})}`,x=o?`/community/reservations/items/${o}`:void 0,n=j("flex gap-[29px] h-[50px] items-center px-[22px] py-[14px] min-w-0 overflow-hidden transition-colors",!a&&"border-b border-[#d9d9d9]",x?"hover:bg-gray-50 cursor-pointer":"cursor-default opacity-80"),c=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"w-[8px] shrink-0 flex justify-center",children:d&&e.jsx("div",{className:"size-2 roun
1ded-full shrink-0 bg-primary"})}),e.jsx("div",{className:"flex-1 min-w-0 overflow-hidden pr-[30px]",children:e.jsx("p",{className:j("text-[14px] truncate",d?"font-bold text-black":"font-normal text-base-header"),children:s.amenityName})}),e.jsx("div",{className:"w-[80px] shrink-0 overflow-hidden",children:e.jsx("p",{className:j("text-[14px] whitespace-nowrap truncate",d?"font-bold text-black":"font-normal text-base-header"),children:l})}),e.jsx("div",{className:"w-[140px] shrink-0 overflow-hidden",children:e.jsx("p",{className:j("text-[14px] truncate",d?"font-bold text-black":"font-normal text-base-header"),children:g})}),e.jsx("div",{className:"w-[100px] shrink-0 flex justify-start overflow-hidden",children:e.jsx(xe,{status:s.status})})]});return x?e.jsx(L,{to:x,"aria-label":`View reservation details for ${s.amenityName}`,className:n,onClick:p,children:c}):e.jsx("div",{className:n,"aria-label":`Reservation details unavailable for ${s.amenityName}`,children:c})}const he=()=>{const{t:s}=S(),a=P(),{data:o=[],isLoading:d,error:p}=ae((a==null?void 0:a.id)||0),l=r.useMemo(()=>o.filter(n=>a!=null&&a.isBoardMember||a!=null&&a.isArcCommitteeMember?n.visibility==="Board"||n.visibility==="Homeowners"||n.visibility==="All Residents":n.visibility==="All Residents"||n.visibility==="Homeowners"),[o,a==null?void 0:a.isArcCommitteeMember,a==null?void 0:a.isBoardMember]),g=r.useMemo(()=>[...l].sort((n,c)=>{const b=(n.category??"").localeCompare(c.category??"");return b!==0?b:(n.name??"").localeCompare(c.name??"")}),[l]),x=()=>d?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(U,{})}):re(p)?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx("p",{className:"text-base-body",children:s("main.reservations.reservationsNotAvailable")})}):p?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx("p",{className:"text-base-body",children:s("main.reservations.loadAmenitiesError")})}):o.length===0?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx("p",{className:"text-base-body",children:s("main.reservations.noAmenitiesAvailable")})}):e.jsxs(e.Fragment,{children:[e.jsx("hr",{}),e.jsx("div",{className:"flex flex-col",children:e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6",children:g.map(n=>e.jsx(oe,{amenity:n},n.id))})})]});return e.jsx(ie,{requireAuth:!0,children:e.jsxs("div",{className:"w-full flex flex-col gap-12",children:[!d&&!p&&o.length>0&&e.jsx(me,{}),x()]})})},Fe={title:"Reservations",subtitle:"Manage your community amenity reservations.",showPropertySelector:!0,showAi:!0,requiresEarlyAccess:"redesign-v3"};function De(){return e.jsx(he,{})}export{De as Component,Fe as handle};
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.