130 lines
5.2 KiB
JavaScript
130 lines
5.2 KiB
JavaScript
/**
|
|
* ==============================================================================
|
|
* Imports
|
|
* ==============================================================================
|
|
*/
|
|
import React from "react";
|
|
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
|
|
/** ****************************************************************************** */
|
|
/** ****************************************************************************** */
|
|
/** ****************************************************************************** */
|
|
/** ****************************************************************************** */
|
|
/** ****************************************************************************** */
|
|
/** ****************************************************************************** */
|
|
|
|
/**
|
|
* ==============================================================================
|
|
* Main Component { Functional }
|
|
* ==============================================================================
|
|
* @param {Object} props - Server props
|
|
*/
|
|
export default function Homepage(props) {
|
|
// ## Get Contexts
|
|
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
|
|
// ## Javascript Variables
|
|
/** ********************* Head Items */
|
|
let head = (
|
|
<React.Fragment>
|
|
<title>Showmerebates | Home</title>
|
|
<meta name="description" content="Find great property rebates" />
|
|
</React.Fragment>
|
|
);
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
|
|
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
|
|
// ## React Hooks { useState, useEffect, useRef, etc ... }
|
|
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
|
|
// ## Function Return
|
|
return (
|
|
<React.Fragment>
|
|
<GeneralLayout head={ head } user={ props.user }>
|
|
<main>
|
|
<Hero />
|
|
<HowItWorks />
|
|
<FeaturedProperties data={ props.data } user={ props.user } />
|
|
<AboutUsSection />
|
|
{ !props.user && <LoginPromptPopup user={ props.user } /> }
|
|
</main>
|
|
</GeneralLayout>
|
|
</React.Fragment>
|
|
);
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
};
|
|
|
|
/** ****************************************************************************** */
|
|
/** ****************************************************************************** */
|
|
/** ****************************************************************************** */
|
|
/** ****************************************************************************** */
|
|
/** ****************************************************************************** */
|
|
/** ****************************************************************************** */
|
|
|
|
/**
|
|
* ==============================================================================
|
|
* Server Side Props or Static Props
|
|
* ==============================================================================
|
|
* @param {Object} req - http incoming request object
|
|
* @param {Object} res - http response object
|
|
* @param {Object} query - queries attached to the url
|
|
*/
|
|
export async function getServerSideProps({ req, res, query }) {
|
|
// ## Environment processes
|
|
|
|
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
|
|
// ## User Authentication
|
|
const user = await userAuth(req, res);
|
|
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
|
|
// ## Page/Site Data Data Fetching
|
|
let properties = await dbHandler(`
|
|
SELECT
|
|
ListingKeyNumeric,City,RoomsTotal,BathroomsFull,BathroomsTotalInteger,BedroomsTotal,UnparsedAddress,BuildingAreaTotal,ListPrice,PostalCode
|
|
FROM
|
|
utahapidata
|
|
WHERE
|
|
PhotosCount > 0 AND ListPrice > 0 AND BedroomsTotal > 0 LIMIT 3
|
|
`);
|
|
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
|
|
// ## Server Props Return
|
|
return {
|
|
props: {
|
|
user: user,
|
|
data: properties,
|
|
},
|
|
};
|
|
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
/** ********************************************** */
|
|
}
|