mirror of
https://github.com/jorgev259/soc_site-astro.git
synced 2025-06-29 07:57:41 +00:00
Album list page
This commit is contained in:
parent
6e0204bc49
commit
3447e36448
4 changed files with 76 additions and 2 deletions
|
|
@ -48,7 +48,6 @@ export default defineConfig({
|
||||||
output: 'server',
|
output: 'server',
|
||||||
adapter: node({ mode: 'standalone' }),
|
adapter: node({ mode: 'standalone' }),
|
||||||
redirects: {
|
redirects: {
|
||||||
'/album/list': { status: 307, destination: '/maintenance' },
|
|
||||||
'/anim': { status: 307, destination: '/maintenance' },
|
'/anim': { status: 307, destination: '/maintenance' },
|
||||||
'/anim/[id]': { status: 307, destination: '/maintenance' },
|
'/anim/[id]': { status: 307, destination: '/maintenance' },
|
||||||
'/anim/list': { status: 307, destination: '/maintenance' },
|
'/anim/list': { status: 307, destination: '/maintenance' },
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ const listClass =
|
||||||
---
|
---
|
||||||
|
|
||||||
<div class='md:w-3/12 md:max-w-[300px] h-full bg-dark flex flex-col'>
|
<div class='md:w-3/12 md:max-w-[300px] h-full bg-dark flex flex-col'>
|
||||||
<a href='#' class={listClass}>{m.lastAddedSidebar()}</a>
|
|
||||||
<a href='#' class={listClass}>{m.getLucky()}</a>
|
<a href='#' class={listClass}>{m.getLucky()}</a>
|
||||||
<a href='#' class={listClass}>{m.randomPull()}</a>
|
<a href='#' class={listClass}>{m.randomPull()}</a>
|
||||||
<div class='px-6 flex flex-col gap-y-3'>
|
<div class='px-6 flex flex-col gap-y-3'>
|
||||||
|
|
|
||||||
24
src/components/albumList/letterSection.astro
Normal file
24
src/components/albumList/letterSection.astro
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
import { AlbumStatus } from '@prisma/client'
|
||||||
|
import prismaClient from 'utils/prisma-client'
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
letter: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const { letter } = Astro.props
|
||||||
|
const albums = await prismaClient.albums.findMany({
|
||||||
|
where: { status: AlbumStatus.SHOW, title: { startsWith: letter } },
|
||||||
|
select: { id: true, title: true }
|
||||||
|
})
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class='flex flex-col gap-y-1'>
|
||||||
|
{
|
||||||
|
albums.map((a) => (
|
||||||
|
<a class='text-left' href={`/album/${a.id}`}>
|
||||||
|
{a.title}
|
||||||
|
</a>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</div>
|
||||||
52
src/pages/album/list/index.astro
Normal file
52
src/pages/album/list/index.astro
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
---
|
||||||
|
import prismaClient from 'utils/prisma-client'
|
||||||
|
import * as m from 'paraglide/messages'
|
||||||
|
import { AlbumStatus } from '@prisma/client'
|
||||||
|
|
||||||
|
import Sidebar from 'components/Sidebar.astro'
|
||||||
|
import BaseLayout from 'layouts/base.astro'
|
||||||
|
import AlbumBox from 'components/AlbumBox.astro'
|
||||||
|
import LetterSection from 'components/albumList/letterSection.astro'
|
||||||
|
|
||||||
|
const letters: { letter: string; count: BigInt }[] = await prismaClient.$queryRaw`
|
||||||
|
SELECT DISTINCT UPPER(LEFT(title, 1)) AS letter, COUNT(*) AS count
|
||||||
|
FROM albums
|
||||||
|
WHERE status = 'SHOW'
|
||||||
|
GROUP BY letter
|
||||||
|
ORDER BY letter;
|
||||||
|
`
|
||||||
|
---
|
||||||
|
|
||||||
|
<BaseLayout>
|
||||||
|
<div class='flex flex-col md:flex-row flex-1 max-w-[2000px]'>
|
||||||
|
<div class='flex-1 px-5 bg-dark'>
|
||||||
|
<div class='flex flex-wrap gap-4 justify-center my-3'>
|
||||||
|
{
|
||||||
|
letters.map((l) => (
|
||||||
|
<div class='bg-btn-gray rounded-md size-14 uppercase font-semibold text-4xl text-white hover:bg-gray-hover'>
|
||||||
|
<a
|
||||||
|
href={`#${l.letter}`}
|
||||||
|
class='flex justify-center items-center size-full hover:no-underline hover:text-white'
|
||||||
|
>
|
||||||
|
{l.letter}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div class='flex flex-col gap-y-6'>
|
||||||
|
{
|
||||||
|
letters.map((l) => (
|
||||||
|
<div id={l.letter}>
|
||||||
|
<div class='flex uppercase border-y-2 text-4xl justify-center border-white py-1.5'>{l.letter}</div>
|
||||||
|
<div class='my-4'>
|
||||||
|
<LetterSection letter={l.letter} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<Sidebar />
|
||||||
|
</div>
|
||||||
|
</BaseLayout>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue