From 628632ff5092f1e3cf6c968d9bdfbd9a24f59541 Mon Sep 17 00:00:00 2001
From: Marcin Zelent <marcin@zelent.net>
Date: Fri, 8 Jan 2021 19:47:37 +0100
Subject: Initial commit

---
 pages/index.tsx | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)
 create mode 100644 pages/index.tsx

(limited to 'pages/index.tsx')

diff --git a/pages/index.tsx b/pages/index.tsx
new file mode 100644
index 0000000..e422069
--- /dev/null
+++ b/pages/index.tsx
@@ -0,0 +1,80 @@
+import { GetStaticProps } from 'next';
+import Head from 'next/head';
+import dynamic from 'next/dynamic';
+import { useState } from 'react';
+
+import { Trip } from 'models';
+import getTripsData from 'lib/trips';
+import Sidebar from 'components/Sidebar/Sidebar';
+import Gallery from 'components/Gallery/Gallery';
+import styles from 'styles/Home.module.css';
+
+interface Props {
+  allTripsData: Trip[];
+}
+
+const Map = dynamic(() => import('components/Map/Map'), { ssr: false });
+
+export default function Home({ allTripsData }: Props): JSX.Element {
+  const [currentTrip, setCurrentTrip] = useState(allTripsData[0]);
+  const [currentPhoto, setCurrentPhoto] = useState(null);
+  const [asideOpen, setAsideOpen] = useState(false);
+
+  function handleMarkerClick(photo: string) {
+    const index = currentTrip.photos.findIndex((p) => p.name === photo);
+    setCurrentPhoto(index);
+  }
+
+  function handlePhotoChange(direction: boolean): void {
+    if (direction) {
+      if (currentTrip.photos.length > currentPhoto + 1) {
+        setCurrentPhoto(currentPhoto + 1);
+      }
+    } else if (currentPhoto - 1 >= 0) {
+      setCurrentPhoto(currentPhoto - 1);
+    }
+  }
+
+  return (
+    <div className={styles.container}>
+      <Head>
+        <title>Trip Share</title>
+        <link rel="icon" href="/favicon.ico" />
+      </Head>
+
+      {currentPhoto !== null && (
+        <Gallery
+          currentPhoto={currentTrip.photos[currentPhoto]}
+          handleClose={() => setCurrentPhoto(null)}
+          handlePhotoChange={handlePhotoChange}
+        />
+      )}
+
+      <Sidebar
+        trips={allTripsData}
+        currentTrip={currentTrip}
+        asideOpen={asideOpen}
+        handleClose={() => setAsideOpen(false)}
+        setCurrentTrip={setCurrentTrip}
+      />
+
+      <button type="button" className={styles.asideToggle} onClick={() => setAsideOpen(true)}>
+        |||
+      </button>
+
+      <main className={styles.main}>
+        <Map trip={currentTrip} handleMarkerClick={handleMarkerClick} />
+      </main>
+    </div>
+  );
+}
+
+export const getStaticProps: GetStaticProps = async () => {
+  const allTripsData = getTripsData();
+
+  return {
+    props: {
+      allTripsData,
+    },
+  };
+};
-- 
cgit v1.2.3

