ahbeng/NUSMods

View on GitHub
website/src/views/today/EventMapInline/EventMapInline.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import * as React from 'react';
import classnames from 'classnames';

import type { LatLngTuple, Venue, VenueLocation, VenueLocationMap } from 'types/venues';
import LocationMap from 'views/components/map/LocationMap';
import styles from './EventMapInline.scss';

export type OwnProps = Readonly<{
  isOpen: boolean;
  className?: string;
  venue: Venue;

  toggleOpen: () => void;
}>;

export type Props = OwnProps & {
  readonly venueLocations: VenueLocationMap;
};

const EventMapInline: React.FunctionComponent<Props> = ({
  venue,
  isOpen,
  className,
  toggleOpen,
  venueLocations,
}) => {
  const venueLocation: VenueLocation = venueLocations[venue];
  if (!venueLocation || !venueLocation.location) {
    return null;
  }

  if (!isOpen) {
    return (
      <div className={className}>
        <button type="button" onClick={toggleOpen} className={classnames(styles.openMap)}>
          Open Map
        </button>
      </div>
    );
  }

  const position: LatLngTuple = [venueLocation.location.y, venueLocation.location.x];
  return (
    <div className={className}>
      <LocationMap position={position} />
    </div>
  );
};

export default EventMapInline;