fastapi-rtk
Version:
A React component library for FastAPI in combination with FastAPI React Toolkit backend, built with Mantine, JsonForms, and Zustand.
92 lines (91 loc) • 3.33 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const useQuery = require("../../../../../.external/cjs/@tanstack_react-query@5.89.0_react@18.3.1/@tanstack/react-query/build/modern/useQuery.cjs");
const QueryClientProvider = require("../../../../../.external/cjs/@tanstack_react-query@5.89.0_react@18.3.1/@tanstack/react-query/build/modern/QueryClientProvider.cjs");
const React = require("react");
const authFetch = require("../utils/authFetch.cjs");
const userCRUD = require("../utils/userCRUD.cjs");
const defaultAuth = {
getUser: userCRUD.getUser,
update: userCRUD.updateUser,
signin: authFetch.authSignin,
signout: authFetch.authSignout,
resetPassword: authFetch.authResetPassword,
oauthSignin: authFetch.authOAuthSignin
};
function useProvideAuth(baseURL, authQueryProps, auth = defaultAuth) {
const queryClient = QueryClientProvider.useQueryClient();
const query = useQuery.useQuery({
queryKey: ["user"],
queryFn: ({ signal }) => userCRUD.getUser(baseURL, signal),
retry: false,
...authQueryProps
});
const [error, setError] = React.useState();
const resetError = React.useCallback(() => setError(void 0), []);
const signin = React.useCallback(
async ({ username, password }) => {
try {
resetError();
await auth.signin(baseURL, { username, password });
await queryClient.invalidateQueries({ queryKey: ["user"] });
} catch (error2) {
setError({ message: "Could not sign in", originalError: error2 });
}
},
[auth, baseURL, queryClient, resetError]
);
const signout = React.useCallback(async () => {
try {
resetError();
await auth.signout(baseURL);
await queryClient.resetQueries({ queryKey: ["user"] });
await queryClient.resetQueries({ queryKey: ["info"] });
} catch (error2) {
setError({ message: "Could not sign out", originalError: error2 });
}
}, [auth, baseURL, queryClient, resetError]);
const update = React.useCallback(
async (data) => {
try {
resetError();
await auth.update(baseURL, data);
await queryClient.invalidateQueries({ queryKey: ["user"] });
} catch (error2) {
setError({ message: "Could not update user", originalError: error2 });
}
},
[auth, baseURL, queryClient, resetError]
);
const resetPassword = React.useCallback(
async (password) => {
try {
resetError();
await auth.resetPassword(baseURL, password, query.data);
} catch (error2) {
setError({ message: "Could not reset password", originalError: error2 });
}
},
[auth, baseURL, query.data, resetError]
);
const oauthSignin = React.useCallback(
(provider, popup) => auth.oauthSignin(baseURL, provider, popup, () => queryClient.invalidateQueries({ queryKey: ["user"] })),
[auth, baseURL, queryClient]
);
const oauth_signin = React.useMemo(() => oauthSignin, [oauthSignin]);
return {
user: query.isError ? null : query.data,
loading: query.isFetching,
error: error ? error.message : null,
signin,
signout,
update,
resetPassword,
oauthSignin,
refetch: query.refetch,
resetError,
// Deprecated, use oauthSignin instead
oauth_signin
};
}
exports.useProvideAuth = useProvideAuth;