/* eslint-disable */
// @ts-nocheck
import type ClientScopeRepresentation from "@keycloak/keycloak-admin-client/lib/defs/clientScopeRepresentation";
import KeycloakAdminClient from "@keycloak/keycloak-admin-client";
import type { TFunction } from "i18next";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { toUpperCase } from "../../util";
import {
DropdownItem,
Label,
MenuToggle,
Select,
SelectOption,
SelectProps,
} from "../../../shared/@patternfly/react-core";
export enum ClientScope {
default = "default",
optional = "optional",
}
export enum AllClientScopes {
none = "none",
}
export type ClientScopeType = ClientScope;
export type AllClientScopeType = ClientScope | AllClientScopes;
const clientScopeTypes = Object.keys(ClientScope);
export const allClientScopeTypes = Object.keys({
...AllClientScopes,
...ClientScope,
}) as AllClientScopeType[];
export const isParameterizedScope = (scope: ClientScopeRepresentation) =>
scope.attributes?.["is.parameterized.scope"] === "true";
export const ParameterizedScopeLabel = () => (
);
const filterDefaultForParameterized = (
types: string[],
scopes: ClientScopeRepresentation[],
) =>
scopes.some(isParameterizedScope)
? types.filter((t) => t !== ClientScope.default)
: types;
export const clientScopeTypesSelectOptions = (
t: TFunction,
scopeTypes: string[] | undefined = clientScopeTypes,
scopes: ClientScopeRepresentation[] = [],
) =>
filterDefaultForParameterized(scopeTypes, scopes).map((type) => (
{t(`clientScopeType.${type}`)}
));
export const clientScopeTypesDropdown = (
t: TFunction,
onClick: (scope: ClientScopeType) => void,
scopes: ClientScopeRepresentation[] = [],
) =>
filterDefaultForParameterized(clientScopeTypes, scopes).map((type) => (
onClick(type as ClientScopeType)}>
{t(`clientScopeType.${type}`)}
));
type CellDropdownProps = Omit & {
clientScope: ClientScopeRepresentation;
type: ClientScopeType | AllClientScopeType;
all?: boolean;
onSelect: (value: ClientScopeType | AllClientScopeType) => void;
isDisabled?: boolean;
};
export const CellDropdown = ({
clientScope,
type,
onSelect,
all = false,
isDisabled,
...props
}: CellDropdownProps) => {
const { t } = useTranslation();
const [open, setOpen] = useState(false);
const types = all ? allClientScopeTypes : clientScopeTypes;
const filteredTypes = filterDefaultForParameterized(types, [clientScope]);
return (
);
};
export type ClientScopeDefaultOptionalType = ClientScopeRepresentation & {
type: AllClientScopeType;
};
export const changeScope = async (
adminClient: KeycloakAdminClient,
clientScope: ClientScopeDefaultOptionalType,
changeTo: AllClientScopeType,
) => {
await removeScope(adminClient, clientScope);
await addScope(adminClient, clientScope, changeTo);
};
const castAdminClient = (adminClient: KeycloakAdminClient) =>
adminClient.clientScopes as unknown as {
[index: string]: (params: { id: string }) => Promise;
};
export const removeScope = async (
adminClient: KeycloakAdminClient,
clientScope: ClientScopeDefaultOptionalType,
) => {
if (clientScope.type !== AllClientScopes.none)
await castAdminClient(adminClient)[
`delDefault${
clientScope.type === ClientScope.optional ? "Optional" : ""
}ClientScope`
]({
id: clientScope.id!,
});
};
const addScope = async (
adminClient: KeycloakAdminClient,
clientScope: ClientScopeDefaultOptionalType,
type: AllClientScopeType,
) => {
if (type !== AllClientScopes.none)
await castAdminClient(adminClient)[
`addDefault${type === ClientScope.optional ? "Optional" : ""}ClientScope`
]({
id: clientScope.id!,
});
};
export const changeClientScope = async (
adminClient: KeycloakAdminClient,
clientId: string,
clientScope: ClientScopeRepresentation,
type: AllClientScopeType,
changeTo: ClientScopeType,
) => {
if (type !== "none") {
await removeClientScope(adminClient, clientId, clientScope, type);
}
await addClientScope(adminClient, clientId, clientScope, changeTo);
};
export const removeClientScope = async (
adminClient: KeycloakAdminClient,
clientId: string,
clientScope: ClientScopeRepresentation,
type: ClientScope,
) => {
const methodName = `del${toUpperCase(type)}ClientScope` as const;
await adminClient.clients[methodName]({
id: clientId,
clientScopeId: clientScope.id!,
});
};
export const addClientScope = async (
adminClient: KeycloakAdminClient,
clientId: string,
clientScope: ClientScopeRepresentation,
type: ClientScopeType,
) => {
const methodName = `add${toUpperCase(type)}ClientScope` as const;
await adminClient.clients[methodName]({
id: clientId,
clientScopeId: clientScope.id!,
});
};