\n Your ideal property represents an expression of your\n personality. And so Montague Real Estates takes pride in\n offering a truly personalised service, on hand to guide you\n through every step.\n
\n\n Contact Us\n
\nemail@montaguerealestate.com
\n020 7118 1162
\n\n Your enquiry has succesfully been submitted. A member of our\n team will get back to you within 48 hours.\n
\n ) : null}\n\n {this.state.error ? (\n\n Your enquiry could not be sumbitted, please try again, or call\n us on 020 7118 1162\n
\n ) : null}\n\n \n{paragraph}
\n {buttonTitle && !button && (\n{paragraph}
}\n {button && }\n {buttonTitle && (\n\n
{priceLabel}
\n{paragraph}
\n{team.fields.email}
\n{this.state.component.paragraph}
\n@{publisher} {date}
\nProperty Name | \nBedroom | \nBathroom | \nSqft | \nListing Price | \n\n |
---|---|---|---|---|---|
{name} | \n{bedrooms} | \n{bathroom} | \n{propertySizeSqm} | \n{price} | \n\n View Property\n | \n
{\n if(slider) (slider as any).slickGoTo(key);\n setActiveBlog(blog)\n }}>{blog.title}
\n // \n )\n })}\n showSlide(e, id)}>{title}
{title}
\n \n )\n }\n}","import React, { Component, Fragment } from \"react\";\nimport \"../../../Styles/navigation.sass\";\nimport { client } from \"../../../ContentfulContext\";\nimport NavigationSlider from \"./Navigation-slider\";\nimport { Link } from \"react-router-dom\";\n\nclass Navigation extends Component {\n constructor(props) {\n super(props);\n this.state = {\n navigation: [],\n nav_state: false,\n pathname: props.pathname,\n colour: props.colour,\n nav_size: false,\n hideBurger: props.hideBurger,\n };\n }\n\n onClickHanlder = () => {\n this.setState({\n nav_state: !this.state.nav_state,\n });\n\n const el = document.querySelectorAll(\".navigation-slider .open\");\n\n if (el) {\n for (const e of el) {\n e.className = \"navigation-slider\";\n }\n }\n };\n\n async getAllEntries() {\n let snapshot = this.state.navigation;\n snapshot.forEach(async (item) => {\n if (!item.fields?.links) return;\n\n for await (let link of item.fields.links) {\n await client\n .getEntry(link.sys.id)\n .then((entry) => {\n link.fields = entry.fields;\n return;\n })\n .catch((err) => console.log(err));\n }\n await this.setState({ navigation: snapshot });\n });\n }\n\n async componentDidUpdate() {\n if (this.state.colour !== this.props.colour) {\n await this.setState({ colour: this.props.colour });\n }\n\n if (this.state.hideBurger !== this.props.hideBurger) {\n await this.setState({ hideBurger: this.props.hideBurger });\n }\n }\n\n handleScroll = (event) => {\n let scrollTop = window.pageYOffset;\n\n if (scrollTop > 10 && this.state.nav_size === false) {\n this.setState({ nav_size: true });\n } else if (scrollTop < 10 && this.state.nav_size === true) {\n this.setState({ nav_size: false });\n }\n };\n\n async componentDidMount() {\n client\n .getEntry(\"HEdbWFAfUiLbzzdZJiKa3\")\n .then(async (entry) => {\n await this.setState({ navigation: entry.fields.link });\n this.getAllEntries();\n })\n .catch((err) => console.log(err));\n\n window.addEventListener(\"scroll\", this.handleScroll);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"scroll\", this.handleScroll);\n }\n\n render() {\n return (\n{title}
\n {links.map((link, index) => {\n const { title, url } = link.fields;\n if (url.includes(\"http\")) return{title}
\n return{title}
\n })}\nStay In Touch
\n\n \n{this.state.footerLegal}
\nThis site uses cookies and similar technology to function properly and to provide the services present on it, analytical cookies (our own and third party) to understand and improve users' browsing experience, and profiling cookies (our own and third party) to serve you advertisements in line with preferences displayed while browsing online. For further information, see our Cookie Policy. To refuse consent for some or all cookies, click here. By clicking \"accept\", you consent to the use of the aforementioned cookies.
\nMontague Real Estate is known for its refreshing, modern and luxury approach to real estate, whilst providing a premium service to clients across the globe. Our relationships with clients can start with something as simple as real estate, but our services go far beyond that, including complex acquisitions, investment advice and luxury sales.
\n Home\n Contact Us\n\n {textColour ? \n \n { title }\n : \n \n { title }\n \n }
,\n \"Heading 5\":{ title }
,\n \"Heading 6\":{textColour ? { title } : title }
,\n \"Heading 7\":{ title }
\n }[ titleSize ]}\n >\n)\n\nconst Paragraph = ({paragraph, column, accent}: TextProps) => (\n{ paragraph }
\n)","import React, { Reducer, useReducer, useState } from \"react\";\nimport { Text } from \"../Helper/text\";\nimport styles from \"./Consultation.module.sass\";\nimport emailjs from \"emailjs-com\";\n\nfunction isValidEmailAddress(email: string = \"\"): boolean {\n const reg =\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return reg.test(email.toLowerCase());\n}\n\ntype Action = {\n url?: string;\n messages?: Message[];\n input: \"firstName\" | \"lastName\" | \"email\" | \"phone\" | \"\";\n save: boolean;\n};\n\ntype Message = {\n owner: string | null;\n text: string;\n options: {\n title?: string;\n action: Action;\n }[];\n};\n\ninterface ConsultationState {\n email: string;\n phone: string;\n firstName: string;\n lastName: string;\n undefined: string;\n error: string;\n}\n\nlet feedInit: Message[] = [\n {\n owner: \"Casey Nankivell\",\n text: \"Schedule a call with one of our property professionals or let us know how we can help.\",\n options: [\n {\n title: \"WhatsApp\",\n action: {\n input: \"\",\n save: false,\n url: \"https://api.whatsapp.com/send?phone=+442071181162\",\n },\n },\n {\n title: \"Phone Call\",\n action: {\n input: \"\",\n save: false,\n messages: [\n {\n owner: null,\n text: \"Phone Call\",\n options: [],\n },\n {\n owner: \"Casey Nankivell\",\n text: \"Please enter your phone number.\",\n options: [\n {\n action: {\n save: false,\n input: \"phone\",\n },\n },\n ],\n },\n ],\n },\n },\n {\n title: \"Email\",\n action: {\n input: \"\",\n save: false,\n messages: [\n {\n owner: null,\n text: \"Email\",\n options: [],\n },\n {\n owner: \"Casey Nankivell\",\n text: \"Please enter your email addresss.\",\n options: [\n {\n action: {\n save: false,\n input: \"email\",\n },\n },\n ],\n },\n ],\n },\n },\n ],\n },\n];\n\nconst actions = {\n lastName: [\n {\n owner: \"Casey Nankivell\",\n text: \"Thank you for your enquiry. We aim to be in contact within 48hours.\",\n options: [\n {\n action: {\n input: \"\",\n save: true,\n },\n },\n ],\n },\n ],\n phone: [\n {\n owner: \"Casey Nankivell\",\n text: \"Please enter your first name.\",\n options: [\n {\n action: {\n save: false,\n input: \"firstName\",\n },\n },\n ],\n },\n ],\n email: [\n {\n owner: \"Casey Nankivell\",\n text: \"Please enter your first name.\",\n options: [\n {\n action: {\n save: false,\n input: \"firstName\",\n },\n },\n ],\n },\n ],\n firstName: [\n {\n owner: \"Casey Nankivell\",\n text: \"Please enter your family name.\",\n options: [\n {\n action: {\n save: false,\n input: \"lastName\",\n },\n },\n ],\n },\n ],\n};\n\nexport function Consultation() {\n const [open, setOpen] = useStateToday
\n{message.text}
\n{option.title}
\n \naddToFeed(option.action)}\n style={{ margin: 0 }}\n >\n {option.title}\n
\n{state.error}
\n \n{this.state.component.fields.fieldTitle} {this.state.component.fields.fieldContent}
\n )}\n{\n this.onClickHandle(key);\n }}\n >\n {tabHeading}\n
\n );\n })}\nResults: {properties.length}
*/}\n\nsetShowFilters(!showFilters)}>Filters
\n\n {bedroomsLabel} Beds | {bathroomsLabel} Baths |{\" \"}\n {sqftLabel} Sqft\n
\n\n {priceLabel}\n {filters.rent && \"pcm\"}\n
\n \n{paragraph}
\n{extract}
\n {button && }\n\n {this.state.property.bedrooms} Beds |{\" \"}\n {this.state.property.bathroom} Baths |{\" \"}\n {this.state.property.propertySizeSqm} Sqft |{\" \"}\n {this.state.property.price}\n
\n{this.state.property.description}
\n