99import CenteredSpinner from "components/CenteredSpinner/CenteredSpinner" ;
1010import HtmlMeta from "components/HtmlMeta" ;
1111import PageTitle from "components/PageTitle" ;
12+ import { useFeatureValue } from "experimentation" ;
1213import Badge from "features/badges/Badge" ;
1314import { useBadges } from "features/badges/hooks" ;
1415import { useTranslation } from "i18n" ;
@@ -62,6 +63,12 @@ export default function BadgesPage({ badgeId = undefined }: BadgesPageProps) {
6263
6364 const isMobile = useMediaQuery ( theme . breakpoints . down ( "md" ) ) ;
6465
66+ // the catalog still lists the moderator badge; the award job stops granting it once
67+ // show_moderator_badge is off, so hide it from the explorer to match.
68+ const showModeratorBadge = useFeatureValue ( "show_moderator_badge" , true ) ;
69+ const isHiddenBadge = ( badgeId : string ) =>
70+ badgeId === "moderator" && ! showModeratorBadge ;
71+
6572 return (
6673 < >
6774 < HtmlMeta title = { t ( "global:nav.badges" ) } />
@@ -73,11 +80,13 @@ export default function BadgesPage({ badgeId = undefined }: BadgesPageProps) {
7380 < ParentFlexDiv >
7481 < div >
7582 { badges &&
76- Object . values ( badges ) . map ( ( badge ) => (
77- < BadgeListItem key = { badge . id } >
78- < Badge badge = { badge } />
79- </ BadgeListItem >
80- ) ) }
83+ Object . values ( badges )
84+ . filter ( ( badge ) => ! isHiddenBadge ( badge . id ) )
85+ . map ( ( badge ) => (
86+ < BadgeListItem key = { badge . id } >
87+ < Badge badge = { badge } />
88+ </ BadgeListItem >
89+ ) ) }
8190 </ div >
8291 < StyledDivider
8392 orientation = { isMobile ? "horizontal" : "vertical" }
@@ -87,7 +96,7 @@ export default function BadgesPage({ badgeId = undefined }: BadgesPageProps) {
8796 < ContentDiv >
8897 { isBadgesLoading ? (
8998 < CenteredSpinner />
90- ) : badges && badgeId in badges ? (
99+ ) : badges && badgeId in badges && ! isHiddenBadge ( badgeId ) ? (
91100 < >
92101 < FlexDiv >
93102 < Badge badge = { badges [ badgeId ] } />
0 commit comments