matrix-art

An image gallery for Matrix
git clone git://archive.git.mtrnord.blog/MTRNord/matrix-art.git
Log | Files | Refs | README | LICENSE

commit a76ae0aa2584a0c294bc775f2c209c80550840c7
parent 9cb47766c0778cbd91df83b0a3ba52c64354586e
Author: MTRNord <mtrnord1@gmail.com>
Date:   Fri, 31 Dec 2021 01:32:20 +0100

Factor out header and make sure we use the correct keys

Diffstat:
Acomponents/Header.tsx | 38++++++++++++++++++++++++++++++++++++++
Mpages/Home.tsx | 36++++++------------------------------
2 files changed, 44 insertions(+), 30 deletions(-)

diff --git a/components/Header.tsx b/components/Header.tsx @@ -0,0 +1,37 @@ +import Link from "next/link"; +import { Component } from "react"; + +export default class Header extends Component { + render() { + return ( + <> + <header className='flex fixed top-0 left-0 right-0 bottom-0 lg:h-[108px] h-[216px] z-[100] items-center lg:flex-row flex-col'> + <span className='flex items-center h-full lg:mx-10 my-4 text-gray-900 dark:text-gray-200 font-bold'><Link href="/">Matrix Art</Link></span> + <div className='flex flex-1 items-center lg:flex-row flex-col'> + <div className='flex grow-[1] h-full relative items-center'> + <form className='w-[200px] text-gray-900 dark:text-gray-200'> + <div className='flex flex-row box-border items-center cursor-text duration-300 rounded-sm border dark:border-slate-400 border-slate-500 py-1.5 px-2 focus-within:border-teal-400'> + <input className='bg-transparent min-w-[20px] focus:outline-none flex-[1]' type="text" placeholder='Search & Discover' /> + <span className='inline-flex items-center justify-center cursor-pointer'> + <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" className='fill-gray-900 dark:fill-gray-200'><path d="M0 0h24v24H0z" fill="none" /><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" /></svg> + </span> + </div> + </form> + </div> + + <nav className='flex flex-shrink-0 relative mr-0 h-full'> + <span className='px-4 h-auto min-w-[24px] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/register">Join</Link></span> + <span className='px-4 h-auto min-w-[24px] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/login">Log in</Link></span> + </nav> + </div> + <span className='lg:opacity-100 opacity-0 inline-block bg-gray-900 dark:bg-gray-200 w-[1px] h-[27px]'></span> + <div className='relative lg:m-0 mt-4'> + <div className='flex'> + <button className='text-teal-400 bg-transparent relative h-[54px] min-w-[150px] z-[2] cursor-auto font-semibold'>Submit</button> + </div> + </div> + </header> + </> + ); + } +} +\ No newline at end of file diff --git a/pages/Home.tsx b/pages/Home.tsx @@ -4,6 +4,7 @@ import { RingLoader } from 'react-spinners'; import { ImageEvent, ImageGalleryEvent } from '../helpers/event_types'; import Link from 'next/link'; import Head from 'next/head'; +import Header from '../components/Header'; type ImageEvents = ImageEvent | ImageGalleryEvent; @@ -141,32 +142,7 @@ export default class Home extends Component<Props, State>{ <Head> <title key="title">Matrix Art | Home</title> </Head> - <header className='flex fixed top-0 left-0 right-0 bottom-0 lg:h-[108px] h-[216px] z-[100] items-center lg:flex-row flex-col'> - <span className='flex items-center h-full lg:mx-10 my-4 text-gray-900 dark:text-gray-200 font-bold'><Link href="/">Matrix Art</Link></span> - <div className='flex flex-1 items-center lg:flex-row flex-col'> - <div className='flex grow-[1] h-full relative items-center'> - <form className='w-[200px] text-gray-900 dark:text-gray-200'> - <div className='flex flex-row box-border items-center cursor-text duration-300 rounded-sm border dark:border-slate-400 border-slate-500 py-1.5 px-2 focus-within:border-teal-400'> - <input className='bg-transparent min-w-[20px] focus:outline-none flex-[1]' type="text" placeholder='Search & Discover' /> - <span className='inline-flex items-center justify-center cursor-pointer'> - <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" className='fill-gray-900 dark:fill-gray-200'><path d="M0 0h24v24H0z" fill="none" /><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" /></svg> - </span> - </div> - </form> - </div> - - <nav className='flex flex-shrink-0 relative mr-0 h-full'> - <span className='px-4 h-auto min-w-[24px] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/register">Join</Link></span> - <span className='px-4 h-auto min-w-[24px] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/login">Log in</Link></span> - </nav> - </div> - <span className='lg:opacity-100 opacity-0 inline-block bg-gray-900 dark:bg-gray-200 w-[1px] h-[27px]'></span> - <div className='relative lg:m-0 mt-4'> - <div className='flex'> - <button className='text-teal-400 bg-transparent relative h-[54px] min-w-[150px] z-[2] cursor-auto font-semibold'>Submit</button> - </div> - </div> - </header> + <Header></Header> <main className='lg:pt-[108px] pt-[216px] z-0'> <div className='z-[100] sticky lg:top-[108px] top-[216px] bg-[#fefefe]/[.95] dark:bg-[#14181E]/[.95]'> <div className='h-[72px] px-10 w-full relative grid grid-cols-[1fr_auto_1fr] items-center' id='section-grid'> @@ -218,9 +194,9 @@ export default class Home extends Component<Props, State>{ render_image_box(thumbnail_url: string, id: string, post_id: string, sender: string, caption: string) { // TODO show creators display name instead of mxid and show avatar image - const direct_link = `/post/${id}`; + const direct_link = `/post/${post_id}`; return ( - <li className='flex-grow-1 h-[270px]' key={post_id}> + <li className='flex-grow-1 h-[270px]' key={id}> <Link href={direct_link}> <div className='relative h-[270px] cursor-pointer'> <img className='relative max-w-full h-[270px] object-cover align-bottom z-0' src={this.props.client?.thumbnailLink(thumbnail_url, "scale", 270, 270)}></img> @@ -244,4 +220,4 @@ function isImageGalleryEvent(event: ImageEvents): event is ImageGalleryEvent { function isImageEvent(event: ImageEvents): event is ImageEvent { return event.type === "m.image" && event.redacted_because === undefined; -} -\ No newline at end of file +}; +\ No newline at end of file