{"version":3,"file":"MemberListScreen.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/MemberListScreen.tsx"],"sourcesContent":["import Add from '@mui/icons-material/Add';\nimport CheckCircle from '@mui/icons-material/CheckCircle';\nimport DeleteOutlined from '@mui/icons-material/DeleteOutlined';\nimport EditOutlined from '@mui/icons-material/EditOutlined';\nimport EmailOutlined from '@mui/icons-material/EmailOutlined';\nimport VisibilityOutlined from '@mui/icons-material/VisibilityOutlined';\nimport { B2BOrganizationsMembersSearchResponse, Member } from '@stytch/core/public';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport useSWRInfinite from 'swr/infinite';\n\nimport { extractErrorMessage } from '../../utils/extractErrorMessage';\nimport { Action, useActionMenu } from '../components/ActionMenu';\nimport { Alert } from '../components/Alert';\nimport { Button } from '../components/Button';\nimport { FilterMenu, FilterMenuProps } from '../components/FilterMenu';\nimport { FlexBox } from '../components/FlexBox';\nimport { PaginatedTable, PaginatedTableProps } from '../components/PaginatedTable';\nimport { RolesList } from '../components/RolesList';\nimport { SearchBar } from '../components/SearchBar';\nimport { Typography } from '../components/Typography';\nimport { useToast } from '../shared/components/Toast';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { decorateCurrentMemberName } from '../utils/decorateCurrentMemberName';\nimport { fetchMembers } from '../utils/fetchMembers';\nimport { useDebouncedState } from '../utils/useDebouncedState';\nimport { itemsPerPageOptions, useItemsPerPage } from '../utils/useItemsPerPage';\nimport { useOrgInfo } from '../utils/useOrgInfo';\nimport { usePagination } from '../utils/usePagination';\nimport { usePersistentFilter } from '../utils/usePersistentFilter';\nimport { useRbac } from '../utils/useRbac';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useSelf } from '../utils/useSelf';\nimport { useStytchClient } from '../utils/useStytchClient';\nimport { getMemberStatusDisplayName } from './getMemberStatusDisplayName';\nimport { InviteModal, useInviteModal } from './InviteModal';\nimport { useMemberManagementRouterController } from './MemberManagementRouter';\nimport { allMemberStatuses, allMemberStatusesSet, KnownMemberStatus } from './MemberStatus';\nimport { useMemberActivation } from './useMemberActivation';\nimport { useSendInviteEmail } from './useSendInviteEmail';\n\nconst MIN_EMAIL_FUZZY_SEARCH_LENGTH = 3;\n\nconst MEMBER_LIST_TABLE_VIEW_ID = 'adminPortalMemberList';\n\nconst DEFAULT_STATUSES_FILTER: ReadonlySet<KnownMemberStatus> = new Set(['active', 'invited', 'pending']);\n\nconst REINVITE_MEMBER_STATUS: ReadonlySet<string> = new Set<KnownMemberStatus>(['invited', 'pending']);\n\nconst allStatusesFilterItems = allMemberStatuses.map((status) => ({\n  label: getMemberStatusDisplayName(status),\n  value: status,\n}));\n\nexport const useMembers = ({\n  limit,\n  email: emailRaw,\n  roles,\n  statuses,\n}: {\n  limit: number;\n  email: string | undefined;\n  roles: string[] | undefined;\n  statuses: KnownMemberStatus[] | undefined;\n}) => {\n  const client = useStytchClient();\n  const orgInfo = useOrgInfo();\n\n  const email = emailRaw && emailRaw.length >= MIN_EMAIL_FUZZY_SEARCH_LENGTH ? emailRaw : undefined;\n\n  return useSWRInfinite(\n    (index, prevData: B2BOrganizationsMembersSearchResponse | null) => {\n      if (prevData && !prevData.results_metadata.next_cursor) {\n        return null;\n      }\n\n      return {\n        orgId: orgInfo.data?.organization_id,\n        method: 'members.search',\n        limit,\n        email,\n        // Stabilize the query key by sorting roles and statuses deterministically\n        roles: roles?.slice().sort(),\n        statuses: statuses?.slice().sort(),\n        cursor: prevData?.results_metadata.next_cursor,\n      };\n    },\n    fetchMembers(client),\n    { revalidateFirstPage: false },\n  );\n};\n\ninterface Column<T> extends TableItemRenderer<T> {\n  id: string;\n}\n\nconst getMemberId = (item: Member) => item.member_id;\n\ninterface ColumnTitleWithFilterProps<T> extends Pick<FilterMenuProps<T>, 'items' | 'value' | 'onChange'> {\n  title: string;\n}\n\nconst ColumnTitleWithFilter = <T extends string>({ items, onChange, value, title }: ColumnTitleWithFilterProps<T>) => {\n  const [container, setContainer] = useState<HTMLElement | null>(null);\n\n  return (\n    <div ref={setContainer}>\n      <FlexBox gap={1} alignItems=\"center\">\n        {title}\n        <FilterMenu anchorEl={container ?? undefined} items={items} value={value} onChange={onChange} />\n      </FlexBox>\n    </div>\n  );\n};\n\nconst emptySet: ReadonlySet<string> = new Set();\n\nexport const MemberListScreen = () => {\n  const { navigate } = useMemberManagementRouterController();\n\n  const { data: canCreateMemberPerm } = useRbac('stytch.member', 'create');\n  const { data: canUpdateMemberIsBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n  const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n\n  const { data: canUpdateMemberNamePerm } = useRbac('stytch.member', 'update.info.name');\n  const { data: canUpdateMemberUntrustedMetadataPerm } = useRbac('stytch.member', 'update.info.untrusted-metadata');\n  const { data: canUpdateMemberMfaPhonePerm } = useRbac('stytch.member', 'update.info.mfa-phone');\n  const { data: canDeleteMemberMfaPhonePerm } = useRbac('stytch.member', 'update.info.delete.mfa-phone');\n  const { data: canDeleteMemberMfaTotpPerm } = useRbac('stytch.member', 'update.info.delete.mfa-totp');\n  const { data: canDeleteMemberPasswordPerm } = useRbac('stytch.member', 'update.info.delete.password');\n  const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n  const { data: canUpdateMemberDefaultMfaMethodPerm } = useRbac('stytch.member', 'update.settings.default-mfa-method');\n  const { data: canDeleteMemberPerm } = useRbac('stytch.member', 'delete');\n  const { data: canRevokeMemberSessionsPerm } = useRbac('stytch.member', 'revoke-sessions');\n\n  const { data: canUpdateSelfNamePerm } = useRbac('stytch.self', 'update.info.name');\n  const { data: canUpdateSelfUntrustedMetadataPerm } = useRbac('stytch.self', 'update.info.untrusted-metadata');\n  const { data: canUpdateSelfMfaPhonePerm } = useRbac('stytch.self', 'update.info.mfa-phone');\n  const { data: canDeleteSelfMfaPhonePerm } = useRbac('stytch.self', 'update.info.delete.mfa-phone');\n  const { data: canDeleteSelfMfaTotpPerm } = useRbac('stytch.self', 'update.info.delete.mfa-totp');\n  const { data: canDeleteSelfPasswordPerm } = useRbac('stytch.self', 'update.info.delete.password');\n  const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n  const { data: canUpdateSelfDefaultMfaMethodPerm } = useRbac('stytch.self', 'update.settings.default-mfa-method');\n  const { data: canDeleteSelfPerm } = useRbac('stytch.self', 'delete');\n  const { data: canRevokeSelfSessionsPerm } = useRbac('stytch.self', 'revoke-sessions');\n\n  const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n  const canUpdateMember =\n    canDeleteMemberMfaPhonePerm ||\n    canDeleteMemberMfaTotpPerm ||\n    canDeleteMemberPasswordPerm ||\n    canUpdateMemberMfaPhonePerm ||\n    canUpdateMemberNamePerm ||\n    canUpdateMemberUntrustedMetadataPerm ||\n    canUpdateMemberIsBreakglassPerm ||\n    canUpdateMemberMfaEnrolledPerm ||\n    canUpdateMemberDefaultMfaMethodPerm ||\n    canUpdateMemberRolesPerm ||\n    canRevokeMemberSessionsPerm;\n\n  const canUpdateSelf =\n    canUpdateSelfNamePerm ||\n    canUpdateSelfUntrustedMetadataPerm ||\n    canUpdateSelfMfaPhonePerm ||\n    canDeleteSelfMfaPhonePerm ||\n    canDeleteSelfPasswordPerm ||\n    canUpdateSelfMfaEnrolledPerm ||\n    canUpdateSelfDefaultMfaMethodPerm ||\n    canDeleteSelfPerm ||\n    canDeleteSelfMfaTotpPerm ||\n    canRevokeSelfSessionsPerm;\n\n  const canActivateOrDeactivate = canCreateMemberPerm || canDeleteMemberPerm;\n\n  const orgInfo = useOrgInfo();\n  const orgAllowsEmailInvites = orgInfo.data && orgInfo.data.email_invites !== 'NOT_ALLOWED';\n\n  const { self } = useSelf();\n  const currentMemberId = self?.member_id;\n\n  const canInviteMember = canCreateMemberPerm && orgAllowsEmailInvites;\n\n  const roleAutocompleteProps = useRoleAutocomplete({\n    excludeStytchMember: true,\n    includeOrgRoles: canGetOrgCustomRoles,\n  });\n  const allRolesSet = useMemo(() => new Set(roleAutocompleteProps.selectItems), [roleAutocompleteProps.selectItems]);\n  const allRolesFilterItems = useMemo(() => {\n    return roleAutocompleteProps.selectItems.map((roleId) => ({\n      label: roleAutocompleteProps.getOptionLabel(roleId),\n      value: roleId,\n    }));\n  }, [roleAutocompleteProps]);\n\n  const [filterRoles, setFilterRoles] = usePersistentFilter({\n    viewId: MEMBER_LIST_TABLE_VIEW_ID,\n    fieldId: 'role',\n    defaultValue: emptySet,\n    permittedValues: allRolesSet,\n  });\n  const [filterStatuses, setFilterStatuses] = usePersistentFilter({\n    viewId: MEMBER_LIST_TABLE_VIEW_ID,\n    fieldId: 'status',\n    defaultValue: DEFAULT_STATUSES_FILTER,\n    permittedValues: allMemberStatusesSet,\n  });\n\n  const itemRenderer: Column<Member>[] = useMemo(\n    () => [\n      {\n        id: 'name',\n        title: 'Name',\n        getValue: ({ name, member_id }) => {\n          return member_id === currentMemberId ? decorateCurrentMemberName(name) : name;\n        },\n        width: 200,\n      },\n      {\n        id: 'email',\n        title: 'Email',\n        getValue: ({ email_address }) => {\n          return email_address;\n        },\n        width: 200,\n      },\n      {\n        id: 'role',\n        title: 'Role',\n        getValue: ({ roles }) => {\n          return <RolesList hideStytchMemberWithOtherRoles roles={roles} />;\n        },\n        renderTitle: () => (\n          <ColumnTitleWithFilter\n            title=\"Role\"\n            items={allRolesFilterItems}\n            value={filterRoles}\n            onChange={setFilterRoles}\n          />\n        ),\n      },\n      {\n        id: 'status',\n        title: 'Status',\n        getValue: ({ status }) => {\n          return getMemberStatusDisplayName(status);\n        },\n        renderTitle: () => (\n          <ColumnTitleWithFilter\n            title=\"Status\"\n            items={allStatusesFilterItems}\n            value={filterStatuses}\n            onChange={setFilterStatuses}\n          />\n        ),\n        width: 150,\n      },\n    ],\n    [allRolesFilterItems, currentMemberId, filterRoles, filterStatuses, setFilterRoles, setFilterStatuses],\n  );\n\n  const [filterText, setFilterText, pendingFilterText] = useDebouncedState('');\n\n  const [itemsPerPage, handleItemsPerPageChange] = useItemsPerPage({\n    viewId: MEMBER_LIST_TABLE_VIEW_ID,\n  });\n\n  const { data, error, isLoading, setSize, size, mutate } = useMembers({\n    limit: itemsPerPage,\n    email: filterText || undefined,\n    roles: filterRoles.size > 0 ? Array.from(filterRoles) : undefined,\n    statuses: filterStatuses.size > 0 ? Array.from(filterStatuses) : undefined,\n  });\n\n  const resultsMetadata = data?.at(-1)?.results_metadata;\n\n  // `size` is already effectively a page count, so we can act as if we only\n  // have one item per page\n  const { currentPage, setCurrentPage } = usePagination({\n    itemsCount: size,\n    itemsPerPage: 1,\n  });\n\n  const tableProps = {\n    currentPage,\n    setCurrentPage,\n    onRowClick: (id) => navigate({ screen: 'memberDetails', params: { memberId: id } }),\n    rowsPerPage: itemsPerPage,\n    rowsPerPageOptions: itemsPerPageOptions,\n    onRowsPerPageChange: handleItemsPerPageChange,\n    items: useMemo(() => data?.flatMap((page) => page.members) ?? [], [data]),\n    loadNext: useCallback(() => setSize((size) => size + 1), [setSize]),\n    metadata: useMemo(\n      () => ({\n        cursor: resultsMetadata?.next_cursor ?? '__none',\n        total: resultsMetadata?.total ?? 0,\n      }),\n      [resultsMetadata?.next_cursor, resultsMetadata?.total],\n    ),\n  } satisfies Partial<PaginatedTableProps<Member>>;\n\n  const { openToast } = useToast();\n  const sendInviteEmail = useSendInviteEmail({ onSuccess: mutate });\n  const { handleInviteClick, inviteModalProps } = useInviteModal(sendInviteEmail);\n\n  const handleEdit = useCallback(\n    (member: Member) => {\n      navigate({ screen: 'memberDetails', params: { memberId: member.member_id } });\n    },\n    [navigate],\n  );\n\n  const { openModal, modal } = useMemberActivation(mutate);\n\n  const handleActivateDeactivateMember = useCallback(\n    (member: Member) => {\n      openModal(member);\n    },\n    [openModal],\n  );\n\n  const actions = useMemo(() => {\n    const getDeleteAction = (member: Member) => {\n      const isSelf = currentMemberId === member.member_id;\n      switch (member.status) {\n        case 'invited':\n          if (canDeleteMemberPerm || (canDeleteSelfPerm && isSelf)) {\n            return 'revoke-invite';\n          }\n          break;\n        case 'active':\n          if (canDeleteMemberPerm || (canDeleteSelfPerm && isSelf)) {\n            return 'deactivate';\n          }\n          break;\n        case 'deleted':\n          if (canCreateMemberPerm && member.email_address_verified) {\n            return 'reactivate';\n          }\n          break;\n      }\n    };\n\n    const canEdit = (member: Member) => {\n      return (currentMemberId === member.member_id ? canUpdateSelf : canUpdateMember) ?? false;\n    };\n    return [\n      {\n        key: 'view',\n        label: 'View member',\n        icon: <VisibilityOutlined />,\n        onClick: handleEdit,\n        isVisible: (member) => !canEdit(member),\n      },\n      {\n        key: 'edit',\n        label: 'Edit member',\n        icon: <EditOutlined />,\n        onClick: handleEdit,\n        isVisible: (member) => canEdit(member),\n      },\n      {\n        key: 'resend-invite-email',\n        label: 'Resend invite email',\n        icon: <EmailOutlined />,\n        onClick: (member) =>\n          sendInviteEmail(member.email_address).catch((error: unknown) => {\n            const message = extractErrorMessage(error);\n            if (message) {\n              openToast({ text: message, type: 'error' });\n            }\n          }),\n        isVisible: (member) => Boolean(canInviteMember) && REINVITE_MEMBER_STATUS.has(member.status),\n      },\n      {\n        key: 'revoke-invite',\n        label: 'Revoke invite',\n        icon: <DeleteOutlined />,\n        onClick: handleActivateDeactivateMember,\n        isDangerous: true,\n        isVisible: (member) => getDeleteAction(member) === 'revoke-invite',\n      },\n      {\n        key: 'deactivate',\n        label: 'Deactivate',\n        icon: <DeleteOutlined />,\n        onClick: handleActivateDeactivateMember,\n        isDangerous: true,\n        isVisible: (member) => getDeleteAction(member) === 'deactivate',\n      },\n      {\n        key: 'reactivate',\n        label: 'Reactivate',\n        icon: <CheckCircle />,\n        onClick: handleActivateDeactivateMember,\n        isVisible: (member) => getDeleteAction(member) === 'reactivate',\n      },\n    ] satisfies Action<Member>[];\n  }, [\n    canCreateMemberPerm,\n    canDeleteMemberPerm,\n    canDeleteSelfPerm,\n    canInviteMember,\n    canUpdateMember,\n    canUpdateSelf,\n    currentMemberId,\n    handleActivateDeactivateMember,\n    handleEdit,\n    openToast,\n    sendInviteEmail,\n  ]);\n\n  const { getItemActionProps } = useActionMenu<Member>({\n    actions,\n    idPrefix: 'member',\n    getId: getMemberId,\n  });\n\n  return (\n    <FlexBox flexDirection=\"column\" gap={3}>\n      {canActivateOrDeactivate && modal}\n      <FlexBox alignItems=\"center\" justifyContent=\"space-between\">\n        <Typography variant=\"h1\">Members</Typography>\n        {canInviteMember && (\n          <>\n            <InviteModal {...inviteModalProps} />\n            <Button compact variant=\"primary\" startIcon={<Add />} onClick={handleInviteClick}>\n              Invite\n            </Button>\n          </>\n        )}\n      </FlexBox>\n      <SearchBar placeholder=\"Search by email\" value={pendingFilterText} onChange={setFilterText} />\n      {error ? (\n        <Alert>{extractErrorMessage(error) ?? 'There was an error loading the Members list.'}</Alert>\n      ) : (\n        <PaginatedTable\n          {...tableProps}\n          itemRenderer={itemRenderer}\n          isLoading={isLoading}\n          getItemActionProps={getItemActionProps}\n          rowKeyExtractor={getMemberId}\n          titleVariant=\"h4\"\n        />\n      )}\n    </FlexBox>\n  );\n};\n"],"names":["MIN_EMAIL_FUZZY_SEARCH_LENGTH","MEMBER_LIST_TABLE_VIEW_ID","DEFAULT_STATUSES_FILTER","Set","REINVITE_MEMBER_STATUS","allStatusesFilterItems","allMemberStatuses","map","status","label","getMemberStatusDisplayName","value","useMembers","limit","email","emailRaw","roles","statuses","client","useStytchClient","orgInfo","useOrgInfo","length","undefined","useSWRInfinite","index","prevData","results_metadata","next_cursor","orgId","data","organization_id","method","slice","sort","cursor","fetchMembers","revalidateFirstPage","getMemberId","item","member_id","ColumnTitleWithFilter","items","onChange","title","container","setContainer","useState","React","div","ref","FlexBox","gap","alignItems","FilterMenu","anchorEl","emptySet","MemberListScreen","navigate","useMemberManagementRouterController","canCreateMemberPerm","useRbac","canUpdateMemberIsBreakglassPerm","canUpdateMemberRolesPerm","canUpdateMemberNamePerm","canUpdateMemberUntrustedMetadataPerm","canUpdateMemberMfaPhonePerm","canDeleteMemberMfaPhonePerm","canDeleteMemberMfaTotpPerm","canDeleteMemberPasswordPerm","canUpdateMemberMfaEnrolledPerm","canUpdateMemberDefaultMfaMethodPerm","canDeleteMemberPerm","canRevokeMemberSessionsPerm","canUpdateSelfNamePerm","canUpdateSelfUntrustedMetadataPerm","canUpdateSelfMfaPhonePerm","canDeleteSelfMfaPhonePerm","canDeleteSelfMfaTotpPerm","canDeleteSelfPasswordPerm","canUpdateSelfMfaEnrolledPerm","canUpdateSelfDefaultMfaMethodPerm","canDeleteSelfPerm","canRevokeSelfSessionsPerm","canGetOrgCustomRoles","canUpdateMember","canUpdateSelf","canActivateOrDeactivate","orgAllowsEmailInvites","email_invites","self","useSelf","currentMemberId","canInviteMember","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","includeOrgRoles","allRolesSet","useMemo","selectItems","allRolesFilterItems","roleId","getOptionLabel","filterRoles","setFilterRoles","usePersistentFilter","viewId","fieldId","defaultValue","permittedValues","filterStatuses","setFilterStatuses","allMemberStatusesSet","itemRenderer","id","getValue","name","decorateCurrentMemberName","width","email_address","RolesList","hideStytchMemberWithOtherRoles","renderTitle","filterText","setFilterText","pendingFilterText","useDebouncedState","itemsPerPage","handleItemsPerPageChange","useItemsPerPage","error","isLoading","setSize","size","mutate","Array","from","resultsMetadata","at","currentPage","setCurrentPage","usePagination","itemsCount","tableProps","onRowClick","screen","params","memberId","rowsPerPage","rowsPerPageOptions","itemsPerPageOptions","onRowsPerPageChange","flatMap","page","members","loadNext","useCallback","metadata","total","openToast","useToast","sendInviteEmail","useSendInviteEmail","onSuccess","handleInviteClick","inviteModalProps","useInviteModal","handleEdit","member","openModal","modal","useMemberActivation","handleActivateDeactivateMember","actions","getDeleteAction","isSelf","email_address_verified","canEdit","key","icon","VisibilityOutlined","onClick","isVisible","EditOutlined","EmailOutlined","catch","message","extractErrorMessage","text","type","Boolean","has","DeleteOutlined","isDangerous","CheckCircle","getItemActionProps","useActionMenu","idPrefix","getId","flexDirection","justifyContent","Typography","variant","InviteModal","Button","compact","startIcon","Add","SearchBar","placeholder","Alert","PaginatedTable","rowKeyExtractor","titleVariant"],"mappings":"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"}