/* eslint-disable */
// @ts-nocheck
import UserRepresentation from "@keycloak/keycloak-admin-client/lib/defs/userRepresentation";
import {
Action,
KeycloakDataTable,
ListEmptyState,
useAlerts,
} from "../../shared/keycloak-ui-shared";
import { Button, ToolbarItem } from "../../shared/@patternfly/react-core";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { Link } from "react-router-dom";
import { useAdminClient } from "../admin-client";
import { CheckboxFilterComponent } from "../components/dynamic/CheckboxFilterComponent";
import { SearchInputComponent } from "../components/dynamic/SearchInputComponent";
import { useRealm } from "../context/realm-context/RealmContext";
import { MemberModal } from "../groups/MembersModal";
import { toUser } from "../user/routes/User";
import { translationFormatter } from "../utils/translationFormatter";
import { useParams } from "../utils/useParams";
import useToggle from "../utils/useToggle";
import { EditOrganizationParams } from "./routes/EditOrganization";
import { MembershipsModal } from "../groups/MembershipsModal";
import { GroupResourceContext } from "../context/group-resource/GroupResourceContext";
type MembershipTypeRepresentation = UserRepresentation & {
membershipType?: string;
};
const UserDetailLink = (user: any) => {
const { realm } = useRealm();
return (
{user.username}
);
};
export const Members = () => {
const { t } = useTranslation();
const { adminClient } = useAdminClient();
const { id: orgId } = useParams();
const { addAlert, addError } = useAlerts();
const [key, setKey] = useState(0);
const refresh = () => setKey(key + 1);
const [openAddMembers, toggleAddMembers] = useToggle();
const [selectedMembers, setSelectedMembers] = useState(
[],
);
const [searchText, setSearchText] = useState("");
const [searchTriggerText, setSearchTriggerText] = useState("");
const [filteredMembershipTypes, setFilteredMembershipTypes] = useState<
string[]
>([]);
const [isOpen, setIsOpen] = useState(false);
const [showMemberships, toggleShowMemberships] = useToggle();
const [selectedMember, setSelectedMember] = useState();
const membershipOptions = [
{ value: "Managed", label: "Managed" },
{ value: "Unmanaged", label: "Unmanaged" },
];
const onToggleClick = () => {
setIsOpen(!isOpen);
};
const onSelect = (_event: any, value: string) => {
if (filteredMembershipTypes.includes(value)) {
setFilteredMembershipTypes(
filteredMembershipTypes.filter((item) => item !== value),
);
} else {
setFilteredMembershipTypes([...filteredMembershipTypes, value]);
}
setIsOpen(false);
refresh();
};
const loader = async (first?: number, max?: number) => {
try {
const membershipType =
filteredMembershipTypes.length === 1
? filteredMembershipTypes[0]
: undefined;
const memberships: MembershipTypeRepresentation[] =
await adminClient.organizations.listMembers({
orgId,
first,
max,
search: searchTriggerText,
membershipType,
});
return memberships;
} catch (error) {
addError("organizationsMembersListError", error);
return [];
}
};
const handleChange = (value: string) => {
setSearchText(value);
};
const handleSearch = () => {
setSearchTriggerText(searchText);
refresh();
};
const clearInput = () => {
setSearchText("");
setSearchTriggerText("");
refresh();
};
const removeMember = async (selectedMembers: UserRepresentation[]) => {
try {
await Promise.all(
selectedMembers.map((user) =>
adminClient.organizations.delMember({
orgId,
userId: user.id!,
}),
),
);
addAlert(t("organizationUsersLeft", { count: selectedMembers.length }));
} catch (error) {
addError("organizationUsersLeftError", error);
}
refresh();
};
return (
<>
{openAddMembers && (
adminClient.organizations.listMembers({ orgId })}
onAdd={async (selectedRows) => {
try {
await Promise.all(
selectedRows.map((user) =>
adminClient.organizations.addMember({
orgId,
userId: `"${user.id!}"`,
}),
),
);
addAlert(
t("organizationUsersAdded", { count: selectedRows.length }),
);
} catch (error) {
addError("organizationUsersAddedError", error);
}
}}
onClose={() => {
toggleAddMembers();
refresh();
}}
/>
)}
{showMemberships && (
{
toggleShowMemberships();
}}
user={selectedMember!}
orgId={orgId}
/>
)}
setSelectedMembers([...members])}
canSelectAll
toolbarItem={
<>
setIsOpen(nextOpen)}
onToggleClick={onToggleClick}
onSelect={onSelect}
selectedItems={filteredMembershipTypes}
width={"260px"}
/>
>
}
actions={[
{
title: t("remove"),
onRowClick: async (member) => {
await removeMember([member]);
},
},
{
title: t("showGroupMemberships"),
onRowClick: (member) => {
setSelectedMember(member);
toggleShowMemberships();
},
} as Action,
]}
columns={[
{
name: "username",
cellRenderer: UserDetailLink,
},
{
name: "email",
},
{
name: "firstName",
},
{
name: "lastName",
},
{
name: "membershipType",
cellFormatters: [translationFormatter(t)],
},
]}
emptyState={
}
isSearching={
filteredMembershipTypes.length > 0 || searchTriggerText.length > 0
}
/>
>
);
};