umami/src/app/(main)/settings/teams/[id]/TeamMemberRemoveButton.tsx

47 lines
1 KiB
TypeScript
Raw Normal View History

import useApi from 'components/hooks/useApi';
import useMessages from 'components/hooks/useMessages';
2023-04-02 19:24:50 +00:00
import { Icon, Icons, LoadingButton, Text } from 'react-basics';
2023-10-08 07:15:29 +00:00
import { setValue } from 'store/cache';
2023-04-02 19:24:50 +00:00
2023-12-03 11:07:03 +00:00
export function TeamMemberRemoveButton({
teamId,
userId,
disabled,
onSave,
}: {
teamId: string;
userId: string;
disabled?: boolean;
onSave?: () => void;
}) {
2023-04-02 19:24:50 +00:00
const { formatMessage, labels } = useMessages();
const { del, useMutation } = useApi();
2023-12-03 11:07:03 +00:00
const { mutate, isPending } = useMutation({
mutationFn: () => del(`/teams/${teamId}/users/${userId}`),
});
2023-04-02 19:24:50 +00:00
const handleRemoveTeamMember = () => {
2023-12-03 11:07:03 +00:00
mutate(null, {
onSuccess: () => {
setValue('team:members', Date.now());
onSave?.();
2023-04-02 19:24:50 +00:00
},
2023-12-03 11:07:03 +00:00
});
2023-04-02 19:24:50 +00:00
};
return (
2023-08-25 20:32:24 +00:00
<LoadingButton
onClick={() => handleRemoveTeamMember()}
disabled={disabled}
2023-12-03 11:07:03 +00:00
isLoading={isPending}
2023-08-25 20:32:24 +00:00
>
2023-04-02 19:24:50 +00:00
<Icon>
<Icons.Close />
</Icon>
<Text>{formatMessage(labels.remove)}</Text>
</LoadingButton>
);
}
2023-04-21 15:00:42 +00:00
export default TeamMemberRemoveButton;