diff --git a/src/components/Filter/Filter.jsx b/src/components/Filter/Filter.jsx index d323cc9..eb0bf87 100644 --- a/src/components/Filter/Filter.jsx +++ b/src/components/Filter/Filter.jsx @@ -1,5 +1,5 @@ import styles from "./Filter.module.css"; -import Button from "../ui/button/button.jsx" +import Button from "../ui/button/button.tsx" function Filter({isFilterVisible, filters, setFilters}){ const setAlphabeticalOrder = (order) => { diff --git a/src/components/Footer/Footer.jsx b/src/components/Footer/Footer.jsx index 068f976..d5ded57 100644 --- a/src/components/Footer/Footer.jsx +++ b/src/components/Footer/Footer.jsx @@ -1,8 +1,8 @@ import styles from "./Footer.module.css" import {Link} from "react-router"; import {useState} from "react"; -import Modal from "../ui/modal/modal.jsx"; -import Button from "../ui/button/button.jsx"; +import Modal from "../ui/modal/modal.tsx"; +import Button from "../ui/button/button.tsx"; import scrollToTop from "../../utils/scrollToTop.js"; export default function Footer(){ diff --git a/src/components/ToolBar/ToolBar.jsx b/src/components/ToolBar/ToolBar.jsx index 2b90746..874fa70 100644 --- a/src/components/ToolBar/ToolBar.jsx +++ b/src/components/ToolBar/ToolBar.jsx @@ -3,7 +3,7 @@ import Filter from "../Filter/Filter.jsx"; import {useContext, useEffect, useState} from "react"; import SearchBar from "../SearchBar/SearchBar.jsx"; import CreateEventBtn from "../createEventBtn/CreateEventBtn.jsx"; -import Button from "../ui/button/button.jsx"; +import Button from "../ui/button/button.tsx"; import {AuthContext} from "../../contexts/auth/AuthContext.js"; function ToolBar({setFilters, filters, showCreate = true}) { diff --git a/src/components/createEventBtn/CreateEventBtn.jsx b/src/components/createEventBtn/CreateEventBtn.jsx index 18877cd..019b836 100644 --- a/src/components/createEventBtn/CreateEventBtn.jsx +++ b/src/components/createEventBtn/CreateEventBtn.jsx @@ -1,8 +1,8 @@ import styles from "./createEventBtn.module.css" import { useState, useContext } from "react"; -import Modal from "../ui/modal/modal.jsx"; -import Button from "../ui/button/button.jsx"; -import TextInput from "../ui/input/input.jsx"; +import Modal from "../ui/modal/modal.tsx"; +import Button from "../ui/button/button.tsx"; +import TextInput from "../ui/input/input.tsx"; import { EventContext } from "../../contexts/events/EventContext.js"; diff --git a/src/components/ui/button/button.jsx b/src/components/ui/button/button.jsx deleted file mode 100644 index 0fc74ab..0000000 --- a/src/components/ui/button/button.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import styles from "./button.module.css"; - -const Button = ({ children, variant = "primary", onClick, className }) => { - let btnStyle; - - if (variant === "primary") btnStyle = styles.primary; - else if (variant === "danger") btnStyle = styles.danger; - else if(variant === "transparent") btnStyle = styles.transparent; - else btnStyle = styles.default; - - return
- {children} -
; -}; - -export default Button; diff --git a/src/components/ui/button/button.tsx b/src/components/ui/button/button.tsx new file mode 100644 index 0000000..1866c39 --- /dev/null +++ b/src/components/ui/button/button.tsx @@ -0,0 +1,44 @@ +import { ReactNode, MouseEventHandler } from "react"; +import styles from "./button.module.css"; + +type ButtonVariant = "primary" | "danger" | "transparent" | "default"; + +interface ButtonProps { + children: ReactNode; + variant?: ButtonVariant; + onClick?: MouseEventHandler; + className?: string; +} + +const Button = ({ + children, + variant = "primary", + onClick, + className = "", + }: ButtonProps) => { + let btnStyle: string; + + if (variant === "primary") { // @ts-ignore + btnStyle = styles.primary; + } + else if (variant === "danger") { // @ts-ignore + btnStyle = styles.danger; + } + else if (variant === "transparent") { // @ts-ignore + btnStyle = styles.transparent; + } + else { // @ts-ignore + btnStyle = styles.default; + } + + return ( +
+ {children} +
+ ); +}; + +export default Button; diff --git a/src/components/ui/input/input.jsx b/src/components/ui/input/input.jsx deleted file mode 100644 index 7713b27..0000000 --- a/src/components/ui/input/input.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import styles from "./input.module.css"; -import { useState } from "react"; - -const TextInput = ({ placeholder, onChange, value, borderStyle, password, className, ...props }) => { - - const [showPassword, setShowPassword] = useState(false); - - let inputBorderStyle = styles.square; - if (borderStyle === "square") inputBorderStyle = styles.square; - if(borderStyle === "rounded") inputBorderStyle = styles.rounded; - - const toggleShowPassword = () => { - setShowPassword(!showPassword); - }; - - if(password) return ( -
- - -
- ); - - return -}; - -export default TextInput; diff --git a/src/components/ui/input/input.tsx b/src/components/ui/input/input.tsx new file mode 100644 index 0000000..0cc1e7f --- /dev/null +++ b/src/components/ui/input/input.tsx @@ -0,0 +1,62 @@ +import styles from "./input.module.css"; +import { useState, ChangeEvent, InputHTMLAttributes } from "react"; + +interface TextInputProps extends InputHTMLAttributes { + placeholder?: string; + value?: string; + onChange?: (e: ChangeEvent) => void; + borderStyle?: "square" | "rounded"; + password?: boolean; + className?: string; +} + +const TextInput = ({ + placeholder, + onChange, + value, + borderStyle = "square", + password, + className = "", + ...props + }: TextInputProps) => { + const [showPassword, setShowPassword] = useState(false); + + let inputBorderStyle = styles.square; + if (borderStyle === "rounded") inputBorderStyle = styles.rounded; + + const toggleShowPassword = () => { + setShowPassword((prev) => !prev); + }; + + if (password) + return ( +
+ + +
+ ); + + return ( + + ); +}; + +export default TextInput; diff --git a/src/components/ui/modal/modal.jsx b/src/components/ui/modal/modal.tsx similarity index 67% rename from src/components/ui/modal/modal.jsx rename to src/components/ui/modal/modal.tsx index 822398c..46db76f 100644 --- a/src/components/ui/modal/modal.jsx +++ b/src/components/ui/modal/modal.tsx @@ -1,16 +1,23 @@ +import { ReactNode, MouseEvent } from "react"; import { createPortal } from "react-dom"; import styles from "./modal.module.css"; -import Button from "../button/button.jsx"; +import Button from "../button/button"; -const Modal = ({ open, onClose, children, title }) => { +interface ModalProps { + open: boolean; + onClose: () => void; + children: ReactNode; + title?: string; +} +const Modal = ({ open, onClose, children, title }: ModalProps) => { if (!open) return null; const handleOverlayClick = () => { onClose(); }; - const handleModalClick = (e) => { + const handleModalClick = (e: MouseEvent) => { e.stopPropagation(); }; diff --git a/src/components/ui/themeSwitcher/ThemeSwitcher.jsx b/src/components/ui/themeSwitcher/ThemeSwitcher.jsx index ef3ffc6..25e0369 100644 --- a/src/components/ui/themeSwitcher/ThemeSwitcher.jsx +++ b/src/components/ui/themeSwitcher/ThemeSwitcher.jsx @@ -1,4 +1,4 @@ -import Button from "../button/button.jsx"; +import Button from "../button/button.tsx"; import { useState, useEffect } from "react"; import styles from "./ThemeSwitcher.module.css"; diff --git a/src/interfaces/response.interface.ts b/src/interfaces/response.interface.ts new file mode 100644 index 0000000..5f7e27e --- /dev/null +++ b/src/interfaces/response.interface.ts @@ -0,0 +1,4 @@ +export default interface Response { + status: number; + data: T; +} \ No newline at end of file diff --git a/src/pages/Admin/AdminPage.jsx b/src/pages/Admin/AdminPage.jsx index b8cf562..c300ff8 100644 --- a/src/pages/Admin/AdminPage.jsx +++ b/src/pages/Admin/AdminPage.jsx @@ -1,10 +1,10 @@ -import { useState, useContext } from "react"; +import { useContext } from "react"; import styles from "./AdminPage.module.css"; -import ParticipationChart from "./components/chart/ParticipationChart.jsx"; import IncompleteEvents from "./components/IncompleteEvent/IncompleteEvent.jsx"; import PendingMembers from "./components/pendingMembers/PendingMembers.jsx"; import { AuthContext } from "../../contexts/auth/AuthContext.js"; import { useNavigate } from "react-router"; +import RegisterMember from "./components/registerMember/registerMember.tsx"; function AdminPage() { @@ -12,18 +12,11 @@ function AdminPage() { const { user } = useContext(AuthContext); const navigate = useNavigate(); - const [selected, setSelected] = useState("3"); - const [participationRate] = useState(89); - if(!user.isAdmin) navigate("/"); return (
- +
diff --git a/src/pages/Admin/components/pendingMembers/PendingMembers.jsx b/src/pages/Admin/components/pendingMembers/PendingMembers.jsx index 69dc4e4..19b1a1a 100644 --- a/src/pages/Admin/components/pendingMembers/PendingMembers.jsx +++ b/src/pages/Admin/components/pendingMembers/PendingMembers.jsx @@ -1,7 +1,7 @@ import React, {useState, useEffect} from "react"; -import Button from "../../../../components/ui/button/button.jsx"; +import Button from "../../../../components/ui/button/button.tsx"; import styles from "./PendingMembers.module.css"; -import Modal from "../../../../components/ui/modal/modal.jsx"; +import Modal from "../../../../components/ui/modal/modal.tsx"; import getUserToValidate from "../../../../utils/users/getUserToValidate.js"; import getUserById from "../../../../utils/users/getUserById.js"; import validateUser from "../../../../utils/users/validateUser.js"; diff --git a/src/pages/Admin/components/registerMember/registerMember.module.css b/src/pages/Admin/components/registerMember/registerMember.module.css new file mode 100644 index 0000000..b15de9f --- /dev/null +++ b/src/pages/Admin/components/registerMember/registerMember.module.css @@ -0,0 +1,52 @@ +.leftBlock { + width: 100%; + max-width: 720px; + display: flex; + flex-direction: column; + align-items: center; + min-height: calc(100vh - 260px); + box-sizing: border-box; + padding: 20px; + margin: 0 auto; +} + +.registerMemberHeader { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + margin-bottom: 20px; +} + +.registerForm { + width: 100%; + display: flex; + flex-direction: column; + gap: 16px; + align-items: stretch; +} + +.registerForm input { + width: 100%; + box-sizing: border-box; +} + +.registerForm button { + width: 100%; +} + +.modalContent { + text-align: center; +} + +@media (min-width: 768px) { + .leftBlock { + width: 70%; + } +} + +@media (min-width: 1024px) { + .leftBlock { + width: 40%; + } +} diff --git a/src/pages/Admin/components/registerMember/registerMember.tsx b/src/pages/Admin/components/registerMember/registerMember.tsx new file mode 100644 index 0000000..e233176 --- /dev/null +++ b/src/pages/Admin/components/registerMember/registerMember.tsx @@ -0,0 +1,74 @@ +import React, { useState } from "react" +import styles from "./registerMember.module.css" +import TextInput from "../../../../components/ui/input/input" +import Button from "../../../../components/ui/button/button"; +import Response from "../../../../interfaces/response.interface"; +import ResponseData from "./responseData.inteface"; +import adminCreateUser from "../../../../utils/users/adminCreateUser"; +import Modal from "../../../../components/ui/modal/modal"; + + +const RegisterMember: React.FC = () => { + + const [name, setName] = useState(""); + const [lastname, setLastName] = useState(""); + const [email, setEmail] = useState(""); + const [phone, setPhone] = useState(""); + const [password, setPassword] = useState(""); + + const [open, setOpen] = useState(false); + const [title, setTitle] = useState(""); + const [message, setMessage] = useState(""); + + + const handleCreate = async (): Promise => { + + if(name !== "" && lastname !== "" && email !== "" && phone !== "" ) { + const response: Response = await adminCreateUser(email, name, lastname, phone); + if(response.status === 200) { + setPassword(response.data.password); + setTitle(`Utilisateur enregistré avec succès`); + setMessage(`L'utilisateur ${name} ${lastname} a été enregistré avec le mot de passe: ${response.data.password}`); + setOpen(true); + } else { + setTitle(`Erreur`); + setMessage(`Une erreur est survenue lors de l'enregistrement de ${name} ${lastname}`); + setOpen(true); + } + } else { + setTitle("Erreur"); + setMessage("Un des champs n'a pas été rempli"); + setOpen(true); + } + } + + const showPassword = (): void => { + setTitle(`Mot de passe de ${name} ${lastname}`); + setMessage(password); + setOpen(true); + } + + return
+
+

Enregister un bénévole

+
+ +
+ setName(e.target.value)} /> + setLastName(e.target.value)} /> + setEmail(e.target.value)} /> + setPhone(e.target.value)} /> + + {password !== "" && } + + +
+ + setOpen(false)} title={title}> +

{message}

+
+ +
+} + +export default RegisterMember \ No newline at end of file diff --git a/src/pages/Admin/components/registerMember/responseData.inteface.ts b/src/pages/Admin/components/registerMember/responseData.inteface.ts new file mode 100644 index 0000000..528d1d3 --- /dev/null +++ b/src/pages/Admin/components/registerMember/responseData.inteface.ts @@ -0,0 +1,4 @@ +export default interface ResponseData { + message: string; + password: string; +} \ No newline at end of file diff --git a/src/pages/Events/components/Event/Event.jsx b/src/pages/Events/components/Event/Event.jsx index e011d56..41181d3 100644 --- a/src/pages/Events/components/Event/Event.jsx +++ b/src/pages/Events/components/Event/Event.jsx @@ -1,7 +1,7 @@ import styles from "./Event.module.css"; import { useState, useEffect } from "react"; import { useNavigate } from "react-router"; -import Button from "/src/components/ui/button/button.jsx" +import Button from "/src/components/ui/button/button" function Event({event}){ diff --git a/src/pages/Login/components/loginform/loginForm.jsx b/src/pages/Login/components/loginform/loginForm.jsx index ee2ee6b..b4b3338 100644 --- a/src/pages/Login/components/loginform/loginForm.jsx +++ b/src/pages/Login/components/loginform/loginForm.jsx @@ -1,8 +1,8 @@ import { useState, useContext } from "react"; import styles from "./loginForm.module.css"; -import Button from "../../../../components/ui/button/button.jsx"; -import Input from "../../../../components/ui/input/input.jsx"; -import Modal from "../../../../components/ui/modal/modal.jsx"; +import Button from "../../../../components/ui/button/button.tsx"; +import Input from "../../../../components/ui/input/input.tsx"; +import Modal from "../../../../components/ui/modal/modal.tsx"; import { useNavigate } from "react-router"; import { AuthContext } from "../../../../contexts/auth/AuthContext.js"; diff --git a/src/pages/Profile/components/SettingsModal/SettingsModal.jsx b/src/pages/Profile/components/SettingsModal/SettingsModal.jsx index 4283559..c5e0ff3 100644 --- a/src/pages/Profile/components/SettingsModal/SettingsModal.jsx +++ b/src/pages/Profile/components/SettingsModal/SettingsModal.jsx @@ -1,10 +1,10 @@ -import Modal from "../../../../components/ui/modal/modal.jsx"; -import Button from "../../../../components/ui/button/button.jsx"; +import Modal from "../../../../components/ui/modal/modal.tsx"; +import Button from "../../../../components/ui/button/button.tsx"; import styles from "./SettingsModal.module.css" import { useContext, useState } from "react"; import ThemeSwitcher from "../../../../components/ui/themeSwitcher/ThemeSwitcher.jsx"; import { AuthContext } from "../../../../contexts/auth/AuthContext.js"; -import TextInput from "../../../../components/ui/input/input.jsx"; +import TextInput from "../../../../components/ui/input/input.tsx"; import updateUser from "../../../../utils/users/updateUser.js"; import deleteUser from "../../../../utils/users/deleteUser.js"; diff --git a/src/pages/Register/RegisterPage.jsx b/src/pages/Register/RegisterPage.jsx index f0547c3..48c9751 100644 --- a/src/pages/Register/RegisterPage.jsx +++ b/src/pages/Register/RegisterPage.jsx @@ -1,12 +1,12 @@ import styles from "./RegisterPage.module.css"; import Background from "../../components/background/background.jsx"; -import Input from "../../components/ui/input/input.jsx"; -import Button from "../../components/ui/button/button.jsx"; +import Input from "../../components/ui/input/input.tsx"; +import Button from "../../components/ui/button/button.tsx"; import {useContext, useEffect, useState} from "react"; import register from "../../utils/register.js"; import { useNavigate } from "react-router"; import { AuthContext } from "../../contexts/auth/AuthContext.js"; -import Modal from "../../components/ui/modal/modal.jsx"; +import Modal from "../../components/ui/modal/modal.tsx"; function RegisterPage() { diff --git a/src/pages/VolunteerProfile/components/manageMember/ManageMember.jsx b/src/pages/VolunteerProfile/components/manageMember/ManageMember.jsx index 6266501..46f8ac2 100644 --- a/src/pages/VolunteerProfile/components/manageMember/ManageMember.jsx +++ b/src/pages/VolunteerProfile/components/manageMember/ManageMember.jsx @@ -1,5 +1,5 @@ -import Button from "../../../../components/ui/button/button.jsx"; -import Modal from "../../../../components/ui/modal/modal.jsx"; +import Button from "../../../../components/ui/button/button.tsx"; +import Modal from "../../../../components/ui/modal/modal.tsx"; import {useContext, useState} from "react"; import styles from "./manageMember.module.css" import DeactivateMemberBtn from "./deactivateMember/deactivateMemberBtn.jsx"; diff --git a/src/pages/VolunteerProfile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx b/src/pages/VolunteerProfile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx index ccb8390..2f586f6 100644 --- a/src/pages/VolunteerProfile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx +++ b/src/pages/VolunteerProfile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx @@ -1,5 +1,5 @@ -import Button from "../../../../../components/ui/button/button.jsx"; -import Modal from "../../../../../components/ui/modal/modal.jsx"; +import Button from "../../../../../components/ui/button/button.tsx"; +import Modal from "../../../../../components/ui/modal/modal.tsx"; import { useState } from "react"; import deactivateUser from "../../../../../utils/users/deactivateUser.js" import { useNavigate } from "react-router"; diff --git a/src/pages/VolunteerProfile/components/manageMember/modifyrole/ModifyRole.jsx b/src/pages/VolunteerProfile/components/manageMember/modifyrole/ModifyRole.jsx index bc4d495..9f847f4 100644 --- a/src/pages/VolunteerProfile/components/manageMember/modifyrole/ModifyRole.jsx +++ b/src/pages/VolunteerProfile/components/manageMember/modifyrole/ModifyRole.jsx @@ -1,9 +1,9 @@ import styles from "../manageMember.module.css"; -import Button from "../../../../../components/ui/button/button.jsx"; +import Button from "../../../../../components/ui/button/button.tsx"; import modifyRole from "../../../../../utils/users/modifyRole.js"; import { useState, useEffect } from "react"; import getRoles from "../../../../../utils/getRoles.js"; -import Modal from "../../../../../components/ui/modal/modal.jsx"; +import Modal from "../../../../../components/ui/modal/modal.tsx"; export default function ModifyRole({ user }) { diff --git a/src/pages/Volunteers/VolunteerCard.jsx b/src/pages/Volunteers/VolunteerCard.jsx index 144d708..f69f6df 100644 --- a/src/pages/Volunteers/VolunteerCard.jsx +++ b/src/pages/Volunteers/VolunteerCard.jsx @@ -2,7 +2,7 @@ import React, {useState} from "react"; import styles from "./VolunteersPage.module.css"; import formatDate from "../../utils/date/formatDate.js"; import { useNavigate } from "react-router"; -import Button from "../../components/ui/button/button.jsx"; +import Button from "../../components/ui/button/button.tsx"; export default function VolunteerCard({ user }) { diff --git a/src/pages/eventDetail/components/EventTask/EventTask.jsx b/src/pages/eventDetail/components/EventTask/EventTask.jsx index bbde7b6..ff10dbb 100644 --- a/src/pages/eventDetail/components/EventTask/EventTask.jsx +++ b/src/pages/eventDetail/components/EventTask/EventTask.jsx @@ -1,11 +1,11 @@ import styles from "./eventTask.module.css"; import { formatDateLetter } from "../../../../utils/date/formatDateLetter.js"; -import Button from "../../../../components/ui/button/button.jsx"; +import Button from "../../../../components/ui/button/button.tsx"; import assign from "../../../../utils/tasks/assign.js"; import unAssign from "../../../../utils/tasks/unAssign.js"; import { useContext, useEffect, useState } from "react"; import isAssigned from "../../../../utils/tasks/isAssigned.js"; -import Modal from "../../../../components/ui/modal/modal.jsx"; +import Modal from "../../../../components/ui/modal/modal.tsx"; import { AuthContext } from "../../../../contexts/auth/AuthContext.js"; import DeleteTaskBtn from "../deleteTaskBtn/deleteTaskBtn.jsx"; diff --git a/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx b/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx index 8862ada..6ad9d4b 100644 --- a/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx +++ b/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx @@ -1,8 +1,8 @@ import styles from "../../eventDetail.module.css"; -import Button from "../../../../components/ui/button/button.jsx"; +import Button from "../../../../components/ui/button/button.tsx"; import {useContext, useState} from "react"; -import TextInput from "../../../../components/ui/input/input.jsx"; -import Modal from "../../../../components/ui/modal/modal.jsx"; +import TextInput from "../../../../components/ui/input/input.tsx"; +import Modal from "../../../../components/ui/modal/modal.tsx"; import createTaskApi from "../../../../utils/tasks/createTask.js"; import {EventDetailContext} from "../../../../contexts/eventDetail/eventDetail.js"; diff --git a/src/pages/eventDetail/components/deleteEventBtn/deleteEventBtn.jsx b/src/pages/eventDetail/components/deleteEventBtn/deleteEventBtn.jsx index 813a995..c3b4383 100644 --- a/src/pages/eventDetail/components/deleteEventBtn/deleteEventBtn.jsx +++ b/src/pages/eventDetail/components/deleteEventBtn/deleteEventBtn.jsx @@ -1,6 +1,6 @@ import styles from "../../eventDetail.module.css"; -import Button from "../../../../components/ui/button/button.jsx"; -import Modal from "../../../../components/ui/modal/modal.jsx"; +import Button from "../../../../components/ui/button/button.tsx"; +import Modal from "../../../../components/ui/modal/modal.tsx"; import { useContext, useState } from "react"; import { EventDetailContext } from "../../../../contexts/eventDetail/eventDetail.js"; import { EventContext } from "../../../../contexts/events/EventContext.js"; diff --git a/src/pages/eventDetail/components/deleteTaskBtn/deleteTaskBtn.jsx b/src/pages/eventDetail/components/deleteTaskBtn/deleteTaskBtn.jsx index fdad16f..90a749b 100644 --- a/src/pages/eventDetail/components/deleteTaskBtn/deleteTaskBtn.jsx +++ b/src/pages/eventDetail/components/deleteTaskBtn/deleteTaskBtn.jsx @@ -1,9 +1,9 @@ import { useContext } from "react"; import { AuthContext } from "../../../../contexts/auth/AuthContext.js"; import { EventDetailContext } from "../../../../contexts/eventDetail/eventDetail.js"; -import Button from "../../../../components/ui/button/button.jsx"; +import Button from "../../../../components/ui/button/button.tsx"; import { useState } from "react"; -import Modal from "../../../../components/ui/modal/modal.jsx"; +import Modal from "../../../../components/ui/modal/modal.tsx"; import styles from "../../eventDetail.module.css"; export default function DeleteTaskBtn({ taskId, eventId, taskName }) { diff --git a/src/pages/waitValidationPage/ValidationErrorPage.jsx b/src/pages/waitValidationPage/ValidationErrorPage.jsx index aeff346..3086d77 100644 --- a/src/pages/waitValidationPage/ValidationErrorPage.jsx +++ b/src/pages/waitValidationPage/ValidationErrorPage.jsx @@ -1,6 +1,6 @@ import styles from "./validationErrorPage.module.css" import Background from "../../components/background/background.jsx"; -import Button from "../../components/ui/button/button.jsx"; +import Button from "../../components/ui/button/button.tsx"; import { useContext } from "react"; import { AuthContext } from "../../contexts/auth/AuthContext.js"; import { Navigate, useNavigate, Link } from "react-router"; diff --git a/src/stories/Button.stories.jsx b/src/stories/Button.stories.jsx index 3f86188..3179067 100644 --- a/src/stories/Button.stories.jsx +++ b/src/stories/Button.stories.jsx @@ -1,6 +1,6 @@ import { fn } from 'storybook/test'; -import Button from '../components/ui/button/button.jsx'; +import Button from '../components/ui/button/button.tsx'; export default { diff --git a/src/stories/Input.stories.jsx b/src/stories/Input.stories.jsx index 1d3cc0c..86cd833 100644 --- a/src/stories/Input.stories.jsx +++ b/src/stories/Input.stories.jsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import TextInput from "../components/ui/input/input.jsx"; +import TextInput from "../components/ui/input/input.tsx"; export default { diff --git a/src/stories/Modal.stories.jsx b/src/stories/Modal.stories.jsx index 1ece2ae..0983105 100644 --- a/src/stories/Modal.stories.jsx +++ b/src/stories/Modal.stories.jsx @@ -1,5 +1,5 @@ -import Modal from "../components/ui/modal/modal.jsx"; -import Button from "../components/ui/button/button.jsx"; +import Modal from "../components/ui/modal/modal.tsx"; +import Button from "../components/ui/button/button.tsx"; import { useState } from "react"; export default { diff --git a/src/utils/users/adminCreateUser.ts b/src/utils/users/adminCreateUser.ts new file mode 100644 index 0000000..01860d3 --- /dev/null +++ b/src/utils/users/adminCreateUser.ts @@ -0,0 +1,14 @@ +import fetchWrapper from "../fetchWrapper.js"; +import getXSRFToken from "../getXSRF.js"; +import Response from "../../interfaces/response.interface"; + +export default async function adminCreateUser(email: string, name: string, lastname: string, phone: string): Promise { + const csrfToken = await getXSRFToken(); + + return fetchWrapper( + "/api/users/create", + { email, name, lastname, phone }, + "POST", + { "X-XSRF-TOKEN": csrfToken } + ); +}