{"version":3,"file":"SCIMConnectionRoleAssignmentsSection.mjs","sources":["../../../../../../../../web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.tsx"],"sourcesContent":["import Add from '@mui/icons-material/Add';\nimport { SCIMConnection } from '@stytch/core/public';\nimport React, { useMemo } from 'react';\n\nimport { isTruthy } from '../../utils/isTruthy';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { Button } from '../components/Button';\nimport { FlexBox } from '../components/FlexBox';\nimport { PageLoadingIndicator } from '../components/PageLoadingIndicator';\nimport { Select } from '../components/Select';\nimport { SettingsContainer } from '../components/SettingsContainer';\nimport { Table } from '../components/Table';\nimport { TagList } from '../components/TagList';\nimport { Typography } from '../components/Typography';\nimport { UseBlockNavigation } from '../Router';\nimport { arraysHaveSameContents } from '../utils/arraysHaveSameContents';\nimport { useFormState } from '../utils/useFormState';\nimport { useMutateScimConnectionRoleAssignments } from '../utils/useMutateScimConnection';\nimport { useRbac } from '../utils/useRbac';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useRoleDisplayInfo } from '../utils/useRoleDisplayInfo';\nimport { useScimConnectionGroups } from '../utils/useScimConnectionGroups';\n\ntype ScimGroupRoleAssignment = { groupId: string | undefined; roles: string[] };\n\nexport const RoleAssignmentsSection = ({\n  connection,\n  useBlockNavigation,\n}: {\n  connection: SCIMConnection;\n  useBlockNavigation: UseBlockNavigation;\n}) => {\n  const { data: scimConnectionGroups, isLoading: isLoadingScimGroups } = useScimConnectionGroups({\n    shouldFetch: true,\n  });\n\n  const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n  const { mutate: mutateScimConnection } = useMutateScimConnectionRoleAssignments();\n  const { getRoleIdDisplayName } = useRoleDisplayInfo(canGetOrgCustomRoles ?? false);\n\n  const scimGroups = useMemo(() => scimConnectionGroups?.scim_groups ?? [], [scimConnectionGroups]);\n  const scimRoleAssignments = connection?.scim_group_implicit_role_assignments;\n\n  const { groupIdToName, filteredGroupIdToRoles } = useMemo(() => {\n    const groupIdToNameMap = scimGroups.reduce(\n      (acc, val) => {\n        acc[val.group_id] = val.group_name;\n        return acc;\n      },\n      {} as Record<string, string>,\n    );\n\n    const groupIdToRolesMap = Object.keys(groupIdToNameMap).reduce(\n      (acc, groupId) => {\n        const scimRoleAssignment = scimRoleAssignments.find((roleAssignment) => roleAssignment.group_id === groupId);\n        if (!scimRoleAssignment) return acc;\n\n        if (!acc[groupId]) {\n          acc[groupId] = [];\n        }\n        acc[groupId].push(scimRoleAssignment.role_id);\n        return acc;\n      },\n      {} as Record<string, string[]>,\n    );\n\n    return {\n      groupIdToName: groupIdToNameMap,\n      // Filter out groups with no roles assigned\n      filteredGroupIdToRoles: Object.fromEntries(\n        Object.entries(groupIdToRolesMap).filter(([, roles]) => roles.length > 0),\n      ),\n    };\n  }, [scimGroups, scimRoleAssignments]);\n\n  const remoteState: { groupRoles: ScimGroupRoleAssignment[] } = useMemo(\n    () => ({\n      groupRoles: Object.entries(filteredGroupIdToRoles).map(([groupId, roles]) => ({\n        groupId,\n        roles,\n      })),\n    }),\n    [filteredGroupIdToRoles],\n  );\n  const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n  const { groupRoles } = editing ? localState : remoteState;\n\n  const itemRenderer = [\n    {\n      title: 'Group',\n      getValue: ({ groupId }: ScimGroupRoleAssignment) => {\n        return (\n          <Typography variant=\"body2\" color=\"secondary\">\n            {groupId ? groupIdToName[groupId] : ''}\n          </Typography>\n        );\n      },\n      width: 300,\n    },\n    {\n      title: 'Role',\n      getValue: ({ roles }: ScimGroupRoleAssignment) => {\n        return <TagList tags={roles.map((role) => getRoleIdDisplayName(role))} />;\n      },\n    },\n  ];\n\n  const roleAutocompleteProps = useRoleAutocomplete({ includeOrgRoles: canGetOrgCustomRoles ?? false });\n\n  const groupIdsWithRoleAssignments = new Set(groupRoles.map(({ groupId }) => groupId));\n  const findAvailableGroupIds = (currentId: string | undefined) =>\n    Object.keys(groupIdToName).filter((groupId) => !groupIdsWithRoleAssignments.has(groupId) || groupId === currentId);\n  // Find the groupIds that do not have any roles assigned to them.\n  const availableGroupIds = findAvailableGroupIds(undefined);\n\n  const handleOnChange = ({\n    groupId: currentGroupId,\n    updatedGroupId,\n    updatedRoles,\n  }: {\n    groupId: string | undefined;\n    updatedGroupId: string | undefined;\n    updatedRoles: string[] | undefined;\n  }) => {\n    setLocalState((prevState) => ({\n      groupRoles: prevState.groupRoles.map((value) => {\n        if (value.groupId !== currentGroupId) {\n          return value;\n        }\n        return {\n          groupId: updatedGroupId ?? value.groupId,\n          roles: updatedRoles ?? value.roles,\n        };\n      }),\n    }));\n  };\n\n  const disableSave = arraysHaveSameContents(localState.groupRoles, remoteState.groupRoles);\n  const disableAdd =\n    (localState.groupRoles.length > 0\n      ? localState.groupRoles[localState.groupRoles.length - 1].groupId === undefined\n      : false) || !availableGroupIds.length;\n\n  const handleSave = async () => {\n    await mutateScimConnection({\n      connection_id: connection.connection_id,\n      scim_group_implicit_role_assignments: localState.groupRoles.flatMap(({ groupId, roles }) => {\n        return roles\n          .map((role) => {\n            if (groupId) {\n              return {\n                group_id: groupId,\n                role_id: role,\n              };\n            }\n          })\n          .filter(isTruthy);\n      }),\n    });\n  };\n\n  if (isLoadingScimGroups) {\n    return <PageLoadingIndicator />;\n  }\n\n  return (\n    <SettingsContainer\n      title=\"Role Assignments\"\n      hasCTA={Object.keys(groupIdToName).length > 0}\n      onSave={handleSave}\n      useBlockNavigation={useBlockNavigation}\n      editing={editing}\n      disableSave={disableSave}\n      setEditing={handleSetEditing}\n    >\n      <Typography variant=\"h4\">Group Roles</Typography>\n      {editing ? (\n        <FlexBox flexDirection=\"column\" gap={2}>\n          {localState.groupRoles.length > 0 ? (\n            <div>\n              {groupRoles.map(({ groupId, roles }, index) => {\n                const groupNameSelectItems = findAvailableGroupIds(groupId).map((groupId) => {\n                  return {\n                    value: groupId,\n                    label: groupIdToName[groupId],\n                  };\n                });\n                return (\n                  <FlexBox flexDirection=\"row\" gap={2} key={index} alignItems=\"center\">\n                    <Select\n                      labelColor=\"secondary\"\n                      width={300}\n                      label=\"Group name\"\n                      selectItems={groupNameSelectItems}\n                      placeholder=\"Select Group Name\"\n                      value={groupId}\n                      onChange={(value) => handleOnChange({ groupId, updatedGroupId: value, updatedRoles: undefined })}\n                    />\n                    <Autocomplete\n                      {...roleAutocompleteProps}\n                      label=\"Group Role\"\n                      fullWidth\n                      value={roles}\n                      onChange={(value) => handleOnChange({ groupId, updatedGroupId: undefined, updatedRoles: value })}\n                    />\n                  </FlexBox>\n                );\n              })}\n            </div>\n          ) : (\n            <Typography variant=\"body2\">No roles assigned.</Typography>\n          )}\n          <Button\n            disabled={disableAdd}\n            startIcon={<Add />}\n            variant=\"text\"\n            onClick={() => {\n              setLocalState(() => ({\n                groupRoles: [...groupRoles, { groupId: undefined, roles: [] }],\n              }));\n            }}\n          >\n            Add group roles\n          </Button>\n        </FlexBox>\n      ) : groupRoles.length > 0 ? (\n        <Table\n          titleVariant=\"caption\"\n          itemRenderer={itemRenderer}\n          items={groupRoles}\n          rowKeyExtractor={({ groupId }) => groupId ?? ''}\n          disableBottomBorder\n        />\n      ) : (\n        <Typography variant=\"body2\">No roles assigned.</Typography>\n      )}\n    </SettingsContainer>\n  );\n};\n"],"names":["RoleAssignmentsSection","connection","useBlockNavigation","data","scimConnectionGroups","isLoading","isLoadingScimGroups","useScimConnectionGroups","shouldFetch","canGetOrgCustomRoles","useRbac","mutate","mutateScimConnection","useMutateScimConnectionRoleAssignments","getRoleIdDisplayName","useRoleDisplayInfo","scimGroups","useMemo","scim_groups","scimRoleAssignments","scim_group_implicit_role_assignments","groupIdToName","filteredGroupIdToRoles","groupIdToNameMap","reduce","acc","val","group_id","group_name","groupIdToRolesMap","Object","keys","groupId","scimRoleAssignment","find","roleAssignment","push","role_id","fromEntries","entries","filter","roles","length","remoteState","groupRoles","map","localState","setLocalState","editing","handleSetEditing","useFormState","itemRenderer","title","getValue","React","Typography","variant","color","width","TagList","tags","role","roleAutocompleteProps","useRoleAutocomplete","includeOrgRoles","groupIdsWithRoleAssignments","Set","findAvailableGroupIds","currentId","has","availableGroupIds","undefined","handleOnChange","currentGroupId","updatedGroupId","updatedRoles","prevState","value","disableSave","arraysHaveSameContents","disableAdd","handleSave","connection_id","flatMap","isTruthy","PageLoadingIndicator","SettingsContainer","hasCTA","onSave","setEditing","FlexBox","flexDirection","gap","div","index","groupNameSelectItems","label","key","alignItems","Select","labelColor","selectItems","placeholder","onChange","Autocomplete","fullWidth","Button","disabled","startIcon","Add","onClick","Table","titleVariant","items","rowKeyExtractor","disableBottomBorder"],"mappings":"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"}