From 3e53c26743b4ed73879f1e49da113dbe289900c6 Mon Sep 17 00:00:00 2001 From: Shusui MOYATANI Date: Tue, 7 Mar 2023 02:38:51 +0900 Subject: [PATCH] update --- src/App.tsx | 8 ++++---- src/clients/useConfig.ts | 2 +- src/hooks/useLoginStatus.ts | 40 +++++++++++++++++++++++++++++++++++++ src/pages/Hello.tsx | 28 ++++++++++++++++++++++++-- src/pages/Home.tsx | 15 +++++++++++--- 5 files changed, 83 insertions(+), 10 deletions(-) create mode 100644 src/hooks/useLoginStatus.ts diff --git a/src/App.tsx b/src/App.tsx index 129a87c..52afc55 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,12 +1,12 @@ -import type { Component } from 'solid-js'; +import { lazy, type Component } from 'solid-js'; import { Routes, Route } from '@solidjs/router'; import { QueryClient, QueryClientProvider } from '@tanstack/solid-query'; // import { persistQueryClient } from '@tanstack/solid-query-persist-client'; // import { createSyncStoragePersister } from '@tanstack/query-sync-storage-persister'; -import Home from '@/pages/Home'; -import NotFound from '@/pages/NotFound'; -import Hello from '@/pages/Hello'; +const Home = lazy(() => import('@/pages/Home')); +const Hello = lazy(() => import('@/pages/Hello')); +const NotFound = lazy(() => import('@/pages/NotFound')); const queryClient = new QueryClient({}); diff --git a/src/clients/useConfig.ts b/src/clients/useConfig.ts index 5fe77b1..a0aba48 100644 --- a/src/clients/useConfig.ts +++ b/src/clients/useConfig.ts @@ -27,7 +27,7 @@ const serializer = (config: Config): string => JSON.stringify(config); const deserializer = (json: string): Config => JSON.parse(json) as Config; const storage = createStorageWithSerializer(() => window.localStorage, serializer, deserializer); -const [config, setConfig] = createSignalWithStorage('rabbit_config', InitialConfig, storage); +const [config, setConfig] = createSignalWithStorage('RabbitConfig', InitialConfig, storage); const useConfig = (): Signal => { return [config, setConfig]; diff --git a/src/hooks/useLoginStatus.ts b/src/hooks/useLoginStatus.ts new file mode 100644 index 0000000..714647a --- /dev/null +++ b/src/hooks/useLoginStatus.ts @@ -0,0 +1,40 @@ +import { Accessor } from 'solid-js'; +import { + createSignalWithStorage, + createStorageWithSerializer, +} from '@/hooks/createSignalWithStorage'; + +type LoginStatus = { + loggedIn: boolean; +}; + +type UseLoginStatus = { + loginStatus: Accessor; + loggedIn: () => void; +}; + +const InitialLoginStatus = { + loggedIn: false, +}; + +const serializer = (loginStatus: LoginStatus): string => JSON.stringify(loginStatus); +// TODO zod使う +const deserializer = (json: string): LoginStatus => JSON.parse(json) as LoginStatus; + +const storage = createStorageWithSerializer(() => window.localStorage, serializer, deserializer); + +const [loginStatus, setLoginStatus] = createSignalWithStorage( + 'RabbitLoginStatus', + InitialLoginStatus, + storage, +); + +const useLoginStatus = (): UseLoginStatus => { + const loggedIn = () => { + setLoginStatus((current) => ({ ...current, loggedIn: true })); + }; + + return { loginStatus, loggedIn }; +}; + +export default useLoginStatus; diff --git a/src/pages/Hello.tsx b/src/pages/Hello.tsx index 736defd..991ad32 100644 --- a/src/pages/Hello.tsx +++ b/src/pages/Hello.tsx @@ -1,8 +1,10 @@ import { createSignal, onMount, Switch, Match, type Component } from 'solid-js'; +import { useNavigate } from '@solidjs/router'; +import useLoginStatus from '@/hooks/useLoginStatus'; type SignerStatus = 'checking' | 'available' | 'unavailable'; -const Hello: Component = () => { +const useSignerStatus = () => { const [signerStatus, setSignerStatus] = createSignal('checking'); const checkStatus = () => { @@ -22,6 +24,25 @@ const Hello: Component = () => { }, 1000); }); + return signerStatus; +}; + +const Hello: Component = () => { + const signerStatus = useSignerStatus(); + const navigate = useNavigate(); + const { loginStatus, loggedIn } = useLoginStatus(); + + const handleLogin = () => { + loggedIn(); + navigate('/'); + }; + + onMount(() => { + if (loginStatus().loggedIn) { + navigate('/'); + } + }); + return (
@@ -51,7 +72,10 @@ const Hello: Component = () => {

- diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index e2e321f..f7e8643 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -1,12 +1,11 @@ -import { createSignal, Show, For, createEffect } from 'solid-js'; -import type { Component } from 'solid-js'; +import { Show, For, createSignal, createEffect, onMount, type Component } from 'solid-js'; +import { useNavigate } from '@solidjs/router'; import Column from '@/components/Column'; import NotePostForm from '@/components/NotePostForm'; import SideBar from '@/components/SideBar'; import Timeline from '@/components/Timeline'; import Notification from '@/components/Notification'; -import TextNote from '@/components/TextNote'; import usePool from '@/clients/usePool'; import useCommands from '@/clients/useCommands'; import useConfig from '@/clients/useConfig'; @@ -14,6 +13,7 @@ import useSubscription from '@/clients/useSubscription'; import useFollowings from '@/clients/useFollowings'; import usePubkey from '@/clients/usePubkey'; import useShortcutKeys from '@/hooks/useShortcutKeys'; +import useLoginStatus from '@/hooks/useLoginStatus'; import ensureNonNull from '@/hooks/ensureNonNull'; useShortcutKeys({ @@ -21,11 +21,20 @@ useShortcutKeys({ }); const Home: Component = () => { + const navigate = useNavigate(); + const { loginStatus } = useLoginStatus(); + const pool = usePool(); const [config] = useConfig(); const pubkey = usePubkey(); const commands = useCommands(); + onMount(() => { + if (!loginStatus().loggedIn) { + navigate('/hello'); + } + }); + createEffect(() => { config().relayUrls.map(async (relayUrl) => { const relay = await pool().ensureRelay(relayUrl);