Shared:Selectors:People: add support show disabled and invited users

This commit is contained in:
Timofey Boyko 2024-03-26 11:35:47 +03:00
parent e8aef49cf6
commit 2f133a2fe9
2 changed files with 43 additions and 16 deletions

View File

@ -48,10 +48,16 @@ export type PeopleSelectorProps = TSelectorHeader &
style?: React.CSSProperties;
filter?: PeopleFilter | Function;
excludeItems?: string[];
isMultiSelect?: boolean;
currentUserId: string;
withOutCurrentAuthorizedUser?: boolean;
withAbilityCreateRoomUsers?: boolean;
withoutNotActivatedUsers?: boolean;
filterUserId?: string;
excludeItems?: string[];
disableInvitedUsers?: string[];
disableDisabledUsers?: boolean;
};

View File

@ -40,7 +40,7 @@ import {
TSelectorItem,
TSelectorSearch,
} from "../../components/selector/Selector.types";
import { EmployeeActivationStatus, EmployeeStatus } from "../../enums";
import { EmployeeStatus } from "../../enums";
import { TTranslation } from "../../types";
import { getUserRole } from "../../utils/common";
import Filter from "../../api/people/filter";
@ -51,7 +51,12 @@ import { AvatarRole } from "../../components/avatar";
import { PeopleSelectorProps } from "./PeopleSelector.types";
const toListItem = (item: TUser) => {
const toListItem = (
item: TUser,
t: TTranslation,
disableDisabledUsers?: boolean,
disableInvitedUsers?: string[],
) => {
const {
id: userId,
email,
@ -62,12 +67,22 @@ const toListItem = (item: TUser) => {
isAdmin,
isVisitor,
isCollaborator,
status,
} = item;
const role = getUserRole(item);
const userAvatar = hasAvatar ? avatar : DefaultUserPhoto;
const isInvited = disableInvitedUsers?.includes(userId);
const isDisabled = disableDisabledUsers && status === EmployeeStatus.Disabled;
const disabledText = isDisabled
? t("Common:Disabled")
: isInvited
? t("Common:Invited")
: "";
const i = {
id: userId,
email,
@ -79,6 +94,8 @@ const toListItem = (item: TUser) => {
isVisitor,
isCollaborator,
hasAvatar,
isDisabled: isInvited || isDisabled,
disabledText,
} as TSelectorItem;
return i;
@ -102,7 +119,7 @@ const PeopleSelector = ({
excludeItems,
currentUserId,
withOutCurrentAuthorizedUser,
withoutNotActivatedUsers,
withAbilityCreateRoomUsers,
filterUserId,
@ -113,6 +130,10 @@ const PeopleSelector = ({
withHeader,
headerProps,
disableDisabledUsers,
disableInvitedUsers,
isMultiSelect,
}: PeopleSelectorProps) => {
const { t }: { t: TTranslation } = useTranslation(["Common"]);
@ -179,9 +200,6 @@ const PeopleSelector = ({
currentFilter.page = startIndex / pageCount;
currentFilter.pageCount = pageCount;
if (withoutNotActivatedUsers)
currentFilter.activationStatus = `${EmployeeActivationStatus.NotActivated}`;
currentFilter.search = searchValue || null;
const response = await getUserList(currentFilter);
@ -191,11 +209,10 @@ const PeopleSelector = ({
const data = response.items
.filter((item) => {
const excludeUser =
(!!withAbilityCreateRoomUsers &&
!item.isAdmin &&
!item.isOwner &&
!item.isRoomAdmin) ||
item.status === EmployeeStatus.Disabled;
withAbilityCreateRoomUsers &&
!item.isAdmin &&
!item.isOwner &&
!item.isRoomAdmin;
if ((excludeItems && excludeItems.includes(item.id)) || excludeUser) {
totalDifferent += 1;
@ -203,7 +220,9 @@ const PeopleSelector = ({
}
return true;
})
.map((item) => toListItem(item));
.map((item) =>
toListItem(item, t, disableDisabledUsers, disableInvitedUsers),
);
const newTotal = withOutCurrentAuthorizedUser
? response.total - totalDifferent - 1
@ -237,14 +256,16 @@ const PeopleSelector = ({
isFirstLoad.current = false;
},
[
disableDisabledUsers,
disableInvitedUsers,
excludeItems,
filter,
moveCurrentUserToTopOfList,
removeCurrentUserFromList,
searchValue,
t,
withAbilityCreateRoomUsers,
withOutCurrentAuthorizedUser,
withoutNotActivatedUsers,
],
);
@ -331,7 +352,7 @@ const PeopleSelector = ({
hasNextPage={hasNextPage}
isNextPageLoading={isNextPageLoading}
loadNextPage={loadNextPage}
isMultiSelect={false}
isMultiSelect={isMultiSelect ?? false}
totalItems={total}
isLoading={isFirstLoad.current}
searchLoader={<SearchLoader />}