matrix-art

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

commit 8ad4cd760e2a05b9661303abe6b477598e2b8ab2
parent 9d8ae18bd7f22f9a0e45e784634ec9c3accd0cfa
Author: MTRNord <mtrnord1@gmail.com>
Date:   Wed, 26 Jan 2022 18:25:32 +0100

Fix logout and fix buttons shown

Diffstat:
Mcomponents/Header.tsx | 23+++++++++++++----------
Mpages/api/directory.tsx | 1-
Mpages/login.tsx | 3---
Mpages/logout.tsx | 1-
Mpages/submit.tsx | 15++++++++++++---
5 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/components/Header.tsx b/components/Header.tsx @@ -1,5 +1,6 @@ import Link from "next/link"; import { PureComponent } from "react"; +import User from "../helpers/db/Users"; import { ClientContext } from "./ClientContext"; type Props = { @@ -7,9 +8,10 @@ type Props = { }; type State = { - directory_data: { _id: string; user_id: string; user_room: string; }[]; + directory_data: User[]; loading: boolean; error?: string; + loggedIn: boolean; }; export default class Header extends PureComponent<Props, State> { declare context: React.ContextType<typeof ClientContext>; @@ -18,7 +20,8 @@ export default class Header extends PureComponent<Props, State> { this.state = { directory_data: [], - loading: true + loading: true, + loggedIn: false } as State; } @@ -27,7 +30,7 @@ export default class Header extends PureComponent<Props, State> { const data = await fetch("/api/directory", { method: "GET" }); const data_parsed = await data.json(); const directory_data = data_parsed.data; - this.setState({ directory_data: directory_data, loading: false }); + this.setState({ directory_data: directory_data, loading: false, loggedIn: !this.context.client.isGuest }); } catch { console.error("Failed to get directory"); this.setState({ error: "Failed to get directory" }); @@ -68,19 +71,19 @@ export default class Header extends PureComponent<Props, State> { </div> <nav className='flex lg:flex-shrink-0 my-4'> - {this.context.client.isGuest ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/register">Join</Link></span> : undefined} - {this.context.client.isGuest ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/login">Log in</Link></span> : undefined} - {!this.context.client.isGuest && this.state.directory_data.some(thing => thing.user_id == this.context.client.userId) ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href={"/profile/" + encodeURIComponent(this.context.client.userId!)}>Profile</Link></span> : undefined} - {!this.context.client.isGuest ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/logout/">Logout</Link></span> : undefined} + {!this.state.loggedIn ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/register">Join</Link></span> : undefined} + {!this.state.loggedIn ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/login">Log in</Link></span> : undefined} + {this.state.loggedIn && this.state.directory_data.some(thing => thing.mxid == this.context.client.userId) ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href={"/profile/" + encodeURIComponent(this.context.client.userId!)}>Profile</Link></span> : undefined} + {this.state.loggedIn ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/logout/">Logout</Link></span> : undefined} </nav> </div> - <span className='lg:opacity-100 opacity-0 inline-block bg-gray-900 dark:bg-gray-200 w-[1px] lg:h-7 h-0'></span> + {this.state.loggedIn ? <span className='lg:opacity-100 opacity-0 inline-block bg-gray-900 dark:bg-gray-200 w-[1px] lg:h-7 h-0'></span> : <span className="mr-4"></span>} <div className='relative lg:m-0'> <div className='flex'> { - this.state.directory_data.some(thing => thing.user_id == this.context.client.userId) ? + this.state.directory_data.some(thing => thing.mxid == this.context.client.userId) ? <Link href="/submit"><a className='inline-flex justify-center items-center text-teal-400 hover:text-teal-200 bg-transparent relative h-14 min-w-[9.25rem] z-[2] cursor-pointer font-bold'>Submit</a></Link> : - <a className='inline-flex justify-center items-center text-teal-400 hover:text-teal-200 bg-transparent relative h-14 min-w-[9.25rem] z-[2] cursor-pointer font-bold'>Setup Account</a> + this.state.loggedIn ? <a className='inline-flex justify-center items-center text-teal-400 hover:text-teal-200 bg-transparent relative h-14 min-w-[9.25rem] z-[2] cursor-pointer font-bold'>Setup Account</a> : undefined } </div> </div> diff --git a/pages/api/directory.tsx b/pages/api/directory.tsx @@ -22,7 +22,6 @@ const db = new Sequelize({ db.addModels([User]); export const get_data = async () => { - if (process.env.PLAYWRIGHT === '1') { console.log("Running in tests!"); return [ diff --git a/pages/login.tsx b/pages/login.tsx @@ -92,9 +92,6 @@ class Login extends PureComponent<Props, State> { } await this.props.router.replace("/"); - if (typeof window !== "undefined") { - window.location.reload(); - } } } diff --git a/pages/logout.tsx b/pages/logout.tsx @@ -22,7 +22,6 @@ class Logout extends PureComponent<Props, State> { await this.context.client.logout(false); } - window.location.reload(); await this.props.router.replace("/"); } } diff --git a/pages/submit.tsx b/pages/submit.tsx @@ -1,4 +1,5 @@ import Head from "next/head"; +import { NextRouter, withRouter } from "next/router"; import { PureComponent, ReactNode } from "react"; import { FileRejection } from "react-dropzone"; import { ClientContext } from "../components/ClientContext"; @@ -7,7 +8,9 @@ import Header from "../components/Header"; import MainSubmissionForm from "../components/submit_page/main"; import { DropCallbacks, StartSubmit } from "../components/submit_page/start"; -type Props = {}; +type Props = { + router: NextRouter; +}; type State = { files: PreviewWithDataFile[]; @@ -25,6 +28,12 @@ class Submit extends PureComponent<Props, State> implements DropCallbacks { onDrop: (files: File[]) => void; onDropError: (fileRejections: FileRejection[]) => void; + async componentDidMount() { + if (this.context.client.isGuest) { + this.props.router.replace("/login"); + } + } + constructor(props: Props) { super(props); this.onDrop = async (files: File[]) => { @@ -110,4 +119,4 @@ class Submit extends PureComponent<Props, State> implements DropCallbacks { Submit.contextType = ClientContext; -export default Submit; -\ No newline at end of file +export default withRouter(Submit); +\ No newline at end of file