{"version":3,"file":"AdminPortalMemberManagementContainer.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/AdminPortalMemberManagementContainer.tsx"],"sourcesContent":["import { StytchProjectConfigurationInput } from '@stytch/core/public';\nimport React, { useEffect, useRef } from 'react';\n\nimport { readB2BInternals } from '../../utils/internal';\nimport { AdminPortalWrapper } from '../AdminPortalWrapper';\nimport { MappedPropsFromRouteMap, RouterStateEntry } from '../Router';\nimport { AdminPortalCommonProps } from '../utils/AdminPortalCommonProps';\nimport { AdminPortalUIConfigRoleDisplayProvider } from '../utils/AdminPortalUIConfigRoleDisplayProvider';\nimport { FeatureStateComponent } from '../utils/FeatureStateComponent';\nimport { getFeatureState } from '../utils/getFeatureState';\nimport { useRbac } from '../utils/useRbac';\nimport { useSelf } from '../utils/useSelf';\nimport { MemberDetailsScreen } from './MemberDetailsScreen';\nimport { MemberListScreen } from './MemberListScreen';\nimport { MemberManagementRouter, MemberManagementRouterProvider } from './MemberManagementRouter';\n\n/**\n * The UI configuration object for member management used in the Admin Portal.\n */\nexport interface AdminPortalMemberManagementUIConfig extends AdminPortalUIConfigRoleDisplayProvider {\n  /**\n   * The ID of the template to use when sending an invitation to join.\n   */\n  inviteTemplateId?: string;\n\n  /**\n   * The URL that the invited members click from the Email Magic Link.\n   * If this value is not passed, the default `invite_redirect_url` that you set in your Dashboard is used.\n   */\n  inviteRedirectURL?: string;\n\n  /**\n   * The expiration time for the Magic Link in the invite email, in minutes.\n   * Defaults to 10080 (1 week), minimum 5, maximum 10080.\n   */\n  inviteExpirationMinutes?: number;\n}\n\nexport interface AdminPortalMemberManagementMountOptions<\n  TProjectConfiguration extends StytchProjectConfigurationInput = Stytch.DefaultProjectConfiguration,\n> extends AdminPortalCommonProps<TProjectConfiguration> {\n  /**\n   * An {@link AdminPortalMemberManagementUIConfig} object containing custom configuration.\n   */\n  config?: AdminPortalMemberManagementUIConfig;\n}\n\nconst routeMap = {\n  membersList: MemberListScreen,\n  memberDetails: MemberDetailsScreen,\n};\n\nexport type MemberManagementRouterMappedProps = MappedPropsFromRouteMap<typeof routeMap>;\n\nconst initialRoute = { screen: 'membersList' } satisfies RouterStateEntry<MemberManagementRouterMappedProps>;\n\nexport const Content = () => {\n  const { self, fromCache } = useSelf();\n  const { data: canSearchMembers } = useRbac('stytch.member', 'search');\n\n  const memberState = getFeatureState({\n    self,\n    fromCache,\n    adminPortalConfigError: undefined,\n    isFeatureEnabled: true,\n    hasPermission: canSearchMembers,\n  });\n\n  return (\n    <FeatureStateComponent\n      featureState={memberState}\n      notLoggedInValue={'Please log in to manage Members.'}\n      errorValue={'Members could not be loaded. Please contact your admin if you think this is a mistake.'}\n      featureNotEnabledValue={\n        'Member Management is not supported. Please contact your admin if you think this is a mistake.'\n      }\n      noPermissionValue={\n        'You do not have permission to manage Members. Please contact your admin if you think this is a mistake.'\n      }\n    >\n      <MemberManagementRouterProvider initialRoute={initialRoute}>\n        <MemberManagementRouter routeMap={routeMap} />\n      </MemberManagementRouterProvider>\n    </FeatureStateComponent>\n  );\n};\n\nexport const AdminPortalMemberManagementContainer = <TProjectConfiguration extends StytchProjectConfigurationInput>(\n  props: AdminPortalMemberManagementMountOptions<TProjectConfiguration>,\n) => {\n  // only send an event on initial mount, even if the client changes\n  const initialClient = useRef(props.client);\n  useEffect(() => {\n    readB2BInternals(initialClient.current).networkClient.logEvent({\n      name: 'render_b2b_admin_portal_member_management',\n      details: {},\n    });\n  }, []);\n\n  return (\n    <AdminPortalWrapper options={props}>\n      <Content />\n    </AdminPortalWrapper>\n  );\n};\n"],"names":["routeMap","membersList","MemberListScreen","memberDetails","MemberDetailsScreen","initialRoute","screen","Content","self","fromCache","useSelf","data","canSearchMembers","useRbac","memberState","getFeatureState","adminPortalConfigError","undefined","isFeatureEnabled","hasPermission","React","FeatureStateComponent","featureState","notLoggedInValue","errorValue","featureNotEnabledValue","noPermissionValue","MemberManagementRouterProvider","MemberManagementRouter","AdminPortalMemberManagementContainer","props","initialClient","useRef","client","useEffect","readB2BInternals","current","networkClient","logEvent","name","details","AdminPortalWrapper","options"],"mappings":";;;;;;;;;;;;AA+CA,MAAMA,UAAAA,GAAW;IACfC,WAAAA,EAAaC,gBAAAA;IACbC,aAAAA,EAAeC;AACjB,CAAA;AAIA,MAAMC,cAAAA,GAAe;IAAEC,MAAAA,EAAQ;AAAc,CAAA;MAEhCC,SAAAA,GAAU,IAAA;AACrB,IAAA,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAE,GAAGC,OAAAA,EAAAA;AAC5B,IAAA,MAAM,EAAEC,IAAAA,EAAMC,gBAAgB,EAAE,GAAGC,QAAQ,eAAA,EAAiB,QAAA,CAAA;AAE5D,IAAA,MAAMC,cAAcC,eAAAA,CAAgB;AAClCP,QAAAA,IAAAA;AACAC,QAAAA,SAAAA;QACAO,sBAAAA,EAAwBC,SAAAA;QACxBC,gBAAAA,EAAkB,IAAA;QAClBC,aAAAA,EAAeP;AACjB,KAAA,CAAA;AAEA,IAAA,qBACEQ,EAAA,CAAA,aAAA,CAACC,qBAAAA,EAAAA;QACCC,YAAAA,EAAcR,WAAAA;QACdS,gBAAAA,EAAkB,kCAAA;QAClBC,UAAAA,EAAY,wFAAA;QACZC,sBAAAA,EACE,+FAAA;QAEFC,iBAAAA,EACE;qBAGFN,EAAA,CAAA,aAAA,CAACO,8BAAAA,EAAAA;QAA+BtB,YAAAA,EAAcA;qBAC5Ce,EAAA,CAAA,aAAA,CAACQ,sBAAAA,EAAAA;QAAuB5B,QAAAA,EAAUA;;AAI1C;AAEO,MAAM6B,uCAAuC,CAClDC,KAAAA,GAAAA;;IAGA,MAAMC,aAAAA,GAAgBC,CAAAA,CAAOF,KAAAA,CAAMG,MAAM,CAAA;IACzCC,CAAAA,CAAU,IAAA;AACRC,QAAAA,gBAAAA,CAAiBJ,cAAcK,OAAO,CAAA,CAAEC,aAAa,CAACC,QAAQ,CAAC;YAC7DC,IAAAA,EAAM,2CAAA;AACNC,YAAAA,OAAAA,EAAS;AACX,SAAA,CAAA;AACF,IAAA,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,qBACEpB,EAAA,CAAA,aAAA,CAACqB,kBAAAA,EAAAA;QAAmBC,OAAAA,EAASZ;qBAC3BV,EAAA,CAAA,aAAA,CAACb,SAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AAGP;;;;"}