Cases are one queue for what someone has to decide, each with a thread (internal notes for those deciding), an assignee and a decision. Reports about a product go to the teams of the catalogs hosting it and to moderators, and only the reporter and moderators know who reported. A creator lowering a rating opens a rating review; a catalog's owner asking to delete it opens a deletion request; a catalog's team can ask for a product's removal everywhere; the person an action affected can appeal it once, decided by another moderator (an admin may decide their own, flagged). Resolving carries the case out: the rating is lowered, the product removed, the catalog deleted. Notifications reach people on the website (a bell with the unread count) and their proxies (realtime): moderators' edits to their products, removals and restores, decisions and replies on their cases, membership decisions. Also: moderators can restore a removed product, and a product's creator and moderators can see it when it's adult without an adult account (getting and wearing it still need one). Co-Authored-By: Claude Opus 5.5 <[email protected]>
11 lines
527 B
TypeScript
11 lines
527 B
TypeScript
import { Tag } from "@/components/status";
|
|
|
|
export const membership: Record<string, string> = { open: "Open", approval: "By approval", invite: "Invite only" };
|
|
|
|
/** A catalog's status: approved, pending, rejected, suspended or deleted. */
|
|
export function CatalogStatus({ status }: { status: string }) {
|
|
if (status === "approved") return <Tag tone="strong">approved</Tag>;
|
|
if (status === "rejected" || status === "suspended" || status === "deleted") return <Tag tone="danger">{status}</Tag>;
|
|
return <Tag>{status}</Tag>;
|
|
}
|