feat: Création d'un profile selector [#37,#38]

This commit is contained in:
Luc SORIGNET
2025-04-12 16:07:30 +02:00
parent 4c2e2f8756
commit 89b01b79db
16 changed files with 237 additions and 286 deletions

View File

@ -9,16 +9,16 @@ import Button from '@/components/Button'; // Importez le composant Button
import { User, KeySquare } from 'lucide-react'; // Importez directement les icônes nécessaires
import {
FE_USERS_NEW_PASSWORD_URL,
FE_ADMIN_SUBSCRIPTIONS_URL,
FE_PARENTS_HOME_URL
getRedirectUrlFromRole
} from '@/utils/Url';
import { login } from '@/app/actions/authAction';
import { getSession } from 'next-auth/react';
import { useCsrfToken } from '@/context/CsrfContext'; // Importez le hook useCsrfToken
import logger from '@/utils/logger';
import ProfileSelector from '@/components/ProfileSelector'; // Importez le composant ProfileSelector
import { RIGHTS } from '@/utils/rights';
import { setCurrentRoleIndex } from '@/store/Store';
import { useEstablishment } from '@/context/EstablishmentContext';
export default function Page() {
@ -26,8 +26,7 @@ export default function Page() {
const [errorMessage, setErrorMessage] = useState("");
const [userFieldError, setUserFieldError] = useState("")
const [passwordFieldError, setPasswordFieldError] = useState("")
const [selectedProfile, setSelectedProfile] = useState(1); // Par défaut, sélectionnez ADMIN
const { setUser } = useEstablishment();
const [isLoading, setIsLoading] = useState(false);
const router = useRouter();
@ -37,14 +36,15 @@ export default function Page() {
return data.errorMessage === ""
}
function handleFormLogin(formData) {
setIsLoading(true);
setErrorMessage("");
login({
email: formData.get('login'),
password: formData.get('password'),
role_type: selectedProfile
password: formData.get('password')
}).then(result => {
logger.debug('Sign In Result', result);
@ -58,18 +58,16 @@ export default function Page() {
}
const user = session.user;
logger.debug('User Session:', user);
const roles = user.roles.filter(role => role.role_type === selectedProfile);
if (roles.length > 0) {
// Redirection en fonction du rôle
// Ne pas désactiver le loader avant la redirection
const currentRoleIndex = 0;
setCurrentRoleIndex(currentRoleIndex);
const role = roles[currentRoleIndex].role_type;
if (role === RIGHTS.ADMIN || role === RIGHTS.TEACHER) {
router.push(FE_ADMIN_SUBSCRIPTIONS_URL);
} else if (role === RIGHTS.PARENT) {
router.push(FE_PARENTS_HOME_URL);
setUser(session.user);
if (session.user.roles && session.user.roles.length > 0) {
let roleIndex = 0;
if( session.user.roles.length > session.user.roleIndexLoginDefault){
roleIndex = session.user.roleIndexLoginDefault;
}
const role = session.user.roles[roleIndex].role_type;
const url = getRedirectUrlFromRole(role);
if (url) {
router.push(url);
} else {
setIsLoading(false);
setErrorMessage('Type de rôle non géré');
@ -104,7 +102,6 @@ export default function Page() {
<DjangoCSRFToken csrfToken={csrfToken} />
<InputTextIcon name="login" type="text" IconItem={User} label="Identifiant" placeholder="Identifiant" errorMsg={userFieldError} className="w-full mb-5" />
<InputTextIcon name="password" type="password" IconItem={KeySquare} label="Mot de passe" placeholder="Mot de passe" errorMsg={passwordFieldError} className="w-full mb-5" />
<ProfileSelector selectedProfile={selectedProfile} setSelectedProfile={setSelectedProfile} />
<div className="input-group mb-4">
</div>
<label className="text-red-500">{errorMessage}</label>