1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8890],{32417:(e,r,t)=>{t.d(r,{jm:()=>h,dB:()=>L,Ay:()=>j,Ez:()=>T,mj:()=>D,dC:()=>M,xM:()=>I});var i=t(95531),o=t(37876),a=t(76721),l=t(30533),s=t(14232),n=t(50634),m=t(23520),d=t.n(m),c=t(77622);let p="https://www.trulia.com/images/txl3R/placeholder_images/PropertyCardPlaceholder.svg",u,h={FLOOR_PLAN:"HOME_FloorPlan",PROPERTY:"HOME_Property",ROOM_FOR_RENT:"HOME_RoomForRent",RENTAL_COMMUNITY:"HOME_RentalCommunity",BUILDER_COMMUNITY:"HOME_BuilderCommunity"},g={RECENTLY_SOLD_PRICE:"HOME_LastSoldPrice",TRULIA_ESTIMATE_PRICE:"HOME_ValuationPrice",ON_MARKET_PRICE:"HOME_SinglePrice",FORECLOSURE_ESTIMATE:"HOME_ForeclosureEstimatePrice",EMPTY_PRICE:"HOME_EmptyPrice",EMPTY_SOLD_PRICE:"HOME_EmptySoldPrice",ON_MARKET_PRICE_RANGE:"HOME_PriceRange",UNKNOWN_PRICE:"HOME_UnknownPrice"},A=e=>e.price&&e.price.formattedPrice?e.price.typeDescription&&"HOME_ValuationPrice"===e.price.__typename?`${e.price.typeDescription} ${e.price.formattedPrice}`:e.price.formattedPrice:"",y=(e,r=!1,t)=>{let i=t?.bedAbbrev??"bd",o=t?.studio??"Studio";if(r&&e.bedrooms&&e.bedrooms.formattedValue)return e.bedrooms.formattedValue;if(e.bedrooms?.value)return`${e.bedrooms.value} ${i}`;if(e.bedrooms?.__typename==="HOME_BedroomRange"&&e.bedrooms?.min!==null){let r=0===e.bedrooms.min?o:e.bedrooms.min,t=0===e.bedrooms.max?o:e.bedrooms.max;return t===r||null===t?0===e.bedrooms.min?o:`${r} ${i}`:`${r}-${t} ${i}`}return""},b=(e,r=!1,t)=>{let i=t?.bathAbbrev??"ba";return r&&e.bathrooms&&e.bathrooms.formattedValue?e.bathrooms.formattedValue:e.bathrooms?.value?`${e.bathrooms.value} ${i}`:e.bathrooms?.__typename==="HOME_BathroomRange"&&e.bathrooms?.min!==null?e.bathrooms.min===e.bathrooms.max||null===e.bathrooms.max?`${e.bathrooms.min} ${i}`:`${e.bathrooms.min}-${e.bathrooms.max} ${i}`:""},f=e=>{let r="default";switch(e){case"HIGHLIGHTED":r="on market";break;case"ALERT":r="off market";break;case"LOWLIGHT":r="lowlight";break;case"NORMAL":r="default"}return r},C=(e,r)=>e.tags||e.fullTags?r?e.fullTags.map(e=>{let r=e.icon?.vectorImage?.svg;return{type:f(e.level),value:e.formattedName||"",iconUrl:r}}):e.tags.map(e=>{let r=e.icon?.vectorImage?.svg;return{type:f(e.level),value:e.formattedName||"",iconUrl:r}}):null,O=e=>e.priceChange&&e.priceChange.priceChangeDirection?"EQUAL"===e.priceChange.priceChangeDirection?u:e.priceChange.priceChangeDirection.toLowerCase():u,E=e=>{let r="",t="",i="",o="";return e.location&&(r=((e,r,t)=>{if(!e)return t||"";if(!r)return e;let i=e.replace(/\.$/,"").trim();return r.replace(/\.$/,"").trim().startsWith(i)?e:`${e} | ${r}`})(e.location.communityLocation,e.location.streetAddress,e.location.partialLocation),t=e.location.city||"",i=e.location.stateCode||"",o=e.location.zipCode||""),{streetAddress:r,city:t,stateCode:i,zipCode:o}},_=e=>e.__typename===h.RENTAL_COMMUNITY?null:e.floorSpace&&e.floorSpace.formattedDimension,S=(e,r=[],t=p,i="small")=>{let o={},a=(0,c.supportsWebp)(r);return e.media&&Array.isArray(e.media.photos)&&e.media.photos.length>0&&e.media.photos[0].url&&e.media.photos[0].url[i]&&(o.photos=e.media.photos.map(e=>a&&e.webpUrl?{url:e.webpUrl&&(e.webpUrl[i]||e.webpUrl.extraLarge||e.webpUrl.large||e.webpUrl.medium||e.webpUrl.small)}:{url:e.url[i]||e.url.extraLarge||e.url.large||e.url.medium||e.url.small}),o.imageSrc=o.photos[0].url),e.media&&e.media.heroImage&&e.media.heroImage.url&&e.media.heroImage.url[i]?o.imageSrc=a&&e.media.heroImage.webpUrl?e.media.heroImage.webpUrl[i]:e.media.heroImage.url[i]:o.imageSrc||(o.imageSrc=t),o},v=e=>e?.media?.heroImage?.__typename==="MEDIA_HeroImageStreetView",T=(e,r)=>{if(r){let r=e?.activeListing?.provider?.extraShortSummary||e?.lastSold?.provider?.extraShortSummary;if(Array.isArray(r))return r.join(", ")}let t=e?.activeListing?.provider?.summary||e?.lastSold?.provider?.summary||e?.provider?.summary;if(Array.isArray(t))return t.join(", ")},R=e=>e?.displayFlags?.showMLSLogoOnListingCard?e?.activeListing?.provider?.listingSource?.logoUrl||e?.lastSold?.provider?.listingSource?.logoUrl:"",I=(e,r,t=p,i={},o)=>{let{useFullTags:a,useExtraShortSummary:l,useFullAttributes:s,propertyCardFactLabels:n}=i;return{...E(e),...S(e,r,t,o),tags:C(e,a),saved:e.preferences&&e.preferences.isSaved,propertyLink:e.url||"",price:A(e),beds:y(e,s,n),baths:b(e,s,n),floorSpace:_(e),lotSize:e?.lotSize?.formattedDimension,trend:O(e),imageAlt:e.location&&e.location.fullLocation||"",fallbackSrc:t,isStreetView:v(e),summary:T(e,l),summaryColor:e?.displayFlags?.addAttributionProminenceOnListCard?"default":"lowlight",logoUrl:R(e)}},M=(e,r,t=p,i={},o)=>{let{useFullAttributes:a,propertyCardFactLabels:l}=i;return{...E(e),...S(e,r,t,o),tags:C(e),saved:e.preferences&&e.preferences.isSaved,propertyLink:e.url||"",price:A(e),beds:y(e,a,l),baths:b(e,a,l),floorSpace:_(e),lotSize:e?.lotSize?.formattedDimension,trend:O(e),imageAlt:e.location&&e.location.fullLocation||"",fallbackSrc:t,isStreetView:v(e),isRoomForRent:e.__typename===h.ROOM_FOR_RENT,summary:T(e),logoUrl:R(e),priceAttributes:e?.price?.typeDescription?{typeDescription:e.price.typeDescription,typeDescriptionIcon:e.price.typeDescriptionIcon,typeDescriptionDetail
1s:e.price.typeDescriptionDetails}:null}},L=e=>{let r=e&&e.__typename;return r===h.PROPERTY||r===h.FLOOR_PLAN||r===h.ROOM_FOR_RENT||r===h.RENTAL_COMMUNITY},D=()=>g;var P=t(19081),H=t(33791),N=t(81961),k=t(49548),x=t(18113),w=t(72035);class F extends s.Component{static{this.defaultProps={lazyLoadImage:!1,carouselEnabled:!0,placeholderImage:"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",useFullTags:!1,homeDetails:{url:"",tags:[],bedrooms:"",bathrooms:"",floorSpace:null,currentStatus:null,media:null,location:null,isSaveable:!1,preferences:null,price:null,priceChange:null,handleHideHome:null,handleShareHome:null,handleSeeSimilarHomes:null},eagerLoadingFirstImage:!1}}static{this.fragments=k.A}render(){let{homeDetails:e}=this.props,{__typename:r}=e,{isActiveForRent:t}="currentStatus"in e?e.currentStatus:{isActiveForRent:!1};return r===h.ROOM_FOR_RENT||r===h.RENTAL_COMMUNITY||t?this.generateForRentPropertyCard():r===h.PROPERTY||r===h.FLOOR_PLAN||r===h.BUILDER_COMMUNITY?this.generateForSalePropertyCard():null}constructor(...e){super(...e),this.state={mediaIndex:0},this.onSave=()=>{let{onSave:e,onUnsave:r,homeDetails:t}=this.props;t.preferences&&t.preferences.isSaved?r({homeDetails:t}):e({homeDetails:t})},this.onClick=e=>{let{onClick:r,homeDetails:t,fallbackSrc:i,session:o={},mediaSize:a}=this.props,{supportedMediaTypes:l}=o,{mediaIndex:s}=this.state;if(r){let{photos:o,imageSrc:n}=S(t,l,i,a);r(e,o?o[s].url:n)}},this.onMediaIndexChanged=e=>{let{onMediaIndexChanged:r}=this.props;this.setState({mediaIndex:e},()=>{r&&r(e)})},this.filterCardPhotos=e=>{let{lazyLoadImage:r,placeholderImage:t,carouselEnabled:i}=this.props;if(r){let{photos:r,imageSrc:i,imageSources:o,...a}=e;return{...a,imageSrc:t}}if(!i){let{photos:r,imageSrc:t,imageSources:i,...o}=e;return{...o,imageSrc:t}}return e},this.filterOtherCardProps=e=>{let{handleLeadForm:r,handleHideHome:t,handleSeeSimilarHomes:i,carouselEnabled:o,handleShareHome:a,viewer:l,searchType:s,placeholderImage:n,lazyLoadImage:m,isLeadFormSubmitted:d,createAnalyticsEvent:c,trackingModuleName:p,ab:u,...h}=e;return h},this.getAdditionalActions=()=>{let e,{handleShareHome:r,handleHideHome:t,handleUnhideHome:i,handleSeeSimilarHomes:s,onUnsave:n,onSave:m,homeDetails:d,createAnalyticsEvent:c,isActionRowExposed:p,isLeadFormSubmitted:u,handleLeadForm:h,i18n:g}=this.props,{t:A}=g,y=r?{id:"share",title:A("homeDetails.userActions.share"),icon:(0,o.jsx)(l.liv,{}),onClick:e=>{r(d),(0,x.A)(e)}}:null,b=t?{id:"hide",title:A("homeDetails.userActions.hide"),icon:(0,o.jsx)(l.WKY,{}),onClick:e=>{t(d),(0,x.A)(e)}}:null,f=i?{id:"unhide",title:A("homeDetails.userActions.unhide"),icon:(0,o.jsx)(l.WKY,{}),onClick:e=>{i(d),(0,x.A)(e)}}:null,C=d.isTourAvailable,O=h?{id:"lead form",title:u?"Sent":C?"Tour":"Email",disabled:u,icon:C?(0,o.jsx)(l.CTc,{}):(0,o.jsx)(l.aZ_,{}),onClick:e=>{(0,x.A)(e),h(),c(a.c.ACTION,{interactedWith:"property card exposed: lead form click",leadStart:1}).track()}}:null,E=s?{id:"similarHomes",title:A(p?"homeDetails.userActions.similar":"homeDetails.userActions.seeSimilarHomes"),icon:(0,o.jsx)(l.iQn,{}),onClick:e=>{s(d),(0,x.A)(e),c(a.c.INTERACTION,{interactedWith:`property card ${p?"exposed":"dropdown"} action:similar homes`}).track()}}:null;r&&(e=d.preferences&&d.preferences.isSaved?{id:"unsave",title:A("homeDetails.userActions.unsave"),icon:(0,o.jsx)(l.zwu,{}),onClick:e=>{n({homeDetails:d}),c(a.c.INTERACTION,{interactedWith:"property card:dropdown unsave"}).track(),(0,x.A)(e)}}:{id:"save",title:A("homeDetails.userActions.save"),icon:(0,o.jsx)(l.C3E,{}),onClick:e=>{m({homeDetails:d}),c(a.c.INTERACTION,{interactedWith:`property card ${p?"exposed":"dropdown"}:dropdown save`}).track(),(0,x.A)(e)}});let _=d.preferences?.isSaved;return p?[E,_?null:b,y,_?O:null,_?null:e].filter(e=>e):[e,y,b,f,E].filter(e=>e)},this.generateForSalePropertyCard=()=>{let{homeDetails:e,fallbackSrc:r,useFullTags:t,onSave:i,session:a={},onUnsave:s,index:n,mediaSize:m,eagerLoadingFirstImage:d,breakpoint:c,isActionRowExposed:p,useFullAttributes:u,additionalActions:h,...g}=this.props,{supportedMediaTypes:A}=a,y=!0===e.isSaveable&&i&&s,b=this.filterCardPhotos(I(e,A,r,{useFullTags:t,useFullAttributes:u,propertyCardFactLabels:{bedAbbrev:"bd",bathAbbrev:"ba",studio:"Studio"}},m)),f=this.filterOtherCardProps(g),C=h||this.getAdditionalActions(),O=e?.groupedInsights?.insights&&e?.media?.photos?.length>0?e?.groupedInsights?.insights:null;return(0,o.jsx)("div",{ref:this.cardRef,children:(0,o.jsx)(l.Q94,{...b,...f,onClick:this.onClick,onMediaIndexChanged:this.onMediaIndexChanged,onSave:y?this.onSave:null,facts:O,"data-testid":"home-card-sale",fetchpriority:d&&0===n?"high":"auto",additionalActions:C,isActionRowExposed:p})})},this.generateForRentPropertyCard=()=>{let{homeDetails:e,fallbackSrc:r,onSave:t,onUnsave:i,session:a={},index:s,mediaSize:m,eagerLoadingFirstImage:d,useFullAttributes:c,ab:p,additionalActions:u,...h}=this.props,{supportedMediaTypes:g}=a,A=!0===e.isSaveable&&t&&i,{t:y}=this.props.i18n,b={bedAbbrev:y("propertyCard.bedAbbrev"),bathAbbrev:y("propertyCard.bathAbbrev"),studio:y("propertyCard.studio")}
1,f=this.filterCardPhotos(M(e,g,r,{useFullAttributes:c,propertyCardFactLabels:b},m)),C=this.filterOtherCardProps(h),O=u||this.getAdditionalActions();return(0,o.jsx)(n.pL,{threshold:0,as:"div",onChange:this.handleInViewTracking,triggerOnce:!0,children:(0,o.jsx)("div",{ref:this.cardRef,children:(0,o.jsx)(l.Yfw,{...f,...C,onClick:this.onClick,onMediaIndexChanged:this.onMediaIndexChanged,onSave:A?this.onSave:null,"data-testid":"home-card-rent",fetchpriority:d&&0===s?"high":"auto",additionalActions:O})})},e?.url)},this.handleInViewTracking=e=>{let{createAnalyticsEvent:r,trackingModuleName:t,homeDetails:i}=this.props;e&&r(a.c.ACTION,{pageDetails:t,providerListingId:"providerListingId"in i?i.providerListingId:null,eventAction:"RentalPropertyImpression",sendOnlyTo:"clickstream"}).track()}}}F=(0,i.Cg)([(0,P.W)({session:H.IC,ab:w.y}),(0,a.u4)()],F);let U=(0,N.z)(F);d()(U,F);let $=(0,l.WjH)(U);d()($,U);let j=$},49548:(e,r,t)=>{t.d(r,{A:()=>o});var i=t(3219);let o={get homeDetails(){return(0,i.Ay)` 2 fragment HomeDetailsCardFragment on HOME_Details { 3 __typename 4 location { 5 city 6 stateCode 7 zipCode 8 streetAddress 9 fullLocation: formattedLocation(formatType: STREET_CITY_STATE_ZIP) 10 partialLocation: formattedLocation(formatType: STREET_ONLY) 11 } 12 price { 13 formattedPrice 14 ... on HOME_ValuationPrice { 15 typeDescription(abbreviate: true) 16 } 17 ... on HOME_SinglePrice { 18 typeDescription 19 typeDescriptionIcon 20 typeDescriptionDetails { 21 markdown 22 } 23 } 24 ... on HOME_PriceRange { 25 typeDescription 26 typeDescriptionIcon 27 typeDescriptionDetails { 28 markdown 29 } 30 } 31 } 32 url 33 homeUrl 34 tags(include: MINIMAL, includePriceDrops: $includePriceDrops) { 35 level 36 formattedName 37 icon { 38 vectorImage { 39 svg 40 } 41 } 42 } 43 fullTags: tags { 44 level 45 formattedName 46 icon { 47 vectorImage { 48 svg 49 } 50 } 51 } 52 floorSpace { 53 formattedDimension 54 } 55 lotSize { 56 ... on HOME_SingleDimension { 57 formattedDimension(minDecimalDigits: 2, maxDecimalDigits: 2) 58 } 59 } 60 bedrooms { 61 formattedValue(formatType: COMMON_ABBREVIATION) 62 ... on HOME_BedroomRange { 63 min 64 max 65 } 66 67 ... on HOME_FixedBedrooms { 68 value 69 } 70 } 71 bathrooms { 72 formattedValue(formatType: COMMON_ABBREVIATION) 73 ... on HOME_FixedBathrooms { 74 value 75 } 76 ... on HOME_BathroomRange { 77 max 78 min 79 } 80 } 81 isSaveable 82 preferences { 83 isSaved 84 } 85 metadata { 86 compositeId 87 legacyIdForSave 88 unifiedListingType 89 typedHomeId 90 } 91 typedHomeId 92 tracking { 93 key 94 value 95 } 96 displayFlags { 97 showMLSLogoOnListingCard 98 addAttributionProminenceOnListCard 99 } 100 ... on HOME_RoomForRent { 101 providerListingId 102 } 103 104 ... on HOME_RentalCommunity { 105 activeListing { 106 provider { 107 summary(formatType: SHORT) 108 listingSource { 109 logoUrl 110 } 111 } 112 } 113 location { 114 communityLocation: formattedLocation( 115 formatType: STREET_COMMUNITY_NAME 116 ) 117 } 118 providerListingId 119 } 120 121 ... on HOME_Property { 122 currentStatus { 123 isRecentlySold 124 isRecentlyRented 125 isActiveForRent 126 isActiveForSale 127 isOffMarket 128 isForeclosure 129 } 130 priceChange { 131 priceChangeDirection 132 } 133 activeListing { 134 provider { 135 summary(formatType: SHORT) 136 extraShortSummary: summary(formatType: EXTRA_SHORT) 137 listingSource { 138 logoUrl 139 } 140 } 141 dateListed 142 } 143 lastSold { 144 provider { 145 summary(formatType: SHORT) 146 extraShortSummary: summary(formatType: EXTRA_SHORT) 147 listingSource { 148 logoUrl 149 } 150 } 151 } 152 providerListingId 153 } 154 155 ... on HOME_FloorPlan { 156 priceChange { 157 priceChangeDirection 158 } 159 provider { 160 summary(formatType: SHORT) 161 } 162 } 163 } 164 `},get homeDetailsHero(){return(0,i.Ay)` 165 fragment HomeDetailsCardHeroFragment on HOME_Details { 166 media { 167 heroImage(fallbacks: $heroImageFallbacks) { 168 url {
169 small 170 medium 171 } 172 webpUrl: url(compression: webp) { 173 small 174 } 175 } 176 } 177 } 178 `},get homeDetailsPhotos(){return(0,i.Ay)` 179 fragment HomeDetailsCardPhotosFragment on HOME_Details { 180 media { 181 __typename 182 heroImage(fallbacks: $heroImageFallbacks) { 183 url { 184 small 185 medium 186 } 187 webpUrl: url(compression: webp) { 188 small 189 medium 190 } 191 } 192 photos { 193 url { 194 small 195 medium 196 } 197 webpUrl: url(compression: webp) { 198 small 199 medium 200 } 201 } 202 } 203 } 204 `},get homeDetailsCallToAction(){return(0,i.Ay)` 205 fragment HomeDetailsCallToActionFragment on HOME_Details { 206 hasPrequalifiers 207 ... on HOME_Property { 208 isTourAvailable(isOptimistic: true) 209 } 210 leadFormCallToAction(context: CARD, appendOneClick: true) { 211 callToActionType 212 callToActionDisplayLabel 213 supportsCancellableSubmission 214 buttonStyle 215 } 216 } 217 `}}},75258:(e,r,t)=>{t.d(r,{Z:()=>i.A});var i=t(49548)}}]);
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.