commit ae491de32ca98a15bdcdd7509732a4e31cdd7883
parent b0df3af801ecedd2b2a9a8f8e7b952acbc120c64
Author: MTRNord <mtrnord1@gmail.com>
Date: Fri, 21 Jan 2022 22:05:33 +0100
Finish login and add logout
Diffstat:
4 files changed, 52 insertions(+), 4 deletions(-)
diff --git a/components/Header.tsx b/components/Header.tsx
@@ -39,6 +39,7 @@ export default class Header extends PureComponent {
{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 ? <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}
</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>
diff --git a/pages/login.tsx b/pages/login.tsx
@@ -61,7 +61,6 @@ class Login extends PureComponent<Props, State> {
}
async handleSubmit(event: { preventDefault: () => void; }) {
- // TODO update client
event.preventDefault();
let serverUrl = this.state.serverUrl;
// Reset url if the field is hidden.
@@ -75,13 +74,16 @@ class Login extends PureComponent<Props, State> {
serverUrl = constMatrixArtServer + "/_matrix/client";
}
- // TODO join required rooms
if (this.state.mxid && this.state.password) {
this.setState({
loading: true
});
await this.context.client.login(serverUrl, this.state.mxid, this.state.password, true);
- this.props.router.replace("/");
+ await this.context.client.followUser(`#${this.context.client.userId}`);
+ if (typeof window !== "undefined") {
+ window.location.reload();
+ }
+ await this.props.router.replace("/");
}
}
@@ -103,7 +105,9 @@ class Login extends PureComponent<Props, State> {
<h1 className='text-xl text-gray-900 dark:text-gray-200 font-bold'>Log In</h1>
</div>
</div>
- {/* TODO fix loader */}
+ <div className="m-0 w-full">
+ <div className="loader fixed top-[50%] left-[50%] transform translate-x-[-50%] translate-y-[-50%]">Loading...</div>
+ </div>
</main>
<Footer></Footer>
</div>
diff --git a/pages/logout.tsx b/pages/logout.tsx
@@ -0,0 +1,34 @@
+import { NextRouter, withRouter } from "next/router";
+import { PureComponent, ReactNode } from "react";
+import { ClientContext } from "../components/ClientContext";
+
+type Props = {
+ router: NextRouter;
+};
+type State = {
+
+};
+
+class Logout extends PureComponent<Props, State> {
+ declare context: React.ContextType<typeof ClientContext>;
+
+ constructor(props: Props | Readonly<Props>) {
+ super(props);
+ }
+
+ async componentDidMount() {
+ if (!this.context.client.isGuest) {
+ await this.context.client.logout(false);
+ }
+ if (typeof window !== "undefined") {
+ window.location.reload();
+ }
+ await this.props.router.replace("/");
+ }
+ render() {
+ return <></>;
+ }
+}
+
+Logout.contextType = ClientContext;
+export default withRouter(Logout);
+\ No newline at end of file
diff --git a/pages/profile/[userid].tsx b/pages/profile/[userid].tsx
@@ -41,6 +41,14 @@ class Profile extends PureComponent<Props, State> {
if (!this.context.client?.accessToken) {
this.registerAsGuest();
} else {
+ if (!this.context.guest_client?.accessToken) {
+ try {
+ let serverUrl = constMatrixArtServer + "/_matrix/client";
+ await this.context.guest_client?.registerAsGuest(serverUrl);
+ } catch (error) {
+ console.error("Failed to register as guest:", error);
+ }
+ }
console.log("Already logged in");
if (!this.props.mxid) {
return;