Source

components/ListingDetails/ListingDetails.js

import React from 'react';
import Grid from '@material-ui/core/Grid';
import { Typography } from '@material-ui/core';

import ListingInfoItem from './ListingInfoItem';
import ImageCarousel from './ImageCarousel';
import './ListingDetails.scss';

/**
 * A parent component which is responsible for passing down detailed information
 * about a selected listing to its children components.
 *
 * @component
 * @prop {listingDetails} listing Information about a listing
 * @prop {function} onClick A handler for a click Event
 * @prop {boolean} showReviews If reviews are to be shown
 */
const ListingDetails = (props) => {
  const { listing, onClick, showReviews } = props;
  if (listing) {
    return (
      <Grid
        container
        spacing={3}
        id='listing-details-container'
        className='listing-details-container'
      >
        <Grid item xs={12} className='listing-details-name'>
          <Typography variant='h6' align='center'>
            {listing.name}
          </Typography>
        </Grid>

        <Grid item xs={6} className='listing-details-grid'>
          <Grid
            container
            spacing={3}
            className='listing-details-grid-container-info'
          >
            <ListingInfoItem
              listing={listing}
              onClick={onClick}
              showReviews={showReviews}
            />
          </Grid>
        </Grid>
        <Grid item xs={6} className='listing-details-grid'>
          <Grid
            container
            spacing={3}
            className='listing-details-grid-container-image'
          >
            <Grid
              item
              xs={12}
              className='listing-details-grid-container-image-inner'
            >
              <ImageCarousel listing={listing} />
            </Grid>
          </Grid>
        </Grid>
      </Grid>
    );
  } else {
    return <div id='listing-details-no-content' />;
  }
};

export default ListingDetails;