PageSourceSearch

https://portal.foxtons.co.uk/assets/index-ffa88049.js

js foxtons.co.uk collected 2026-09-24 18:15:33 UTC 14,273 bytes, 1 lines download raw bytes

1import{j as e,aw as te,q as U,ax as ne,ay as z,c$ as se,B as u,S as C,am as D,r as c,D as re,cG as ie,b$ as ae,eX as oe,e as V,c as Z,z as G,L as N,ak as H,gl as q,b9 as le,gm as ce,gn as de,go as ue,gp as pe,gq as me,gr as xe,O as L,gs as d,gt as he,u as X,R as P,cc as _,gu as J,dy as ge,w as fe,E as ye,a7 as je,gv as be,gw as Y,gx as ve,f5 as Ce,f6 as Ie,gy as we,J as Se,F as ke}from"./index-51b326a0.js";import{u as K}from"./useDeviceDetect-509fe2e6.js";const Re=s=>e.jsx(te,{...s,title:"Utilities",children:e.jsxs("svg",{viewBox:"0 0 24 25",fill:"none",xmlns:"http://www.w3.org/2000/svg",...s,children:[e.jsx("g",{clipPath:"url(#Utilities_svg__a)",children:e.jsx("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.633.3C1.27.76-.79 4.02.27 7.204a5.292 5.292 0 0 0 2.537 2.962l.194.1v6.014c0 6.726-.013 6.196.163 6.62.84 2.018 3.857 1.736 4.294-.402.073-.358.055-2.147-.023-2.306a.773.773 0 0 0-1.22-.204c-.203.203-.201.191-.214 1.252l-.012.938-.077.156a.726.726 0 0 1-1.323 0l-.077-.156-.011-6.329-.012-6.328-.055-.106c-.112-.213-.231-.306-.554-.434C1.859 8.184.93 5.795 1.894 3.872c.72-1.435 2.303-2.272 3.873-2.046a.922.922 0 0 1 .193.04c.018.016-.917.92-1.423 1.378-.582.526-.783.934-.802 1.624-.057 2.058 2.365 2.957 3.77 1.4.435-.482 1.39-1.469 1.405-1.452.008.01.026.096.04.193.243 1.686-.727 3.34-2.327 3.972-.338.134-.457.23-.562.46l-.06.132.006 2.962.006 2.962.055.11c.274.558 1.093.558 1.368 0l.054-.11.012-2.618.011-2.618.188-.098a5.218 5.218 0 0 0 2.249-6.96c-.254-.507-.671-.691-1.093-.484-.143.07-1.736 1.69-2.477 2.517-.328.368-.664.409-.956.116-.293-.292-.252-.626.116-.955.825-.739 2.447-2.335 2.518-2.478.093-.19.094-.498.002-.673C7.744.645 5.88.13 4.633.3ZM15.259 10.82c-.599.13-.458.017-4.218 3.399-3.577 3.217-3.423 3.073-3.492 3.255a.75.75 0 0 0 .762 1.03c.262-.016.303-.046 1.277-.922l.902-.812.012 2.833c.012 2.826.012 2.833.063 3.013.233.821.896 1.448 1.706 1.616.327.067 6.634.067 6.962 0 .81-.168 1.472-.795 1.705-1.616.052-.18.052-.187.064-3.013l.011-2.833.903.812c.973.876 1.015.906 1.276.923a.75.75 0 0 0 .762-1.031c-.064-.17-.087-.193-.808-.84l-.633-.568-.011-2.006-.012-2.007-.054-.11c-.274-.556-1.095-.556-1.368 0l-.055.11-.011 1.321-.012 1.322-1.922-1.73c-2.169-1.952-2.204-1.98-2.722-2.122-.265-.073-.809-.085-1.087-.024Zm.798 1.545c.097.047.547.437 1.787 1.551l1.657 1.489-.006 3.386-.005 3.387-.061.13a.722.722 0 0 1-.368.38l-.156.076h-6.307l-.155-.077a.722.722 0 0 1-.369-.379l-.06-.13-.006-3.387-.005-3.386 1.641-1.477c2-1.8 1.968-1.778 2.413-1.563Z",fill:"#017163"})}),e.jsx("defs",{children:e.jsx("clipPath",{id:"Utilities_svg__a",children:e.jsx("path",{fill:"#fff",transform:"translate(0 .274)",d:"M0 0h24v24H0z"})})})]})}),Ae=Re,{palette:Q}=U,T={mainContainer:{flexDirection:"column",bgcolor:Q.grey[50],padding:"1.5rem",borderRadius:"0.5rem",width:"100%"},heading:{color:Q.primary.main,fontSize:{lg:"1.5rem",xs:"1.25rem"},fontWeight:700,textAlign:"center",marginTop:"0.75rem"},description:{color:Q.grey.main,fontSize:{md:"1rem",xs:"0.875rem"},fontWeight:500,marginTop:"0.5rem",textAlign:"center",width:"80%",margin:"auto",lineHeight:{lg:"1.75rem",xs:"1.25rem"}},container:{width:"100%",display:"flex",flexDirection:"column",alignItems:"center"},iconContainer:{width:"4rem",height:"4rem",backgroundColor:Q.primary[50],display:"flex",justifyContent:"center",alignItems:"center",borderRadius:"100%"},button:{marginTop:{lg:"1rem",xs:"0.75rem"},width:{xs:"100%",md:"initial"},textTransform:"none",fontWeight:900}},Te=({heading:s,description:r,handleClick:a,buttonLabel:h,icon:o,isLandlord:y})=>{const j=z(),x=se(j.breakpoints.down("md"));return e.jsxs(u,{sx:T.mainContainer,children:[e.jsx(u,{sx:T.container,children:e.jsx(u,{sx:T.iconContainer,children:o})}),e.jsx(C,{sx:T.heading,children:s}),e.jsx(C,{sx:T.description,children:r}),a&&!y&&e.jsx(u,{sx:T.container,children:e.jsx(D,{sx:T.button,variant:"primary",color:"primary",size:x?"small":"large",onClick:a,containerSxForVariant:T.mainContainer,children:h})})]})},Me=ne.memo(Te),{palette:$e}=U,w={container:{width:{sm:"30rem",xs:"100vw"},padding:{sm:"2rem",xs:"0.5rem"},height:"100vh",display:"flex",alignItems:"center",justifyContent:"center",flexDirection:"row",position:"relative"},closeIconButton:{position:"absolute",top:"2rem",right:"1.5rem"},closeIcon:{height:"1rem",width:"1rem"},inner:{justifyContent:"center",display:"flex",alignItems:"center",gap:"0.75rem",flexDirection:"column"},thankYouTitle:{fontSize:"1.5rem",lineHeight:"1.75rem",fontWeight:700,color:$e.primary.main},subtitle:{fontSize:"0.875rem",lineHeight:"1.25rem",width:"22rem",textAlign:"center"},button:{width:"100%",textTransform:"none"},bottomContainer:{paddingBottom:"2.5rem",paddingInline:"2rem",display:"flex",gap:"1.25rem",flexDirection:"column"},iconThankyou:{width:"6.5rem",height:"6.5rem"}},Be=({open:s,onClose:r,supplier:a})=>e.jsxs(re,{anchor:"right",open:s,children:[e.jsxs(u,{sx:w.container,children:[e.jsx(ie,{sx:w.closeIconButton,onClick:r,children:e.jsx(ae,{sx:w.closeIcon})}),e.jsxs(u,{sx:w.inner,children:[e.jsx(oe,{sx:w.iconThankyou}
1),e.jsx(C,{variant:"bold",sx:w.thankYouTitle,children:"Thank you for approving works"}),e.jsxs(C,{variant:"bold",sx:w.subtitle,children:["We will now arrange a time with ",a," to deal with this issue."]})]})]}),e.jsx(u,{sx:w.bottomContainer,children:e.jsx(D,{onClick:r,variant:"primary-dark",sx:w.button,children:"Got it"})})]}),Ee=c.memo(Be),{palette:f}=U,O={fontSize:"0.75rem",fontWeight:900,borderRadius:"0.25rem",height:"auto",mt:"0.5rem",mb:"0.75rem"},m={headerContainer:{display:"flex",alignItems:{xs:"flex-start",md:"baseline"},flexDirection:{xs:"column",md:"row"},mb:{xs:"1rem",md:"1.5rem"}},separator:{height:"0.063rem",width:"100%",backgroundColor:f.grey[200],mb:"1rem"},heading:{fontSize:{sm:"1.25rem",md:"1.5rem"},fontWeight:700,lineHeight:{sm:"1.25rem",md:"1.75rem"},color:f.primary.main},headingSub:{fontSize:{sm:"0.75rem",md:"0.875rem"},fontWeight:{sm:500,md:700},lineHeight:{sm:"1rem",md:"1.25rem"},color:f.grey[400],ml:{md:2}},accordion:{backgroundColor:`${f.grey[50]} !important`,".Mui-disabled":{opacity:"1 !important"}},quoteDisabled:{opacity:.3},supplier:{fontWeight:"900",display:"flex",alignItems:"flex-start"},price:{color:f.primary.main,fontWeight:"bold",alignSelf:"flex-start",justifyContent:"center"},actionArea:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:1},button:{mb:"0.75rem",fontWeight:"bold",width:{xs:"49%",sm:"6.25rem"},mt:{xs:"0.75rem",sm:0}},accepted:{...O,border:`0.063rem solid ${f.vineGreen[200]}`,backgroundColor:f.primary[400],color:f.vineGreen[200],width:"fit-content"},rejected:{...O,border:`0.063rem solid ${f.bloodRed[100]}`,backgroundColor:f.brightRed[900],color:f.bloodRed[100],width:"fit-content"},instructed:{...O,border:`0.063rem solid ${f.vineGreen[200]}`,backgroundColor:f.primary[400],color:f.vineGreen[200]}},De=({issues:s,issueId:r})=>{const a=c.useRef(!1),[h,o]=c.useState({open:!1,title:"",description:""}),y=V(),{isUpdatingQuote:j,isQuoteUpdateError:x,returnedIssue:i}=Z(t=>{const l=t.maintenanceIssuesReducer;return{isUpdatingQuote:l.isApprovingQuote||l.isRejectingQuote,isQuoteUpdateError:!!l.quoteApproveError||!!l.quoteRejectError,returnedIssue:l.returnedIssue}});c.useEffect(()=>{x&&(o({open:!0,title:"Failed to update quote",description:"Could not process your request. Please try again."}),a.current=!1)},[x]),c.useEffect(()=>{!j&&a.current&&Array.isArray(i)&&i.length&&(k(!0),a.current=!1)},[j,i]);const{propertyId:S}=G(),[p,I]=c.useState([]),[M,k]=c.useState(!1),[b,v]=c.useState("");c.useEffect(()=>{var l;const t=s.find(E=>E.issueId===r);I((l=t==null?void 0:t.supplierQuotes)==null?void 0:l.quotes)},[r,s]);const $=t=>{y(ce(S,r,t))},B=async(t,l)=>{j||(a.current=!0,v(l),y(de(S,r,t)))};if(!(p!=null&&p.length))return null;const g=p==null?void 0:p.find(t=>t.status=="SIN");return g?e.jsxs(e.Fragment,{children:[e.jsx(C,{sx:m.heading,children:"Approved supplier"}),e.jsx(u,{display:"flex",width:"100%",justifyContent:"space-between",children:e.jsxs(u,{sx:m.supplier,children:[e.jsx(C,{mr:1,children:g.supplierName}),e.jsx(u,{sx:m.price,children:N(g.price.toString())})]})}),e.jsx(H,{label:`${q[g.status]}`,sx:m.instructed})]}):e.jsxs(e.Fragment,{children:[e.jsx(le,{open:h.open,severity:"error",title:"Failed to update quote",description:"Could not process your request. Please try again.",anchorOrigin:{vertical:"top",horizontal:"center"},onClose:()=>o({open:!1}),autoHideEnable:!0,autoHideAfter:3e3}),e.jsxs(u,{sx:m.headerContainer,children:[e.jsx(C,{sx:m.heading,children:"Quotes from suppliers"}),e.jsx(C,{sx:m.headingSub,children:"Please review & approve or reject"})]}),p==null?void 0:p.map((t,l)=>e.jsxs(e.Fragment,{children:[e.jsxs(u,{display:"flex",width:"100%",justifyContent:"space-between",flexDirection:{xs:"column",sm:"row"},children:[e.jsxs(u,{sx:m.supplier,children:[e.jsx(C,{mr:1,children:t.supplierName}),e.jsx(u,{sx:m.price,children:N(t.price.toString())})]}),!["APP","REJ"].includes(t.status)&&e.jsxs(u,{sx:m.actionArea,children:[e.jsx(D,{sx:m.button,variant:"primary",size:"small",disabled:j,onClick:()=>{B(t.id,t.supplierName)},containerSxForVariant:m.actionArea,children:"Approve"}),e.jsx(D,{sx:m.button,variant:"secondary",size:"small",disabled:j,onClick:()=>{$(t.id)},children:"Reject"})]})]}),["APP","REJ"].includes(t.status)&&e.jsx(H,{label:`${q[t.status]}`,sx:t.status=="REJ"?m.rejected:m.accepted}),e.jsx(u,{sx:m.separator,visibility:l===p.length-1?"hidden":"visible"})]})),e.jsx(Ee,{onClose:()=>{k(!1),v("")},open:M,supplier:b})]})},Pe=({isLandlord:s,isManaged:r})=>{const a=c.useCallback(()=>{switch(!0){case(s&&r):return xe;case(s&&!r):return me;case(!s&&r):return pe;case(!s&&!r):return ue;default:return null}},[s,r]);return e.jsxs(L,{sx:d.closedIssueBanner,children:[e.jsx(L,{sx:d.closedIssueIcon,children:e.jsx(he,{})}),e.jsx(C,{sx:d.closedIssueText,children:"There are no open issues right now"}),e.jsx(C,{sx:d.closedIssueSubText,children:a()})]})},Qe=({closedIssuesCount:s,openIssuesCount:r,handleReportIssue:a,buttonLabel:h,closedIssues:o,openIssues:y,isTenancyManaged:j=!1,isLandlord:x=!1})=>{const{issueId:i}=G(),S=X(),{breakpoints:p}=z(),I=K(p.values.lg),M=i!==void 0,[k,b]=c.useState(""),v=(n,R)=>{n.preventDefault(),b(A=>A===R?"":R)},[$,B]=c.useState(i||""),[g,t]=c.useState(y);c.useEffect(()=>{B(i??"")},[i]),c.useEffect(()=>{i&&E(i??"")},[i]);const l=()=>{S(-1)};c.useEffect(()=>{s&&s>0&&i&&o.filter(n=>n.issueId===i).length>0&&b("ClosedIssues"),r&&r>0&&i&&y.filter(n=>n.issueId===i).length>0&&b("OpenIssues")},[o,s,i,y,r]);const E=n=>{const R=g.map(A=>A.issueId===n?{...A,updatesCount:0}:A);t(R)},F=(n,R=0)=>{R>0&&E(n),x&&B(n)};return e.jsxs(P,{container:!0,sx:d.mainContainer,children:[I&&M&&e.jsx(D,{variant:"back",sx:d.backButton,onClick:l,children:"Back"}),e.jsx(P,{item:!0,xs:12,sx:d.issuesContainer,children:x&&e.jsx(De,{issues:y,issueId:$})}),(I&&!M||!I)&&e.jsxs(P,{item:!0,xl:4,lg:4,xs:12,sx:d.issuesContainer,children:[a&&!x&&e.jsx(u,{sx:d.buttonContainer,children:e.jsx(D,{sx:d.button,variant:"primary",color:"primary",onClick:a,containerSxForVariant:d.mainContainer,children:h})}),!!r&&r>0&&e.jsx(_,{sx:{...d.openIssues,...x?{marginTop:"0"}:{}},title:`Open issues (${r}
1)`,onChange:n=>v(n,"OpenIssues"),open:k==="OpenIssues",bodyStyle:d.bodyStyle,children:e.jsx(u,{sx:d.issueListContainer,children:g==null?void 0:g.map(n=>{var A,W;const R=(W=(A=n.supplierQuotes)==null?void 0:A.quotes)==null?void 0:W.filter(ee=>ee.status=="STL");return e.jsx(J,{selected:i===n.issueId,issueId:n.issueId,date:n.createdDatetime,reference:n.reference,title:n.title,updatedBy:n.updatedBy,updatesCount:n.updatesCount,isClosed:!1,issueCount:r,quotesForApproval:n.quotesForApproval,quotesToAppRej:R,onSelectIssue:()=>F(n.issueId,n.updatesCount)},n.issueId)})})}),s>0&&e.jsx(_,{sx:{...d.closedIssues,...a?{}:{marginTop:"0"}},title:`Closed issues (${s})`,onChange:n=>v(n,"ClosedIssues"),open:k==="ClosedIssues",bodyStyle:d.bodyStyle,children:e.jsx(u,{sx:d.issueListContainer,children:o==null?void 0:o.map(n=>e.jsx(J,{issueId:n.issueId,date:n.createdDatetime,reference:n.reference,selected:i===n.issueId,title:n.title,updatedBy:n.updatedBy,isClosed:!0,issueCount:s},n.issueId))})})]}),e.jsxs(P,{item:!0,xl:8,lg:8,xs:12,sx:d.chatContainer,children:[!i&&!r&&s&&e.jsx(Pe,{isManaged:j,isLandlord:x}),e.jsx(ge,{})]})]})},Ue=()=>{const s=X(),{propertyId:r,tenancyId:a}=fe(),{property:h,currentTenancy:o}=ye(),y=()=>{s(p.pathname.split("maintenance")[0]+"maintenance/managed-report-issue")},j=()=>{s(p.pathname.split("maintenance")[0]+"maintenance/non-managed-report-issue")},{isLoading:x,issues:i,unreadIssues:S}=Z(t=>t.maintenanceIssuesReducer),p=je(),I=V(),{breakpoints:M}=z(),{issueId:k}=G(),b=c.useMemo(()=>{var t;if(a)return(t=h==null?void 0:h.tenancies.find(l=>l.tenancy.tenancyId===a))==null?void 0:t.isManaged},[h,a]),v=be(),$=K(M.values.lg);c.useEffect(()=>{var l;const{openIssues:t}=Y(i,S);t&&(t==null?void 0:t.length)>0&&!$&&!x&&(k||s(ve(p.pathname)+"/"+((l=t==null?void 0:t.at(0))==null?void 0:l.issueId)))},[k,S,i,b,$,p,s,x]),c.useEffect(()=>{(o==null?void 0:o.contactRelationshipType)==="GUARANTOR"&&s(`/account/property/${r}/tenancy/${a}/in-tenancy/overview`)},[o==null?void 0:o.contactRelationshipType,s,r,a,x]),c.useEffect(()=>{r&&a&&(o==null?void 0:o.contactRelationshipType)!=="GUARANTOR"&&(I(Ce({propertyId:r,tenancyId:a})),I(Ie()))},[I,r,a,o==null?void 0:o.contactRelationshipType]);const B=c.useMemo(()=>v?"Great news! You do not have any reported issues for your property":b?"If you require maintenance for your property, please let us know.":"If you require maintenance, please inform your landlord by reporting an issue.",[v,b]);let g;if(x)g=e.jsx(ke,{open:!0,hasBackdrop:!1});else if(i.length===0)g=e.jsx(Me,{isLandlord:v,heading:"Maintenance issues",description:B,buttonLabel:"Report a maintenance issue",handleClick:!v&&b?y:j,icon:e.jsx(Ae,{sx:d.icon})});else{const{closed:t,open:l}=we(i),{openIssues:E,closedIssues:F}=Y(i,S);g=e.jsx(Qe,{closedIssuesCount:t,openIssuesCount:l,handleReportIssue:b?y:j,isTenancyManaged:b,buttonLabel:"Report a maintenance issue",openIssues:E,closedIssues:F,isLandlord:v})}return e.jsxs(e.Fragment,{children:[e.jsx(Se,{title:`My Foxtons: Maintenance${h?` for ${h.title}`:""}`,description:`My Foxtons: Maintenance${h?` for ${h.title}`:""}`}),g]})};export{Ue 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.