theme.keycloak.v2.admin.resources.assets.SessionsTable-7Bmc2htq.js.map Maven / Gradle / Ivy
{"version":3,"file":"SessionsTable-7Bmc2htq.js","sources":["../../../../../node_modules/.pnpm/@[email protected][email protected][email protected][email protected]/node_modules/@patternfly/react-icons/dist/esm/icons/cubes-icon.js","../../src/user/utils.ts","../../src/sessions/SessionsTable.tsx"],"sourcesContent":["import { createIcon } from '../createIcon';\n\nexport const CubesIconConfig = {\n name: 'CubesIcon',\n height: 512,\n width: 512,\n svgPath: 'M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z',\n yOffset: 0,\n xOffset: 0,\n};\n\nexport const CubesIcon = createIcon(CubesIconConfig);\n\nexport default CubesIcon;","export const isLightweightUser = (userId?: string) =>\n userId?.startsWith(\"lightweight-\");\n","import type UserSessionRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/userSessionRepresentation\";\nimport { useEnvironment } from \"@keycloak/keycloak-ui-shared\";\nimport {\n Button,\n Label,\n List,\n ListItem,\n ListVariant,\n ToolbarItem,\n Tooltip,\n} from \"@patternfly/react-core\";\nimport { CubesIcon, InfoCircleIcon } from \"@patternfly/react-icons\";\nimport { IRowData } from \"@patternfly/react-table\";\nimport { ReactNode, useMemo, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useMatch, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { toClient } from \"../clients/routes/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 Field,\n KeycloakDataTable,\n LoaderFunction,\n} from \"../components/table-toolbar/KeycloakDataTable\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { useWhoAmI } from \"../context/whoami/WhoAmI\";\nimport { UserRoute, toUser } from \"../user/routes/User\";\nimport { toUsers } from \"../user/routes/Users\";\nimport { isLightweightUser } from \"../user/utils\";\nimport useFormatDate from \"../utils/useFormatDate\";\n\nexport type ColumnName =\n | \"username\"\n | \"start\"\n | \"lastAccess\"\n | \"clients\"\n | \"type\";\n\nexport type SessionsTableProps = {\n loader: LoaderFunction;\n hiddenColumns?: ColumnName[];\n emptyInstructions?: string;\n logoutUser?: string;\n filter?: ReactNode;\n isSearching?: boolean;\n isPaginated?: boolean;\n};\n\nconst UsernameCell = (row: UserSessionRepresentation) => {\n const { realm } = useRealm();\n const { t } = useTranslation();\n return (\n \n {row.username}\n {row.transientUser && (\n <>\n {\" \"}\n \n }\n isCompact\n >\n {t(\"transientUser\")}\n \n \n >\n )}\n \n );\n};\n\nconst ClientsCell = (row: UserSessionRepresentation) => {\n const { realm } = useRealm();\n return (\n \n {Object.entries(row.clients!).map(([clientId, client]) => (\n \n \n {client}\n \n \n ))}\n
\n );\n};\n\nexport default function SessionsTable({\n loader,\n hiddenColumns = [],\n emptyInstructions,\n logoutUser,\n filter,\n isSearching,\n isPaginated,\n}: SessionsTableProps) {\n const { keycloak } = useEnvironment();\n const { adminClient } = useAdminClient();\n\n const { realm } = useRealm();\n const { whoAmI } = useWhoAmI();\n const navigate = useNavigate();\n const { t } = useTranslation();\n const { addError } = useAlerts();\n const formatDate = useFormatDate();\n const [key, setKey] = useState(0);\n const refresh = () => setKey((value) => value + 1);\n const isOnUserPage = !!useMatch(UserRoute.path);\n\n const columns = useMemo(() => {\n const defaultColumns: Field[] = [\n {\n name: \"username\",\n displayKey: \"user\",\n cellRenderer: UsernameCell,\n },\n {\n name: \"type\",\n displayKey: \"type\",\n },\n {\n name: \"start\",\n displayKey: \"started\",\n cellRenderer: (row) => formatDate(new Date(row.start!)),\n },\n {\n name: \"lastAccess\",\n displayKey: \"lastAccess\",\n cellRenderer: (row) => formatDate(new Date(row.lastAccess!)),\n },\n {\n name: \"ipAddress\",\n displayKey: \"ipAddress\",\n },\n {\n name: \"clients\",\n displayKey: \"clients\",\n cellRenderer: ClientsCell,\n },\n ];\n\n return defaultColumns.filter(\n ({ name }) => !hiddenColumns.includes(name as ColumnName),\n );\n }, [realm, hiddenColumns]);\n\n const [toggleLogoutDialog, LogoutConfirm] = useConfirmDialog({\n titleKey: \"logoutAllSessions\",\n messageKey: \"logoutAllDescription\",\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.users.logout({ id: logoutUser! });\n if (isOnUserPage && isLightweightUser(logoutUser)) {\n navigate(toUsers({ realm: realm }));\n } else {\n refresh();\n }\n } catch (error) {\n addError(\"logoutAllSessionsError\", error);\n }\n },\n });\n\n async function onClickRevoke(rowData: IRowData) {\n const session = rowData.data as UserSessionRepresentation;\n await adminClient.realms.deleteSession({\n realm,\n session: session.id!,\n isOffline: true,\n });\n\n refresh();\n }\n\n async function onClickSignOut(rowData: IRowData) {\n const session = rowData.data as UserSessionRepresentation;\n await adminClient.realms.deleteSession({\n realm,\n session: session.id!,\n isOffline: false,\n });\n\n if (session.userId === whoAmI.getUserId()) {\n await keycloak.logout({ redirectUri: \"\" });\n } else if (isOnUserPage && isLightweightUser(session.userId)) {\n navigate(toUsers({ realm: realm }));\n } else {\n refresh();\n }\n }\n\n return (\n <>\n \n \n \n \n )\n }\n columns={columns}\n actionResolver={(rowData: IRowData) => {\n if (\n rowData.data.type === \"Offline\" ||\n rowData.data.type === \"OFFLINE\"\n ) {\n return [\n {\n title: t(\"revoke\"),\n onClick: () => onClickRevoke(rowData),\n } as Action,\n ];\n }\n return [\n {\n title: t(\"signOut\"),\n onClick: () => onClickSignOut(rowData),\n } as Action,\n ];\n }}\n emptyState={\n \n }\n />\n >\n );\n}\n"],"names":["CubesIconConfig","CubesIcon","createIcon","isLightweightUser","userId","UsernameCell","row","realm","useRealm","t","useTranslation","jsxs","Link","toUser","Fragment","jsx","Tooltip","Label","InfoCircleIcon","ClientsCell","List","ListVariant","clientId","client","ListItem","toClient","SessionsTable","loader","hiddenColumns","emptyInstructions","logoutUser","filter","isSearching","isPaginated","keycloak","useEnvironment","adminClient","useAdminClient","whoAmI","useWhoAmI","navigate","useNavigate","addError","useAlerts","formatDate","useFormatDate","key","setKey","useState","refresh","value","isOnUserPage","useMatch","UserRoute","columns","useMemo","name","toggleLogoutDialog","LogoutConfirm","useConfirmDialog","toUsers","error","onClickRevoke","rowData","session","onClickSignOut","KeycloakDataTable","ToolbarItem","Button","ListEmptyState"],"mappings":"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","x_google_ignoreList":[0]}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy