← All @molecule/* packages · App templates
@molecule/app-moderation-queue-reactFeature · moderation-queue · App (browser) · v1.0.1 · Apache-2.0
Moderation queue UI: flagged items list with approve/reject/escalate/mute actions, severity, and bulk-select
npm install @molecule/app-moderation-queue-react@molecule/app-moderation-queue-react is a ready-made moderation-queue feature for the app (browser) side. It composes the core interfaces it needs, so it works with whichever providers your app has bonded.
import { ModerationQueue, type ModerationItem } from '@molecule/app-moderation-queue-react'
const items: ModerationItem[] = [
{
id: 'r-1',
kind: 'comment',
preview: <p>Some flagged comment</p>,
reason: 'Hate speech',
reportedBy: '@alice',
reportedAt: '2 min ago',
severity: 'high',
},
]
<ModerationQueue
items={items}
onApprove={(id) => api.approve(id)}
onReject={(id) => api.reject(id)}
onEscalate={(id) => api.escalate(id)}
onMute={(id) => api.mute(id)}
onBulkAction={(action, ids) => api.bulk(action, ids)}
/>Works with: @molecule/app-react, @molecule/app-ui, @molecule/app-ui-react
Auto-generated, AI-first package reference for the molecule.dev ecosystem. It is written to be read by coding agents as much as by people, and is generated from this package's source — edit
src/index.tsJSDoc, not this file.
Moderation queue UI for React.
Renders a list of flagged items with kind icon, content preview, reason chip, severity color, per-row action buttons (approve / reject / escalate / mute), and a bulk-select toolbar (select-all checkbox + apply-to-selected actions).
All user-visible text is i18n'd via the companion locale bond
@molecule/app-locales-moderation-queue.
import { ModerationQueue, type ModerationItem } from '@molecule/app-moderation-queue-react'
const items: ModerationItem[] = [
{
id: 'r-1',
kind: 'comment',
preview: <p>Some flagged comment</p>,
reason: 'Hate speech',
reportedBy: '@alice',
reportedAt: '2 min ago',
severity: 'high',
},
]
<ModerationQueue
items={items}
onApprove={(id) => api.approve(id)}
onReject={(id) => api.reject(id)}
onEscalate={(id) => api.escalate(id)}
onMute={(id) => api.mute(id)}
onBulkAction={(action, ids) => api.bulk(action, ids)}
/>
feature
npm install @molecule/app-moderation-queue-react @molecule/app-react @molecule/app-ui @molecule/app-ui-react react
npm install -D @types/react
ModerationItemOne flagged item awaiting moderator review.
interface ModerationItem {
/** Unique id used for selection + action callbacks. */
id: string
/** Content kind, drives icon + kind label. */
kind: ModerationItemKind
/** Pre-rendered preview slot (usually the offending content). */
preview: ReactNode
/** Reason the item was flagged. Free-form string or pre-rendered node. */
reason: ReactNode
/** Display name / id of the reporter, optional. */
reportedBy?: ReactNode
/** When the report was filed (string or pre-formatted node). */
reportedAt: ReactNode
/** Severity — colors the severity chip. */
severity?: ModerationItemSeverity
}
ModerationQueuePropsProps for the ModerationQueue component.
interface ModerationQueueProps {
/** Flagged items to display. */
items: ModerationItem[]
/** Approve the item — content is allowed / kept. */
onApprove: (id: string) => void
/** Reject the item — content is removed / hidden. */
onReject: (id: string) => void
/** Escalate to a senior moderator / human review. Optional. */
onEscalate?: (id: string) => void
/** Mute the reporter / poster. Optional. */
onMute?: (id: string) => void
/** Apply an action to the currently-selected ids, if bulk select is in use. */
onBulkAction?: (action: ModerationBulkAction, ids: string[]) => void
/** Loading state — replaces the list with a spinner row. */
loading?: boolean
/** Empty-state slot rendered when `items` is empty and `loading` is false. */
emptyState?: ReactNode
/** Extra classes for the outer container. */
className?: string
}
ModerationBulkActionBulk action a moderator can apply to selected ids.
type ModerationBulkAction = 'approve' | 'reject' | 'escalate' | 'mute'
ModerationItemKindKind of content awaiting moderation. Drives the leading icon glyph
and the row's data-mol-kind attribute used by tests + AI agents.
type ModerationItemKind = 'post' | 'comment' | 'image' | 'message' | 'profile'
ModerationItemSeveritySeverity assigned to a flagged item, used to color the severity chip.
Maps to ColorVariant: low→info, medium→warning, high→error.
type ModerationItemSeverity = 'low' | 'medium' | 'high'
ModerationQueue(props)Moderation queue — a list of flagged items with kind icon, content preview, reason chip, severity color, per-row action buttons (approve / reject / escalate / mute), and a bulk-select toolbar (select-all checkbox + apply-to-selected action buttons).
All user-visible text comes from i18n keys in
@molecule/app-locales-moderation-queue. Styling is driven
exclusively through getClassMap().
function ModerationQueue({
items,
onApprove,
onReject,
onEscalate,
onMute,
onBulkAction,
loading,
emptyState,
className,
}: ModerationQueueProps): JSX.Element
props — Component props.Returns: A rendered moderation queue.
severityColor(severity)Translates a severity to its ColorVariant. Exported for tests and
downstream consumers (chips, badges, summary tiles).
function severityColor(severity: ModerationItemSeverity | undefined): ColorVariant
severity — Severity bucket ('low', 'medium', 'high') or undefined.Returns: Mapped ColorVariant, defaulting to 'info' when severity is omitted.
Peer dependencies:
@molecule/app-react ^1.0.1@molecule/app-ui ^1.0.1@molecule/app-ui-react ^1.0.1react ^18.0.0 || ^19.0.0@molecule/app-react@molecule/app-ui@molecule/app-ui-reactreactTranslation strings are provided by @molecule/app-locales-moderation-queue.