From 576416e905abdfc31f69746c787f12ca9269b38a Mon Sep 17 00:00:00 2001 From: MasterGordon Date: Mon, 30 Sep 2024 22:13:47 +0200 Subject: [PATCH] fixed login --- bun.lockb | Bin 172732 -> 184754 bytes index.html | 1 + package.json | 1 + public/robots.txt | 2 ++ src/Shell.tsx | 9 ++--- src/components/Auth/LoginButton.tsx | 4 +-- src/components/Auth/RegisterButton.tsx | 4 +-- src/components/Header.tsx | 6 +++- src/views/home/Home.tsx | 6 ++-- src/views/home/Section.tsx | 48 ++++++++++++++++++------- src/vite-env.d.ts | 26 ++++++++++++++ vite.config.ts | 3 +- 12 files changed, 85 insertions(+), 25 deletions(-) create mode 100644 public/robots.txt diff --git a/bun.lockb b/bun.lockb index 29a569c2fe501d0a19485a007566f1b0bb714abe..6815fcd3bd77e41416da5599f9b7e95e2b09e99e 100755 GIT binary patch delta 39655 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 delta 31403 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 LD=u%9PCNfU!YVIY diff --git a/index.html b/index.html index f7afd88..cb1b53f 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,7 @@ + Minesweeper diff --git a/package.json b/package.json index a64205a..3fe4ab9 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "tailwind-merge": "^2.5.2", "tailwindcss": "^4.0.0-alpha.24", "use-sound": "^4.0.3", + "vite-imagetools": "^7.0.4", "wouter": "^3.3.5", "zod": "^3.23.8", "zustand": "^4.5.5" diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..1f53798 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / diff --git a/src/Shell.tsx b/src/Shell.tsx index 1431f9a..587fd36 100644 --- a/src/Shell.tsx +++ b/src/Shell.tsx @@ -48,11 +48,11 @@ const Shell: React.FC = ({ children }) => { transition={{ type: "tween" }} >
-

- Minesweeper -
+

Business -

+
+ Minesweeper +
@@ -82,6 +82,7 @@ const Shell: React.FC = ({ children }) => { className="absolute left-4 bg-black border-white/10 border-y-1 border-r-1 rounded-l-none" variant="ghost" onClick={() => setIsOpen((isOpen) => !isOpen)} + aria-label="Menu" > diff --git a/src/components/Auth/LoginButton.tsx b/src/components/Auth/LoginButton.tsx index 7acbee6..66b1c23 100644 --- a/src/components/Auth/LoginButton.tsx +++ b/src/components/Auth/LoginButton.tsx @@ -61,9 +61,9 @@ const LoginButton = () => { .then(async (res) => { setToken(res.token); await wsClient.dispatch("user.loginWithToken", { - token: JSON.parse(res.token), + token: res.token, }); - queryClient.invalidateQueries(); + await queryClient.resetQueries(); }) .catch((e) => { setError(e); diff --git a/src/components/Auth/RegisterButton.tsx b/src/components/Auth/RegisterButton.tsx index 6936842..a0cc880 100644 --- a/src/components/Auth/RegisterButton.tsx +++ b/src/components/Auth/RegisterButton.tsx @@ -61,9 +61,9 @@ const RegisterButton = () => { .then(async (res) => { setToken(res.token); await wsClient.dispatch("user.loginWithToken", { - token: JSON.parse(res.token), + token: res.token, }); - queryClient.invalidateQueries(); + await queryClient.resetQueries(); }) .catch((e) => { setError(e); diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 805b955..e4fd70c 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -12,13 +12,17 @@ import LoginButton from "./Auth/LoginButton"; import { useWSMutation, useWSQuery } from "../hooks"; import RegisterButton from "./Auth/RegisterButton"; import { useQueryClient } from "@tanstack/react-query"; +import { useAtom } from "jotai"; +import { loginTokenAtom } from "../atoms"; const Header = () => { const [, setLocation] = useLocation(); const { data: username } = useWSQuery("user.getSelf", null); const queryClient = useQueryClient(); + const [, setToken] = useAtom(loginTokenAtom); const logout = useWSMutation("user.logout", () => { - queryClient.invalidateQueries(); + setToken(undefined); + queryClient.resetQueries(); }); return ( diff --git a/src/views/home/Home.tsx b/src/views/home/Home.tsx index 97bdb6d..5d6072f 100644 --- a/src/views/home/Home.tsx +++ b/src/views/home/Home.tsx @@ -4,9 +4,9 @@ import { useWSQuery } from "../../hooks"; import { Tag } from "../../components/Tag"; import RegisterButton from "../../components/Auth/RegisterButton"; import { Button } from "../../components/Button"; -import defusing from "../../assets/illustrations/defusing.png"; -import lootbox1 from "../../assets/illustrations/lootbox1.png"; -import mine from "../../assets/illustrations/mine.png"; +import defusing from "../../assets/illustrations/defusing.png?aspect=4:3&w=100;200;300;400&format=webp&quality=100&as=metadata"; +import lootbox1 from "../../assets/illustrations/lootbox1.png?aspect=1:1&w=100;200;300;400&format=webp&quality=100&as=metadata"; +import mine from "../../assets/illustrations/mine.png?aspect=1:1&w=100;200;300;400&format=webp&quality=100&as=metadata"; import Section from "./Section"; import Hr from "../../components/Hr"; import { Link } from "wouter"; diff --git a/src/views/home/Section.tsx b/src/views/home/Section.tsx index 8fa7eab..ad0cd5e 100644 --- a/src/views/home/Section.tsx +++ b/src/views/home/Section.tsx @@ -5,17 +5,30 @@ import { useScroll, useTransform, } from "framer-motion"; -import { useRef } from "react"; +import { useEffect, useRef, useState } from "react"; import { cn } from "../../lib/utils"; interface SectionProps { text: string; - image: string; + image: OutputMetadata[]; left?: boolean; } const Section = ({ text, image, left }: SectionProps) => { const ref = useRef(null); + const wrapperRef = useRef(null); + const [width, setWidth] = useState(0); + useEffect(() => { + const resizeObserver = new ResizeObserver(() => { + if (wrapperRef.current) { + setWidth(wrapperRef.current.clientWidth); + } + }); + if (wrapperRef.current) { + resizeObserver.observe(wrapperRef.current); + } + return () => resizeObserver.disconnect(); + }, []); const { scrollYProgress } = useScroll({ target: ref, }); @@ -44,18 +57,29 @@ const Section = ({ text, image, left }: SectionProps) => { ease: "easeInOut", }} > - + className="h-[80%] min-h-36" + > + `${i.src} ${i.width}w`).join(", ")} + sizes={`${width}px`} + loading="lazy" + className="h-[80%]" + /> +
); diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 11f02fe..6a17aa3 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1 +1,27 @@ /// + +interface OutputMetadata { + src: string; // URL of the generated image + width: number; // Width of the image + height: number; // Height of the image + format: string; // Format of the generated image + + // The following options are the same as sharps input options + space: string; // Name of colour space interpretation + channels: number; // Number of bands e.g. 3 for sRGB, 4 for CMYK + density: number; // Number of pixels per inch + depth: string; // Name of pixel depth format + hasAlpha: boolean; // presence of an alpha transparency channel + hasProfile: boolean; // presence of an embedded ICC profile + isProgressive: boolean; // indicating whether the image is interlaced using a progressive scan +} + +declare module "*&as=metadata" { + const outputs: OutputMetadata[]; + export default outputs; +} + +declare module "*?as=metadata" { + const outputs: OutputMetadata[]; + export default outputs; +} diff --git a/vite.config.ts b/vite.config.ts index 50bf145..9163aca 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,8 +1,9 @@ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react-swc"; import tailwindcss from "@tailwindcss/vite"; +import { imagetools } from "vite-imagetools"; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react(), tailwindcss()], + plugins: [react(), tailwindcss(), imagetools()], });