refactor: remove metadata + simplify types
This commit is contained in:
@@ -3,17 +3,6 @@ import { getI18n } from '~/modules/i18n';
|
|||||||
import { UserDeletionResult } from './backend/graphql';
|
import { UserDeletionResult } from './backend/graphql';
|
||||||
import { ADMIN_CANNOT_BE_DELETED, USER_IS_OWNER } from './errors';
|
import { ADMIN_CANNOT_BE_DELETED, USER_IS_OWNER } from './errors';
|
||||||
|
|
||||||
type IndividualActionMetadata = null;
|
|
||||||
type BulkActionMetadata = {
|
|
||||||
areMultipleUsersSelected: boolean;
|
|
||||||
deletedUserIDs: string[];
|
|
||||||
};
|
|
||||||
type ActionMetadata = IndividualActionMetadata | BulkActionMetadata;
|
|
||||||
|
|
||||||
type HandleUserDeletion = {
|
|
||||||
(deletedUsersList: UserDeletionResult[], metadata: ActionMetadata): void;
|
|
||||||
};
|
|
||||||
|
|
||||||
type ToastMessage = {
|
type ToastMessage = {
|
||||||
message: string;
|
message: string;
|
||||||
state: 'success' | 'error';
|
state: 'success' | 'error';
|
||||||
@@ -38,21 +27,22 @@ const displayToastMessages = (
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const handleUserDeletion: HandleUserDeletion = (
|
export const handleUserDeletion = (deletedUsersList: UserDeletionResult[]) => {
|
||||||
deletedUsersList,
|
|
||||||
metadata
|
|
||||||
) => {
|
|
||||||
const uniqueErrorMessages = new Set(
|
const uniqueErrorMessages = new Set(
|
||||||
deletedUsersList.map(({ errorMessage }) => errorMessage).filter(Boolean)
|
deletedUsersList.map(({ errorMessage }) => errorMessage).filter(Boolean)
|
||||||
) as Set<string>;
|
) as Set<string>;
|
||||||
|
|
||||||
const isBulkAction = deletedUsersList.length > 1;
|
const isBulkAction = deletedUsersList.length > 1;
|
||||||
|
|
||||||
|
const deletedUserIDs = deletedUsersList
|
||||||
|
.filter((user) => user.isDeleted)
|
||||||
|
.map((user) => user.userUID);
|
||||||
|
|
||||||
// Show the success toast based on the action type if there are no errors
|
// Show the success toast based on the action type if there are no errors
|
||||||
if (uniqueErrorMessages.size === 0) {
|
if (uniqueErrorMessages.size === 0) {
|
||||||
if (isBulkAction) {
|
if (isBulkAction) {
|
||||||
toast.success(
|
toast.success(
|
||||||
(metadata as BulkActionMetadata).areMultipleUsersSelected
|
isBulkAction
|
||||||
? t('state.delete_user_success')
|
? t('state.delete_user_success')
|
||||||
: t('state.delete_users_success')
|
: t('state.delete_users_success')
|
||||||
);
|
);
|
||||||
@@ -78,13 +68,10 @@ export const handleUserDeletion: HandleUserDeletion = (
|
|||||||
const toastMessages: ToastMessage[] = [];
|
const toastMessages: ToastMessage[] = [];
|
||||||
|
|
||||||
if (isBulkAction) {
|
if (isBulkAction) {
|
||||||
const { areMultipleUsersSelected, deletedUserIDs } =
|
|
||||||
metadata as BulkActionMetadata;
|
|
||||||
|
|
||||||
// Indicates the actual count of users deleted (filtered via the `isDeleted` field)
|
// Indicates the actual count of users deleted (filtered via the `isDeleted` field)
|
||||||
const deletedUsersCount = deletedUserIDs.length;
|
const deletedUsersCount = deletedUserIDs.length;
|
||||||
|
|
||||||
if (areMultipleUsersSelected && deletedUsersCount > 0) {
|
if (isBulkAction && deletedUsersCount > 0) {
|
||||||
toastMessages.push({
|
toastMessages.push({
|
||||||
message: t('state.delete_some_users_success', {
|
message: t('state.delete_some_users_success', {
|
||||||
count: deletedUsersCount,
|
count: deletedUsersCount,
|
||||||
@@ -118,10 +105,9 @@ export const handleUserDeletion: HandleUserDeletion = (
|
|||||||
(key) => !((key as string) in errMsgMap)
|
(key) => !((key as string) in errMsgMap)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
const fallbackErrMsg =
|
const fallbackErrMsg = isBulkAction
|
||||||
isBulkAction && (metadata as BulkActionMetadata).areMultipleUsersSelected
|
? t('state.delete_users_failure')
|
||||||
? t('state.delete_users_failure')
|
: t('state.delete_user_failure');
|
||||||
: t('state.delete_user_failure');
|
|
||||||
|
|
||||||
toastMessages.push({
|
toastMessages.push({
|
||||||
message: fallbackErrMsg,
|
message: fallbackErrMsg,
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ const deleteUserMutation = async (id: string | null) => {
|
|||||||
} else {
|
} else {
|
||||||
const deletedUsers = result.data?.removeUsersByAdmin || [];
|
const deletedUsers = result.data?.removeUsersByAdmin || [];
|
||||||
|
|
||||||
handleUserDeletion(deletedUsers, null);
|
handleUserDeletion(deletedUsers);
|
||||||
}
|
}
|
||||||
confirmDeletion.value = false;
|
confirmDeletion.value = false;
|
||||||
deleteUserUID.value = null;
|
deleteUserUID.value = null;
|
||||||
|
|||||||
@@ -584,10 +584,7 @@ const deleteUsers = async (id: string | null) => {
|
|||||||
.filter((user) => user.isDeleted)
|
.filter((user) => user.isDeleted)
|
||||||
.map((user) => user.userUID);
|
.map((user) => user.userUID);
|
||||||
|
|
||||||
handleUserDeletion(deletedUsers, {
|
handleUserDeletion(deletedUsers);
|
||||||
areMultipleUsersSelected: areMultipleUsersSelected.value,
|
|
||||||
deletedUserIDs,
|
|
||||||
});
|
|
||||||
|
|
||||||
usersList.value = usersList.value.filter(
|
usersList.value = usersList.value.filter(
|
||||||
(user) => !deletedUserIDs.includes(user.uid)
|
(user) => !deletedUserIDs.includes(user.uid)
|
||||||
|
|||||||
Reference in New Issue
Block a user