Files
bigcapital/packages/webapp/src/hooks/query/users.tsx
Ahmed Bouhuolia 2bbc154f18 wip
2026-01-15 22:04:51 +02:00

175 lines
3.9 KiB
TypeScript

// @ts-nocheck
import { useEffect } from 'react';
import { useMutation, useQueryClient } from 'react-query';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import { useSetFeatureDashboardMeta } from '../state/feature';
import t from './types';
import { useSetAuthEmailConfirmed } from '../state';
// Common invalidate queries.
const commonInvalidateQueries = (queryClient) => {
queryClient.invalidateQueries(t.USERS);
};
/**
* Create a new invite user.
*/
export function useCreateInviteUser(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
return useMutation((values) => apiRequest.patch('invite', values), {
onSuccess: () => {
// Common invalidate queries.
commonInvalidateQueries(queryClient);
},
...props,
});
}
/**
* Edits the given user.
*/
export function useEditUser(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
return useMutation(([id, values]) => apiRequest.put(`users/${id}`, values), {
onSuccess: (res, [id, values]) => {
queryClient.invalidateQueries([t.USER, id]);
// Common invalidate queries.
commonInvalidateQueries(queryClient);
},
...props,
});
}
export function useInactivateUser(props) {
const apiRequest = useApiRequest();
const queryClient = useQueryClient();
return useMutation((userId) => apiRequest.put(`users/${userId}/inactivate`), {
onSuccess: (res, userId) => {
queryClient.invalidateQueries([t.USER, userId]);
// Common invalidate queries.
commonInvalidateQueries(queryClient);
},
...props,
});
}
export function useActivateUser(props) {
const apiRequest = useApiRequest();
const queryClient = useQueryClient();
return useMutation((userId) => apiRequest.put(`users/${userId}/activate`), {
onSuccess: (res, userId) => {
queryClient.invalidateQueries([t.USER, userId]);
// Common invalidate queries.
commonInvalidateQueries(queryClient);
},
...props,
});
}
/**
* Deletes the given user.
*/
export function useDeleteUser(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
return useMutation((id) => apiRequest.delete(`users/${id}`), {
onSuccess: (res, id) => {
queryClient.invalidateQueries([t.USER, id]);
// Common invalidate queries.
commonInvalidateQueries(queryClient);
},
...props,
});
}
/**
* Retrieves users list.
*/
export function useUsers(props) {
return useRequestQuery(
[t.USERS],
{
method: 'get',
url: 'users',
},
{
select: (res) => res.data,
defaultData: [],
...props,
},
);
}
/**
* Retrieve details of the given user.
*/
export function useUser(id, props) {
return useRequestQuery(
[t.USER, id],
{
method: 'get',
url: `users/${id}`,
},
{
select: (response) => response.data,
defaultData: {},
...props,
},
);
}
export function useAuthenticatedAccount(props) {
const setEmailConfirmed = useSetAuthEmailConfirmed();
return useRequestQuery(
['AuthenticatedAccount'],
{
method: 'get',
url: `auth/account`,
},
{
select: (response) => response.data,
defaultData: {},
onSuccess: (data) => {
setEmailConfirmed(data.verified, data.email);
},
...props,
},
);
}
/**
* Fetches the dashboard meta.
*/
export const useDashboardMeta = (props) => {
const setFeatureDashboardMeta = useSetFeatureDashboardMeta();
const state = useRequestQuery(
[t.DASHBOARD_META],
{ method: 'get', url: 'dashboard/boot' },
{
select: (res) => res.data,
defaultData: {},
...props,
},
);
useEffect(() => {
if (state.isSuccess) {
setFeatureDashboardMeta(state.data);
}
}, [state.isSuccess, state.data, setFeatureDashboardMeta]);
return state;
};