From 53740dc6948bf75381fd0b5038670e162c96b3dd Mon Sep 17 00:00:00 2001 From: Thibault Pouch Date: Tue, 17 Mar 2026 11:44:14 +0100 Subject: [PATCH] feat: implement settings API for toggling forum and bug reporting features --- nest-intra/nginx.conf | 2 +- .../src/components/layout/IntranetLayout.tsx | 2 +- .../src/pages/intranet/IntranetBugs.tsx | 28 ++++++++++++--- .../src/pages/intranet/IntranetModeration.tsx | 28 ++++++++++++--- nest-intra/src/utils/api.ts | 35 +++++++++++++++++++ 5 files changed, 83 insertions(+), 12 deletions(-) create mode 100644 nest-intra/src/utils/api.ts diff --git a/nest-intra/nginx.conf b/nest-intra/nginx.conf index bf22cad..471887c 100644 --- a/nest-intra/nginx.conf +++ b/nest-intra/nginx.conf @@ -8,7 +8,7 @@ server { set $api_upstream http://api:3000; location /api/ { - proxy_pass $api_upstream/api/; + proxy_pass $api_upstream; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; diff --git a/nest-intra/src/components/layout/IntranetLayout.tsx b/nest-intra/src/components/layout/IntranetLayout.tsx index f9067bf..ca5973e 100644 --- a/nest-intra/src/components/layout/IntranetLayout.tsx +++ b/nest-intra/src/components/layout/IntranetLayout.tsx @@ -8,7 +8,7 @@ const INTRANET_LINKS = [ { to: '/intranet/feed', label: 'Team Feed', icon: '[~]', end: false }, { to: '/intranet/events', label: 'Events', icon: '[E]', end: false }, { to: '/intranet/users', label: 'Users', icon: '[U]', end: false }, - { to: '/intranet/moderation', label: 'Moderation', icon: '[M]', end: false }, + { to: '/intranet/moderation', label: 'Forum Mod', icon: '[M]', end: false }, { to: '/intranet/services', label: 'Services', icon: '[S]', end: false }, ]; diff --git a/nest-intra/src/pages/intranet/IntranetBugs.tsx b/nest-intra/src/pages/intranet/IntranetBugs.tsx index 8894848..e2392dc 100644 --- a/nest-intra/src/pages/intranet/IntranetBugs.tsx +++ b/nest-intra/src/pages/intranet/IntranetBugs.tsx @@ -1,6 +1,7 @@ -import { useState, useMemo, useCallback } from 'react'; +import { useState, useMemo, useCallback, useEffect } from 'react'; import { useAuth } from '../../contexts/AuthContext'; import { formatDate, formatDateTime } from '../../utils/format'; +import { settingsApi } from '../../utils/api'; import type { BugReport, BugSeverity, BugStatus, BugReportNote } from '../../types'; function StatusBadge({ status }: { status: BugStatus }) { @@ -27,6 +28,19 @@ export default function IntranetBugs() { const [assignedFilter, setAssignedFilter] = useState('all'); const [noteText, setNoteText] = useState(''); const [isEnabled, setIsEnabled] = useState(true); + const [toggling, setToggling] = useState(false); + + useEffect(() => { + settingsApi.get().then((s) => setIsEnabled(s.bugsEnabled)).catch(() => {}); + }, []); + + const handleToggle = useCallback((enabled: boolean) => { + setToggling(true); + settingsApi.update({ bugsEnabled: enabled }) + .then(() => setIsEnabled(enabled)) + .catch(() => {}) + .finally(() => setToggling(false)); + }, []); const openCount = bugs.filter((b) => b.status === 'open').length; const criticalCount = bugs.filter((b) => b.severity === 'critical').length; @@ -82,7 +96,8 @@ export default function IntranetBugs() {

FUNCTIONALITY DISABLED

Bug Reports feature is currently disabled