diff --git a/Front-End/package-lock.json b/Front-End/package-lock.json index c5f800b..07c265e 100644 --- a/Front-End/package-lock.json +++ b/Front-End/package-lock.json @@ -1,12 +1,12 @@ { "name": "n3wt-school-front-end", - "version": "0.0.1", + "version": "0.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "n3wt-school-front-end", - "version": "0.0.1", + "version": "0.0.3", "dependencies": { "@docuseal/react": "^1.0.56", "@radix-ui/react-dialog": "^1.1.2", @@ -29,6 +29,7 @@ "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", "react-dom": "^18", + "react-hook-form": "^7.62.0", "react-international-phone": "^4.5.0", "react-quill": "^2.0.0", "react-tooltip": "^5.28.0" @@ -8834,6 +8835,21 @@ "react": "^18.3.1" } }, + "node_modules/react-hook-form": { + "version": "7.62.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz", + "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, "node_modules/react-international-phone": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/react-international-phone/-/react-international-phone-4.5.0.tgz", @@ -17160,6 +17176,12 @@ "scheduler": "^0.23.2" } }, + "react-hook-form": { + "version": "7.62.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz", + "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==", + "requires": {} + }, "react-international-phone": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/react-international-phone/-/react-international-phone-4.5.0.tgz", diff --git a/Front-End/package.json b/Front-End/package.json index 810b4c4..cc0a551 100644 --- a/Front-End/package.json +++ b/Front-End/package.json @@ -35,20 +35,21 @@ "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", "react-dom": "^18", + "react-hook-form": "^7.62.0", "react-international-phone": "^4.5.0", "react-quill": "^2.0.0", "react-tooltip": "^5.28.0" }, "devDependencies": { - "@testing-library/react": "^13.4.0", "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", "autoprefixer": "^10.4.20", "eslint": "^8", "eslint-config-next": "14.2.11", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", "postcss": "^8.4.47", "tailwindcss": "^3.4.14" } -} \ No newline at end of file +} diff --git a/Front-End/src/app/[locale]/admin/grades/page.js b/Front-End/src/app/[locale]/admin/grades/page.js index 3170d8b..4b098e8 100644 --- a/Front-End/src/app/[locale]/admin/grades/page.js +++ b/Front-End/src/app/[locale]/admin/grades/page.js @@ -1,6 +1,6 @@ 'use client'; import React, { useState, useEffect } from 'react'; -import SelectChoice from '@/components/SelectChoice'; +import SelectChoice from '@/components/Form/SelectChoice'; import AcademicResults from '@/components/Grades/AcademicResults'; import Attendance from '@/components/Grades/Attendance'; import Remarks from '@/components/Grades/Remarks'; @@ -9,7 +9,7 @@ import Homeworks from '@/components/Grades/Homeworks'; import SpecificEvaluations from '@/components/Grades/SpecificEvaluations'; import Orientation from '@/components/Grades/Orientation'; import GradesStatsCircle from '@/components/Grades/GradesStatsCircle'; -import Button from '@/components/Button'; +import Button from '@/components/Form/Button'; import logger from '@/utils/logger'; import { FE_ADMIN_GRADES_STUDENT_COMPETENCIES_URL, @@ -29,7 +29,7 @@ import { useClasses } from '@/context/ClassesContext'; import { Award, FileText } from 'lucide-react'; import SectionHeader from '@/components/SectionHeader'; import GradesDomainBarChart from '@/components/Grades/GradesDomainBarChart'; -import InputText from '@/components/InputText'; +import InputText from '@/components/Form/InputText'; import dayjs from 'dayjs'; import { useCsrfToken } from '@/context/CsrfContext'; diff --git a/Front-End/src/app/[locale]/admin/grades/studentCompetencies/page.js b/Front-End/src/app/[locale]/admin/grades/studentCompetencies/page.js index 433bb5c..cca7e8e 100644 --- a/Front-End/src/app/[locale]/admin/grades/studentCompetencies/page.js +++ b/Front-End/src/app/[locale]/admin/grades/studentCompetencies/page.js @@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react'; import { useSearchParams, useRouter } from 'next/navigation'; -import Button from '@/components/Button'; +import Button from '@/components/Form/Button'; import GradeView from '@/components/Grades/GradeView'; import { fetchStudentCompetencies, diff --git a/Front-End/src/app/[locale]/admin/settings/page.js b/Front-End/src/app/[locale]/admin/settings/page.js index 58d06f9..d037ad0 100644 --- a/Front-End/src/app/[locale]/admin/settings/page.js +++ b/Front-End/src/app/[locale]/admin/settings/page.js @@ -2,8 +2,8 @@ import React, { useState, useEffect } from 'react'; import Tab from '@/components/Tab'; import TabContent from '@/components/TabContent'; -import Button from '@/components/Button'; -import InputText from '@/components/InputText'; +import Button from '@/components/Form/Button'; +import InputText from '@/components/Form/InputText'; import CheckBox from '@/components/CheckBox'; // Import du composant CheckBox import logger from '@/utils/logger'; import { diff --git a/Front-End/src/app/[locale]/admin/structure/SchoolClassManagement/page.js b/Front-End/src/app/[locale]/admin/structure/SchoolClassManagement/page.js index 01fe220..737f36d 100644 --- a/Front-End/src/app/[locale]/admin/structure/SchoolClassManagement/page.js +++ b/Front-End/src/app/[locale]/admin/structure/SchoolClassManagement/page.js @@ -8,8 +8,8 @@ import { fetchClasse } from '@/app/actions/schoolAction'; import { useSearchParams } from 'next/navigation'; import logger from '@/utils/logger'; import { useClasses } from '@/context/ClassesContext'; -import Button from '@/components/Button'; -import SelectChoice from '@/components/SelectChoice'; +import Button from '@/components/Form/Button'; +import SelectChoice from '@/components/Form/SelectChoice'; import CheckBox from '@/components/CheckBox'; import { fetchAbsences, diff --git a/Front-End/src/app/[locale]/admin/subscriptions/createSubscription/page.js b/Front-End/src/app/[locale]/admin/subscriptions/createSubscription/page.js index 797a485..51bf505 100644 --- a/Front-End/src/app/[locale]/admin/subscriptions/createSubscription/page.js +++ b/Front-End/src/app/[locale]/admin/subscriptions/createSubscription/page.js @@ -2,17 +2,17 @@ import React, { useState, useRef, useEffect } from 'react'; import { User, Mail } from 'lucide-react'; -import InputTextIcon from '@/components/InputTextIcon'; -import ToggleSwitch from '@/components/ToggleSwitch'; -import Button from '@/components/Button'; +import InputTextIcon from '@/components/Form/InputTextIcon'; +import ToggleSwitch from '@/components/Form/ToggleSwitch'; +import Button from '@/components/Form/Button'; import Table from '@/components/Table'; import FeesSection from '@/components/Structure/Tarification/FeesSection'; import DiscountsSection from '@/components/Structure/Tarification/DiscountsSection'; import SectionTitle from '@/components/SectionTitle'; -import InputPhone from '@/components/InputPhone'; +import InputPhone from '@/components/Form/InputPhone'; import CheckBox from '@/components/CheckBox'; -import RadioList from '@/components/RadioList'; -import SelectChoice from '@/components/SelectChoice'; +import RadioList from '@/components/Form/RadioList'; +import SelectChoice from '@/components/Form/SelectChoice'; import Loader from '@/components/Loader'; import { getCurrentSchoolYear, getNextSchoolYear } from '@/utils/Date'; import logger from '@/utils/logger'; diff --git a/Front-End/src/app/[locale]/admin/subscriptions/page.js b/Front-End/src/app/[locale]/admin/subscriptions/page.js index 821fa93..bc546b5 100644 --- a/Front-End/src/app/[locale]/admin/subscriptions/page.js +++ b/Front-End/src/app/[locale]/admin/subscriptions/page.js @@ -40,8 +40,8 @@ import { import DjangoCSRFToken from '@/components/DjangoCSRFToken'; import { useCsrfToken } from '@/context/CsrfContext'; import logger from '@/utils/logger'; -import { PhoneLabel } from '@/components/PhoneLabel'; -import FileUpload from '@/components/FileUpload'; +import { PhoneLabel } from '@/components/Form/PhoneLabel'; +import FileUpload from '@/components/Form/FileUpload'; import FilesModal from '@/components/Inscription/FilesModal'; import { getCurrentSchoolYear, getNextSchoolYear } from '@/utils/Date'; @@ -250,7 +250,12 @@ export default function Page({ params: { locale } }) { }, 500); // Debounce la recherche return () => clearTimeout(timeoutId); } - }, [searchTerm, selectedEstablishmentId, currentSchoolYearPage, itemsPerPage]); + }, [ + searchTerm, + selectedEstablishmentId, + currentSchoolYearPage, + itemsPerPage, + ]); /** * UseEffect to update page count of tab diff --git a/Front-End/src/app/[locale]/page.js b/Front-End/src/app/[locale]/page.js index cadbff1..8f13814 100644 --- a/Front-End/src/app/[locale]/page.js +++ b/Front-End/src/app/[locale]/page.js @@ -1,8 +1,9 @@ 'use client'; import { useTranslations } from 'next-intl'; import React from 'react'; -import Button from '@/components/Button'; +import Button from '@/components/Form/Button'; import Logo from '@/components/Logo'; // Import du composant Logo +import FormRenderer from '@/components/Form/FormRenderer'; export default function Home() { const t = useTranslations('homePage'); @@ -13,6 +14,7 @@ export default function Home() {

{t('welcomeParents')}

{t('pleaseLogin')}