@keycloakify/keycloak-admin-ui
Version:
Repackaged Keycloak Admin UI
116 lines • 6.18 kB
JavaScript
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
import { KeycloakDataTable, ListEmptyState, useAlerts, useFetch, } from "../ui-shared";
import { Button, ButtonVariant, PageSection, Switch, ToolbarItem, } from "@patternfly/react-core";
import { sortBy } from "lodash-es";
import { BellIcon } from "@patternfly/react-icons";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { useParams } from "react-router-dom";
import { useAdminClient } from "../admin-client";
import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog";
import { ManageOrderDialog } from "../identity-providers/ManageOrderDialog";
import useToggle from "../utils/useToggle";
import { LinkIdentityProviderModal } from "../organizations/LinkIdentityProviderModal";
const ShownOnLoginPageCheck = ({ row, refresh, }) => {
const { adminClient } = useAdminClient();
const { addAlert, addError } = useAlerts();
const { t } = useTranslation();
const toggle = async (value) => {
try {
await adminClient.identityProviders.update({ alias: row.alias }, {
...row,
hideOnLogin: value,
});
addAlert(t("linkUpdatedSuccessful"));
refresh();
}
catch (error) {
addError("linkUpdatedError", error);
}
};
return (_jsx(Switch, { label: t("on"), labelOff: t("off"), isChecked: row.hideOnLogin, onChange: (_, value) => toggle(value) }));
};
export const IdentityProviders = () => {
const { adminClient } = useAdminClient();
const { t } = useTranslation();
const { id: orgId } = useParams();
const { addAlert, addError } = useAlerts();
const [key, setKey] = useState(0);
const refresh = () => setKey(key + 1);
const [manageDisplayDialog, setManageDisplayDialog] = useState(false);
const [hasProviders, setHasProviders] = useState(false);
const [selectedRow, setSelectedRow] = useState();
const [open, toggleOpen] = useToggle();
useFetch(async () => adminClient.identityProviders.find({ max: 1 }), (providers) => {
setHasProviders(providers.length === 1);
}, []);
const loader = async () => {
const providers = await adminClient.organizations.listIdentityProviders({
orgId: orgId,
});
return sortBy(providers, "alias");
};
const [toggleUnlinkDialog, UnlinkConfirm] = useConfirmDialog({
titleKey: "identityProviderUnlink",
messageKey: "identityProviderUnlinkConfirm",
continueButtonLabel: "unLinkIdentityProvider",
continueButtonVariant: ButtonVariant.danger,
onConfirm: async () => {
try {
await adminClient.organizations.unLinkIdp({
orgId: orgId,
alias: selectedRow.alias,
});
setSelectedRow(undefined);
addAlert(t("unLinkSuccessful"));
refresh();
}
catch (error) {
addError("unLinkError", error);
}
},
});
return (_jsxs(_Fragment, { children: [manageDisplayDialog && (_jsx(ManageOrderDialog, { orgId: orgId, onClose: () => {
setManageDisplayDialog(false);
refresh();
} })), _jsxs(PageSection, { variant: "light", children: [_jsx(UnlinkConfirm, {}), open && (_jsx(LinkIdentityProviderModal, { orgId: orgId, identityProvider: selectedRow, onClose: () => {
toggleOpen();
refresh();
} })), !hasProviders ? (_jsx(ListEmptyState, { icon: BellIcon, message: t("noIdentityProvider"), instructions: t("noIdentityProviderInstructions") })) : (_jsx(KeycloakDataTable, { loader: loader, ariaLabelKey: "identityProviders", searchPlaceholderKey: "searchProvider", toolbarItem: _jsxs(_Fragment, { children: [_jsx(ToolbarItem, { children: _jsx(Button, { onClick: () => {
setSelectedRow(undefined);
toggleOpen();
}, children: t("linkIdentityProvider") }) }), _jsx(ToolbarItem, { children: _jsx(Button, { "data-testid": "manageDisplayOrder", variant: "link", onClick: () => setManageDisplayDialog(true), children: t("manageDisplayOrder") }) })] }), actions: [
{
title: t("edit"),
onRowClick: (row) => {
setSelectedRow(row);
toggleOpen();
},
},
{
title: t("unLinkIdentityProvider"),
onRowClick: (row) => {
setSelectedRow(row);
toggleUnlinkDialog();
},
},
], columns: [
{
name: "alias",
},
{
name: "config['kc.org.domain']",
displayKey: "domain",
},
{
name: "providerId",
displayKey: "providerDetails",
},
{
name: "hideOnLogin",
displayKey: "hideOnLoginPage",
cellRenderer: (row) => (_jsx(ShownOnLoginPageCheck, { row: row, refresh: refresh })),
},
], emptyState: _jsx(ListEmptyState, { message: t("emptyIdentityProviderLink"), instructions: t("emptyIdentityProviderLinkInstructions"), primaryActionText: t("linkIdentityProvider"), onPrimaryAction: toggleOpen }) }, key))] })] }));
};
//# sourceMappingURL=IdentityProviders.js.map