mirror of
https://github.com/DerTyp7/apartment-altenau-nextjs.git
synced 2025-10-29 04:42:11 +01:00
67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
import { useEffect, useState } from "react";
|
|
import GalleryFullscreen from "../components/GalleryFullscreen";
|
|
import GalleryGrid from "../components/GalleryGrid";
|
|
import { db } from "../firebase-config";
|
|
import styles from "../styles/Gallery.module.scss";
|
|
import { useRouter } from "next/router";
|
|
import { useSearchParams } from "next/navigation";
|
|
import { collection, doc, getDoc, getDocs } from "firebase/firestore";
|
|
|
|
export async function getInitialProps({ router }) {
|
|
let pageProps = {};
|
|
const { locale } = router;
|
|
|
|
return { pageProps, locale };
|
|
}
|
|
|
|
export async function getServerSideProps({ locale }) {
|
|
const data = await getDoc(doc(db, "localeTexts", locale));
|
|
|
|
return {
|
|
props: { localeTexts: data.data() ?? {} },
|
|
};
|
|
}
|
|
|
|
export default function Gallery({ localeTexts }) {
|
|
const router = useRouter();
|
|
|
|
const [searchParams, setSearchParams] = useSearchParams();
|
|
const [activeImage, setActiveImage] = useState(null);
|
|
const [images, setImages] = useState([]);
|
|
const imagesCollectionRef = collection(db, "galleryImages");
|
|
|
|
useEffect(() => {
|
|
async function getImages() {
|
|
const data = await getDocs(imagesCollectionRef);
|
|
setImages(data.docs.map((doc) => ({ ...doc.data(), id: doc.id })));
|
|
}
|
|
|
|
getImages();
|
|
|
|
setActiveImage(
|
|
images.find((image) => {
|
|
return image.id === router.query?.activeImg;
|
|
})
|
|
);
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
setActiveImage(
|
|
images.find((image) => {
|
|
return image.id === router.query?.activeImg;
|
|
})
|
|
);
|
|
}, [searchParams, images, activeImage, router]);
|
|
|
|
return (
|
|
<div className={styles.gallery}>
|
|
<h1 className="pageHeadline">{localeTexts?.gallery?.headline}</h1>
|
|
{activeImage ? (
|
|
<GalleryFullscreen activeImage={activeImage} images={images} />
|
|
) : (
|
|
<GalleryGrid images={images} />
|
|
)}
|
|
</div>
|
|
);
|
|
}
|