{"version":3,"file":"OrgSettingsRoleAssignmentsSection.mjs","sources":["../../../../../../../../web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.tsx"],"sourcesContent":["import AddIcon from '@mui/icons-material/AddRounded';\nimport { Paper, TableContainer } from '@mui/material';\nimport { RBACPolicyRole } from '@stytch/core';\nimport { Organization, SCIMConnection } from '@stytch/core/public';\nimport React, { useMemo, useState } from 'react';\n\nimport { uniqueValuesSplitOnSpaces } from '../../utils/uniqueValuesSplitOnSpaces';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { Button } from '../components/Button';\nimport { Divider } from '../components/Divider';\nimport { FlexBox } from '../components/FlexBox';\nimport { Input } from '../components/Input';\nimport { Modal, useModalState } from '../components/Modal';\nimport { PageLoadingIndicator } from '../components/PageLoadingIndicator';\nimport { Select } from '../components/Select';\nimport { SettingsContainer } from '../components/SettingsContainer';\nimport { SettingsSection } from '../components/SettingsSection';\nimport { Table } from '../components/Table';\nimport { Tag } from '../components/Tag';\nimport { Typography } from '../components/Typography';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { ExternalTaggedConnection, SAMLTaggedConnection } from '../sso/TaggedConnection';\nimport { arraysHaveSameContents } from '../utils/arraysHaveSameContents';\nimport { FormSectionBody } from '../utils/FormSectionBody';\nimport { getSsoConnectionRoleAssignments, getSsoGroupRoleAssignments } from '../utils/getSsoRoleAssignments';\nimport { useAdminPortalConfig } from '../utils/useAdminPortalConfig';\nimport { useFormState } from '../utils/useFormState';\nimport { useMutateOrganization } from '../utils/useMutateOrganization';\nimport { useMutateScimConnectionRoleAssignments } from '../utils/useMutateScimConnection';\nimport { useMutateSsoConnection } from '../utils/useMutateSsoConnection';\nimport { useRbac } from '../utils/useRbac';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useRoles } from '../utils/useRoles';\nimport { useRolesById, useRoleSortFn } from '../utils/useRoleSortFn';\nimport { useScimConnection } from '../utils/useScimConnection';\nimport { useScimConnectionGroups } from '../utils/useScimConnectionGroups';\nimport { useSsoConnections } from '../utils/useSsoConnections';\nimport { useOrgSettingsRouterController } from './AdminPortalOrgRouter';\n\ntype SCIMGroupRoleAssignments = SCIMConnection['scim_group_implicit_role_assignments'];\n\ninterface RoleAssignmentsFormState {\n  idMap: IdToRoleAssignments;\n}\n\ninterface OrgSettingsRoleAssignmentsBodyProps extends FormSectionBody<RoleAssignmentsFormState> {\n  editing: boolean;\n  ssoConnections: (SAMLTaggedConnection | ExternalTaggedConnection)[];\n  roles: RBACPolicyRole[];\n  isSsoEnabled: boolean;\n  isScimEnabled: boolean;\n  canViewCustomOrgRoles: boolean;\n  allScimGroupIdToGroupName: Record<string, string>;\n  scimConnection?: SCIMConnection;\n}\n\ninterface RoleTableProps\n  extends Omit<\n    OrgSettingsRoleAssignmentsBodyProps,\n    | 'ssoConnections'\n    | 'roles'\n    | 'scimGroupAssignments'\n    | 'allScimGroupIdToGroupName'\n    | 'scimConnection'\n    | 'canViewCustomOrgRoles'\n  > {\n  role: RBACPolicyRole;\n}\n\nconst roleAssignmentsItemRenderers = (\n  idMap: IdToRoleAssignments,\n  rolesById: Record<string, { displayName: string }> | undefined,\n) => [\n  {\n    title: 'Role',\n    getValue: (role: RBACPolicyRole) => {\n      return (\n        <FlexBox flexDirection=\"row\" alignItems=\"center\">\n          <Tag>{rolesById?.[role.role_id]?.displayName ?? role.role_id}</Tag>\n          <Typography variant=\"body2\">{`(${String(idMap[role.role_id]?.length ?? 0)})`}</Typography>\n        </FlexBox>\n      );\n    },\n  },\n];\nconst roleAssigmnentsKeyExtractor = (role: RBACPolicyRole): string => role.role_id;\n\ntype IdToRoleAssignments = Record<string, RoleAssignment[]>;\ntype Source = 'SSO' | 'Email' | 'SCIM';\n\ntype SSORoleAssignment = {\n  source: 'SSO';\n  id: string;\n  displayName: string;\n  group: string;\n};\ntype EmailRoleAssignment = {\n  source: 'Email';\n  displayName: string;\n};\ntype SCIMRoleAssignment = {\n  source: 'SCIM';\n  displayName: string;\n  groupId: string;\n  groupName: string;\n};\ntype RoleAssignment = SSORoleAssignment | EmailRoleAssignment | SCIMRoleAssignment;\n\nconst roleItemRendererer: TableItemRenderer<RoleAssignment>[] = [\n  {\n    title: 'Source',\n    getValue: (value) => {\n      return <Typography variant=\"body2\">{value.source}</Typography>;\n    },\n  },\n  {\n    title: 'Source Name',\n    getValue: (value) => {\n      return <Typography variant=\"body2\">{value.displayName}</Typography>;\n    },\n  },\n  {\n    title: 'Group',\n    getValue: (value) => {\n      return (\n        <Typography variant=\"body2\">\n          {value.source === 'SSO' ? value.group : value.source === 'SCIM' ? value.groupName : ''}\n        </Typography>\n      );\n    },\n  },\n];\nconst roleKeyExtractor = (role: RoleAssignment): string => role.displayName;\n\nconst useMutateRoleAssignments = () => {\n  const { mutate } = useMutateOrganization();\n\n  const setOrgEmailAssignments = (emails: Organization['rbac_email_implicit_role_assignments']) => {\n    return mutate(\n      {\n        rbac_email_implicit_role_assignments: emails,\n      },\n      {\n        errorMessage: 'Failed to update email role assignments.',\n      },\n    );\n  };\n\n  return { setOrgEmailAssignments };\n};\nconst RoleTable = ({\n  localState,\n  remoteState,\n  editing,\n  setLocalState,\n  role,\n  isSsoEnabled,\n  isScimEnabled,\n}: RoleTableProps) => {\n  const roleId = role.role_id;\n  const items = (editing ? localState : remoteState).idMap[roleId] ?? [];\n\n  return (\n    <TableContainer component={Paper} variant={'outlined'}>\n      <Table\n        itemRenderer={roleItemRendererer}\n        items={items}\n        rowKeyExtractor={roleKeyExtractor}\n        disableBottomBorder={true}\n        titleVariant=\"caption\"\n        getItemActionProps={\n          editing\n            ? (roleAssignment) => ({\n                warningAction:\n                  roleAssignment.source === 'Email' ||\n                  (roleAssignment.source === 'SSO' && isSsoEnabled) ||\n                  (roleAssignment.source === 'SCIM' && isScimEnabled)\n                    ? {\n                        text: 'Delete',\n                        onClick: () => {\n                          setLocalState((state) => {\n                            const assignments = state.idMap[roleId].filter((item) => item !== roleAssignment);\n                            return {\n                              ...state,\n                              idMap: {\n                                ...state.idMap,\n                                [roleId]: assignments,\n                              },\n                            };\n                          });\n                        },\n                      }\n                    : undefined,\n              })\n            : undefined\n        }\n      />\n    </TableContainer>\n  );\n};\n\ntype NewSSOConnection = {\n  id: string;\n  group: string;\n};\nconst filterRoleAssignmentsBy = (arr: RoleAssignment[], { source }: { source: Source }) => {\n  return arr.slice().filter((val) => val.source === source);\n};\n\ninterface SSORoleAssignmentInfo {\n  connectionRoleAssignments: {\n    role_id: string;\n  }[];\n  groupRoleAssignments: {\n    role_id: string;\n    group: string;\n  }[];\n}\n\nconst OrgSettingsRoleAssignmentsBody = ({\n  editing,\n  ssoConnections,\n  roles,\n  localState,\n  remoteState,\n  setLocalState,\n  isSsoEnabled,\n  isScimEnabled,\n  canViewCustomOrgRoles,\n  allScimGroupIdToGroupName,\n  scimConnection,\n}: OrgSettingsRoleAssignmentsBodyProps) => {\n  const idMap = (editing ? localState : remoteState).idMap;\n  const rolesWithAssignments = roles.filter((role) => idMap[role.role_id].length > 0);\n  const rolesById = useRolesById();\n  const itemRenderers = roleAssignmentsItemRenderers(idMap, rolesById);\n\n  const [selectedRole, setSelectedRole] = useState<string | null>(null);\n  const [selectedSource, setSelectedSource] = useState<Source | null>(null);\n\n  const [emailDomain, setEmailDomain] = useState('');\n  const [ssoRoleAssignments, setSsoRoleAssignments] = useState<NewSSOConnection[]>([\n    {\n      id: '',\n      group: '',\n    },\n  ]);\n  const [scimGroupIds, setScimGroupIds] = useState<string[]>([]);\n\n  const [roleOpenIds, setRoleOpenIds] = useState<Set<string>>(new Set());\n\n  const idToHasGroupAttributeMapping = ssoConnections.reduce<Record<string, boolean>>((acc, connection) => {\n    acc[connection.connection_id] = connection.connectionType !== 'saml' || !!connection.attribute_mapping.groups;\n    return acc;\n  }, {});\n\n  const sourceItems = new Set<Source>(['Email']);\n  if (isSsoEnabled && ssoConnections.length > 0) {\n    sourceItems.add('SSO');\n  }\n  if (isScimEnabled && scimConnection && Object.keys(allScimGroupIdToGroupName).length > 0) {\n    sourceItems.add('SCIM');\n  }\n\n  const sourceSelectItems = Array.from(sourceItems).map((source) => ({\n    label: source,\n    value: source,\n  }));\n\n  const addRoleAssignmentModalProps = useModalState(() => {\n    if (!selectedSource) return;\n\n    const roleId = selectedRole!;\n    setRoleOpenIds((prev) => new Set([...prev].concat(roleId)));\n    setLocalState((state) => {\n      const remoteRoleAssignments = [...state.idMap[roleId]];\n      const mergedRoleAssignments: RoleAssignment[] = [...remoteRoleAssignments];\n\n      const filteredRoleAssignments = filterRoleAssignmentsBy(remoteRoleAssignments, { source: selectedSource });\n      if (selectedSource === 'Email') {\n        const domains = new Set<string>();\n\n        (filteredRoleAssignments as EmailRoleAssignment[]).forEach((roleAssignment) => {\n          domains.add(roleAssignment.displayName);\n        });\n        uniqueValuesSplitOnSpaces({ input: emailDomain }).forEach((domain) => {\n          if (!domains.has(domain)) {\n            domains.add(domain);\n            mergedRoleAssignments.push({\n              source: selectedSource,\n              displayName: domain,\n            });\n          }\n        });\n      } else if (selectedSource === 'SSO') {\n        ssoRoleAssignments.forEach((ssoConnection) => {\n          const connectionId = ssoConnection.id;\n          if (connectionId.length !== 0) {\n            const group = ssoConnection.group.trim();\n\n            if (\n              !mergedRoleAssignments.some(\n                (roleAssignment) =>\n                  roleAssignment.source === 'SSO' &&\n                  roleAssignment.id === connectionId &&\n                  roleAssignment.group === group,\n              )\n            ) {\n              mergedRoleAssignments.push({\n                source: selectedSource,\n                displayName: ssoConnections.find((val) => val.connection_id === connectionId)?.display_name ?? '',\n                id: ssoConnection.id,\n                group,\n              });\n            }\n          }\n        });\n      } else if (selectedSource === 'SCIM') {\n        const currentGroupIds: Set<string> = new Set<string>();\n\n        (filteredRoleAssignments as SCIMRoleAssignment[]).forEach((roleAssignment) => {\n          currentGroupIds.add(roleAssignment.groupId);\n        });\n\n        scimGroupIds.forEach((id) => {\n          if (!currentGroupIds.has(id)) {\n            mergedRoleAssignments.push({\n              source: selectedSource,\n              displayName: scimConnection?.display_name ?? '',\n              groupId: id,\n              groupName: allScimGroupIdToGroupName[id],\n            });\n          }\n        });\n      }\n      if (mergedRoleAssignments.length !== remoteRoleAssignments.length) {\n        return {\n          ...state,\n          idMap: {\n            ...state.idMap,\n            [roleId]: mergedRoleAssignments,\n          },\n        };\n      }\n      return state;\n    });\n  });\n\n  const showInputContent = !!selectedRole && !!selectedSource;\n  const disableConfirm =\n    !showInputContent ||\n    (selectedSource === 'Email' && emailDomain.length === 0) ||\n    (selectedSource === 'SSO' && ssoRoleAssignments.every((connection) => !connection.id));\n\n  const roleAutocompleteProps = useRoleAutocomplete({ includeOrgRoles: canViewCustomOrgRoles });\n  const roleSelectItems = roleAutocompleteProps.selectItems.map((roleId) => ({\n    label: roleAutocompleteProps.getOptionLabel(roleId),\n    value: roleId,\n    subtext: roleAutocompleteProps.getOptionDescription(roleId),\n  }));\n\n  const ssoGroupSelectItems = useMemo(\n    () =>\n      ssoConnections.map(({ connection_id: id, display_name: displayName }) => ({\n        label: displayName,\n        value: id,\n      })),\n    [ssoConnections],\n  );\n\n  const scimGroupSelectItems = useMemo(() => Object.keys(allScimGroupIdToGroupName), [allScimGroupIdToGroupName]);\n\n  const sourceToInputContentMap: Record<Source, JSX.Element> = {\n    Email: (\n      <>\n        <SettingsSection title=\"Email Domain\">\n          <Typography variant=\"body2\">\n            Separate domains by a single space to assign to multiple email domains.\n          </Typography>\n          <Input label=\"Domain\" fullWidth value={emailDomain} onChange={setEmailDomain} />\n        </SettingsSection>\n      </>\n    ),\n    SSO: (\n      <>\n        <SettingsSection title=\"SSO\">\n          <Typography variant=\"body2\">\n            Enter a Group name to assign a Role at the Group level, or leave blank to assign at the SSO connection\n            level. If assigning group Roles to an external connection, ensure a &quot;groups&quot; key exists in the\n            external connection Attribute Mapping.\n          </Typography>\n\n          {ssoRoleAssignments.map(({ id, group }, index) => {\n            const isValidConnection = !!id;\n            const connectionHasGroupMapping = !!idToHasGroupAttributeMapping[id];\n            const isValidConnectionWithGroupMapping = isValidConnection && connectionHasGroupMapping;\n\n            const disableGroupInput = !isValidConnectionWithGroupMapping;\n            const groupInputPlaceholder =\n              isValidConnection && !connectionHasGroupMapping ? 'Add a \"groups\" key first' : 'Enter or leave blank';\n            const groupInputCaption =\n              isValidConnection && !connectionHasGroupMapping\n                ? 'Add a \"groups\" key in the SSO Attribute Mapping first to assign group roles.'\n                : undefined;\n            return (\n              <FlexBox key={index} flexDirection=\"row\" gap={2}>\n                <Select\n                  label=\"Connection Display Name\"\n                  width={250}\n                  placeholder=\"Select\"\n                  selectItems={selectedRole ? ssoGroupSelectItems : []}\n                  value={id}\n                  onChange={(val) => {\n                    setSsoRoleAssignments((connections) => {\n                      return connections.map((connection, currentIndex) => {\n                        if (currentIndex === index) {\n                          return {\n                            ...connection,\n                            id: val,\n                          };\n                        }\n                        return connection;\n                      });\n                    });\n                  }}\n                />\n                <Input\n                  label=\"Group name\"\n                  value={group}\n                  disabled={disableGroupInput}\n                  placeholder={groupInputPlaceholder}\n                  caption={groupInputCaption}\n                  onChange={(val) => {\n                    setSsoRoleAssignments((connections) => {\n                      return connections.map((connection, currentIndex) => {\n                        if (currentIndex === index) {\n                          return {\n                            ...connection,\n                            group: val,\n                            id: id,\n                            hasGroupAttributeMapping: idToHasGroupAttributeMapping[id],\n                          };\n                        }\n                        return connection;\n                      });\n                    });\n                  }}\n                />\n              </FlexBox>\n            );\n          })}\n          <Button\n            variant=\"text\"\n            startIcon={<AddIcon />}\n            compact\n            onClick={() => {\n              setSsoRoleAssignments((connections) => {\n                return [\n                  ...connections,\n                  {\n                    id: '',\n                    group: '',\n                  },\n                ];\n              });\n            }}\n          >\n            Add SSO Role assignment\n          </Button>\n        </SettingsSection>\n      </>\n    ),\n    SCIM: (\n      <SettingsSection title=\"SCIM Groups\">\n        <Autocomplete\n          label=\"Group name\"\n          selectItems={scimGroupSelectItems}\n          value={scimGroupIds}\n          getOptionLabel={(value) => allScimGroupIdToGroupName[value]}\n          onChange={(value) => {\n            setScimGroupIds(() => value);\n          }}\n        />\n      </SettingsSection>\n    ),\n  };\n  return (\n    <FlexBox flexDirection=\"column\" gap={1}>\n      <Modal\n        {...addRoleAssignmentModalProps}\n        title=\"Add Role assignment\"\n        confirmButtonText=\"Save\"\n        disableConfirm={disableConfirm}\n        close={() => {\n          addRoleAssignmentModalProps.close();\n          setSelectedRole(null);\n          setSelectedSource(null);\n          setEmailDomain('');\n          setSsoRoleAssignments([\n            {\n              id: '',\n              group: '',\n            },\n          ]);\n        }}\n      >\n        <FlexBox flexDirection=\"column\" gap={2}>\n          <Select\n            label=\"Select Role\"\n            selectItems={roleSelectItems}\n            value={selectedRole}\n            onChange={(val) => {\n              setSelectedRole(val);\n            }}\n            placeholder=\"Select Role\"\n          />\n          <Select\n            label=\"Select Source\"\n            selectItems={sourceSelectItems}\n            value={selectedSource}\n            placeholder=\"Select Source\"\n            onChange={(val) => {\n              setSelectedSource(val);\n            }}\n          />\n          {showInputContent && (\n            <>\n              <Divider />\n              {sourceToInputContentMap[selectedSource!]}\n            </>\n          )}\n        </FlexBox>\n      </Modal>\n      <Typography variant=\"body2\" color=\"secondary\">\n        {\n          \"Configure automatic granting and revoking of roles based on the member's email domain, SCIM Group membership, or SSO Connection.\"\n        }\n      </Typography>\n      {editing && (\n        <FlexBox justifyContent=\"flex-start\">\n          <Button variant=\"text\" startIcon={<AddIcon />} compact={true} onClick={addRoleAssignmentModalProps.open}>\n            Add Role assignment\n          </Button>\n        </FlexBox>\n      )}\n      {rolesWithAssignments.length > 0 ? (\n        <Table\n          titleVariant=\"caption\"\n          itemRenderer={itemRenderers}\n          items={rolesWithAssignments}\n          rowKeyExtractor={roleAssigmnentsKeyExtractor}\n          openIds={roleOpenIds}\n          onOpenChange={({ id, open }) => {\n            setRoleOpenIds((prev) => {\n              const newRoleOpenIds = new Set(prev);\n              if (open) {\n                newRoleOpenIds.add(id);\n              } else {\n                newRoleOpenIds.delete(id);\n              }\n              return newRoleOpenIds;\n            });\n          }}\n          ExpandedContent={({ data: role }) => {\n            return (\n              <RoleTable\n                role={role}\n                editing={editing}\n                setLocalState={setLocalState}\n                localState={localState}\n                remoteState={remoteState}\n                isSsoEnabled={isSsoEnabled}\n                isScimEnabled={isScimEnabled}\n              />\n            );\n          }}\n        />\n      ) : (\n        <Typography variant=\"body2\">No role assignments.</Typography>\n      )}\n    </FlexBox>\n  );\n};\nconst sortByKeyAndValue = <T extends Record<string, string>>(array: T[], sortKey: string) => {\n  const sortedByKeys = [...array].sort((a, b) => a[sortKey].localeCompare(b[sortKey]));\n\n  // Then, sort the keys and values within each object\n  return sortedByKeys.map((obj) => {\n    return Object.fromEntries(\n      Object.entries(obj).sort(([keyA, valA], [keyB, valB]) => {\n        return keyA.localeCompare(keyB) || valA.localeCompare(valB);\n      }),\n    );\n  });\n};\ntype RbacEmailRoleAssignment = { role_id: string; domain: string };\n\nexport const OrgSettingsRoleAssignmentsSection = ({ orgInfo }: { orgInfo: Organization }) => {\n  const { data: adminPortalConfig } = useAdminPortalConfig({ shouldFetch: true });\n  const { data: canSetRoles } = useRbac('stytch.organization', 'update.settings.implicit-roles');\n  const { data: canGetSsoPerm } = useRbac('stytch.sso', 'get');\n  const { data: canGetScimPerm } = useRbac('stytch.scim', 'get');\n  const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n  const isSsoEnabled = adminPortalConfig?.sso_config.sso_enabled ?? false;\n  const isScimEnabled = adminPortalConfig?.scim_config.scim_enabled ?? false;\n\n  const canGetSso = (isSsoEnabled && canGetSsoPerm) ?? false;\n  const canGetScim = (isScimEnabled && canGetScimPerm) ?? false;\n\n  const { data: ssoConnections, isLoading: isLoadingSso } = useSsoConnections({\n    shouldFetch: canGetSso && !!canSetRoles,\n  });\n  const { data: scimConnection, isLoading: isLoadingScim } = useScimConnection({\n    shouldFetch: canGetScim && !!canSetRoles,\n  });\n  const { data: scimConnectionGroups, isLoading: isLoadingScimGroups } = useScimConnectionGroups({\n    shouldFetch: canGetScim && !!canSetRoles,\n  });\n\n  const roles = useRoles(canGetOrgCustomRoles);\n  const sortRoles = useRoleSortFn();\n  const sortedRoles = useMemo(() => sortRoles(roles ?? []), [roles, sortRoles]);\n\n  const rbacEmails = orgInfo.rbac_email_implicit_role_assignments;\n  const taggedConnections: (SAMLTaggedConnection | ExternalTaggedConnection)[] = useMemo(\n    () => [\n      ...(ssoConnections?.saml_connections.map((c) => ({ ...c, connectionType: 'saml' as const })) ?? []),\n      ...(ssoConnections?.external_connections.map((c) => ({ ...c, connectionType: 'external' as const })) ?? []),\n    ],\n    [ssoConnections?.external_connections, ssoConnections?.saml_connections],\n  );\n  const taggedConnectionsById = useMemo(\n    () =>\n      taggedConnections.reduce<Record<string, SAMLTaggedConnection | ExternalTaggedConnection>>((acc, val) => {\n        acc[val.connection_id] = val;\n        return acc;\n      }, {}),\n    [taggedConnections],\n  );\n  const allScimGroups = scimConnectionGroups?.scim_groups ?? [];\n  const allScimGroupIdToGroupName = allScimGroups.reduce(\n    (acc, val) => {\n      acc[val.group_id] = val.group_name;\n      return acc;\n    },\n    {} as Record<string, string>,\n  );\n  const { setOrgEmailAssignments } = useMutateRoleAssignments();\n  const { mutate: mutateSamlConnection } = useMutateSsoConnection('saml');\n  const { mutate: mutateExternalConnection } = useMutateSsoConnection('external');\n  const { mutate: mutateScimConnection } = useMutateScimConnectionRoleAssignments();\n  const idMap = useMemo(() => {\n    const idToRoleAssignments: IdToRoleAssignments = {};\n    sortedRoles.forEach((role) => {\n      idToRoleAssignments[role.role_id] = [];\n    });\n\n    taggedConnections.forEach((connection) => {\n      const connectionRoleAssignments = getSsoConnectionRoleAssignments(connection);\n      const groupRoleAssignments = getSsoGroupRoleAssignments(connection);\n\n      connectionRoleAssignments.forEach((implicitRole) => {\n        const role = implicitRole.role_id;\n        if (!idToRoleAssignments[role]) {\n          idToRoleAssignments[role] = [];\n        }\n        idToRoleAssignments[role].push({\n          source: 'SSO',\n          displayName: connection.display_name,\n          id: connection.connection_id,\n          group: '',\n        });\n      });\n\n      groupRoleAssignments.forEach((implicitRole) => {\n        const role = implicitRole.role_id;\n        if (!idToRoleAssignments[role]) {\n          idToRoleAssignments[role] = [];\n        }\n\n        idToRoleAssignments[role].push({\n          source: 'SSO',\n          displayName: connection.display_name,\n          id: connection.connection_id,\n          group: implicitRole.group,\n        });\n      });\n    });\n\n    rbacEmails?.forEach((rbacEmail) => {\n      const role = rbacEmail.role_id;\n      if (!idToRoleAssignments[role]) {\n        idToRoleAssignments[role] = [];\n      }\n      idToRoleAssignments[role].push({\n        source: 'Email',\n        displayName: rbacEmail.domain,\n      });\n    });\n\n    scimConnection?.scim_group_implicit_role_assignments.forEach((implicitRole) => {\n      const role = implicitRole.role_id;\n      if (!idToRoleAssignments[role]) {\n        idToRoleAssignments[role] = [];\n      }\n      idToRoleAssignments[role].push({\n        source: 'SCIM',\n        displayName: scimConnection.display_name,\n        groupId: implicitRole.group_id,\n        groupName: allScimGroupIdToGroupName[implicitRole.group_id],\n      });\n    });\n\n    return idToRoleAssignments;\n  }, [\n    allScimGroupIdToGroupName,\n    taggedConnections,\n    rbacEmails,\n    scimConnection?.display_name,\n    scimConnection?.scim_group_implicit_role_assignments,\n    sortedRoles,\n  ]);\n\n  const remoteState: RoleAssignmentsFormState = {\n    idMap: idMap,\n  };\n  const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n  const { useBlockNavigation } = useOrgSettingsRouterController();\n\n  const { hasUpdatedEmails, updatedEmailRoleAssignments } = useMemo(() => {\n    const remoteEmails = orgInfo.rbac_email_implicit_role_assignments ?? [];\n    const localEmails = Object.entries(localState.idMap).reduce<RbacEmailRoleAssignment[]>(\n      (acc, [roleId, roleAssignments]) => {\n        roleAssignments.forEach((roleAssignment) => {\n          if (roleAssignment.source === 'Email') {\n            acc.push({\n              role_id: roleId,\n              domain: roleAssignment.displayName,\n            });\n          }\n        });\n        return acc;\n      },\n      [],\n    );\n\n    const sortedLocalEmails = sortByKeyAndValue(localEmails, 'domain');\n    const sortedRemoteEmails = sortByKeyAndValue(remoteEmails ?? [], 'domain');\n\n    const isSame = arraysHaveSameContents(sortedLocalEmails, sortedRemoteEmails);\n    const updatedEmailRoleAssignments = isSame ? [] : sortedLocalEmails;\n\n    return {\n      hasUpdatedEmails: !isSame,\n      updatedEmailRoleAssignments: updatedEmailRoleAssignments as RbacEmailRoleAssignment[],\n    };\n  }, [localState.idMap, orgInfo.rbac_email_implicit_role_assignments]);\n\n  const { hasUpdatedSso, updatedSsoRoleAssignments } = useMemo(() => {\n    const remoteAssignments: Record<string, SSORoleAssignmentInfo> = {};\n    const localAssignments: Record<string, SSORoleAssignmentInfo> = {};\n\n    taggedConnections?.forEach((connection) => {\n      remoteAssignments[connection.connection_id] = {\n        connectionRoleAssignments: getSsoConnectionRoleAssignments(connection),\n        groupRoleAssignments: getSsoGroupRoleAssignments(connection),\n      };\n      localAssignments[connection.connection_id] = { connectionRoleAssignments: [], groupRoleAssignments: [] };\n    });\n\n    // Mutate the local SAML connections with role assignments from the local state\n    Object.entries(localState.idMap).forEach(([roleId, roleAssignments]) => {\n      roleAssignments.forEach((roleAssignment) => {\n        if (roleAssignment.source === 'SSO') {\n          const connectionId = roleAssignment.id;\n\n          if (roleAssignment.group) {\n            localAssignments[connectionId].groupRoleAssignments.push({\n              role_id: roleId,\n              group: roleAssignment.group,\n            });\n          } else {\n            localAssignments[connectionId].connectionRoleAssignments.push({\n              role_id: roleId,\n            });\n          }\n        }\n      });\n    });\n\n    const updatedSsoRoleAssignments: Record<string, SSORoleAssignmentInfo> = {};\n\n    // Compare the local and remote SSO connections to determine which connections need to be updated\n    Object.entries(localAssignments).map(([connectionId, localConnection]) => {\n      const remoteConnection = remoteAssignments[connectionId];\n\n      const localImplicitRoleAssignments = localConnection.connectionRoleAssignments.map((val) => val.role_id);\n      const remoteImplicitRoleAssignments = remoteConnection.connectionRoleAssignments.map((val) => val.role_id);\n\n      const localGroupImplicitRoleAssignments = sortByKeyAndValue(localConnection.groupRoleAssignments, 'group');\n      const remoteGroupImplicitRoleAssignments = sortByKeyAndValue(remoteConnection.groupRoleAssignments, 'group');\n\n      if (\n        !arraysHaveSameContents(localImplicitRoleAssignments, remoteImplicitRoleAssignments) ||\n        !arraysHaveSameContents(localGroupImplicitRoleAssignments, remoteGroupImplicitRoleAssignments)\n      ) {\n        updatedSsoRoleAssignments[connectionId] = localConnection;\n      }\n    });\n\n    return {\n      hasUpdatedSso: Object.keys(updatedSsoRoleAssignments).length > 0,\n      updatedSsoRoleAssignments: updatedSsoRoleAssignments,\n    };\n  }, [localState.idMap, taggedConnections]);\n\n  const { hasUpdatedScimGroups, updatedScimRoleAssignments } = useMemo(() => {\n    const remoteScimGroups: SCIMGroupRoleAssignments = scimConnection?.scim_group_implicit_role_assignments ?? [];\n    const localScimGroups: SCIMGroupRoleAssignments = Object.entries(localState.idMap).reduce(\n      (acc, [roleId, roleAssignments]) => {\n        roleAssignments.forEach((roleAssignment) => {\n          if (roleAssignment.source === 'SCIM') {\n            acc.push({\n              role_id: roleId,\n              group_id: roleAssignment.groupId,\n            });\n          }\n        });\n        return acc;\n      },\n      [] as SCIMGroupRoleAssignments,\n    );\n\n    const isSame = arraysHaveSameContents(localScimGroups, remoteScimGroups);\n    const updatedScimRoleAssignments = isSame ? [] : localScimGroups;\n\n    return {\n      hasUpdatedScimGroups: !isSame,\n      updatedScimRoleAssignments: updatedScimRoleAssignments,\n    };\n  }, [localState.idMap, scimConnection]);\n\n  const handleSave = async () => {\n    if (hasUpdatedEmails) {\n      await setOrgEmailAssignments(updatedEmailRoleAssignments);\n    }\n\n    await Promise.all(\n      Object.entries(updatedSsoRoleAssignments).map(async ([connectionId, ssoRoleAssignment]) => {\n        const connection = taggedConnectionsById[connectionId];\n        if (!connection) {\n          return;\n        }\n\n        if (connection.connectionType === 'saml') {\n          await mutateSamlConnection({\n            connection_id: connectionId,\n            saml_connection_implicit_role_assignments: ssoRoleAssignment.connectionRoleAssignments,\n            saml_group_implicit_role_assignments: ssoRoleAssignment.groupRoleAssignments,\n          });\n        } else {\n          await mutateExternalConnection({\n            connection_id: connectionId,\n            external_connection_implicit_role_assignments: ssoRoleAssignment.connectionRoleAssignments,\n            external_group_implicit_role_assignments: ssoRoleAssignment.groupRoleAssignments,\n          });\n        }\n      }),\n    );\n\n    if (scimConnection && hasUpdatedScimGroups) {\n      await mutateScimConnection({\n        connection_id: scimConnection.connection_id,\n        scim_group_implicit_role_assignments: updatedScimRoleAssignments,\n      });\n    }\n  };\n\n  if (isLoadingSso || isLoadingScim || isLoadingScimGroups) {\n    return <PageLoadingIndicator />;\n  }\n\n  const disableSave = !hasUpdatedEmails && !hasUpdatedSso && !hasUpdatedScimGroups;\n\n  return (\n    <SettingsContainer\n      title=\"Automatic Role assignments\"\n      hasCTA={canSetRoles}\n      onSave={handleSave}\n      useBlockNavigation={useBlockNavigation}\n      editing={editing}\n      setEditing={handleSetEditing}\n      disableSave={disableSave}\n    >\n      <OrgSettingsRoleAssignmentsBody\n        editing={editing}\n        remoteState={remoteState}\n        localState={localState}\n        setLocalState={setLocalState}\n        ssoConnections={taggedConnections}\n        roles={sortedRoles}\n        isSsoEnabled={isSsoEnabled}\n        isScimEnabled={isScimEnabled}\n        canViewCustomOrgRoles={canGetOrgCustomRoles ?? false}\n        allScimGroupIdToGroupName={allScimGroupIdToGroupName}\n        scimConnection={scimConnection}\n      />\n    </SettingsContainer>\n  );\n};\n"],"names":["roleAssignmentsItemRenderers","idMap","rolesById","title","getValue","role","React","FlexBox","flexDirection","alignItems","Tag","role_id","displayName","Typography","variant","String","length","roleAssigmnentsKeyExtractor","roleItemRendererer","value","source","group","groupName","roleKeyExtractor","useMutateRoleAssignments","mutate","useMutateOrganization","setOrgEmailAssignments","emails","rbac_email_implicit_role_assignments","errorMessage","RoleTable","localState","remoteState","editing","setLocalState","isSsoEnabled","isScimEnabled","roleId","items","TableContainer","component","Paper","Table","itemRenderer","rowKeyExtractor","disableBottomBorder","titleVariant","getItemActionProps","roleAssignment","warningAction","text","onClick","state","assignments","filter","item","undefined","filterRoleAssignmentsBy","arr","slice","val","OrgSettingsRoleAssignmentsBody","ssoConnections","roles","canViewCustomOrgRoles","allScimGroupIdToGroupName","scimConnection","rolesWithAssignments","useRolesById","itemRenderers","selectedRole","setSelectedRole","useState","selectedSource","setSelectedSource","emailDomain","setEmailDomain","ssoRoleAssignments","setSsoRoleAssignments","id","scimGroupIds","setScimGroupIds","roleOpenIds","setRoleOpenIds","Set","idToHasGroupAttributeMapping","reduce","acc","connection","connection_id","connectionType","attribute_mapping","groups","sourceItems","add","Object","keys","sourceSelectItems","Array","from","map","label","addRoleAssignmentModalProps","useModalState","prev","concat","remoteRoleAssignments","mergedRoleAssignments","filteredRoleAssignments","domains","forEach","uniqueValuesSplitOnSpaces","input","domain","has","push","ssoConnection","connectionId","trim","some","find","display_name","currentGroupIds","groupId","showInputContent","disableConfirm","every","roleAutocompleteProps","useRoleAutocomplete","includeOrgRoles","roleSelectItems","selectItems","getOptionLabel","subtext","getOptionDescription","ssoGroupSelectItems","useMemo","scimGroupSelectItems","sourceToInputContentMap","Email","SettingsSection","Input","fullWidth","onChange","SSO","index","isValidConnection","connectionHasGroupMapping","isValidConnectionWithGroupMapping","disableGroupInput","groupInputPlaceholder","groupInputCaption","key","gap","Select","width","placeholder","connections","currentIndex","disabled","caption","hasGroupAttributeMapping","Button","startIcon","AddIcon","compact","SCIM","Autocomplete","Modal","confirmButtonText","close","Divider","color","justifyContent","open","openIds","onOpenChange","newRoleOpenIds","delete","ExpandedContent","data","sortByKeyAndValue","array","sortKey","sortedByKeys","sort","a","b","localeCompare","obj","fromEntries","entries","keyA","valA","keyB","valB","OrgSettingsRoleAssignmentsSection","orgInfo","adminPortalConfig","useAdminPortalConfig","shouldFetch","canSetRoles","useRbac","canGetSsoPerm","canGetScimPerm","canGetOrgCustomRoles","sso_config","sso_enabled","scim_config","scim_enabled","canGetSso","canGetScim","isLoading","isLoadingSso","useSsoConnections","isLoadingScim","useScimConnection","scimConnectionGroups","isLoadingScimGroups","useScimConnectionGroups","useRoles","sortRoles","useRoleSortFn","sortedRoles","rbacEmails","taggedConnections","saml_connections","c","external_connections","taggedConnectionsById","allScimGroups","scim_groups","group_id","group_name","mutateSamlConnection","useMutateSsoConnection","mutateExternalConnection","mutateScimConnection","useMutateScimConnectionRoleAssignments","idToRoleAssignments","connectionRoleAssignments","getSsoConnectionRoleAssignments","groupRoleAssignments","getSsoGroupRoleAssignments","implicitRole","rbacEmail","scim_group_implicit_role_assignments","handleSetEditing","useFormState","useBlockNavigation","useOrgSettingsRouterController","hasUpdatedEmails","updatedEmailRoleAssignments","remoteEmails","localEmails","roleAssignments","sortedLocalEmails","sortedRemoteEmails","isSame","arraysHaveSameContents","hasUpdatedSso","updatedSsoRoleAssignments","remoteAssignments","localAssignments","localConnection","remoteConnection","localImplicitRoleAssignments","remoteImplicitRoleAssignments","localGroupImplicitRoleAssignments","remoteGroupImplicitRoleAssignments","hasUpdatedScimGroups","updatedScimRoleAssignments","remoteScimGroups","localScimGroups","handleSave","Promise","all","ssoRoleAssignment","saml_connection_implicit_role_assignments","saml_group_implicit_role_assignments","external_connection_implicit_role_assignments","external_group_implicit_role_assignments","PageLoadingIndicator","disableSave","SettingsContainer","hasCTA","onSave","setEditing"],"mappings":"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"}