[wip] Create photo detail page with informations
This commit is contained in:
@@ -1 +1,111 @@
|
||||
photo page
|
||||
<script lang="ts">
|
||||
import { page } from '$app/stores'
|
||||
import dayjs from 'dayjs'
|
||||
import advancedFormat from 'dayjs/plugin/advancedFormat.js'
|
||||
// Components
|
||||
import Image from '$components/atoms/Image.svelte'
|
||||
|
||||
export let photos: any[]
|
||||
export let location: any
|
||||
export let currentIndex: number
|
||||
|
||||
dayjs.extend(advancedFormat)
|
||||
|
||||
// let currentIndex: number = 0
|
||||
|
||||
// Find current photo from the slug
|
||||
$: currentPhoto = photos.find((photo: any) => photo.slug === $page.params.photo)
|
||||
$: currentPhotoIndex = photos.findIndex((photo: any) => photo.slug === $page.params.photo)
|
||||
|
||||
|
||||
/**
|
||||
* Go to next photo
|
||||
*/
|
||||
const goToNext = () => {
|
||||
currentIndex++
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Go to previous photo
|
||||
*/
|
||||
const goToPrevious = () => {
|
||||
currentIndex--
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load photos
|
||||
*/
|
||||
</script>
|
||||
|
||||
|
||||
<h1>Title</h1>
|
||||
<p>{currentPhoto.title}</p>
|
||||
|
||||
<h2>Location</h2>
|
||||
<p>{location.name}, {location.country.name}</p>
|
||||
<span style="vertical-align: middle;">·</span>
|
||||
<time class="text-date" datetime={dayjs(currentPhoto.date_taken).format('YYYY-MM-DD')}>
|
||||
{dayjs(currentPhoto.date_taken).format('MMMM, Do YYYY')}
|
||||
</time>
|
||||
|
||||
<button on:click={goToPrevious}>Previous</button>
|
||||
<button on:click={goToNext}>Next</button>
|
||||
|
||||
<Image
|
||||
id={currentPhoto.image.id}
|
||||
alt={currentPhoto.title}
|
||||
sizes={{
|
||||
small: { width: 500 },
|
||||
medium: { width: 900 },
|
||||
large: { width: 1440 },
|
||||
}}
|
||||
ratio={1.5}
|
||||
/>
|
||||
|
||||
<p>index: {currentIndex + 1}</p>
|
||||
|
||||
|
||||
<script context="module" lang="ts">
|
||||
import { fetchAPI } from '$utils/api'
|
||||
|
||||
export async function load ({ page, fetch, session, stuff }) {
|
||||
const res = await fetchAPI(`
|
||||
query {
|
||||
photos: photo (
|
||||
filter: { location: { slug: { _eq: "${page.params.location}" }}},
|
||||
sort: "-date_created",
|
||||
limit: 9,
|
||||
) {
|
||||
title
|
||||
slug
|
||||
date_taken
|
||||
image {
|
||||
id
|
||||
title
|
||||
}
|
||||
}
|
||||
|
||||
location (filter: { slug: { _eq: "${page.params.location}" }}) {
|
||||
name
|
||||
slug
|
||||
country { name }
|
||||
}
|
||||
}
|
||||
`)
|
||||
|
||||
const { data } = res
|
||||
|
||||
// Find photo's index
|
||||
const currentIndex = data.photos.findIndex((photo: any) => photo.slug === page.params.photo)
|
||||
|
||||
return {
|
||||
props: {
|
||||
photos: data.photos,
|
||||
location: data.location[0],
|
||||
currentIndex,
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user