Files
ncd-fe/src/queries/accounts.ts
2023-10-17 15:19:05 -05:00

61 lines
1.5 KiB
TypeScript

import { useMutation } from '@tanstack/react-query';
import { patchMeSuccess } from 'soapbox/actions/me';
import { useApi, useAppDispatch, useOwnAccount } from 'soapbox/hooks';
import toast from 'soapbox/toast';
export type IAccount = {
acct: string;
avatar: string;
avatar_static: string;
bot: boolean;
created_at: string;
discoverable: boolean;
display_name: string;
followers_count: number;
following_count: number;
group: boolean;
header: string;
header_static: string;
id: string;
last_status_at: string;
location: string;
locked: boolean;
note: string;
statuses_count: number;
url: string;
username: string;
verified: boolean;
website: string;
}
type UpdateCredentialsData = {
accepts_chat_messages?: boolean;
chats_onboarded?: boolean;
}
const useUpdateCredentials = () => {
const { account } = useOwnAccount();
const api = useApi();
const dispatch = useAppDispatch();
return useMutation({
mutationFn: (data: UpdateCredentialsData) => api.patch('/api/v1/accounts/update_credentials', data),
onMutate(variables) {
const cachedAccount = account;
dispatch(patchMeSuccess({ ...account, ...variables }));
return { cachedAccount };
},
onSuccess(response) {
dispatch(patchMeSuccess(response.data));
toast.success('Chat Settings updated successfully');
},
onError(_error, _variables, context: any) {
toast.error('Chat Settings failed to update.');
dispatch(patchMeSuccess(context.cachedAccount));
},
});
};
export { useUpdateCredentials };