Files
bigcapital/packages/webapp/src/hooks/query/authentication.tsx
2025-10-30 19:27:29 +02:00

156 lines
3.6 KiB
TypeScript

// @ts-nocheck
import { useMutation } from 'react-query';
import { batch } from 'react-redux';
import useApiRequest, { useAuthApiRequest } from '../useRequest';
import { setCookie } from '../../utils';
import { useRequestQuery } from '../useQueryRequest';
import t from './types';
import {
useSetAuthToken,
useSetAuthUserId,
useSetLocale,
useSetOrganizationId,
useSetTenantId,
} from '../state';
const AuthRoute = {
Signin: 'auth/signin',
Signup: 'auth/signup',
SignupVerify: 'auth/signup/verify',
SignupVerifyResend: 'auth/signup/verify/resend',
SendResetPassword: 'auth/send_reset_password',
ForgetPassword: 'auth/reset_password/:token',
AuthMeta: 'auth/meta',
};
/**
* Saves the response data to cookies.
*/
export function setAuthLoginCookies(data) {
setCookie('token', data.access_token);
setCookie('authenticated_user_id', data.user_id);
setCookie('organization_id', data.organization_id);
setCookie('tenant_id', data.tenant_id);
// if (data?.tenant?.metadata?.language)
// setCookie('locale', data.tenant.metadata.language);
}
/**
* Authentication login.
*/
export const useAuthLogin = (props) => {
const apiRequest = useAuthApiRequest();
const setAuthToken = useSetAuthToken();
const setOrganizationId = useSetOrganizationId();
const setUserId = useSetAuthUserId();
const setTenantId = useSetTenantId();
const setLocale = useSetLocale();
return useMutation((values) => apiRequest.post(AuthRoute.Signin, values), {
onSuccess: (res) => {
// Set authentication cookies.
setAuthLoginCookies(res.data);
batch(() => {
// Sets the auth metadata to global state.
setAuthToken(res.data.access_token);
setOrganizationId(res.data.organization_id);
setTenantId(res.data.tenant_id);
setUserId(res.data.user_id);
// if (res.data?.tenant?.metadata?.language) {
// setLocale(res.data?.tenant?.metadata?.language);
// }
});
props?.onSuccess && props?.onSuccess(...args);
},
...props,
});
};
/**
* Authentication register.
*/
export const useAuthRegister = (props) => {
const apiRequest = useAuthApiRequest();
return useMutation(
(values) => apiRequest.post(AuthRoute.Signup, values),
props,
);
};
/**
* Authentication send reset password.
*/
export const useAuthSendResetPassword = (props) => {
const apiRequest = useAuthApiRequest();
return useMutation(
(values) => apiRequest.post(AuthRoute.SendResetPassword, values),
props,
);
};
/**
* Authentication reset password.
*/
export const useAuthResetPassword = (props) => {
const apiRequest = useAuthApiRequest();
return useMutation(
([token, values]) => apiRequest.post(`auth/reset/${token}`, values),
props,
);
};
/**
* Fetches the authentication page metadata.
*/
export const useAuthMetadata = (props = {}) => {
return useRequestQuery(
[t.AUTH_METADATA_PAGE],
{
method: 'get',
url: AuthRoute.AuthMeta,
},
{
select: (res) => res.data,
defaultData: {},
...props,
},
);
};
/**
* Resend the mail of signup verification.
*/
export const useAuthSignUpVerifyResendMail = (props) => {
const apiRequest = useAuthApiRequest();
return useMutation(
() => apiRequest.post(AuthRoute.SignupVerifyResend),
props,
);
};
interface AuthSignUpVerifyValues {
token: string;
email: string;
}
/**
* Signup verification.
*/
export const useAuthSignUpVerify = (props) => {
const apiRequest = useAuthApiRequest();
return useMutation(
(values: AuthSignUpVerifyValues) =>
apiRequest.post(AuthRoute.SignupVerify, values),
props,
);
};