From fe69e04785034dac8f374d975d3cd3fd48076dc0 Mon Sep 17 00:00:00 2001 From: ThatGravyBoat Date: Tue, 28 Jul 2026 17:08:56 -0230 Subject: [PATCH] feat: moderation settings (#6895) * feat: moderation settings * chore: move moderation specific feature flag to settings * feat: force open collapsed regions if opened in new tab * chore: remove unused field * chore: run prepr --- .../ui/moderation/ModerationReportCard.vue | 3 +- .../ui/moderation/ModerationTechRevCard.vue | 3 +- .../moderation/checklist/ChecklistKeybind.vue | 116 ------------- .../checklist/ChecklistKeybindsModal.vue | 71 -------- .../checklist/ModerationChecklist.vue | 147 ++++++---------- .../moderation/settings/ModerationKeybind.vue | 164 ++++++++++++++++++ .../settings/ModerationKeybinds.vue | 27 +++ .../settings/ModerationSettings.vue | 87 ++++++++++ .../components/ui/thread/ThreadMessage.vue | 5 +- apps/frontend/src/composables/featureFlags.ts | 1 - apps/frontend/src/composables/moderation.ts | 94 ++++++---- apps/frontend/src/pages/[type]/[project].vue | 57 +++--- .../src/pages/moderation/reports/[report].vue | 2 +- .../src/pages/moderation/reports/index.vue | 7 +- .../moderation/technical-review/[project].vue | 1 + .../moderation/technical-review/index.vue | 1 + apps/frontend/src/pages/settings.vue | 10 ++ .../src/pages/settings/moderation/index.vue | 13 ++ packages/moderation/src/data/keybinds.ts | 51 +++++- packages/moderation/src/data/settings.ts | 33 ++++ packages/moderation/src/handles/keybinds.ts | 82 +++++++++ packages/moderation/src/handles/settings.ts | 25 +++ packages/moderation/src/index.ts | 4 + packages/moderation/src/types/keybinds.ts | 81 +++------ packages/moderation/src/types/settings.ts | 29 ++++ 25 files changed, 698 insertions(+), 416 deletions(-) delete mode 100644 apps/frontend/src/components/ui/moderation/checklist/ChecklistKeybind.vue delete mode 100644 apps/frontend/src/components/ui/moderation/checklist/ChecklistKeybindsModal.vue create mode 100644 apps/frontend/src/components/ui/moderation/settings/ModerationKeybind.vue create mode 100644 apps/frontend/src/components/ui/moderation/settings/ModerationKeybinds.vue create mode 100644 apps/frontend/src/components/ui/moderation/settings/ModerationSettings.vue create mode 100644 apps/frontend/src/pages/settings/moderation/index.vue create mode 100644 packages/moderation/src/data/settings.ts create mode 100644 packages/moderation/src/handles/keybinds.ts create mode 100644 packages/moderation/src/handles/settings.ts create mode 100644 packages/moderation/src/types/settings.ts diff --git a/apps/frontend/src/components/ui/moderation/ModerationReportCard.vue b/apps/frontend/src/components/ui/moderation/ModerationReportCard.vue index 6e2a91f74..3566044b4 100644 --- a/apps/frontend/src/components/ui/moderation/ModerationReportCard.vue +++ b/apps/frontend/src/components/ui/moderation/ModerationReportCard.vue @@ -300,6 +300,7 @@ type SharedInstanceVersionDependency = Labrinth.Versions.v2.Dependency & { const props = defineProps<{ report: ExtendedReport + collapsed: boolean sharedInstanceDetailsLoader?: () => Promise sharedInstanceVersionContentLoader?: ( instanceId: string, @@ -311,7 +312,7 @@ const reportThread = ref<{ setReplyContent: (content: string) => void sendReply: (privateMessage?: boolean) => Promise } | null>(null) -const isThreadCollapsed = ref(true) +const isThreadCollapsed = ref(props.collapsed) const sharedInstanceDetails = ref(null) const sharedInstanceLoading = ref(false) const sharedInstanceError = ref(null) diff --git a/apps/frontend/src/components/ui/moderation/ModerationTechRevCard.vue b/apps/frontend/src/components/ui/moderation/ModerationTechRevCard.vue index f91bd6755..d328b054e 100644 --- a/apps/frontend/src/components/ui/moderation/ModerationTechRevCard.vue +++ b/apps/frontend/src/components/ui/moderation/ModerationTechRevCard.vue @@ -94,6 +94,7 @@ const props = defineProps<{ focusedDetailId?: string | null loadingIssues: Set decompiledSources: Map + collapsed: boolean }>() const { addNotification } = injectNotificationManager() @@ -173,7 +174,7 @@ type Tab = 'Thread' | 'Files' | 'File' const tabs: readonly ('Thread' | 'Files')[] = ['Thread', 'Files'] const currentTab = ref('Thread') -const isThreadCollapsed = ref(true) +const isThreadCollapsed = ref(props.collapsed) const remainingMessageCount = computed(() => { if (!props.item.thread?.messages) return 0 diff --git a/apps/frontend/src/components/ui/moderation/checklist/ChecklistKeybind.vue b/apps/frontend/src/components/ui/moderation/checklist/ChecklistKeybind.vue deleted file mode 100644 index 5ad60c0fa..000000000 --- a/apps/frontend/src/components/ui/moderation/checklist/ChecklistKeybind.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - - diff --git a/apps/frontend/src/components/ui/moderation/checklist/ChecklistKeybindsModal.vue b/apps/frontend/src/components/ui/moderation/checklist/ChecklistKeybindsModal.vue deleted file mode 100644 index 5c0da57c6..000000000 --- a/apps/frontend/src/components/ui/moderation/checklist/ChecklistKeybindsModal.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue b/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue index 21acd31a1..3727b6197 100644 --- a/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue +++ b/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue @@ -1,5 +1,4 @@