diff --git a/app/components/contexts/PlayerProviders.tsx b/app/components/contexts/PlayerProviders.tsx index 170c520..cfba836 100644 --- a/app/components/contexts/PlayerProviders.tsx +++ b/app/components/contexts/PlayerProviders.tsx @@ -3,18 +3,27 @@ import type { ReactNode } from "@tanstack/react-router"; import providers from "@/providers"; import { IProviderClient } from "@/types/providers/client"; +import { useLocalStorage } from "usehooks-ts"; const PlayerProvidersContext = createContext<{ [key: string]: IProviderClient; }>({}); +type LastUsedProvider = { + id: string; + date: number; +} | null; + export function PlayerProvidersProvider({ children, }: Readonly<{ children: ReactNode; }>) { + const [_lastUsed, setLastUsed, _removeLastUsed] = + useLocalStorage("lastUsedProvider", null); + const handleAuth = useCallback((provider: string) => { - console.log("auth", provider); + setLastUsed({ id: provider, date: Date.now() }); }, []); const value = useMemo(() => { @@ -38,5 +47,10 @@ export function PlayerProvidersProvider({ } export function usePlayerProviders() { - return useContext(PlayerProvidersContext); + const [lastUsed] = useLocalStorage("lastUsed", null); + + return { + lastUsedProvider: lastUsed, + providers: useContext(PlayerProvidersContext), + }; } diff --git a/app/routes/auth/callback.$provider.tsx b/app/routes/auth/callback.$provider.tsx index 65726f4..cf2c449 100644 --- a/app/routes/auth/callback.$provider.tsx +++ b/app/routes/auth/callback.$provider.tsx @@ -1,6 +1,5 @@ import { createFileRoute, useNavigate } from "@tanstack/react-router"; -import providers from "@/providers"; import { useEffect } from "react"; import { usePlayerProviders } from "@/components/contexts/PlayerProviders"; @@ -12,7 +11,7 @@ function RouteComponent() { const { provider } = Route.useParams(); const navigate = useNavigate(); - const providers = usePlayerProviders(); + const { providers } = usePlayerProviders(); if (!providers[provider]) { return

Provider not found

; diff --git a/app/routes/index.tsx b/app/routes/index.tsx index 50afc8b..377e65e 100644 --- a/app/routes/index.tsx +++ b/app/routes/index.tsx @@ -7,7 +7,7 @@ export const Route = createFileRoute("/")({ }); function Home() { - const providers = usePlayerProviders(); + const { providers } = usePlayerProviders(); return (
diff --git a/package.json b/package.json index 37c1ef9..db5174a 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-icons": "^5.3.0", + "usehooks-ts": "^3.1.0", "vinxi": "^0.4.3", "zod": "^3.23.8" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a42ed5a..bb26e7b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: react-icons: specifier: ^5.3.0 version: 5.3.0(react@18.3.1) + usehooks-ts: + specifier: ^3.1.0 + version: 3.1.0(react@18.3.1) vinxi: specifier: ^0.4.3 version: 0.4.3(@types/node@22.9.0)(ioredis@5.4.1)(terser@5.36.0)(typescript@5.6.3) @@ -2061,6 +2064,9 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} @@ -2853,6 +2859,12 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 + usehooks-ts@3.1.0: + resolution: {integrity: sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==} + engines: {node: '>=16.15.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -4846,6 +4858,8 @@ snapshots: mlly: 1.7.3 pkg-types: 1.2.1 + lodash.debounce@4.0.8: {} + lodash.defaults@4.2.0: {} lodash.isarguments@3.1.0: {} @@ -5711,6 +5725,11 @@ snapshots: dependencies: react: 18.3.1 + usehooks-ts@3.1.0(react@18.3.1): + dependencies: + lodash.debounce: 4.0.8 + react: 18.3.1 + util-deprecate@1.0.2: {} vinxi@0.4.3(@types/node@22.9.0)(ioredis@5.4.1)(terser@5.36.0)(typescript@5.6.3):