@@ -22,6 +22,7 @@ import OutlinedActionButton from "../../components/common/OutlinedActionButton";
2222import PrimaryButton from "../../PrimaryButton" ;
2323import DefaultButton from "../../DefaultButton" ;
2424import TextField from "../../TextField" ;
25+ import ExternalLink from "../../ExternalLink" ;
2526import ErrorDialog from "../../error/ErrorDialog" ;
2627import { useSetDisabledStatusMutation } from "./mutations/setDisabledStatusMutation" ;
2728import { useSetAccountValidPeriodMutation } from "./mutations/setAccountValidPeriodMutation" ;
@@ -829,6 +830,19 @@ const AccountLockoutCell: React.VFC<AccountLockoutCellProps> =
829830 < FormattedMessage id = "UserDetailsAccountStatus.account-lockout.body--unlocked" />
830831 ) }
831832 </ Text >
833+ < Text variant = "small" style = { { marginTop : "8px" , display : "block" } } >
834+ < FormattedMessage
835+ id = "UserDetailsAccountStatus.account-lockout.learn-more"
836+ values = { {
837+ // eslint-disable-next-line react/no-unstable-nested-components
838+ docLink : ( chunks : React . ReactNode ) => (
839+ < ExternalLink href = "https://docs.authgear.com/reference/rate-limits/account-lockout" >
840+ { chunks }
841+ </ ExternalLink >
842+ ) ,
843+ } }
844+ />
845+ </ Text >
832846 </ div >
833847 { lockout . isLocked ? (
834848 < OutlinedActionButton
@@ -1944,8 +1958,13 @@ export function AccountStatusMessageBar(
19441958 return null ;
19451959 }
19461960
1961+ // delayedRender={false} avoids FluentUI's DelayedRender wrapper, which
1962+ // intermittently renders an empty bar when the parent form updates state
1963+ // during mount (e.g. when navigating back to a disabled user's detail page).
19471964 return (
1948- < MessageBar messageBarType = { MessageBarType . warning } > { message } </ MessageBar >
1965+ < MessageBar messageBarType = { MessageBarType . warning } delayedRender = { false } >
1966+ { message }
1967+ </ MessageBar >
19491968 ) ;
19501969}
19511970
0 commit comments