2021-06-09 13:35:35 +00:00
|
|
|
import React from "react";
|
2021-04-14 18:39:21 +00:00
|
|
|
import { useParams } from "react-router-dom";
|
|
|
|
import { useTranslation } from "react-i18next";
|
2021-06-09 13:35:35 +00:00
|
|
|
import { Chip, ChipGroup } from "@patternfly/react-core";
|
2021-04-14 18:39:21 +00:00
|
|
|
import { ListEmptyState } from "../components/list-empty-state/ListEmptyState";
|
|
|
|
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
|
|
|
|
import { emptyFormatter } from "../util";
|
|
|
|
import { useAdminClient } from "../context/auth/AdminClient";
|
|
|
|
import { cellWidth } from "@patternfly/react-table";
|
|
|
|
import _ from "lodash";
|
2021-05-04 17:58:18 +00:00
|
|
|
import type UserConsentRepresentation from "keycloak-admin/lib/defs/userConsentRepresentation";
|
2021-04-14 18:39:21 +00:00
|
|
|
import { CubesIcon } from "@patternfly/react-icons";
|
|
|
|
import moment from "moment";
|
|
|
|
|
|
|
|
export const UserConsents = () => {
|
|
|
|
const { t } = useTranslation("roles");
|
|
|
|
|
|
|
|
const adminClient = useAdminClient();
|
|
|
|
const { id } = useParams<{ id: string }>();
|
|
|
|
const alphabetize = (consentsList: UserConsentRepresentation[]) => {
|
|
|
|
return _.sortBy(consentsList, (client) => client.clientId?.toUpperCase());
|
|
|
|
};
|
|
|
|
|
|
|
|
const loader = async () => {
|
2021-06-09 13:35:35 +00:00
|
|
|
const getConsents = await adminClient.users.listConsents({ id });
|
2021-04-14 18:39:21 +00:00
|
|
|
|
2021-06-09 13:35:35 +00:00
|
|
|
return alphabetize(getConsents);
|
2021-04-14 18:39:21 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const clientScopesRenderer = ({
|
|
|
|
grantedClientScopes,
|
|
|
|
}: UserConsentRepresentation) => {
|
2021-06-09 13:35:35 +00:00
|
|
|
return (
|
|
|
|
<ChipGroup className="kc-consents-chip-group">
|
|
|
|
{grantedClientScopes!.map((currentChip) => (
|
|
|
|
<Chip
|
|
|
|
key={currentChip}
|
|
|
|
isReadOnly
|
|
|
|
className="kc-consents-chip"
|
|
|
|
id="consents-chip-text"
|
2021-06-08 13:23:32 +00:00
|
|
|
>
|
2021-06-09 13:35:35 +00:00
|
|
|
{currentChip}
|
|
|
|
</Chip>
|
|
|
|
))}
|
|
|
|
</ChipGroup>
|
|
|
|
);
|
2021-04-14 18:39:21 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const createdRenderer = ({ createDate }: UserConsentRepresentation) => {
|
|
|
|
return <>{moment(createDate).format("MM/DD/YY hh:MM A")}</>;
|
|
|
|
};
|
|
|
|
|
|
|
|
const lastUpdatedRenderer = ({
|
|
|
|
lastUpdatedDate,
|
|
|
|
}: UserConsentRepresentation) => {
|
|
|
|
return <>{moment(lastUpdatedDate).format("MM/DD/YY hh:MM A")}</>;
|
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<>
|
2021-06-08 13:23:32 +00:00
|
|
|
<KeycloakDataTable
|
|
|
|
loader={loader}
|
|
|
|
ariaLabelKey="roles:roleList"
|
|
|
|
searchPlaceholderKey=" "
|
|
|
|
columns={[
|
|
|
|
{
|
|
|
|
name: "clientId",
|
|
|
|
displayKey: "clients:Client",
|
|
|
|
cellFormatters: [emptyFormatter()],
|
|
|
|
transforms: [cellWidth(20)],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "grantedClientScopes",
|
|
|
|
displayKey: "client-scopes:grantedClientScopes",
|
|
|
|
cellFormatters: [emptyFormatter()],
|
|
|
|
cellRenderer: clientScopesRenderer,
|
|
|
|
transforms: [cellWidth(30)],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "createdDate",
|
|
|
|
displayKey: "clients:created",
|
|
|
|
cellFormatters: [emptyFormatter()],
|
|
|
|
cellRenderer: createdRenderer,
|
|
|
|
transforms: [cellWidth(20)],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "lastUpdatedDate",
|
|
|
|
displayKey: "clients:lastUpdated",
|
|
|
|
cellFormatters: [emptyFormatter()],
|
|
|
|
cellRenderer: lastUpdatedRenderer,
|
|
|
|
transforms: [cellWidth(20)],
|
|
|
|
},
|
|
|
|
]}
|
|
|
|
emptyState={
|
|
|
|
<ListEmptyState
|
|
|
|
hasIcon={true}
|
|
|
|
icon={CubesIcon}
|
|
|
|
message={t("users:noConsents")}
|
|
|
|
instructions={t("users:noConsentsText")}
|
|
|
|
onPrimaryAction={() => {}}
|
|
|
|
/>
|
|
|
|
}
|
|
|
|
/>
|
2021-04-14 18:39:21 +00:00
|
|
|
</>
|
|
|
|
);
|
|
|
|
};
|