From dcd4d9b9f9815e9b0f7e43b6a0b0a5a5850b1f4d Mon Sep 17 00:00:00 2001 From: Hyko Date: Sun, 19 Apr 2026 16:56:50 -0400 Subject: [PATCH] refactor(admin): replace raw form elements with shared Input, Textarea, and Switch components in RoleEditPage --- .../admin/components/pages/RoleEditPage.js | 176 +++---- .../admin/components/pages/RolesPage.js | 8 +- .../admin/components/pages/UserEditPage.js | 444 ++++++++++-------- src/features/auth/api.js | 9 +- src/shared/components/Switch.js | 46 ++ src/shared/components/index.js | 1 + 6 files changed, 375 insertions(+), 309 deletions(-) create mode 100644 src/shared/components/Switch.js diff --git a/src/features/admin/components/pages/RoleEditPage.js b/src/features/admin/components/pages/RoleEditPage.js index 4ffa0b9..86229a3 100644 --- a/src/features/admin/components/pages/RoleEditPage.js +++ b/src/features/admin/components/pages/RoleEditPage.js @@ -2,7 +2,7 @@ import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; -import { Card, Button } from '@zen/core/shared/components'; +import { Card, Button, Input, Textarea, Switch } from '@zen/core/shared/components'; import { useToast } from '@zen/core/toast'; import { getPermissionGroups } from '@zen/core/users/constants'; @@ -41,7 +41,7 @@ const RoleEditPage = ({ roleId }) => { setColor(role.color || '#6b7280'); setSelectedPerms(role.permission_keys || []); setIsSystem(role.is_system || false); - } catch (err) { + } catch { toast.error('Impossible de charger ce rôle'); router.push('/admin/roles'); } finally { @@ -81,9 +81,12 @@ const RoleEditPage = ({ roleId }) => { const url = isCreating ? '/zen/api/roles' : `/zen/api/roles/${roleId}`; const method = isCreating ? 'POST' : 'PUT'; - const body = isCreating - ? { name: name.trim(), description: description.trim() || null, color } - : { name: name.trim(), description: description.trim() || null, color, permissionKeys: selectedPerms }; + const body = { + name: name.trim(), + description: description.trim() || null, + color, + permissionKeys: selectedPerms, + }; const response = await fetch(url, { method, @@ -99,14 +102,8 @@ const RoleEditPage = ({ roleId }) => { } toast.success(isCreating ? 'Rôle créé' : 'Rôle mis à jour'); - - // After creating, redirect to edit page so permissions can be set - if (isCreating && data.role?.id) { - router.push(`/admin/roles/edit/${data.role.id}`); - } else { - router.push('/admin/roles'); - } - } catch (err) { + router.push('/admin/roles'); + } catch { toast.error('Impossible de sauvegarder ce rôle'); } finally { setSaving(false); @@ -117,7 +114,7 @@ const RoleEditPage = ({ roleId }) => { return (
- +
@@ -141,37 +138,26 @@ const RoleEditPage = ({ roleId }) => {
- {/* Basic info */} - +

Informations

-
- - setName(e.target.value)} - disabled={isSystem} - placeholder="Éditeur, Modérateur..." - className="w-full px-3 py-2 text-sm rounded-lg border border-neutral-200 dark:border-neutral-700 bg-white dark:bg-neutral-900 text-neutral-900 dark:text-white disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500" - /> -
+ -
- -