mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-08 18:54:22 -04:00
Fix circular import of account context
This commit is contained in:
parent
11712d3e4e
commit
e3bde0cd57
9
front/src/providers/account-context.tsx
Normal file
9
front/src/providers/account-context.tsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { createContext } from "react";
|
||||||
|
import type { Account, Token } from "~/models";
|
||||||
|
|
||||||
|
export const AccountContext = createContext<{
|
||||||
|
apiUrl: string;
|
||||||
|
authToken: Token | null;
|
||||||
|
selectedAccount: Account | null;
|
||||||
|
accounts: (Account & { select: () => void; remove: () => void })[];
|
||||||
|
}>({ apiUrl: "api", authToken: null, selectedAccount: null, accounts: [] });
|
@ -1,20 +1,13 @@
|
|||||||
import { useQueryClient } from "@tanstack/react-query";
|
import { useQueryClient } from "@tanstack/react-query";
|
||||||
import { type ReactNode, createContext, useContext, useEffect, useMemo, useRef } from "react";
|
import { type ReactNode, useContext, useEffect, useMemo, useRef } from "react";
|
||||||
import { Platform } from "react-native";
|
import { Platform } from "react-native";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { type Account, AccountP, type Token, UserP } from "~/models";
|
import { AccountP, UserP } from "~/models";
|
||||||
import { useFetch } from "~/query";
|
import { useFetch } from "~/query";
|
||||||
import { removeAccounts, updateAccount } from "./account-store";
|
import { removeAccounts, updateAccount } from "./account-store";
|
||||||
import { useSetError } from "./error-provider";
|
import { useSetError } from "./error-provider";
|
||||||
import { useStoreValue } from "./settings";
|
import { useStoreValue } from "./settings";
|
||||||
|
|
||||||
export const AccountContext = createContext<{
|
|
||||||
apiUrl: string;
|
|
||||||
authToken: Token | null;
|
|
||||||
selectedAccount: Account | null;
|
|
||||||
accounts: (Account & { select: () => void; remove: () => void })[];
|
|
||||||
}>({ apiUrl: "/api", authToken: null, selectedAccount: null, accounts: [] });
|
|
||||||
|
|
||||||
export const AccountProvider = ({ children }: { children: ReactNode }) => {
|
export const AccountProvider = ({ children }: { children: ReactNode }) => {
|
||||||
const [setError, clearError] = useSetError("account");
|
const [setError, clearError] = useSetError("account");
|
||||||
const accounts = useStoreValue("accounts", z.array(AccountP)) ?? [];
|
const accounts = useStoreValue("accounts", z.array(AccountP)) ?? [];
|
||||||
@ -63,6 +56,7 @@ export const AccountProvider = ({ children }: { children: ReactNode }) => {
|
|||||||
updateAccount(nUser.id, nUser);
|
updateAccount(nUser.id, nUser);
|
||||||
}, [user, userIsSuccess, userIsPlaceholder]);
|
}, [user, userIsSuccess, userIsPlaceholder]);
|
||||||
|
|
||||||
|
const queryClient = useQueryClient();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!userError) return clearError();
|
if (!userError) return clearError();
|
||||||
setError({
|
setError({
|
||||||
@ -71,11 +65,11 @@ export const AccountProvider = ({ children }: { children: ReactNode }) => {
|
|||||||
queryClient.resetQueries();
|
queryClient.resetQueries();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}, [userError]);
|
}, [userError, queryClient, setError, clearError]);
|
||||||
|
|
||||||
const queryClient = useQueryClient();
|
|
||||||
const selectedId = ret.selectedAccount?.id;
|
const selectedId = ret.selectedAccount?.id;
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
selectedId;
|
||||||
// if the user change account (or connect/disconnect), reset query cache.
|
// if the user change account (or connect/disconnect), reset query cache.
|
||||||
queryClient.resetQueries();
|
queryClient.resetQueries();
|
||||||
}, [selectedId, queryClient]);
|
}, [selectedId, queryClient]);
|
||||||
|
@ -4,7 +4,7 @@ import { useContext } from "react";
|
|||||||
import { Platform } from "react-native";
|
import { Platform } from "react-native";
|
||||||
import type { z } from "zod";
|
import type { z } from "zod";
|
||||||
import { type KyooError, type Page, Paged } from "~/models";
|
import { type KyooError, type Page, Paged } from "~/models";
|
||||||
import { AccountContext } from "~/providers/account-provider";
|
import { AccountContext } from "~/providers/account-context";
|
||||||
|
|
||||||
const ssrApiUrl = process.env.KYOO_URL ?? "http://back/api";
|
const ssrApiUrl = process.env.KYOO_URL ?? "http://back/api";
|
||||||
|
|
||||||
|
@ -25,6 +25,13 @@ export const LoginPage: QueryPage<{ apiUrl?: string; error?: string }> = ({
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { css } = useYoshiki();
|
const { css } = useYoshiki();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!apiUrl && Platform.OS !== "web")
|
||||||
|
router.replace("/server-url", undefined, {
|
||||||
|
experimental: { nativeBehavior: "stack-replace", isNestedNavigator: false },
|
||||||
|
});
|
||||||
|
}, [apiUrl, router]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FormPage apiUrl={apiUrl}>
|
<FormPage apiUrl={apiUrl}>
|
||||||
<H1>{t("login.login")}</H1>
|
<H1>{t("login.login")}</H1>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
import { resolvePath } from "@vxrn/resolve";
|
||||||
import { one } from "one/vite";
|
import { one } from "one/vite";
|
||||||
import type { UserConfig } from "vite";
|
import type { UserConfig } from "vite";
|
||||||
import svgr from "vite-plugin-svgr";
|
import svgr from "vite-plugin-svgr";
|
||||||
import { resolvePath } from '@vxrn/resolve'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
ssr: {
|
ssr: {
|
||||||
@ -12,7 +12,9 @@ export default {
|
|||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'@react-native/assets-registry/registry': resolvePath('react-native-web/dist/modules/AssetRegistry/index.js'),
|
"@react-native/assets-registry/registry": resolvePath(
|
||||||
|
"react-native-web/dist/modules/AssetRegistry/index.js",
|
||||||
|
),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
@ -43,5 +45,6 @@ export default {
|
|||||||
rewrite: (path) => path.replace(/^\/api/, ""),
|
rewrite: (path) => path.replace(/^\/api/, ""),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
allowedHosts: true,
|
||||||
},
|
},
|
||||||
} satisfies UserConfig;
|
} satisfies UserConfig;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user