theme.keycloak.v2.admin.resources.assets.ClientsSection-6w1IyCg1.js.map Maven / Gradle / Ivy
{"version":3,"file":"ClientsSection-6w1IyCg1.js","sources":["../../../../../node_modules/.pnpm/@[email protected][email protected][email protected][email protected]/node_modules/@patternfly/react-table/dist/esm/components/Table/utils/decorators/wrappable.js","../../src/utils/client-url.ts","../../src/clients/initial-access/InitialAccessTokenList.tsx","../../src/clients/registration/AddProviderDialog.tsx","../../src/clients/registration/ClientRegistrationList.tsx","../../src/clients/registration/ClientRegistration.tsx","../../src/clients/ClientsSection.tsx"],"sourcesContent":["import styles from '@patternfly/react-styles/css/components/Table/table.mjs';\nexport const breakWord = () => ({\n className: styles.modifiers.breakWord\n});\nexport const fitContent = () => ({\n className: styles.modifiers.fitContent\n});\nexport const nowrap = () => ({\n className: styles.modifiers.nowrap\n});\nexport const truncate = () => ({\n className: styles.modifiers.truncate\n});\nexport const wrappable = () => ({\n className: styles.modifiers.wrap\n});\n//# sourceMappingURL=wrappable.js.map","import ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport { joinPath } from \"./joinPath\";\n\nexport const convertClientToUrl = (\n { rootUrl, baseUrl }: ClientRepresentation,\n adminClientBaseUrl: string,\n) => {\n // absolute base url configured, use base url is\n if (baseUrl?.startsWith(\"http\")) {\n return baseUrl;\n }\n\n if (\n (rootUrl === \"${authBaseUrl}\" || rootUrl === \"${authAdminUrl}\") &&\n baseUrl\n ) {\n return rootUrl.replace(\n /\\$\\{(authAdminUrl|authBaseUrl)\\}/,\n joinPath(adminClientBaseUrl, baseUrl),\n );\n }\n\n if (rootUrl?.startsWith(\"http\")) {\n if (baseUrl) {\n return joinPath(rootUrl, baseUrl);\n }\n return rootUrl;\n }\n\n return baseUrl;\n};\n","import type ClientInitialAccessPresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientInitialAccessPresentation\";\nimport { AlertVariant, Button, ButtonVariant } from \"@patternfly/react-core\";\nimport { wrappable } from \"@patternfly/react-table\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { ListEmptyState } from \"../../components/list-empty-state/ListEmptyState\";\nimport {\n Action,\n KeycloakDataTable,\n} from \"../../components/table-toolbar/KeycloakDataTable\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport useFormatDate, { FORMAT_DATE_AND_TIME } from \"../../utils/useFormatDate\";\nimport { toCreateInitialAccessToken } from \"../routes/CreateInitialAccessToken\";\n\nexport const InitialAccessTokenList = () => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n\n const { addAlert, addError } = useAlerts();\n const { realm } = useRealm();\n const formatDate = useFormatDate();\n\n const navigate = useNavigate();\n\n const [token, setToken] = useState();\n\n const loader = async () => {\n try {\n return await adminClient.realms.getClientsInitialAccess({ realm });\n } catch (error) {\n return [];\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"tokenDeleteConfirmTitle\",\n messageKey: t(\"tokenDeleteConfirm\", { id: token?.id }),\n continueButtonLabel: \"delete\",\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n try {\n await adminClient.realms.delClientsInitialAccess({\n realm,\n id: token!.id!,\n });\n addAlert(t(\"tokenDeleteSuccess\"), AlertVariant.success);\n setToken(undefined);\n } catch (error) {\n addError(\"tokenDeleteError\", error);\n }\n },\n });\n\n return (\n <>\n \n (\n \n )}\n >\n {t(\"create\")}\n \n }\n actions={[\n {\n title: t(\"delete\"),\n onRowClick: (token) => {\n setToken(token);\n toggleDeleteDialog();\n },\n } as Action,\n ]}\n columns={[\n {\n name: \"id\",\n displayKey: \"id\",\n },\n {\n name: \"timestamp\",\n displayKey: \"timestamp\",\n cellRenderer: (row) =>\n formatDate(new Date(row.timestamp! * 1000), FORMAT_DATE_AND_TIME),\n },\n {\n name: \"expiration\",\n displayKey: \"expires\",\n cellRenderer: (row) =>\n formatDate(\n new Date(row.timestamp! * 1000 + row.expiration! * 1000),\n FORMAT_DATE_AND_TIME,\n ),\n },\n {\n name: \"count\",\n displayKey: \"count\",\n },\n {\n name: \"remainingCount\",\n displayKey: \"remainingCount\",\n transforms: [wrappable],\n },\n ]}\n emptyState={\n \n navigate(toCreateInitialAccessToken({ realm }))\n }\n />\n }\n />\n >\n );\n};\n","import {\n DataList,\n DataListCell,\n DataListItem,\n DataListItemCells,\n DataListItemRow,\n Modal,\n ModalVariant,\n} from \"@patternfly/react-core\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useServerInfo } from \"../../context/server-info/ServerInfoProvider\";\nimport useLocaleSort, { mapByKey } from \"../../utils/useLocaleSort\";\n\ntype AddProviderDialogProps = {\n onConfirm: (providerId: string) => void;\n toggleDialog: () => void;\n};\n\nexport const AddProviderDialog = ({\n onConfirm,\n toggleDialog,\n}: AddProviderDialogProps) => {\n const { t } = useTranslation();\n const serverInfo = useServerInfo();\n const providers = Object.keys(\n serverInfo.providers?.[\"client-registration-policy\"].providers || [],\n );\n\n const descriptions =\n serverInfo.componentTypes?.[\n \"org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy\"\n ];\n const localeSort = useLocaleSort();\n\n const rows = useMemo(\n () =>\n localeSort(\n descriptions?.filter((d) => providers.includes(d.id)) || [],\n mapByKey(\"id\"),\n ),\n [providers, descriptions],\n );\n return (\n \n \n \n );\n};\n","import ComponentRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/componentRepresentation\";\nimport { Button, ButtonVariant, ToolbarItem } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate, useParams } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport {\n Action,\n KeycloakDataTable,\n} from \"../../components/table-toolbar/KeycloakDataTable\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport { useFetch } from \"../../utils/useFetch\";\nimport useToggle from \"../../utils/useToggle\";\nimport { toRegistrationProvider } from \"../routes/AddRegistrationProvider\";\nimport { ClientRegistrationParams } from \"../routes/ClientRegistration\";\nimport { AddProviderDialog } from \"./AddProviderDialog\";\n\ntype ClientRegistrationListProps = {\n subType: \"anonymous\" | \"authenticated\";\n};\n\nconst DetailLink = (comp: ComponentRepresentation) => {\n const { realm } = useRealm();\n const { subTab } = useParams();\n\n return (\n \n {comp.name}\n \n );\n};\n\nexport const ClientRegistrationList = ({\n subType,\n}: ClientRegistrationListProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { subTab } = useParams();\n const navigate = useNavigate();\n\n const { addAlert, addError } = useAlerts();\n const { realm } = useRealm();\n const [policies, setPolicies] = useState([]);\n const [selectedPolicy, setSelectedPolicy] =\n useState();\n const [isAddDialogOpen, toggleAddDialog] = useToggle();\n\n useFetch(\n () =>\n adminClient.components.find({\n type: \"org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy\",\n }),\n (policies) => setPolicies(policies.filter((p) => p.subType === subType)),\n [selectedPolicy],\n );\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"clientRegisterPolicyDeleteConfirmTitle\",\n messageKey: t(\"clientRegisterPolicyDeleteConfirm\", {\n name: selectedPolicy?.name,\n }),\n continueButtonLabel: \"delete\",\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n try {\n await adminClient.components.del({\n realm,\n id: selectedPolicy?.id!,\n });\n addAlert(t(\"clientRegisterPolicyDeleteSuccess\"));\n setSelectedPolicy(undefined);\n } catch (error) {\n addError(\"clientRegisterPolicyDeleteError\", error);\n }\n },\n });\n\n return (\n <>\n {isAddDialogOpen && (\n \n navigate(\n toRegistrationProvider({\n realm,\n subTab: subTab || \"anonymous\",\n providerId,\n }),\n )\n }\n toggleDialog={toggleAddDialog}\n />\n )}\n \n \n \n \n }\n actions={[\n {\n title: t(\"delete\"),\n onRowClick: (policy) => {\n setSelectedPolicy(policy);\n toggleDeleteDialog();\n },\n } as Action,\n ]}\n columns={[\n {\n name: \"name\",\n displayKey: \"name\",\n cellRenderer: DetailLink,\n },\n {\n name: \"providerId\",\n displayKey: \"providerId\",\n },\n ]}\n />\n >\n );\n};\n","import { Tab, TabTitleText } from \"@patternfly/react-core\";\nimport { useTranslation } from \"react-i18next\";\nimport { HelpItem } from \"@keycloak/keycloak-ui-shared\";\nimport {\n RoutableTabs,\n useRoutableTab,\n} from \"../../components/routable-tabs/RoutableTabs\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport {\n ClientRegistrationTab,\n toClientRegistration,\n} from \"../routes/ClientRegistration\";\nimport { ClientRegistrationList } from \"./ClientRegistrationList\";\n\nexport const ClientRegistration = () => {\n const { t } = useTranslation();\n const { realm } = useRealm();\n\n const useTab = (subTab: ClientRegistrationTab) =>\n useRoutableTab(toClientRegistration({ realm, subTab }));\n\n const anonymousTab = useTab(\"anonymous\");\n const authenticatedTab = useTab(\"authenticated\");\n\n return (\n \n \n {t(\"anonymousAccessPolicies\")}{\" \"}\n \n \n }\n {...anonymousTab}\n >\n \n \n \n {t(\"authenticatedAccessPolicies\")}{\" \"}\n \n \n }\n {...authenticatedTab}\n >\n \n \n \n );\n};\n","import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type { ClientQuery } from \"@keycloak/keycloak-admin-client/lib/resources/clients\";\nimport {\n AlertVariant,\n Badge,\n Button,\n ButtonVariant,\n PageSection,\n Tab,\n TabTitleText,\n ToolbarItem,\n} from \"@patternfly/react-core\";\nimport { IRowData, TableText, cellWidth } from \"@patternfly/react-table\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { FormattedLink } from \"../components/external-link/FormattedLink\";\nimport {\n RoutableTabs,\n useRoutableTab,\n} from \"../components/routable-tabs/RoutableTabs\";\nimport {\n Action,\n KeycloakDataTable,\n} from \"../components/table-toolbar/KeycloakDataTable\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { useAccess } from \"../context/access/Access\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport helpUrls from \"../help-urls\";\nimport { emptyFormatter, exportClient } from \"../util\";\nimport { convertClientToUrl } from \"../utils/client-url\";\nimport { InitialAccessTokenList } from \"./initial-access/InitialAccessTokenList\";\nimport { ClientRegistration } from \"./registration/ClientRegistration\";\nimport { toAddClient } from \"./routes/AddClient\";\nimport { toClient } from \"./routes/Client\";\nimport { ClientsTab, toClients } from \"./routes/Clients\";\nimport { toImportClient } from \"./routes/ImportClient\";\nimport { getProtocolName, isRealmClient } from \"./utils\";\n\nconst ClientDetailLink = (client: ClientRepresentation) => {\n const { t } = useTranslation();\n const { realm } = useRealm();\n return (\n \n \n {client.clientId}\n {!client.enabled && (\n \n {t(\"disabled\")}\n \n )}\n \n \n );\n};\n\nconst ClientName = (client: ClientRepresentation) => (\n \n {emptyFormatter()(client.name) as string}\n \n);\n\nconst ClientDescription = (client: ClientRepresentation) => (\n \n {emptyFormatter()(client.description) as string}\n \n);\n\nconst ClientHomeLink = (client: ClientRepresentation) => {\n const { adminClient } = useAdminClient();\n const href = convertClientToUrl(client, adminClient.baseUrl);\n\n if (!href) {\n return \"—\";\n }\n\n return ;\n};\n\nconst ToolbarItems = () => {\n const { t } = useTranslation();\n const { realm } = useRealm();\n\n const { hasAccess } = useAccess();\n const isManager = hasAccess(\"manage-clients\");\n\n if (!isManager) return ;\n\n return (\n <>\n \n \n \n \n \n \n >\n );\n};\n\nexport default function ClientsSection() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { addAlert, addError } = useAlerts();\n const { realm } = useRealm();\n\n const [key, setKey] = useState(0);\n const refresh = () => setKey(new Date().getTime());\n const [selectedClient, setSelectedClient] = useState();\n\n const { hasAccess } = useAccess();\n const isManager = hasAccess(\"manage-clients\");\n\n const loader = async (first?: number, max?: number, search?: string) => {\n const params: ClientQuery = {\n first: first!,\n max: max!,\n };\n if (search) {\n params.clientId = search;\n params.search = true;\n }\n return await adminClient.clients.find({ ...params });\n };\n\n const useTab = (tab: ClientsTab) => useRoutableTab(toClients({ realm, tab }));\n\n const listTab = useTab(\"list\");\n const initialAccessTokenTab = useTab(\"initial-access-token\");\n const clientRegistrationTab = useTab(\"client-registration\");\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: t(\"clientDelete\", { clientId: selectedClient?.clientId }),\n messageKey: \"clientDeleteConfirm\",\n continueButtonLabel: \"delete\",\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n try {\n await adminClient.clients.del({\n id: selectedClient!.id!,\n });\n addAlert(t(\"clientDeletedSuccess\"), AlertVariant.success);\n refresh();\n } catch (error) {\n addError(\"clientDeleteError\", error);\n }\n },\n });\n\n return (\n <>\n \n \n \n {t(\"clientsList\")}}\n {...listTab}\n >\n \n }\n actionResolver={(rowData: IRowData) => {\n const client: ClientRepresentation = rowData.data;\n const actions: Action[] = [\n {\n title: t(\"export\"),\n onClick() {\n exportClient(client);\n },\n },\n ];\n\n if (\n !isRealmClient(client) &&\n (isManager || client.access?.configure)\n ) {\n actions.push({\n title: t(\"delete\"),\n onClick() {\n setSelectedClient(client);\n toggleDeleteDialog();\n },\n });\n }\n\n return actions;\n }}\n columns={[\n {\n name: \"clientId\",\n displayKey: \"clientId\",\n transforms: [cellWidth(20)],\n cellRenderer: ClientDetailLink,\n },\n {\n name: \"clientName\",\n displayKey: \"clientName\",\n transforms: [cellWidth(20)],\n cellRenderer: ClientName,\n },\n {\n name: \"protocol\",\n displayKey: \"type\",\n transforms: [cellWidth(10)],\n cellRenderer: (client) =>\n getProtocolName(t, client.protocol ?? \"openid-connect\"),\n },\n {\n name: \"description\",\n displayKey: \"description\",\n transforms: [cellWidth(30)],\n cellRenderer: ClientDescription,\n },\n {\n name: \"baseUrl\",\n displayKey: \"homeURL\",\n transforms: [cellWidth(20)],\n cellRenderer: ClientHomeLink,\n },\n ]}\n />\n \n {t(\"initialAccessToken\")}}\n {...initialAccessTokenTab}\n >\n \n \n {t(\"clientRegistration\")}}\n {...clientRegistrationTab}\n >\n \n \n \n \n >\n );\n}\n"],"names":["wrappable","styles","convertClientToUrl","rootUrl","baseUrl","adminClientBaseUrl","joinPath","InitialAccessTokenList","adminClient","useAdminClient","t","useTranslation","addAlert","addError","useAlerts","realm","useRealm","formatDate","useFormatDate","navigate","useNavigate","token","setToken","useState","loader","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","ButtonVariant","AlertVariant","error","jsxs","Fragment","jsx","KeycloakDataTable","Button","props","Link","toCreateInitialAccessToken","row","FORMAT_DATE_AND_TIME","ListEmptyState","AddProviderDialog","onConfirm","toggleDialog","serverInfo","useServerInfo","providers","descriptions","localeSort","useLocaleSort","rows","useMemo","d","mapByKey","Modal","ModalVariant","DataList","_event","id","DataListItem","DataListItemRow","DataListItemCells","name","DataListCell","provider","DetailLink","comp","subTab","useParams","toRegistrationProvider","ClientRegistrationList","subType","policies","setPolicies","selectedPolicy","setSelectedPolicy","isAddDialogOpen","toggleAddDialog","useToggle","useFetch","p","providerId","ToolbarItem","policy","ClientRegistration","useTab","useRoutableTab","toClientRegistration","anonymousTab","authenticatedTab","RoutableTabs","Tab","TabTitleText","HelpItem","ClientDetailLink","client","TableText","toClient","Badge","ClientName","emptyFormatter","ClientDescription","ClientHomeLink","href","FormattedLink","ToolbarItems","hasAccess","useAccess","toAddClient","toImportClient","ClientsSection","key","setKey","refresh","selectedClient","setSelectedClient","isManager","first","max","search","params","tab","toClients","listTab","initialAccessTokenTab","clientRegistrationTab","ViewHeader","helpUrls","PageSection","rowData","actions","exportClient","isRealmClient","cellWidth","getProtocolName"],"mappings":"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","x_google_ignoreList":[0]}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy