{"version":3,"file":"AdminEditOrgPage.96fb6c37346641f44246.js","mappings":"+RAMA,MAAMA,EAAU,GAEHC,EAAS,MAAOC,GACpB,QAAM,MAAc,EAAE,IAAI,aAAaA,GAAO,EAG1CC,EAAc,MAAOD,EAAsBE,IAClD,KAAW,cAAc,sBAAoB,YAAY,KACpD,MAAc,EAAE,IAAI,aAAaF,oBAAsBG,EAAA,GAAwB,CAAE,QAASL,EAAS,KAAAI,CAAK,CAAC,CAAC,EAE5G,CAAE,SAAU,CAAC,CAAE,EAGXE,EAAgB,MAAOJ,EAAeK,IAAqB,CACtE,MAAMC,EAAUD,EAAM,IAAKE,GAAMA,EAAE,MAAM,EACnCC,EAAQ,QAAM,MAAc,EAAE,KAAK,yCAA0C,CAAE,QAAAF,EAAS,MAAAN,CAAM,CAAC,EACrGK,EAAM,QAASE,GAAM,CACnBA,EAAE,MAAQC,EAAQA,EAAMD,EAAE,MAAM,GAAK,CAAC,EAAI,CAAC,CAC7C,CAAC,CACH,EAEaE,EAAoB,CAACC,EAAkBV,OAC3C,MAAc,EAAE,MAAM,aAAaA,WAAeU,EAAQ,SAAUA,CAAO,EAGvEC,EAAgB,CAACD,EAAkBV,OACvC,MAAc,EAAE,OAAO,aAAaA,WAAeU,EAAQ,QAAQ,EAG/DE,EAAgB,CAACC,EAAcb,OACnC,MAAc,EAAE,IAAI,aAAaA,IAAS,CAAE,KAAAa,CAAK,CAAC,ECyF3D,EAzGyB,CAAC,CAAE,MAAAC,CAAM,IAAa,CAC7C,MAAMd,EAAQ,SAASc,EAAM,OAAO,GAAI,EAAE,EACpCC,EAAc,KAAW,cAAc,sBAAoB,SAAS,EACpEC,EAAe,KAAW,cAAc,sBAAoB,YAAY,EAExE,CAACX,EAAOY,CAAQ,KAAI,YAAoB,CAAC,CAAC,EAC1C,CAACf,EAAMgB,CAAO,KAAI,YAAS,CAAC,EAC5B,CAACC,EAAYC,CAAa,KAAI,YAAS,CAAC,EAExC,CAACC,EAAUC,CAAQ,KAAIC,EAAA,GAAW,IAAMxB,EAAOC,CAAK,EAAG,CAAC,CAAC,EACzD,CACJ,aAAAwB,EACA,SAAAC,EACA,UAAW,CAAE,OAAAC,CAAO,CACtB,KAAI,MAAoB,EAClB,CAAC,CAAEC,CAAa,KAAIJ,EAAA,GAAW,MAAOrB,GAAS,CACnD,MAAM0B,EAAS,MAAM3B,EAAYD,EAAOE,CAAI,EAExC,KAAW,6BAA6B,GAC1C,MAAME,EAAcJ,EAAO4B,EAAO,QAAQ,EAG5C,MAAMT,EAAaS,GAAQ,UAAY,EAAI,KAAK,KAAKA,EAAO,WAAaA,EAAO,OAAO,EAAI,EAC3F,OAAAR,EAAcD,CAAU,EACxBF,EAASW,EAAO,QAAQ,EACjBA,EAAO,QAChB,EAAG,CAAC,CAAC,KAEL,aAAU,IAAM,CACdN,EAAS,EACTK,EAAczB,CAAI,CACpB,EAAG,CAACoB,EAAUK,EAAezB,CAAI,CAAC,EAElC,MAAM2B,EAAkB,MAAO,CAAE,QAAAC,CAAQ,IAAkB,CACzD,MAAMlB,EAAckB,EAAS9B,CAAK,CACpC,EAEM+B,EAAiC,IACrC,gBAACC,EAAA,EAAK,CAAC,SAAS,OAAO,MAAM,iBAAgB,+HAG7C,EAGIC,EAAgBC,GAAmB,CACvChB,EAAQgB,CAAM,CAChB,EAEMC,EAAe,MAAOzB,GAAqB,CAC/C,MAAMC,EAAcD,EAASV,CAAK,EAClC2B,EAAczB,CAAI,CACpB,EAEMkC,EAAe,MAAOC,EAAe3B,IAAqB,CAC9D,MAAMD,EAAkB,CAAE,GAAGC,EAAS,KAAA2B,CAAK,EAAGrC,CAAK,EACnD2B,EAAczB,CAAI,CACpB,EAEMoC,EAAwB,CAC5B,KAAMjB,GAAU,OAAO,MAAQ,GAC/B,KAAM,SACN,SAAU,qDACZ,EAEA,OACE,gBAACkB,EAAA,EAAI,CAAC,MAAM,cAAc,QAAAD,EAAkB,SAAS,0CACnD,gBAACC,EAAA,EAAK,SAAL,KACC,gCACE,gBAACC,EAAA,EAAM,KAAC,mBAAiB,EACxBnB,EAAS,OACR,gBAAC,QAAK,SAAUG,EAAaK,CAAe,EAAG,MAAO,CAAE,SAAU,OAAQ,GACxE,gBAACY,EAAA,EAAK,CAAC,MAAM,OAAO,QAAS,CAAC,CAACf,EAAO,QAAS,MAAM,mBAAmB,SAAU,CAACX,CAAA,EACjF,gBAAC2B,EAAA,GACE,GAAGjB,EAAS,UAAW,CAAE,SAAU,EAAK,CAAC,EAC1C,GAAG,iBACH,aAAcJ,EAAS,MAAM,KAC/B,CACF,EACA,gBAACsB,EAAA,GAAM,CAAC,KAAK,SAAS,SAAU,CAAC5B,CAAA,EAAa,QAE9C,CACF,EAGF,gBAAC,OAAI,MAAO,CAAE,UAAW,MAAO,GAC9B,gBAACyB,EAAA,EAAM,KAAC,oBAAkB,EACzB,CAACxB,GAAgBe,EAA+B,EAChDf,GAAgB,CAAC,CAACX,EAAM,QACvB,gBAACuC,EAAA,GACC,MAAAvC,EACA,MAAAL,EACA,aAAAoC,EACA,aAAAD,EACA,WAAYF,EACZ,KAAA/B,EACA,WAAAiB,CAAA,CACF,CAEJ,CACF,CACF,CACF,CAEJ,C,uPC7FA,MAAM0B,EAAsB;AAAA,uDAGtBC,EAAwBC,GAAkB,CAC9C,MAAMC,EAAeD,GAAM,mBAC3B,MAAO,CAAC,KAAW,wBAAwB,sBAAoB,cAAeA,CAAI,GAAKC,CACzF,EAEMC,EAAY,KAAa,MAAM,aAAa,cAcrCL,EAAgB,CAAC,CAC5B,MAAAvC,EACA,MAAAL,EACA,aAAAoC,EACA,aAAAD,EACA,UAAAe,EACA,WAAAC,EACA,KAAAjD,EACA,WAAAiB,EACA,aAAAiC,CACF,IAAa,CACX,KAAM,CAACC,EAAcC,CAAe,KAAI,YAAyB,IAAI,EAC/D,CAACC,EAAaC,CAAc,KAAI,YAAiB,CAAC,CAAC,KAEzD,aAAU,IAAM,CACd,eAAeC,GAAe,CAC5B,GAAI,CACF,GAAI,KAAW,cAAc,sBAAoB,eAAe,EAAG,CACjE,IAAIC,EAAU,QAAM,MAAiB1D,CAAK,EAC1CwD,EAAeE,CAAO,EAE1B,MAAE,CACA,QAAQ,MAAM,uBAAuB,CACvC,CACF,CACI,KAAW,6BAA6B,GAC1CD,EAAa,CAEjB,EAAG,CAACzD,CAAK,CAAC,EAEV,MAAM2D,KAAkC,WACtC,IAAM,CACJ,CACE,GAAI,YACJ,OAAQ,GACR,KAAM,CAAC,CAAE,KAAM,CAAE,MAAAC,CAAM,CAAE,IAAyBA,GAAS,gBAAC,IAAM,CAAC,IAAKA,EAAO,IAAI,aAAc,EACnG,EACA,CACE,GAAI,QACJ,OAAQ,QACR,KAAM,CAAC,CAAE,KAAM,CAAE,MAAAA,CAAM,CAAE,IAAqB,gBAAC,WAAKA,CAAM,EAC1D,SAAU,QACZ,EACA,CACE,GAAI,QACJ,OAAQ,QACR,KAAM,CAAC,CAAE,KAAM,CAAE,MAAAA,CAAM,CAAE,IAAqBA,EAC9C,SAAU,QACZ,EACA,CACE,GAAI,OACJ,OAAQ,OACR,KAAM,CAAC,CAAE,KAAM,CAAE,MAAAA,CAAM,CAAE,IAAoBA,EAC7C,SAAU,QACZ,EACA,CACE,GAAI,gBACJ,OAAQ,cACR,KAAM,CAAC,CAAE,KAAM,CAAE,MAAAA,CAAM,CAAE,IAChB,gCAAGA,GAAS,gCAAGA,IAAU,WAAa,gBAAC,IAAI,CAAC,MAAO,YAAY,OAAK,EAAUA,CAAM,CAAI,EAEjG,SAAU,CAAC,EAAGC,IAAM,IAAI,KAAK,EAAE,SAAS,UAAU,EAAE,QAAQ,EAAI,IAAI,KAAKA,EAAE,SAAS,UAAU,EAAE,QAAQ,CAC1G,EACA,CACE,GAAI,OACJ,OAAQ,OACR,KAAM,CAAC,CAAE,KAAM,CAAE,MAAAD,CAAM,EAAG,IAAK,CAAE,SAAAE,CAAS,CAAE,IAAoB,CAC9D,MAAMC,EAAoBjB,EAAqBgB,CAAQ,EACvD,OAAO,KAAW,6BAA6B,EAC7C,gBAAC,KACC,OAAQA,EAAS,OACjB,MAAOA,EAAS,OAAS,CAAC,EAC1B,UAAWV,EACX,MAAApD,EACA,YAAAuD,EACA,UAAWK,EACX,kBAAoBI,GAAY5B,EAAa4B,EAASF,CAAQ,EAC9D,kBAAAC,EACA,yBAA0BlB,EAC1B,MAAO,GACT,EAEA,gBAAC,KACC,aAAW,OACX,MAAAe,EACA,SAAUG,EACV,SAAWC,GAAY5B,EAAa4B,EAASF,CAAQ,EACvD,CAEJ,CACF,EACA,CACE,GAAI,OACJ,OAAQ,GACR,KAAM,CAAC,CAAE,IAAK,CAAE,SAAAA,CAAS,CAAE,IACChB,EAAqBgB,CAAQ,GAGnD,gBAAC,IAAG,CAAC,QAAS,OAAQ,WAAY,SAAU,WAAY,GACtD,gBAAC,KACC,YAAa,GACb,QACE,gBAAC,WAAI,wGAGH,gBAAC,KACC,KACE,mIAEF,IAAI,aACJ,OAAO,UACR,6BAED,EAAI,kBAEN,GAGF,gBAAC,IAAI,CAAC,KAAK,iBAAkB,EAC/B,CACF,CAIR,EACA,CACE,GAAI,aACJ,OAAQ,SACR,KAAM,CAAC,CAAE,KAAM,CAAE,MAAAF,CAAM,CAAE,IACvB,gCAAG,MAAM,QAAQA,CAAK,GAAKA,EAAM,OAAS,GAAK,gBAAC,IAAQ,CAAC,MAAOA,EAAM,CAAC,EAAG,WAAY,GAAO,MAAO,EAAG,CAAG,CAE9G,EACA,CACE,GAAI,aACJ,OAAQ,GACR,KAAM,CAAC,CAAE,KAAM,CAAE,MAAAA,CAAM,CAAE,IAA0B,gCAAGA,GAAS,gBAAC,IAAG,CAAC,WAAY,EAAG,KAAM,WAAY,CAAG,CAC1G,EACA,CACE,GAAI,SACJ,OAAQ,GACR,KAAM,CAAC,CAAE,IAAK,CAAE,SAAAE,CAAS,CAAE,IAEvB,KAAW,wBAAwB,sBAAoB,eAAgBA,CAAQ,GAC7E,gBAAC,MACC,KAAK,KACL,QAAQ,cACR,QAAS,IAAM,CACbR,EAAgBQ,CAAQ,CAC1B,EACA,KAAK,QACL,aAAY,eAAeA,EAAS,OACtC,CAIR,CACF,EACA,CAACV,EAAcpD,EAAOuD,EAAanB,CAAY,CACjD,EAEA,OACE,gBAAC,IAAK,CAAC,UAAW,SAAU,IAAK,EAAG,cAAaa,EAAU,WACzD,gBAAC,IAAgB,CAAC,QAAAU,EAAkB,KAAMtD,EAAO,SAAW0C,GAAS,OAAOA,EAAK,MAAM,EAAG,UAAAG,CAAA,CAAsB,EAChH,gBAAC,IAAK,CAAC,eAAe,YACpB,gBAAC,IAAU,CAAC,WAAYC,EAAY,YAAajD,EAAM,cAAeiB,EAAY,mBAAoB,GAAM,CAC9G,EACC,EAAQkC,GACP,gBAAC,KACC,KAAM,wCAAwCA,GAAc,SAC5D,YAAY,SACZ,MAAM,SACN,UAAW,IAAM,CACfC,EAAgB,IAAI,CACtB,EACA,OAAQ,GACR,UAAW,IAAM,CACVD,IAGLlB,EAAakB,CAAY,EACzBC,EAAgB,IAAI,EACtB,EACF,CAEJ,CAEJ,C","sources":["webpack://grafana/./public/app/features/admin/api.ts","webpack://grafana/./public/app/features/admin/AdminEditOrgPage.tsx","webpack://grafana/./public/app/features/admin/Users/OrgUsersTable.tsx"],"sourcesContent":["import { UrlQueryValue } from '@grafana/data';\nimport { getBackendSrv } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/core';\nimport { accessControlQueryParam } from 'app/core/utils/accessControl';\nimport { OrgUser, AccessControlAction } from 'app/types';\n\nconst perPage = 30;\n\nexport const getOrg = async (orgId: UrlQueryValue) => {\n return await getBackendSrv().get(`/api/orgs/${orgId}`);\n};\n\nexport const getOrgUsers = async (orgId: UrlQueryValue, page: number) => {\n if (contextSrv.hasPermission(AccessControlAction.OrgUsersRead)) {\n return getBackendSrv().get(`/api/orgs/${orgId}/users/search`, accessControlQueryParam({ perpage: perPage, page }));\n }\n return { orgUsers: [] };\n};\n\nexport const getUsersRoles = async (orgId: number, users: OrgUser[]) => {\n const userIds = users.map((u) => u.userId);\n const roles = await getBackendSrv().post(`/api/access-control/users/roles/search`, { userIds, orgId });\n users.forEach((u) => {\n u.roles = roles ? roles[u.userId] || [] : [];\n });\n};\n\nexport const updateOrgUserRole = (orgUser: OrgUser, orgId: UrlQueryValue) => {\n return getBackendSrv().patch(`/api/orgs/${orgId}/users/${orgUser.userId}`, orgUser);\n};\n\nexport const removeOrgUser = (orgUser: OrgUser, orgId: UrlQueryValue) => {\n return getBackendSrv().delete(`/api/orgs/${orgId}/users/${orgUser.userId}`);\n};\n\nexport const updateOrgName = (name: string, orgId: number) => {\n return getBackendSrv().put(`/api/orgs/${orgId}`, { name });\n};\n","import React, { useState, useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useAsyncFn } from 'react-use';\n\nimport { NavModelItem } from '@grafana/data';\nimport { Field, Input, Button, Legend, Alert } from '@grafana/ui';\nimport { Page } from 'app/core/components/Page/Page';\nimport { contextSrv } from 'app/core/core';\nimport { GrafanaRouteComponentProps } from 'app/core/navigation/types';\nimport { OrgUser, AccessControlAction, OrgRole } from 'app/types';\n\nimport { OrgUsersTable } from './Users/OrgUsersTable';\nimport { getOrg, getOrgUsers, getUsersRoles, removeOrgUser, updateOrgName, updateOrgUserRole } from './api';\n\ninterface OrgNameDTO {\n orgName: string;\n}\n\ninterface Props extends GrafanaRouteComponentProps<{ id: string }> {}\n\nconst AdminEditOrgPage = ({ match }: Props) => {\n const orgId = parseInt(match.params.id, 10);\n const canWriteOrg = contextSrv.hasPermission(AccessControlAction.OrgsWrite);\n const canReadUsers = contextSrv.hasPermission(AccessControlAction.OrgUsersRead);\n\n const [users, setUsers] = useState([]);\n const [page, setPage] = useState(1);\n const [totalPages, setTotalPages] = useState(1);\n\n const [orgState, fetchOrg] = useAsyncFn(() => getOrg(orgId), []);\n const {\n handleSubmit,\n register,\n formState: { errors },\n } = useForm();\n const [, fetchOrgUsers] = useAsyncFn(async (page) => {\n const result = await getOrgUsers(orgId, page);\n\n if (contextSrv.licensedAccessControlEnabled()) {\n await getUsersRoles(orgId, result.orgUsers);\n }\n\n const totalPages = result?.perPage !== 0 ? Math.ceil(result.totalCount / result.perPage) : 0;\n setTotalPages(totalPages);\n setUsers(result.orgUsers);\n return result.orgUsers;\n }, []);\n\n useEffect(() => {\n fetchOrg();\n fetchOrgUsers(page);\n }, [fetchOrg, fetchOrgUsers, page]);\n\n const onUpdateOrgName = async ({ orgName }: OrgNameDTO) => {\n await updateOrgName(orgName, orgId);\n };\n\n const renderMissingPermissionMessage = () => (\n \n You do not have permission to see users in this organization. To update this organization, contact your server\n administrator.\n \n );\n\n const onPageChange = (toPage: number) => {\n setPage(toPage);\n };\n\n const onRemoveUser = async (orgUser: OrgUser) => {\n await removeOrgUser(orgUser, orgId);\n fetchOrgUsers(page);\n };\n\n const onRoleChange = async (role: OrgRole, orgUser: OrgUser) => {\n await updateOrgUserRole({ ...orgUser, role }, orgId);\n fetchOrgUsers(page);\n };\n\n const pageNav: NavModelItem = {\n text: orgState?.value?.name ?? '',\n icon: 'shield',\n subTitle: 'Manage settings and user roles for an organization.',\n };\n\n return (\n \n \n <>\n Edit organization\n {orgState.value && (\n
\n \n \n \n \n
\n )}\n\n
\n Organization users\n {!canReadUsers && renderMissingPermissionMessage()}\n {canReadUsers && !!users.length && (\n \n )}\n
\n \n
\n
\n );\n};\n\nexport default AdminEditOrgPage;\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { OrgRole } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\nimport {\n Avatar,\n Box,\n Button,\n CellProps,\n Column,\n ConfirmModal,\n FetchDataFunc,\n Icon,\n InteractiveTable,\n Pagination,\n Stack,\n Tag,\n Text,\n Tooltip,\n} from '@grafana/ui';\nimport { UserRolePicker } from 'app/core/components/RolePicker/UserRolePicker';\nimport { fetchRoleOptions } from 'app/core/components/RolePicker/api';\nimport { TagBadge } from 'app/core/components/TagFilter/TagBadge';\nimport { contextSrv } from 'app/core/core';\nimport { AccessControlAction, OrgUser, Role } from 'app/types';\n\nimport { OrgRolePicker } from '../OrgRolePicker';\n\ntype Cell = CellProps;\n\nconst disabledRoleMessage = `This user's role is not editable because it is synchronized from your auth provider.\nRefer to the Grafana authentication docs for details.`;\n\nconst getBasicRoleDisabled = (user: OrgUser) => {\n const isUserSynced = user?.isExternallySynced;\n return !contextSrv.hasPermissionInMetadata(AccessControlAction.OrgUsersWrite, user) || isUserSynced;\n};\n\nconst selectors = e2eSelectors.pages.UserListPage.UsersListPage;\n\nexport interface Props {\n users: OrgUser[];\n orgId?: number;\n onRoleChange: (role: OrgRole, user: OrgUser) => void;\n onRemoveUser: (user: OrgUser) => void;\n fetchData?: FetchDataFunc;\n changePage: (page: number) => void;\n page: number;\n totalPages: number;\n rolesLoading?: boolean;\n}\n\nexport const OrgUsersTable = ({\n users,\n orgId,\n onRoleChange,\n onRemoveUser,\n fetchData,\n changePage,\n page,\n totalPages,\n rolesLoading,\n}: Props) => {\n const [userToRemove, setUserToRemove] = useState(null);\n const [roleOptions, setRoleOptions] = useState([]);\n\n useEffect(() => {\n async function fetchOptions() {\n try {\n if (contextSrv.hasPermission(AccessControlAction.ActionRolesList)) {\n let options = await fetchRoleOptions(orgId);\n setRoleOptions(options);\n }\n } catch (e) {\n console.error('Error loading options');\n }\n }\n if (contextSrv.licensedAccessControlEnabled()) {\n fetchOptions();\n }\n }, [orgId]);\n\n const columns: Array> = useMemo(\n () => [\n {\n id: 'avatarUrl',\n header: '',\n cell: ({ cell: { value } }: Cell<'avatarUrl'>) => value && ,\n },\n {\n id: 'login',\n header: 'Login',\n cell: ({ cell: { value } }: Cell<'login'>) =>
{value}
,\n sortType: 'string',\n },\n {\n id: 'email',\n header: 'Email',\n cell: ({ cell: { value } }: Cell<'email'>) => value,\n sortType: 'string',\n },\n {\n id: 'name',\n header: 'Name',\n cell: ({ cell: { value } }: Cell<'name'>) => value,\n sortType: 'string',\n },\n {\n id: 'lastSeenAtAge',\n header: 'Last active',\n cell: ({ cell: { value } }: Cell<'lastSeenAtAge'>) => {\n return <>{value && <>{value === '10 years' ? Never : value}};\n },\n sortType: (a, b) => new Date(a.original.lastSeenAt).getTime() - new Date(b.original.lastSeenAt).getTime(),\n },\n {\n id: 'role',\n header: 'Role',\n cell: ({ cell: { value }, row: { original } }: Cell<'role'>) => {\n const basicRoleDisabled = getBasicRoleDisabled(original);\n return contextSrv.licensedAccessControlEnabled() ? (\n onRoleChange(newRole, original)}\n basicRoleDisabled={basicRoleDisabled}\n basicRoleDisabledMessage={disabledRoleMessage}\n width={40}\n />\n ) : (\n onRoleChange(newRole, original)}\n />\n );\n },\n },\n {\n id: 'info',\n header: '',\n cell: ({ row: { original } }: Cell) => {\n const basicRoleDisabled = getBasicRoleDisabled(original);\n return (\n basicRoleDisabled && (\n \n \n This user's role is not editable because it is synchronized from your auth provider. Refer to\n the \n \n Grafana authentication docs\n \n  for details.\n \n }\n >\n \n \n \n )\n );\n },\n },\n {\n id: 'authLabels',\n header: 'Origin',\n cell: ({ cell: { value } }: Cell<'authLabels'>) => (\n <>{Array.isArray(value) && value.length > 0 && }\n ),\n },\n {\n id: 'isDisabled',\n header: '',\n cell: ({ cell: { value } }: Cell<'isDisabled'>) => <>{value && },\n },\n {\n id: 'delete',\n header: '',\n cell: ({ row: { original } }: Cell) => {\n return (\n contextSrv.hasPermissionInMetadata(AccessControlAction.OrgUsersRemove, original) && (\n {\n setUserToRemove(original);\n }}\n icon=\"times\"\n aria-label={`Delete user ${original.name}`}\n />\n )\n );\n },\n },\n ],\n [rolesLoading, orgId, roleOptions, onRoleChange]\n );\n\n return (\n \n String(user.userId)} fetchData={fetchData} />\n \n \n \n {Boolean(userToRemove) && (\n {\n setUserToRemove(null);\n }}\n isOpen={true}\n onConfirm={() => {\n if (!userToRemove) {\n return;\n }\n onRemoveUser(userToRemove);\n setUserToRemove(null);\n }}\n />\n )}\n \n );\n};\n"],"names":["perPage","getOrg","orgId","getOrgUsers","page","accessControl","getUsersRoles","users","userIds","u","roles","updateOrgUserRole","orgUser","removeOrgUser","updateOrgName","name","match","canWriteOrg","canReadUsers","setUsers","setPage","totalPages","setTotalPages","orgState","fetchOrg","useAsyncFn","handleSubmit","register","errors","fetchOrgUsers","result","onUpdateOrgName","orgName","renderMissingPermissionMessage","Alert","onPageChange","toPage","onRemoveUser","onRoleChange","role","pageNav","Page","Legend","Field","Input","Button","OrgUsersTable","disabledRoleMessage","getBasicRoleDisabled","user","isUserSynced","selectors","fetchData","changePage","rolesLoading","userToRemove","setUserToRemove","roleOptions","setRoleOptions","fetchOptions","options","columns","value","b","original","basicRoleDisabled","newRole"],"sourceRoot":""}