UNPKG

@keycloakify/keycloak-admin-ui

Version:
116 lines 6.18 kB
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