diff --git a/CHANGELOG.md b/CHANGELOG.md
index e1793da3..9070ea54 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ and this project adheres to
### Added
- ✨(summary) report exception type in failure analytics
+- ✨(frontend) add configurable documentation menu item
## Fixed
diff --git a/docs/installation/kubernetes.md b/docs/installation/kubernetes.md
index 9188d1eb..c10326d7 100644
--- a/docs/installation/kubernetes.md
+++ b/docs/installation/kubernetes.md
@@ -344,6 +344,7 @@ These are the environmental options available on meet backend.
| FRONTEND_SILENCE_LIVEKIT_DEBUG | Silence LiveKit debug logs | false |
| FRONTEND_IS_SILENT_LOGIN_ENABLED | Enable silent login feature | true |
| FRONTEND_FEEDBACK | Frontend feedback configuration | {} |
+| FRONTEND_DOCUMENTATION_URL | URL of the documentation opened from the room options menu. If unset, the documentation menu item is hidden | |
| FRONTEND_USE_FRENCH_GOV_FOOTER | Show the French government footer in the homepage | false |
| FRONTEND_USE_PROCONNECT_BUTTON | Show a "Login with ProConnect" button in the homepage instead of a "Login" button | false |
| DJANGO_EMAIL_BACKEND | Email backend library | django.core.mail.backends.smtp.EmailBackend |
diff --git a/src/backend/meet/settings.py b/src/backend/meet/settings.py
index 681ad1e1..f392917d 100755
--- a/src/backend/meet/settings.py
+++ b/src/backend/meet/settings.py
@@ -398,6 +398,9 @@ class Base(Configuration):
"feedback": values.DictValue(
{}, environ_name="FRONTEND_FEEDBACK", environ_prefix=None
),
+ "documentation_url": values.Value(
+ None, environ_name="FRONTEND_DOCUMENTATION_URL", environ_prefix=None
+ ),
"external_home_url": values.Value(
None, environ_name="FRONTEND_EXTERNAL_HOME_URL", environ_prefix=None
),
diff --git a/src/frontend/src/api/useConfig.ts b/src/frontend/src/api/useConfig.ts
index e6b758e8..8e1ffe83 100644
--- a/src/frontend/src/api/useConfig.ts
+++ b/src/frontend/src/api/useConfig.ts
@@ -20,6 +20,7 @@ export interface ApiConfig {
feedback: {
url: string
}
+ documentation_url?: string
external_home_url?: string
silence_livekit_debug_logs?: boolean
is_silent_login_enabled?: boolean
diff --git a/src/frontend/src/features/rooms/livekit/components/controls/Options/DocumentationMenuItem.tsx b/src/frontend/src/features/rooms/livekit/components/controls/Options/DocumentationMenuItem.tsx
new file mode 100644
index 00000000..01c8785d
--- /dev/null
+++ b/src/frontend/src/features/rooms/livekit/components/controls/Options/DocumentationMenuItem.tsx
@@ -0,0 +1,23 @@
+import { RiBookOpenLine } from '@remixicon/react'
+import { MenuItem } from 'react-aria-components'
+import { useTranslation } from 'react-i18next'
+import { menuRecipe } from '@/primitives/menuRecipe'
+import { useConfig } from '@/api/useConfig'
+
+export const DocumentationMenuItem = () => {
+ const { t } = useTranslation('rooms', { keyPrefix: 'options.items' })
+ const { data } = useConfig()
+
+ if (!data?.documentation_url) return
+
+ return (
+
+ )
+}
diff --git a/src/frontend/src/features/rooms/livekit/components/controls/Options/OptionsMenuItems.tsx b/src/frontend/src/features/rooms/livekit/components/controls/Options/OptionsMenuItems.tsx
index 50439296..4ddf9e26 100644
--- a/src/frontend/src/features/rooms/livekit/components/controls/Options/OptionsMenuItems.tsx
+++ b/src/frontend/src/features/rooms/livekit/components/controls/Options/OptionsMenuItems.tsx
@@ -5,6 +5,7 @@ import { SettingsMenuItem } from './SettingsMenuItem'
import { FeedbackMenuItem } from './FeedbackMenuItem'
import { EffectsMenuItem } from './EffectsMenuItem'
import { SupportMenuItem } from './SupportMenuItem'
+import { DocumentationMenuItem } from './DocumentationMenuItem'
import { TranscriptMenuItem } from './TranscriptMenuItem'
import { ScreenRecordingMenuItem } from './ScreenRecordingMenuItem'
import { PictureInPictureMenuItem } from '@/features/rooms/livekit/components/controls/Options/PictureInPictureMenuItem'
@@ -28,6 +29,7 @@ export const OptionsMenuItems = () => {
+
diff --git a/src/frontend/src/locales/de/rooms.json b/src/frontend/src/locales/de/rooms.json
index 753e6ca0..46758ba8 100644
--- a/src/frontend/src/locales/de/rooms.json
+++ b/src/frontend/src/locales/de/rooms.json
@@ -260,7 +260,8 @@
"enter": "Vollbild",
"exit": "Vollbildmodus verlassen"
},
- "support": "Support kontaktieren"
+ "support": "Support kontaktieren",
+ "documentation": "Dokumentation"
}
},
"effects": {
diff --git a/src/frontend/src/locales/en/rooms.json b/src/frontend/src/locales/en/rooms.json
index 26ce6376..9b37fc31 100644
--- a/src/frontend/src/locales/en/rooms.json
+++ b/src/frontend/src/locales/en/rooms.json
@@ -260,7 +260,8 @@
"enter": "Fullscreen",
"exit": "Exit fullscreen mode"
},
- "support": "Contact support"
+ "support": "Contact support",
+ "documentation": "Documentation"
}
},
"effects": {
diff --git a/src/frontend/src/locales/fr/rooms.json b/src/frontend/src/locales/fr/rooms.json
index 8a219dcf..76e68893 100644
--- a/src/frontend/src/locales/fr/rooms.json
+++ b/src/frontend/src/locales/fr/rooms.json
@@ -260,7 +260,8 @@
"enter": "Plein écran",
"exit": "Quitter le mode plein écran"
},
- "support": "Contacter l'aide"
+ "support": "Contacter l'aide",
+ "documentation": "Documentation"
}
},
"effects": {
diff --git a/src/frontend/src/locales/nl/rooms.json b/src/frontend/src/locales/nl/rooms.json
index 472edbef..7b38b93f 100644
--- a/src/frontend/src/locales/nl/rooms.json
+++ b/src/frontend/src/locales/nl/rooms.json
@@ -260,7 +260,8 @@
"enter": "Volledig scherm",
"exit": "Stop volledig scherm stand"
},
- "support": "Contact ondersteuning"
+ "support": "Contact ondersteuning",
+ "documentation": "Documentatie"
}
},
"effects": {
diff --git a/src/helm/env.d/common.yaml.gotmpl b/src/helm/env.d/common.yaml.gotmpl
index 541425c6..b4687d97 100644
--- a/src/helm/env.d/common.yaml.gotmpl
+++ b/src/helm/env.d/common.yaml.gotmpl
@@ -154,6 +154,7 @@ backend:
FRONTEND_SILENCE_LIVEKIT_DEBUG: False
FRONTEND_SUPPORT: "{'id': '58ea6697-8eba-4492-bc59-ad6562585041', 'help_article_transcript': 'https://lasuite.crisp.help/fr/article/visio-transcript-1sjq43x', 'help_article_recording': 'https://lasuite.crisp.help/fr/article/visio-enregistrement-wgc8o0', 'help_article_more_tools': 'https://lasuite.crisp.help/fr/article/visio-tools-bvxj23'}"
FRONTEND_FEEDBACK: "{'url': 'https://grist.numerique.gouv.fr/o/docs/cbMv4G7pLY3Z/USER-RESEARCH-or-LA-SUITE/f/26'}"
+ FRONTEND_DOCUMENTATION_URL: "https://docs.numerique.gouv.fr/docs/7c5bd65d-3c21-486f-bce1-26e0a921d642/"
FRONTEND_MANIFEST_LINK: "https://docs.numerique.gouv.fr/docs/1ef86abf-f7e0-46ce-b6c7-8be8b8af4c3d/"
FRONTEND_IDLE_DISCONNECT_WARNING_DELAY: 9000
FRONTEND_TRANSCRIPTION_DESTINATION: "https://docs.numerique.gouv.fr"