{"version":3,"sources":["utils/helpers.ts","interfaces/ComplexListingResponse.ts","contexts/KeyholeListingContext/KeyholeListingContext.tsx","utils/constants.ts","components/KeyholeListings/KeyholeListings.tsx","App.tsx","components/KeyholeListings/index.tsx","components/UiWrapper/UiWrapper.tsx","webpack:///./index.css?cbd3","index.css","webpack:///./utils/fonts.css?556a","utils/fonts.css","assets/fonts/OpenSans/OpenSans-Light.ttf","assets/fonts/OpenSans/OpenSans-LightItalic.ttf","assets/fonts/OpenSans/OpenSans-Regular.ttf","assets/fonts/OpenSans/OpenSans-Italic.ttf","assets/fonts/OpenSans/OpenSans-Bold.ttf","assets/fonts/OpenSans/OpenSans-BoldItalic.ttf","assets/fonts/OpenSans/OpenSans-ExtraBold.ttf","assets/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf","assets/fonts/RobotoSlab-Light.ttf","assets/fonts/RobotoSlab-Bold.ttf","assets/fonts/Raleway-Light.ttf","utils/utils.ts","contexts/ResponsiveContext/ResponsiveContext.tsx"],"names":["getComplexDetails","complex","numberOfRentals","toNonDecimalLocaleString","minimumRent","getShapeUrl","index","getPaginationParams","pagination","extGetPaginationParams","orgId","KeyholeListingContext","React","darLookup","a","async","rentalFound","fetchComplex","initialComplexListing","fetchComplexes","filters","undefined","KeyholeListingProvider","props","setFilters","fetchFilters","axios","method","url","withCredentials","response","data","mounted","Provider","value","darId","params","id","merge","endpoint","cached","request","process","children","useKeyholeListingContext","DEV_DOMAIN","parsedUrl","URL","window","location","href","parsedParams","URLSearchParams","search","initialComplexPagination","initialPagination","s","get","styles","StyleSheet","create","infoCardWrapper","width","infoSectionTitle","marginBottom","maxWidth","inner","marginHorizontal","listHeader","marker","borderWidth","height","transform","translateX","translateY","row","alignItems","flexDirection","justifyContent","wrapper","padding","KeyholeListings","dims","useResponsiveContext","complexes","setComplexes","complexesPagination","setComplexesPagination","searchStr","setSearchStr","selectedLandlord","setSelectedLandlord","hasSearched","setHasSearched","isEmpty","isLoading","setIsLoading","getComplexes","append","items","setAsyncTimeout","x","updateSelectedLandlord","set","label","toString","history","replaceState","handleSelectedLandlordClear","delete","handleClear","handleFiltersClear","includes","handleSearch","text","darLookupResponse","openInNewTab","open","newParams","handleOnLandlordSelect","isEqual","handleFetchMore","Promise","all","nextPaginatedParams","organizations","paramLandlord","foundLandlord","find","offset","style","paddingHorizontal","paddingBottom","theme","breakpoints","md","autoCompleteApiUrl","onClear","onInputChange","onSearch","inputValue","backgroundColor","colors","green1","marginTop","color","green","type","onPress","rgba","smoothBlack","fontWeight","noLine","marginVertical","flex","onChange","options","map","filter","length","mainStyle","red1","desc","subContent","source","uri","resizeMode","title","titleProps","titleStyle","red","opacity","total","i","key","nativeID","target","shortDescription","detailsProps","lat","long","bootstrapURLKeys","defaultCenter","Number","lng","defaultZoom","draggable","draggableCursor","fullscreenControl","zoomControl","clickableIcons","featureType","stylers","visibility","themeStyles","subContentStyle","tagline","zipcode","city","name","amount","disabled","ghosted","loading","App","require","UiWrapper","setDims","calcHeight","onResize","api","content","__esModule","default","module","exports","locals","___CSS_LOADER_API_IMPORT___","push","___CSS_LOADER_GET_URL_IMPORT___","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_IMPORT_1___","___CSS_LOADER_URL_IMPORT_2___","___CSS_LOADER_URL_IMPORT_3___","___CSS_LOADER_URL_IMPORT_4___","___CSS_LOADER_URL_IMPORT_5___","___CSS_LOADER_URL_IMPORT_6___","___CSS_LOADER_URL_IMPORT_7___","___CSS_LOADER_URL_IMPORT_8___","___CSS_LOADER_URL_IMPORT_9___","___CSS_LOADER_URL_IMPORT_10___","___CSS_LOADER_URL_REPLACEMENT_0___","___CSS_LOADER_URL_REPLACEMENT_1___","___CSS_LOADER_URL_REPLACEMENT_2___","___CSS_LOADER_URL_REPLACEMENT_3___","___CSS_LOADER_URL_REPLACEMENT_4___","___CSS_LOADER_URL_REPLACEMENT_5___","___CSS_LOADER_URL_REPLACEMENT_6___","___CSS_LOADER_URL_REPLACEMENT_7___","___CSS_LOADER_URL_REPLACEMENT_8___","___CSS_LOADER_URL_REPLACEMENT_9___","___CSS_LOADER_URL_REPLACEMENT_10___","ms","resolve","setTimeout","win","focus","limit","number","locale","isInteger","Intl","NumberFormat","maximumFractionDigits","format","getNonDecimalEnding","resources","cancel","config","cacheKey","CancelToken","cancelToken","token","res","result","isCancel","makeRequestCreator","dimensions","Dimensions","ResponsiveContext","ResponsiveProvider"],"mappings":"sFACA,gFAEaA,EAAoB,SAACC,GAAD,MAAoC,CAAIA,EAAQC,gBAAZ,kCAA2DC,YAAyBF,EAAQG,YAAa,WAEjKC,EAAc,SAACC,GAAD,MAAmB,CAC5C,8FACA,iGACA,kGACA,2GACAA,EAAQ,K,iqBCAH,IAAMC,EAAsB,SAACC,GAAD,cAAiCC,8BAAuBD,IAAxD,IAAqEE,MAAOF,EAAWE,U,yMCa7GC,EAAwBC,gBAAoD,CACvFC,UAAW,oBAAAC,EAAAC,OAAA,yEAAa,CAACC,aAAa,IAA3B,6DACXC,aAAc,oBAAAH,EAAAC,OAAA,yEAAYG,yBAAZ,6DACdC,eAAgB,oBAAAL,EAAAC,OAAA,sGAChBK,aAASC,IAGEC,EAAsD,SAAAC,GAEjE,MAA8BX,aAA9B,WAAOQ,EAAP,KAAgBI,EAAhB,KAqCMC,EAAe,0BAAAX,EAAAC,OAAA,2EAAAD,EAAA,MAE0CY,IAAM,CAC/DC,OAAQ,MACRC,KAAG,6zBACHC,iBAAiB,KALF,cAEbC,EAFa,yBAQVA,EAASC,MARC,4GA8BfC,EAAUpB,eAAkB,0BAAAE,EAAAC,OAAA,2EAAAD,EAAA,MAERW,KAFQ,OAExBL,EAFwB,OAG9BI,EAAWJ,GAHmB,6HAO/B,CAACK,IAOJ,OAJAb,aAAgB,WACdoB,MACC,IAGD,gBAACrB,EAAsBsB,SAAvB,CACEC,MAAO,CACLrB,UAjCY,SAAOsB,GAAP,eAAArB,EAAAC,OAAA,2EAAAD,EAAA,MAE0CY,IAAM,CAC5DC,OAAQ,MACRS,OAAQ,CACNC,GAAIF,GAENP,KAAG,g0BACHC,iBAAiB,KARL,cAEVC,EAFU,yBAUPA,EAASC,MAVF,4GAkCZd,aA9De,SAAOoB,GAAP,iBAAAvB,EAAAC,OAAA,2EAAAD,EAAA,MAEIY,IAAM,CACzBC,OAAQ,MACRC,KAAG,g0BAAwDS,EAC3DR,iBAAiB,KALF,cAEbC,EAFa,OAOX7B,EAA0BqC,gBAAM,GAAIpB,wBAAuBY,EAASC,MAPzD,kBAQV9B,GARU,4GA+DfkB,eAnFiB,mCAAAL,EAAAC,OAAA,2DAASwB,gBAAT,MAAoB,qBAApB,EAA0CH,EAA1C,EAA0CA,OAAQI,EAAlD,EAAkDA,OAAlD,oBAAA1B,EAAA,MAEuD2B,YACxE,CACEL,OAAQA,EACRT,OAAQ,MACRC,KAAKc,GAAA,2XAAW,4aAAqBH,EACrCV,iBAAiB,GAEnBW,IATiB,YAEbV,EAFa,iDAYVA,GAZU,gJAoFjBV,YAGDG,EAAMoB,WAKAC,EAA2B,kBAAMhC,aAAiBD,M,mDC/H/D,8CAAO,IAAMkC,EAA2C,SAA9BH,GAAA,2XAAW,oZAA2B,gCAAkC,K,ooCCoClG,IAAII,GAAY,IAAIC,IAAIC,OAAOC,SAASC,MACpCC,GAAe,IAAIC,gBAAgBN,GAAUO,QAO3CC,GAAmC,SACpCC,qBADoC,IAEvCC,EAAGL,GAAaM,IAAI,MAAQ,KAoXxBC,GAASC,IAAWC,OAA8B,CACtDC,gBAAiB,CACfC,MAAO,QAETC,iBAAkB,CAChBC,aAAc,GACdC,SAAU,KAEZC,MAAO,CACLD,SAAU,KACVE,iBAAkB,OAClBL,MAAO,QAETM,WAAY,CACVJ,aAAc,IAEhBK,OAAQ,CACNC,YAAa,EACbC,OAAQ,GACRC,UAAW,CACT,CAACC,YAAa,IACd,CAACC,YAAa,KAEhBZ,MAAO,IAETa,IAAK,CACHC,WAAY,SACZC,cAAe,MACfC,eAAgB,gBAChBhB,MAAO,QAETiB,QAAS,CACPH,WAAY,SACZE,eAAgB,SAChBE,QAAS,GACTb,iBAAkB,OAClBF,SAAU,KACVH,MAAO,UAIImB,IA1ZS,SAAC,GAAwC,IAAD,EAAlC1D,EAAkC,UACtD2D,EAASC,eAATD,KACR,EAA+CtC,cAAvC/B,EAAR,EAAQA,UAAWM,EAAnB,EAAmBA,eAAgBC,EAAnC,EAAmCA,QACnC,EAAkCR,WAAwC,IAA1E,WAAOwE,EAAP,KAAkBC,EAAlB,KACA,EAAsDzE,WAA2B0C,IAAjF,WAAOgC,EAAP,KAA4BC,EAA5B,KACA,EAAkC3E,WAAeuC,GAAaM,IAAI,MAAQ,IAA1E,WAAO+B,EAAP,KAAkBC,EAAlB,KACA,EAAgD7E,WAAsC,MAAtF,WAAO8E,EAAP,KAAyBC,EAAzB,KACA,EAAsC/E,YAAe,GAArD,YAAOgF,GAAP,MAAoBC,GAApB,MACA,GAAkCjF,YAjBjCkF,kBAAQ3C,GAAaM,IAAI,QACzBqC,kBAAQ3C,GAAaM,IAAI,aAgB1B,aAAOsC,GAAP,MAAkBC,GAAlB,MAEMC,GAAerF,eAAkB,SAAOwB,EAAmB8D,GAA1B,mBAAApF,EAAAC,OAAA,gEAEnCiF,IAAa,GAFsB,WAAAlF,EAAA,MAGCK,EAAe,CACjDoB,SAAU,qBACVH,OAAQA,EACRI,QAAQ,KANyB,gBAG3B2D,EAH2B,EAG3BA,MAAUrE,EAHiB,iBAQnCsE,aAAgB,KAEhBb,EAAuBzD,GACvBuD,GAAa,SAAAgB,GAAC,OAAIH,EAAM,cAAOG,GAAP,IAAaF,IAASA,KAC9CH,IAAa,GAZsB,wDAcnCA,IAAa,GAdsB,wEAiBpC,CAAC7E,IAEEmF,GAAyB1F,eAAkB,SAACsB,GAChDyD,EAAoBzD,GACpBqD,GAAuB,SAAAc,GAAC,gBAASA,GAAT,IAAY3F,MAAK,MAAEwB,OAAF,EAAEA,EAAOA,WAClDiB,GAAaoD,IAAI,WAAgB,MAALrE,OAAA,EAAAA,EAAOsE,QAAS,IAC5C1D,GAAUO,OAASF,GAAasD,WAChCzD,OAAO0D,QAAQC,aAAa,GAAI,GAAI7D,GAAU2D,cAC7C,IAEGG,GAA8BhG,eAAkB,WACpD+E,EAAoB,MACpBxC,GAAa0D,OAAO,WACpB/D,GAAUO,OAASF,GAAasD,WAChCzD,OAAO0D,QAAQC,aAAa,GAAI,GAAI7D,GAAU2D,cAC7C,IAEGK,GAAclG,eAAkB,WACpC6E,EAAa,IACbI,IAAe,GACf1C,GAAa0D,OAAO,KACpB/D,GAAUO,OAASF,GAAasD,WAChCzD,OAAO0D,QAAQC,aAAa,GAAI,GAAI7D,GAAU2D,cAC7C,IAEGM,GAAqBnG,eAAkB,SAAOQ,GAAP,eAAAN,EAAAC,OAAA,uDACvCqB,EAAS7B,aAAoB+E,IAC7BQ,kBAAQ1E,IAAYA,EAAQ4F,SAAS,eACvCJ,KACAxE,EAAO1B,OAJkC,oBAAAI,EAAA,MAOnCmF,GAAa7D,IAPsB,oIAW1C,CAACkD,EAAqBsB,KAEnBK,GAAerG,eAAkB,SAAOsB,GAAP,mBAAApB,EAAAC,OAAA,mDACrCoC,GAAaoD,IAAI,IAAKrE,EAAMgF,MAC5BpE,GAAUO,OAASF,GAAasD,WAChCzD,OAAO0D,QAAQC,aAAa,GAAI,GAAI7D,GAAU2D,aAC1CvE,EAAMC,MAJ2B,4CAAArB,EAAA,MAMDD,EAAUqB,EAAMC,QANf,OAM3BgF,EAN2B,OAO3BvF,EAAMiB,MAAcsE,EAAkBnG,YAAc,iBAAmB,cAAjE,OAAwFkB,EAAMC,MAC5E,SAA9BO,GAAA,2XAAW,oZAA2B0E,aAAaxF,GAAOoB,OAAOqE,KAAKzF,EAAK,SAR1C,oGAa7B0F,EAb6B,SAaDhC,GAbC,IAaoB9B,EAAGtB,EAAMgF,OAChE3B,EAAuB+B,GAdY,sBAAAxG,EAAA,MAgB3BmF,GAAa1F,aAAoB+G,KAhBN,QAiBjCzB,IAAe,GAjBkB,yIAsBpC,CAACI,KAEEsB,GAAyB3G,eAAkB,SAAOsB,GAAP,SAAApB,EAAAC,OAAA,mDAC1CyG,kBAAQtF,EAAOwD,GAD2B,wBAEzCxD,EACFoE,GAAuBpE,GAEvB0E,KAL2C,oBAAA9F,EAAA,MAQrCmF,GAAa,GAAD,MAAK1F,aAAoB+E,IAAzB,IAA+C5E,MAAK,MAAEwB,OAAF,EAAEA,EAAOA,UARpC,oIAa9C,CAACoD,EAAqBI,EAAkBY,KAErCmB,GAAkB7G,eAAkB,oBAAAE,EAAAC,OAAA,2EAAAD,EAAA,MAEhC4G,QAAQC,IAAI,CAACvB,aAAgB,KAAMH,GAAa2B,aAAoBtC,IAAsB,MAF1D,kIAMvC,CAACW,GAAcX,IAEZtD,GAAUpB,eAAkB,SAAOwB,GAAP,SAAAtB,EAAAC,OAAA,2EAAAD,EAAA,MAExBmF,GAAa7D,IAFW,OAG9ByD,IAAe,GAHe,2HAO/B,CAACP,EAAqBW,KAiB1B,OAfCrF,aAAgB,WACd,IAAIwB,EAAS7B,aAAoB+E,GACjC,SAAIlE,KAASyG,cAAe,CAC1B,IAAMC,EAAgB3E,GAAaM,IAAI,WACvC,GAAIqE,EAAe,CAAC,IAAD,EACXC,EAAa,MAAG3G,GAAH,SAAGA,EAASyG,oBAAZ,EAAG,EAAwBG,MAAK,SAAA3B,GAAC,OAAIA,EAAEG,QAAUsB,KAChEC,IACF3F,EAAO1B,MAAQqH,EAAc7F,MAC7BoE,GAAuB,CAACE,MAAOuB,EAAcvB,MAAOtE,MAAO6F,EAAc7F,SAGxE4D,kBAAQ1D,EAAOoB,IAAOsC,kBAAQ1D,EAAO1B,QAAQsB,GAAQI,MAE3D,CAAChB,IAGJ,gBAAC,IACOG,EAEJ,gBAAC,IAAD,CAAkB0G,OAAQ,KACxB,gBAAC,IAAD,CACEC,MAAO,CACLxE,GAAOQ,MACP,CACEiE,kBAAmBjD,EAAKpB,MAAQ,IAAM,GAAK,GAC3CsE,cAAelD,EAAKpB,MAAQuE,QAAMC,YAAYC,GAAK,SAAMlH,KAI7D,gBAAC,IAAD,CACEmH,oBAAoB9F,GAAA,2XAAW,4aAAqB,0BAA2B,EAC/EwC,KAAMA,EACNuD,QAAS3B,GACT4B,cAAejD,EACfkD,SAAU1B,GACV2B,WAAYpD,KAEL,MAAPpE,OAAA,EAAAA,EAASyG,gBACT,gBAAC,IAAD,CAAMK,MAAO,CACXW,gBAAiBR,QAAMS,OAAOC,OAC9BC,UAAW,KAEX,gBAAC,IAAD,KACE,gBAAC,IAAD,CAAMd,MAAOxE,GAAOiB,KAClB,gBAAC,KAAD,CAASuD,MAAO,CAACe,MAAOZ,QAAMS,OAAOI,MAAOlF,aAAc,GAAImF,KAAK,MAAnE,WACErD,kBAAQJ,IACR,gBAAC,IAAD,CAAyB0D,QAAS,kBAAMrC,GAAmB,MAAK,gBAAC,IAAD,CAAWmB,MAAO,CAAEe,MAAOI,YAAKhB,QAAMS,OAAOQ,YAAa,IAAKC,WAAY,QAA3E,aAGpE,gBAAC,IAAD,CACEC,QAAM,EACNtB,MAAO,CAAEuB,eAAgB,MAE3B,gBAAC,IAAD,CAAMvB,MAAO,CAAEwB,KAAM,EAAGzF,SAAU,MAChC,gBAAC,IAAD,CACEuC,MAAM,UACNmD,SAAUpC,GACVqC,QAAO,MAAExI,GAAF,SAAEA,EAASyG,oBAAX,EAAE,EAAwBgC,KAAI,SAAAC,GAAM,MAAK,CAC9CtD,MAAOsD,EAAOtD,MACdtE,MAAO4H,EAAO5H,UAEhBA,MAAOwD,QAMfK,KAAcH,IAAeR,EAAU2E,OAAS,GAChD,gBAAC,IAAD,CACE7E,KAAMA,EACN8E,UAAW,CAAE7B,kBAAmB,GAChCD,MAAO,CACLW,gBAAiBR,QAAMS,OAAOmB,KAC9BjB,UAAW,KAGb,gBAAC,IAAD,CACEkB,KAAM,kKAAwH,gBAAC,IAAD,MAAM,gBAAC,IAAD,MAA9H,4HACNhF,KAAMA,EACNiF,WACE,gBAAC,IAAD,CACEC,OAAQ,CAAEC,IAAKhK,aAAY,IAC3B6H,MAAO,CAAE3D,OAAQ,OAAQ+F,WAAY,aAGzCC,MAAM,mDACNC,WAAY,CACVrB,KAAMjE,EAAKpB,MAAQuE,QAAMC,YAAYC,GAAK,KAAO,MAEnDkC,WAAY,CACV/G,GAAOK,iBACP,CACEkF,MAAOZ,QAAMS,OAAO4B,SAM5BtF,EAAU2E,OAAS,GACnB,gCACE,gBAAC,IAAD,CACEP,QAAM,EACNtB,MAAO,CAAEuB,eAAgB,MAE3B,gBAAC,IAAD,CAAMvB,MAAO,CAACxE,GAAOU,WAAYV,GAAOiB,IAAK,CAAEE,cAAeK,EAAKpB,MAAQ,IAAM,MAAQ,YACzF,gBAAC,IAAD,KAAW,gBAAC,IAAD,CAAWoE,MAAO,CAAEqB,WAAY,QAAUnE,EAAU2E,QAAmB,gBAAC,IAAD,CAAW7B,MAAO,CAAEyC,QAAS,KAA7B,IAAqCrF,EAAoBsF,MAAzD,gBAEjFxF,EAAUyE,KAAI,SAAC5J,EAAS4K,GAAV,OACb,gBAAC,IAAD,CACEC,IAAK7K,EAAQoC,GAAKwI,EAClBE,SAAUF,EAAEpE,WACZyB,MAAOxE,GAAOG,iBAEbgH,EAAI,GAAK,gBAAC,IAAD,CAASrB,QAAM,IACzB,qBACEtG,KAASL,KAAL,4BAA2C5C,EAAQoC,GACvD2I,OAAsC,SAA9BtI,GAAA,2XAAW,oZAA2B,SAAW,SAEzD,gBAAC,IAAD,KACE,gBAAC,IAAD,CACEwC,KAAMA,EACNgF,KAAMjK,EAAQgL,iBACdC,aAAc,CACZnJ,KAAM/B,aAAkBC,IAE1BkK,WAAajF,EAAKpB,MAAQuE,QAAMC,YAAYC,IAAMtI,EAAQkL,KAAOlL,EAAQmL,MACvE,gBAAC,IAAD,CACEC,iBAAkB,CAAEP,IAAI,GAAD,+zBACvBQ,cAAe,CACbH,IAAKI,OAAOtL,EAAQkL,KACpBK,IAAKD,OAAOtL,EAAQmL,OAEtBK,YAAa,GACbX,IAAK7K,EAAQoC,GAAKwI,EAClBjB,QAAS,CACP8B,WAAW,EACXC,gBAAiB,UACjBC,mBAAmB,EACnBC,aAAa,EACbC,gBAAgB,EAChBpI,OAAQ,CACN,CACEqI,YAAa,MACbC,QAAS,CACP,CAAEC,WAAY,YAMtB,gBAAC,IAAD,CACEd,IAAKI,OAAOtL,EAAQkL,KACpBK,IAAKD,OAAOtL,EAAQmL,MACpBlD,MAAO,CAACgE,cAAY7H,OAAQX,GAAOW,SAEnC,gBAAC,IAAD,CACE4E,MAAOZ,QAAMS,OAAOI,MACpBhB,MAAO,CAAC3D,OAAQ,GAAIT,MAAO,SAKjC,gBAAC,IAAD,CACEsG,OAAQ,CAAEC,IAAKhK,aAAYwK,IAC3B3C,MAAO,CAAE3D,OAAQ,OAAQ+F,WAAY,WAGzC6B,gBACEjH,EAAKpB,MAAQ,MAAQ7D,EAAQkL,KAAOlL,EAAQmL,KAC1C,CAACtH,MAAO,UACRzC,EAEJ+K,SAAYnM,EAAQoM,SAAW,IAAxB,KAA+BpM,EAAQqM,MAAQ,IACtD/B,MAAOtK,EAAQsM,aAMzB,gBAAC,IAAD,CAAMrE,MAAO,CAAEpE,MAAO,SACpB,gBAAC,IAAD,CAAS0F,QAAM,IACf,gBAAC,IAAD,CACEgD,OAAQpH,EAAU2E,OAClB0C,SAAU1G,IAAaX,EAAU2E,QAAUzE,EAAoBsF,MAC/D8B,QAAStH,EAAU2E,SAAWzE,EAAoBsF,MAClD+B,QAAS5G,GACTqD,QAAS3B,GACTmD,MAAOtF,EAAoBsF,YAKjC7E,IAAaX,EAAU2E,OAAS,GAAKnE,IACrC,gBAAC,IAAD,CACEV,KAAMA,EACN8E,UAAW,CAAE7B,kBAAmB,GAChCD,MAAO,CAAEW,gBAAiBR,QAAMS,OAAOC,OAAQC,UAAW,KAE1D,gBAAC,IAAD,CACEkB,KAAK,yJACLhF,KAAMA,EACNiF,WACE,gBAAC,IAAD,CACEC,OAAQ,CAAEC,IAAKhK,aAAY,IAC3B6H,MAAO,CAAE3D,OAAQ,OAAQ+F,WAAY,aAGzCC,MAAK,aAA0B,MAAhB7E,OAAA,EAAAA,EAAkBc,QAAS,MAArC,0DACLgE,WAAY,CACVrB,KAAMjE,EAAKpB,MAAQuE,QAAMC,YAAYC,GAAK,KAAO,MAEnDkC,WAAY,CACV/G,GAAOK,qBAKbgC,IAAaX,EAAU2E,OAAS,GAChC,gBAAC,IAAD,CAAM7B,MAAO,CACXc,UAAW,GACXlF,MAAO,SAEP,gBAAC,IAAD,CAAeoE,MAAO,CACpB3D,OAAQ,GACRP,aAAc,GACdF,MAAO,OAET,gBAAC,IAAD,CACEoE,MAAO,CAAC3D,OAAQ,IAAKT,MAAO,iB,mDC9Y5C,gIAae,SAAS8I,IAEtB,OACE,kBAAC,IAAD,KAEE,kBAAC,IAAD,KACE,kBAAC,IAAD,KACE,kBAAC,IAAD,KACE,kBAAC,IAAD,UAZsB,SAA9BlK,GAAA,2XAAW,qZACbmK,EAAQ,O,kDCVV,kD,yHCqBeC,EAdG,SAAC,GAEI,IADlBvL,EACiB,UACZwL,EAAY5H,cAAZ4H,QAET,OACC,gBAAC,IAAD,KACIC,YAAY,EACZC,SAAUF,GACNxL,M,0DChBV,IAAI2L,EAAM,EAAQ,KACFC,EAAU,EAAQ,KAIC,kBAFvBA,EAAUA,EAAQC,WAAaD,EAAQE,QAAUF,KAG/CA,EAAU,CAAC,CAACG,EAAOzC,EAAIsC,EAAS,MAG9C,IAAIvD,EAAU,CAEd,OAAiB,OACjB,WAAoB,GAEPsD,EAAIC,EAASvD,GAI1B0D,EAAOC,QAAUJ,EAAQK,QAAU,I,qBChBnCD,EADkC,EAAQ,IAChCE,EAA4B,IAE9BC,KAAK,CAACJ,EAAOzC,EAAI,6LAA8L,KAEvNyC,EAAOC,QAAUA,G,oBCNjB,IAAIL,EAAM,EAAQ,KACFC,EAAU,EAAQ,KAIC,kBAFvBA,EAAUA,EAAQC,WAAaD,EAAQE,QAAUF,KAG/CA,EAAU,CAAC,CAACG,EAAOzC,EAAIsC,EAAS,MAG9C,IAAIvD,EAAU,CAEd,OAAiB,OACjB,WAAoB,GAEPsD,EAAIC,EAASvD,GAI1B0D,EAAOC,QAAUJ,EAAQK,QAAU,I,oBCjBnC,IAAIC,EAA8B,EAAQ,KACtCE,EAAkC,EAAQ,KAC1CC,EAAgC,EAAQ,KACxCC,EAAgC,EAAQ,KACxCC,EAAgC,EAAQ,KACxCC,EAAgC,EAAQ,KACxCC,EAAgC,EAAQ,KACxCC,EAAgC,EAAQ,KACxCC,EAAgC,EAAQ,KACxCC,EAAgC,EAAQ,KACxCC,EAAgC,EAAQ,KACxCC,EAAgC,EAAQ,KACxCC,EAAiC,EAAQ,KAC7Cf,EAAUE,GAA4B,GACtC,IAAIc,EAAqCZ,EAAgCC,GACrEY,EAAqCb,EAAgCE,GACrEY,EAAqCd,EAAgCG,GACrEY,EAAqCf,EAAgCI,GACrEY,EAAqChB,EAAgCK,GACrEY,EAAqCjB,EAAgCM,GACrEY,EAAqClB,EAAgCO,GACrEY,EAAqCnB,EAAgCQ,GACrEY,EAAqCpB,EAAgCS,GACrEY,EAAqCrB,EAAgCU,GACrEY,EAAsCtB,EAAgCW,GAE1Ef,EAAQG,KAAK,CAACJ,EAAOzC,EAAI,sGAAwG0D,EAAqC,iKAAmKC,EAAqC,wIAA0IC,EAAqC,iKAAmKC,EAAqC,wIAA0IC,EAAqC,iKAAmKC,EAAqC,wIAA0IC,EAAqC,iKAAmKC,EAAqC,4IAA8IC,EAAqC,4IAA8IC,EAAqC,sIAAwIC,EAAsC,6BAA8B,KAErgE3B,EAAOC,QAAUA,G,oBC7BjBD,EAAOC,QAAU,IAA0B,8B,oBCA3CD,EAAOC,QAAU,IAA0B,oC,oBCA3CD,EAAOC,QAAU,IAA0B,gC,oBCA3CD,EAAOC,QAAU,IAA0B,+B,oBCA3CD,EAAOC,QAAU,IAA0B,6B,oBCA3CD,EAAOC,QAAU,IAA0B,mC,oBCA3CD,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,gC,oBCA3CD,EAAOC,QAAU,IAA0B,+B,oBCA3CD,EAAOC,QAAU,IAA0B,6B,01BCQpC,IAAMnH,EAAkB,SAAO8I,GAAP,SAAApO,EAAAC,OAAA,yEACtB,IAAI2G,SAAQ,SAAAyH,GACjBC,WAAWD,EAASD,OAFO,6DAelB9H,EAAe,SAACxF,GAC3B,IAAMyN,EAAMrM,OAAOqE,KAAKzF,EAAK,UACjB,OAARyN,GAAcA,EAAIC,SAuDX1H,EAAsB,SAACpH,GAAD,cAE5BD,8BAAoBC,IAFQ,IAG/ByH,YACwB5G,IAAtBb,EAAWyH,aAA6C5G,IAArBb,EAAW+O,MAC1C/O,EAAWyH,OAASzH,EAAW+O,MAC/B,KAoCGpP,EAA2B,SACtCqP,EACAC,EACA7F,GAEA,IAAM8F,EAAYnE,OAAOmE,UAAUF,GACnC,OAAO,IAAIG,KAAKC,aAAaH,EAAtB,GAAgCI,sBAAuB,GAAMjG,IAAWkG,OAAON,IACpFE,EAlB+B,SAACD,EAAiBD,GACnD,GAAIA,IAAWjE,OAAOmE,UAAUF,GAAS,MAAO,GAChD,OAAQC,GACN,IAAK,QACH,MAAO,KAET,QACE,MAAO,MAYPM,CAAoBN,GACpB,KAUAO,EAAiB,GAuCVvN,EArCqB,WAChC,IAAIwN,EAEJ,OAAO,SAAOC,EAA4B1N,GAAnC,mBAAA1B,EAAAC,OAAA,mDACDkP,GAAUzN,GAEZyN,EAAOA,SAEHE,EAAWD,EAAOtO,IAAM,IAAIwB,gBAAgB8M,EAAO9N,QAAQqE,WAEjEwJ,EAASvO,IAAM0O,YAAYhG,SAPtB,UASC5H,IAAUwN,EAAUG,GATrB,yCAWMH,EAAUG,IAXhB,yBAAArP,EAAA,MAaeY,IAAM,EAAD,KAClBwO,GADkB,IAErBG,YAAaJ,EAAOK,UAfnB,cAaGC,EAbH,OAkBGC,EAASD,EAAIxO,KAEnBiO,EAAUG,GAAYK,EApBnB,kBAsBIA,GAtBJ,sCAwBC9O,IAAM+O,SAAN,MAxBD,sHAkCcC,I,gICjLjBC,E,MAAaC,EAAWnN,IAAI,UAOrBoN,EAAoBjQ,gBAAgD,CAC/EsE,KAAMyL,EACN5D,QAAS,eAGE+D,EAAkD,SAAAvP,GAE7D,MAAwBX,WAAe+P,GAAvC,WAAOzL,EAAP,KAAa6H,EAAb,KAMA,OACE,gBAAC8D,EAAkB5O,SAAnB,CACEC,MAAO,CACLgD,OACA6H,YAGDxL,EAAMoB,WAKAwC,EAAuB,kBAAMvE,aAAiBiQ,M","file":"static/js/app.c4f99118.chunk.js","sourcesContent":["import { ComplexListingMinimal } from '@bit/jimmijoensson.keyhole.interfaces.complex-listing-interface'\r\nimport { toNonDecimalLocaleString } from './utils'\r\n\r\nexport const getComplexDetails = (complex: ComplexListingMinimal) => [`${complex.numberOfRentals} lejemål`, `Husleje fra DKK. ${toNonDecimalLocaleString(complex.minimumRent, 'da-dk')}`]\r\n\r\nexport const getShapeUrl = (index: number) => [\r\n 'https://uploads-ssl.webflow.com/5e13379748d7ea83a0e997e3/5e14fe619a07bd677eeef484_light.svg',\r\n 'https://uploads-ssl.webflow.com/5e13379748d7ea83a0e997e3/5e16fb62ef00e7bbda6cca5d_hole%20k.svg',\r\n 'https://uploads-ssl.webflow.com/5e13379748d7ea83a0e997e3/5e164eda496c013a873303d1_Vectorsad.svg',\r\n 'https://uploads-ssl.webflow.com/5e13379748d7ea83a0e997e3/5e14863f2c28778935bf480e_Keyhole-Graphic-K.svg',\r\n][index % 4]\r\n","import { getPaginationParams as extGetPaginationParams, GetParamsInterface, PaginationInterface } from '@bit/jimmijoensson.keyhole.interfaces.paginated-response-interface';\r\n\r\nexport interface GetParams extends GetParamsInterface {\r\n orgId?: string\r\n} \r\n\r\nexport interface Pagination extends PaginationInterface {\r\n orgId?: string\r\n} \r\n\r\nexport const getPaginationParams = (pagination: Pagination) => ({...extGetPaginationParams(pagination), orgId: pagination.orgId})","import * as React from 'react'\r\nimport axios, { AxiosResponse } from 'axios'\r\nimport { merge } from 'lodash'\r\nimport { ComplexListing, ComplexListingMinimal, initialComplexListing } from '@bit/jimmijoensson.keyhole.interfaces.complex-listing-interface'\r\nimport { FetchProps, PaginatedResponseInterface } from '@bit/jimmijoensson.keyhole.interfaces.paginated-response-interface'\r\nimport { request } from '../../utils/utils'\r\nimport { Filter } from '../../interfaces/Filter'\r\n\r\nexport interface DarLookUpInterface {\r\n rentalFound: boolean\r\n}\r\n\r\nexport interface ComplexListingFilters {\r\n organizations: Filter[]\r\n}\r\n\r\ninterface KeyholeListingContextInterface {\r\n darLookup: (darId: string) => Promise\r\n fetchComplex: (id: string) => Promise\r\n fetchComplexes: (props: FetchProps) => Promise\r\n filters: ComplexListingFilters | undefined\r\n}\r\n\r\nexport const KeyholeListingContext = React.createContext({\r\n darLookup: async () => ({rentalFound: false}),\r\n fetchComplex: async () => initialComplexListing,\r\n fetchComplexes: async () => {},\r\n filters: undefined,\r\n})\r\n\r\nexport const KeyholeListingProvider: React.FunctionComponent<{}> = props => {\r\n // State variables\r\n const [filters, setFilters] = React.useState()\r\n\r\n // Callbacks and functions\r\n const fetchComplexes = async ({ endpoint = '/webflow/complexes', params, cached }: FetchProps) => {\r\n try {\r\n const response: PaginatedResponseInterface = await request(\r\n {\r\n params: params,\r\n method: 'get',\r\n url: process.env.REACT_APP_API_URL + endpoint,\r\n withCredentials: true,\r\n },\r\n cached\r\n )\r\n if (response) {\r\n return response\r\n }\r\n return\r\n } catch (error) {\r\n throw error\r\n }\r\n }\r\n\r\n const fetchComplex = async (id: string) => {\r\n try {\r\n let response = await axios({\r\n method: 'get',\r\n url: `${process.env.REACT_APP_API_URL}/webflow/complexes/${id}`,\r\n withCredentials: true,\r\n })\r\n const complex: ComplexListing = merge({}, initialComplexListing, response.data)\r\n return complex\r\n } catch (e) {\r\n throw e\r\n }\r\n }\r\n\r\n const fetchFilters = async () => {\r\n try {\r\n let response: AxiosResponse = await axios({\r\n method: 'get',\r\n url: `${process.env.REACT_APP_API_URL}/webflow/filters`,\r\n withCredentials: true,\r\n })\r\n\r\n return response.data\r\n } catch (e) {\r\n throw e\r\n }\r\n }\r\n\r\n const darLookup = async (darId: string) => {\r\n try {\r\n let response: AxiosResponse = await axios({\r\n method: 'get',\r\n params: {\r\n id: darId\r\n },\r\n url: `${process.env.REACT_APP_API_URL}/webflow/dar-lookup`,\r\n withCredentials: true,\r\n })\r\n return response.data\r\n } catch (e) {\r\n throw e\r\n }\r\n }\r\n\r\n const mounted = React.useCallback(async () => {\r\n try {\r\n const filters = await fetchFilters()\r\n setFilters(filters)\r\n } catch (error) {\r\n throw error\r\n }\r\n }, [fetchFilters])\r\n\r\n // useEffects\r\n React.useEffect(() => {\r\n mounted()\r\n }, [])\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n\r\nexport const useKeyholeListingContext = () => React.useContext(KeyholeListingContext)\r\n","export const DEV_DOMAIN = process.env.REACT_APP_ENV === 'dev' ? 'https://keyhole-v3.webflow.io' : ''\r\n","import { isEmpty, isEqual } from 'lodash';\r\nimport { rgba } from 'polished';\r\nimport * as React from 'react'\r\nimport { Image, StyleSheet, TextStyle, TouchableOpacity, View, ViewProps, ViewStyle } from 'react-native'\r\nimport GoogleMapReact from 'google-map-react'\r\nimport Card from '@bit/jimmijoensson.keyhole.components.card';\r\nimport { theme, themeStyles } from '@bit/jimmijoensson.keyhole.components.keyhole-theme';\r\nimport Divider from '@bit/jimmijoensson.keyhole.components.divider';\r\nimport Paragraph from '@bit/jimmijoensson.keyhole.paragraph';\r\nimport { useKeyholeListingContext } from '../../contexts/KeyholeListingContext/KeyholeListingContext';\r\nimport InfoCard from '@bit/jimmijoensson.keyhole.components.info-card';\r\nimport InfoSection from '@bit/jimmijoensson.keyhole.components.info-section';\r\nimport KeyholeTouchableOpacity from '@bit/jimmijoensson.keyhole.components.keyhole-touchable-opacity';\r\nimport Br from '@bit/jimmijoensson.keyhole.components.br';\r\nimport KeyholeDepositAutoCompleteCard, {AutoCompleteResultInterface} from '@bit/jimmijoensson.keyhole.components.keyhole-deposit-autocomplete-card';\r\nimport { ComplexListingMinimal } from '@bit/jimmijoensson.keyhole.interfaces.complex-listing-interface';\r\nimport { initialPagination } from '@bit/jimmijoensson.keyhole.interfaces.paginated-response-interface';\r\nimport PopulationBar from '@bit/jimmijoensson.keyhole.components.population-bar';\r\nimport Select from '@bit/jimmijoensson.keyhole.components.select';\r\nimport BackgroundLayout from '@bit/jimmijoensson.keyhole.layouts.background-layout';\r\nimport { Props } from '@bit/jimmijoensson.keyhole.components.select/node_modules/@types/react-select';\r\nimport FetchMoreButton from '@bit/jimmijoensson.keyhole.components.fetch-more-button';\r\nimport Marker from '@bit/jimmijoensson.keyhole.components.marker'\r\nimport BuildingIcon from '@bit/jimmijoensson.keyhole.icons.building-icon'\r\nimport Heading from '@bit/jimmijoensson.keyhole.components.heading';\r\nimport { getComplexDetails, getShapeUrl } from '../../utils/helpers';\r\nimport { useResponsiveContext } from '../../contexts/ResponsiveContext/ResponsiveContext';\r\nimport { nextPaginatedParams, openInNewTab, setAsyncTimeout } from '../../utils/utils';\r\nimport { DEV_DOMAIN } from '../../utils/constants';\r\nimport { getPaginationParams, GetParams, Pagination } from '../../interfaces/ComplexListingResponse';\r\n\r\n\r\nexport interface KeyholeListingsProps extends ViewProps {\r\n //Props goes here\r\n}\r\n\r\nlet parsedUrl = new URL(window.location.href)\r\nlet parsedParams = new URLSearchParams(parsedUrl.search)\r\n\r\nconst hasParams = () => (\r\n !isEmpty(parsedParams.get('s')) ||\r\n !isEmpty(parsedParams.get('udlejer'))\r\n)\r\n\r\nconst initialComplexPagination:Pagination = {\r\n ...initialPagination,\r\n s: parsedParams.get('s') || '',\r\n}\r\n\r\nconst KeyholeListings = ({ ...props }: KeyholeListingsProps) => {\r\n const { dims } = useResponsiveContext()\r\n const { darLookup, fetchComplexes, filters } = useKeyholeListingContext()\r\n const [complexes, setComplexes] = React.useState([])\r\n const [complexesPagination, setComplexesPagination] = React.useState(initialComplexPagination)\r\n const [searchStr, setSearchStr] = React.useState(parsedParams.get('s') || '')\r\n const [selectedLandlord, setSelectedLandlord] = React.useState(null)\r\n const [hasSearched, setHasSearched] = React.useState(false)\r\n const [isLoading, setIsLoading] = React.useState(hasParams())\r\n\r\n const getComplexes = React.useCallback(async (params: GetParams, append?: boolean) => {\r\n try {\r\n setIsLoading(true)\r\n const { items, ...response} = await fetchComplexes({\r\n endpoint: '/webflow/complexes',\r\n params: params,\r\n cached: false,\r\n })\r\n setAsyncTimeout(400)\r\n\r\n setComplexesPagination(response)\r\n setComplexes(x => append ? [...x, ...items] : items)\r\n setIsLoading(false)\r\n } catch (error) {\r\n setIsLoading(false)\r\n throw error\r\n }\r\n }, [fetchComplexes])\r\n\r\n const updateSelectedLandlord = React.useCallback((value: Props['value']) => {\r\n setSelectedLandlord(value)\r\n setComplexesPagination(x => ({...x, orgId: value?.value}))\r\n parsedParams.set('udlejer', value?.label || '')\r\n parsedUrl.search = parsedParams.toString()\r\n window.history.replaceState({}, '', parsedUrl.toString())\r\n }, [])\r\n\r\n const handleSelectedLandlordClear = React.useCallback(() => {\r\n setSelectedLandlord(null)\r\n parsedParams.delete('udlejer')\r\n parsedUrl.search = parsedParams.toString()\r\n window.history.replaceState({}, '', parsedUrl.toString())\r\n }, [])\r\n\r\n const handleClear = React.useCallback(() => {\r\n setSearchStr('')\r\n setHasSearched(false)\r\n parsedParams.delete('s')\r\n parsedUrl.search = parsedParams.toString()\r\n window.history.replaceState({}, '', parsedUrl.toString())\r\n }, [])\r\n\r\n const handleFiltersClear = React.useCallback(async (filters: ('landlord')[]) => {\r\n let params = getPaginationParams(complexesPagination)\r\n if (isEmpty(filters) || filters.includes('landlord')) {\r\n handleSelectedLandlordClear()\r\n params.orgId === undefined\r\n }\r\n try {\r\n await getComplexes(params)\r\n } catch (error) {\r\n throw error\r\n }\r\n }, [complexesPagination, handleSelectedLandlordClear])\r\n\r\n const handleSearch = React.useCallback(async (value: AutoCompleteResultInterface) => {\r\n parsedParams.set('s', value.text)\r\n parsedUrl.search = parsedParams.toString()\r\n window.history.replaceState({}, '', parsedUrl.toString())\r\n if (value.darId) {\r\n try {\r\n const darLookupResponse = await darLookup(value.darId)\r\n const url = DEV_DOMAIN + (darLookupResponse.rentalFound ? '/benyt-keyhole' : '/desvaerre') + `?id=${value.darId}`\r\n process.env.REACT_APP_ENV === 'dev' ? openInNewTab(url) : window.open(url, '_self')\r\n } catch (error) {\r\n throw error\r\n }\r\n } else {\r\n const newParams: Pagination = {...complexesPagination, s: value.text}\r\n setComplexesPagination(newParams)\r\n try {\r\n await getComplexes(getPaginationParams(newParams))\r\n setHasSearched(true)\r\n } catch (error) {\r\n throw error\r\n }\r\n }\r\n }, [getComplexes])\r\n\r\n const handleOnLandlordSelect = React.useCallback(async (value: Props['value']) => {\r\n if (!isEqual(value, selectedLandlord)) {\r\n if (value) {\r\n updateSelectedLandlord(value)\r\n } else {\r\n handleSelectedLandlordClear()\r\n }\r\n try {\r\n await getComplexes({...getPaginationParams(complexesPagination), orgId: value?.value})\r\n } catch (error) {\r\n throw error\r\n }\r\n }\r\n }, [complexesPagination, selectedLandlord, updateSelectedLandlord])\r\n\r\n const handleFetchMore = React.useCallback(async () => {\r\n try {\r\n await Promise.all([setAsyncTimeout(800), getComplexes(nextPaginatedParams(complexesPagination), true)])\r\n } catch (error) {\r\n throw error\r\n }\r\n }, [getComplexes, complexesPagination])\r\n\r\n const mounted = React.useCallback(async (params: GetParams) => {\r\n try {\r\n await getComplexes(params)\r\n setHasSearched(true)\r\n } catch (error) {\r\n throw error\r\n }\r\n }, [complexesPagination, getComplexes])\r\n\r\n React.useEffect(() => {\r\n let params = getPaginationParams(complexesPagination)\r\n if (filters?.organizations) {\r\n const paramLandlord = parsedParams.get('udlejer')\r\n if (paramLandlord) {\r\n const foundLandlord = filters?.organizations?.find(x => x.label === paramLandlord)\r\n if (foundLandlord) {\r\n params.orgId = foundLandlord.value\r\n updateSelectedLandlord({label: foundLandlord.label, value: foundLandlord.value})\r\n }\r\n }\r\n if (!isEmpty(params.s) || !isEmpty(params.orgId)) mounted(params)\r\n }\r\n }, [filters])\r\n\r\n\treturn (\r\n\t\t\r\n \r\n theme.breakpoints.md ? 144 : undefined\r\n }\r\n ]}\r\n >\r\n \r\n {(filters?.organizations && (\r\n \r\n \r\n \r\n Filter\r\n {!isEmpty(selectedLandlord) && (\r\n handleFiltersClear([])}>Nulstil\r\n )}\r\n \r\n \r\n \r\n ({\r\n label: filter.label,\r\n value: filter.value,\r\n }))}\r\n value={selectedLandlord}\r\n />\r\n \r\n \r\n \r\n ))}\r\n {!isLoading && !hasSearched && complexes.length < 1 && (\r\n \r\n Gå på opdagelse efter din kommende indskudsfrie lejebolig gennem vores søgbare oversigt for Keyhole Deposit Ejendomme.

Du kan til hver en tid søge på postnr, by eller specifikke adresser, og finde din kommende indskudsfrie lejebolig.}\r\n dims={dims}\r\n subContent={\r\n \r\n }\r\n title=\"Søg efter din kommende indskudsfrie lejebolig\"\r\n titleProps={{\r\n type: dims.width > theme.breakpoints.md ? 'h2' : 'h4',\r\n }}\r\n titleStyle={[\r\n styles.infoSectionTitle,\r\n {\r\n color: theme.colors.red,\r\n }\r\n ]}\r\n />\r\n \r\n )}\r\n {(complexes.length > 0 && (\r\n <>\r\n \r\n 400 ? 'row' : 'column' }]}>\r\n {complexes.length}/{complexesPagination.total} ejendomme\r\n \r\n {complexes.map((complex, i) => (\r\n \r\n {i > 0 && }\r\n \r\n \r\n theme.breakpoints.md && complex.lat && complex.long && (\r\n \r\n \r\n \r\n \r\n \r\n )) || (\r\n \r\n )}\r\n subContentStyle={\r\n dims.width > 1024 && complex.lat && complex.long\r\n ? {width: 460}\r\n : undefined\r\n }\r\n tagline={`${complex.zipcode || ''} ${(complex.city || '')}`}\r\n title={complex.name}\r\n />\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n = complexesPagination.total}\r\n ghosted={complexes.length === complexesPagination.total}\r\n loading={isLoading}\r\n onPress={handleFetchMore}\r\n total={complexesPagination.total}\r\n />\r\n \r\n \r\n )) || \r\n (!isLoading && complexes.length < 1 && hasSearched && (\r\n \r\n \r\n }\r\n title={`Æv.. ${selectedLandlord?.label || 'vi'} har desværre ingen ejendomme i det valgte område`}\r\n titleProps={{\r\n type: dims.width > theme.breakpoints.md ? 'h2' : 'h4',\r\n }}\r\n titleStyle={[\r\n styles.infoSectionTitle\r\n ]}\r\n />\r\n \r\n ))}\r\n {(isLoading && complexes.length < 1 && (\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n \r\n\t)\r\n}\r\n\r\nexport interface KeyholeListingsStyles {\r\n infoCardWrapper: ViewStyle\r\n infoSectionTitle: TextStyle\r\n inner: ViewStyle\r\n listHeader: ViewStyle\r\n marker: ViewStyle\r\n row: ViewStyle\r\n wrapper: ViewStyle\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n infoCardWrapper: {\r\n width: '100%',\r\n },\r\n infoSectionTitle: {\r\n marginBottom: 16,\r\n maxWidth: 550,\r\n },\r\n inner: {\r\n maxWidth: 1280,\r\n marginHorizontal: 'auto',\r\n width: '100%',\r\n },\r\n listHeader: {\r\n marginBottom: 40,\r\n },\r\n marker: {\r\n borderWidth: 2,\r\n height: 80,\r\n transform: [\r\n {translateX: -40},\r\n {translateY: -40}\r\n ],\r\n width: 80,\r\n },\r\n row: {\r\n alignItems: 'center',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n },\r\n wrapper: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: 32,\r\n marginHorizontal: 'auto',\r\n maxWidth: 1200,\r\n width: '100%',\r\n },\r\n})\r\n\r\nexport default KeyholeListings","import React from 'react';\r\nimport './index.css'\r\n/*<--plop-react-provider-imports-->*/\r\nimport { ResponsiveProvider } from './contexts/ResponsiveContext/ResponsiveContext'\r\nimport { KeyholeListingProvider } from './contexts/KeyholeListingContext/KeyholeListingContext';\r\nimport KeyholeThemeProvider from '@bit/jimmijoensson.keyhole.components.keyhole-theme-provider'\r\nimport KeyholeListings from './components/KeyholeListings';\r\nimport UiWrapper from './components/UiWrapper';\r\n\r\nif (process.env.REACT_APP_ENV === 'dev') {\r\n require('./utils/fonts.css')\r\n}\r\n\r\nexport default function App() {\r\n\r\n return (\r\n \r\n {/*<--plop-react-provider-start-->*/}\r\n \r\n \r\n \r\n \r\n \r\n {/*<--plop-react-provider-end-->*/}\r\n \r\n \r\n \r\n )\r\n}\r\n","export { default } from './KeyholeListings';\r\nexport type { KeyholeListingsProps } from './KeyholeListings';","import * as React from 'react'\r\nimport ResponsiveUi, { ResponsiveUiProps } from '@bit/jimmijoensson.keyhole.responsive-ui'\r\nimport { useResponsiveContext } from '../../contexts/ResponsiveContext/ResponsiveContext'\r\n\r\n\r\nexport interface UiWrapperProps extends Omit {}\r\n\r\nconst UiWrapper = ({\r\n ...props\r\n}: UiWrapperProps) => {\r\n const { setDims } = useResponsiveContext()\r\n\r\n\treturn (\r\n\t\t\r\n\t)\r\n}\r\n\r\nexport default UiWrapper","var api = require(\"!C:\\\\npm\\\\prefix\\\\node_modules\\\\expo-cli\\\\node_modules\\\\style-loader\\\\dist\\\\runtime\\\\injectStylesIntoStyleTag.js\");\n var content = require(\"!!C:\\\\npm\\\\prefix\\\\node_modules\\\\expo-cli\\\\node_modules\\\\css-loader\\\\dist\\\\cjs.js!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"C:\\\\npm\\\\prefix\\\\node_modules\\\\expo-cli\\\\node_modules\\\\css-loader\\\\dist\\\\runtime\\\\api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"#root input {\\r\\n outline: none;\\r\\n}\\r\\n\\r\\n#root a {\\r\\n text-decoration: none;\\r\\n}\\r\\n.gm-style a {\\r\\n display: none !important;\\r\\n}\\r\\n\\r\\n.gmnoprint {\\r\\n display: none;\\r\\n}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!C:\\\\npm\\\\prefix\\\\node_modules\\\\expo-cli\\\\node_modules\\\\style-loader\\\\dist\\\\runtime\\\\injectStylesIntoStyleTag.js\");\n var content = require(\"!!C:\\\\npm\\\\prefix\\\\node_modules\\\\expo-cli\\\\node_modules\\\\css-loader\\\\dist\\\\cjs.js!./fonts.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"C:\\\\npm\\\\prefix\\\\node_modules\\\\expo-cli\\\\node_modules\\\\css-loader\\\\dist\\\\runtime\\\\api.js\");\nvar ___CSS_LOADER_GET_URL_IMPORT___ = require(\"C:\\\\npm\\\\prefix\\\\node_modules\\\\expo-cli\\\\node_modules\\\\css-loader\\\\dist\\\\runtime\\\\getUrl.js\");\nvar ___CSS_LOADER_URL_IMPORT_0___ = require(\"../assets/fonts/OpenSans/OpenSans-Light.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_1___ = require(\"../assets/fonts/OpenSans/OpenSans-LightItalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_2___ = require(\"../assets/fonts/OpenSans/OpenSans-Regular.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_3___ = require(\"../assets/fonts/OpenSans/OpenSans-Italic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_4___ = require(\"../assets/fonts/OpenSans/OpenSans-Bold.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_5___ = require(\"../assets/fonts/OpenSans/OpenSans-BoldItalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_6___ = require(\"../assets/fonts/OpenSans/OpenSans-ExtraBold.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_7___ = require(\"../assets/fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_8___ = require(\"../assets/fonts/RobotoSlab-Light.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_9___ = require(\"../assets/fonts/RobotoSlab-Bold.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_10___ = require(\"../assets/fonts/Raleway-Light.ttf\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\nvar ___CSS_LOADER_URL_REPLACEMENT_6___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_6___);\nvar ___CSS_LOADER_URL_REPLACEMENT_7___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_7___);\nvar ___CSS_LOADER_URL_REPLACEMENT_8___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_8___);\nvar ___CSS_LOADER_URL_REPLACEMENT_9___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_9___);\nvar ___CSS_LOADER_URL_REPLACEMENT_10___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_10___);\n// Module\nexports.push([module.id, \"@font-face {\\r\\n font-family: 'OpenSans';\\r\\n font-weight: 300;\\r\\n src: local('OpenSans'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format('truetype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n font-family: 'OpenSans';\\r\\n font-weight: 300;\\r\\n font-style: italic;\\r\\n src: local('OpenSans'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \") format('truetype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n font-family: 'OpenSans';\\r\\n font-weight: 400;\\r\\n src: local('OpenSans'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \") format('truetype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n font-family: 'OpenSans';\\r\\n font-style: italic;\\r\\n font-weight: 400;\\r\\n src: local('OpenSans'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") format('truetype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n font-family: 'OpenSans';\\r\\n font-weight: 700;\\r\\n src: local('OpenSans'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \") format('truetype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n font-family: 'OpenSans';\\r\\n font-style: italic;\\r\\n font-weight: 700;\\r\\n src: local('OpenSans'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_5___ + \") format('truetype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n font-family: 'OpenSans';\\r\\n font-weight: 800;\\r\\n src: local('OpenSans'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_6___ + \") format('truetype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n font-family: 'OpenSans';\\r\\n font-style: italic;\\r\\n font-weight: 800;\\r\\n src: local('OpenSans'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_7___ + \") format('truetype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n font-family: 'RobotoSlab';\\r\\n font-weight: 300;\\r\\n src: local('RobotoSlab'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_8___ + \") format('truetype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n font-family: 'RobotoSlab';\\r\\n font-weight: 700;\\r\\n src: local('RobotoSlab'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_9___ + \") format('truetype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n font-family: 'Raleway';\\r\\n font-weight: 300;\\r\\n src: local('Raleway'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_10___ + \") format('truetype');\\r\\n}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","module.exports = __webpack_public_path__ + \"./fonts/OpenSans-Light.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/OpenSans-LightItalic.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/OpenSans-Regular.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/OpenSans-Italic.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/OpenSans-Bold.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/OpenSans-BoldItalic.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/OpenSans-ExtraBold.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/OpenSans-ExtraBoldItalic.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/RobotoSlab-Light.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/RobotoSlab-Bold.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/Raleway-Light.ttf\";","import axios, { AxiosRequestConfig } from 'axios'\r\nimport { get } from 'lodash'\r\nimport {\r\n getPaginationParams,\r\n GetParamsInterface,\r\n PaginationInterface,\r\n} from '@bit/jimmijoensson.keyhole.interfaces.paginated-response-interface'\r\n\r\nexport const setAsyncTimeout = async (ms: number) => {\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms)\r\n })\r\n}\r\n\r\nexport const isStringifyEqual = (a: any, b: any) => JSON.stringify(a) === JSON.stringify(b)\r\n\r\nexport const isEmptyStr = (str?: string | null) =>\r\n str === '00000000-0000-0000-0000-000000000000' ||\r\n str === '' ||\r\n str === null ||\r\n str === undefined ||\r\n str === '1970-01-01T00:00:00Z'\r\n\r\nexport const openInNewTab = (url: string) => {\r\n const win = window.open(url, '_blank')\r\n if (win !== null) win.focus()\r\n}\r\n\r\nexport const capitalize = (s: string) => {\r\n if (typeof s !== 'string') return ''\r\n return s.charAt(0).toUpperCase() + s.slice(1)\r\n}\r\n\r\nexport const sortBy = (\r\n array: any,\r\n property: string,\r\n dataType: 'date' | 'string',\r\n order: 'asc' | 'desc',\r\n prioritizeString?: string\r\n) => {\r\n let sortedArray\r\n if (dataType === 'date') {\r\n sortedArray = array.sort((a: any, b: any) => {\r\n a = new Date(get(a, property))\r\n b = new Date(get(b, property))\r\n return (order === 'asc' && a - b) || (order === 'desc' && b - a) || -1\r\n })\r\n } else {\r\n const collator = new Intl.Collator('da-DK', { numeric: true, sensitivity: 'base' })\r\n sortedArray = array.sort((a: any, b: any) => {\r\n const aProperty = get(a, property)\r\n const bProperty = get(b, property)\r\n return collator.compare(\r\n prioritizeString === aProperty ? '' : aProperty,\r\n prioritizeString === bProperty ? '' : bProperty\r\n )\r\n })\r\n sortedArray = order === 'asc' ? sortedArray : sortedArray.reverse()\r\n }\r\n\r\n return sortedArray\r\n}\r\n\r\nexport const getObjectKeys = (obj: O) => Object.keys(obj) as Array\r\n\r\nexport const uuid = () => {\r\n const url = URL.createObjectURL(new Blob())\r\n const [id] = url\r\n .toString()\r\n .split('/')\r\n .reverse()\r\n URL.revokeObjectURL(url)\r\n return id\r\n}\r\n\r\nexport const addDifferenceToValue = (oldVal: number, newVal: number, valToIncrease: number) =>\r\n valToIncrease + (newVal - oldVal)\r\n\r\nexport const reOrder = (order: 'asc' | 'desc' | undefined) => (order === 'asc' ? 'desc' : 'asc')\r\n\r\nexport const nextPaginatedParams = (pagination: PaginationInterface) =>\r\n ({\r\n ...getPaginationParams(pagination),\r\n offset:\r\n pagination.offset !== undefined && pagination.limit !== undefined\r\n ? pagination.offset + pagination.limit\r\n : 0,\r\n } as GetParamsInterface)\r\n\r\nexport const sortParams: any = (\r\n orderBy: PaginationInterface['orderBy'],\r\n params: PaginationInterface\r\n) => ({\r\n ...params,\r\n offset: 0,\r\n order: params.orderBy === orderBy ? reOrder(params.order) : 'asc',\r\n orderBy: orderBy,\r\n})\r\n\r\nexport interface DaysRange {\r\n amount: number\r\n title?: string\r\n}\r\n\r\nexport const setAsyncData = async (\r\n setter: React.Dispatch>,\r\n getter: () => Promise\r\n) => {\r\n setter(await getter())\r\n}\r\n\r\nexport const getNonDecimalEnding = (locale?: string, number?: number) => {\r\n if (number && !Number.isInteger(number)) return ''\r\n switch (locale) {\r\n case 'da-DK':\r\n return ',-'\r\n\r\n default:\r\n return '.-'\r\n }\r\n}\r\n\r\nexport const toNonDecimalLocaleString = (\r\n number: number,\r\n locale?: string | undefined,\r\n options?: Intl.NumberFormatOptions | undefined\r\n) => {\r\n const isInteger = Number.isInteger(number)\r\n return new Intl.NumberFormat(locale, { maximumFractionDigits: 2, ...options }).format(number) + (\r\n isInteger\r\n ? getNonDecimalEnding(locale)\r\n : ''\r\n )\r\n}\r\n\r\nexport const pickObjProps = (obj: any, fields: K[]) =>\r\n fields.reduce(\r\n (acc, k: any) => ({ ...acc, ...(obj.hasOwnProperty(k) && { [k]: obj[k] }) }),\r\n {}\r\n ) as T\r\n\r\nconst resources: any = {}\r\n\r\nexport const makeRequestCreator = () => {\r\n let cancel: any\r\n\r\n return async (config: AxiosRequestConfig, cached?: boolean) => {\r\n if (cancel && cached) {\r\n // Cancel the previous request before making a new request\r\n cancel.cancel()\r\n }\r\n const cacheKey = config.url + new URLSearchParams(config.params).toString()\r\n // Create a new CancelToken\r\n cancel = axios.CancelToken.source()\r\n try {\r\n if (cached && resources[cacheKey]) {\r\n // Return result if it exists\r\n return resources[cacheKey]\r\n }\r\n const res = await axios({\r\n ...config,\r\n cancelToken: cancel.token,\r\n })\r\n\r\n const result = res.data\r\n // Store response\r\n resources[cacheKey] = result\r\n\r\n return result\r\n } catch (error) {\r\n if (axios.isCancel(error)) {\r\n // Handle if request was cancelled\r\n } else {\r\n // Handle usual errors\r\n throw error\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const request = makeRequestCreator()\r\n","import * as React from 'react'\r\nimport { Dimensions, ScaledSize } from 'react-native'\r\n\r\nconst dimensions = Dimensions.get('window')\r\n\r\ninterface ResponsiveContextInterface {\r\n dims: ScaledSize\r\n setDims: React.Dispatch>\r\n}\r\n\r\nexport const ResponsiveContext = React.createContext({\r\n dims: dimensions,\r\n setDims: () => {},\r\n})\r\n\r\nexport const ResponsiveProvider: React.FunctionComponent<{}> = props => {\r\n // State variables\r\n const [dims, setDims] = React.useState(dimensions)\r\n\r\n // Callbacks and functions\r\n\r\n // useEffects\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n\r\nexport const useResponsiveContext = () => React.useContext(ResponsiveContext)\r\n"],"sourceRoot":""}