From d990d4181da3bfef8d14d51f03b9f18e728cbcad Mon Sep 17 00:00:00 2001 From: Ludy Date: Sat, 31 Jan 2026 17:26:15 +0100 Subject: [PATCH] fix(frontend): prevent hydration errors in admin security form and improve autofill support (#5613) # Description of Changes ## What was changed - Updated several Mantine `label` compositions in `AdminSecuritySection.tsx` to avoid invalid HTML nesting that can trigger React hydration errors (e.g., a `
` rendered inside a `

`). - Changed `Group` used inside `NumberInput` / `Select` labels to render as an inline element via `component="span"`. - Added `name` attributes to multiple form controls (`Switch`, `Select`, `NumberInput`, `Textarea`) to satisfy browser/autofill recommendations and improve form field identification. ## Why the change was made - Fixes the runtime warning/error: - `In HTML,

cannot be a descendant of

. This will cause a hydration error.` - Caused by block-level wrappers inside Mantine `Text`/`p` label rendering. - Addresses the browser audit warning: - `A form field element should have an id or name attribute` - Adding stable `name` attributes improves autofill behavior and form accessibility tooling. --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### Translations (if applicable) - [ ] I ran [`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing) for more details. --- .../configSections/AdminSecuritySection.tsx | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/frontend/src/proprietary/components/shared/config/configSections/AdminSecuritySection.tsx b/frontend/src/proprietary/components/shared/config/configSections/AdminSecuritySection.tsx index 1cf09ab1e..e5c1f41ca 100644 --- a/frontend/src/proprietary/components/shared/config/configSections/AdminSecuritySection.tsx +++ b/frontend/src/proprietary/components/shared/config/configSections/AdminSecuritySection.tsx @@ -219,6 +219,7 @@ export default function AdminSecuritySection() {

setSettings({ ...settings, enableLogin: e.target.checked })} disabled={!loginEnabled} @@ -229,6 +230,7 @@ export default function AdminSecuritySection() {
+ {t('admin.settings.security.xFrameOptions.label', 'X-Frame-Options')} @@ -332,6 +337,7 @@ export default function AdminSecuritySection() {
setSettings({ ...settings, jwt: { ...settings?.jwt, persistence: e.target.checked } })} disabled={!loginEnabled} @@ -349,6 +355,7 @@ export default function AdminSecuritySection() {
setSettings({ ...settings, jwt: { ...settings?.jwt, enableKeyRotation: e.target.checked } })} disabled={!loginEnabled} @@ -366,6 +373,7 @@ export default function AdminSecuritySection() { setSettings({ ...settings, jwt: { ...settings?.jwt, enableKeyCleanup: e.target.checked } })} disabled={!loginEnabled} @@ -376,8 +384,9 @@ export default function AdminSecuritySection() {
+ {t('admin.settings.security.jwt.keyRetentionDays.label', 'Key Retention Days')} @@ -400,6 +409,7 @@ export default function AdminSecuritySection() {
setSettings({ ...settings, jwt: { ...settings?.jwt, secureCookie: e.target.checked } })} disabled={!loginEnabled} @@ -427,6 +437,7 @@ export default function AdminSecuritySection() { setSettings({ ...settings, audit: { ...settings?.audit, enabled: e.target.checked } })} disabled={!loginEnabled} @@ -437,8 +448,9 @@ export default function AdminSecuritySection() {
+ {t('admin.settings.security.audit.level.label', 'Audit Level')} @@ -454,8 +466,9 @@ export default function AdminSecuritySection() {
+ {t('admin.settings.security.audit.retentionDays.label', 'Audit Retention (days)')} @@ -490,6 +503,7 @@ export default function AdminSecuritySection() {
setSettings({ ...settings, @@ -506,8 +520,9 @@ export default function AdminSecuritySection() {