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..5b0e5f0
--- /dev/null
+++ b/src/components/ui/button/button.tsx
@@ -0,0 +1,53 @@
+/*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;
+*/
+
+import styles from "./button.module.css";
+import { ReactNode, MouseEvent } from "react";
+
+interface ButtonProps {
+ children: ReactNode;
+ variant?: "primary" | "danger" | "transparent" | "default";
+ onClick?: (event: MouseEvent) => void;
+ className?: string;
+}
+
+const Button = ({
+ children,
+ variant = "primary",
+ onClick,
+ className = "",
+}: ButtonProps) => {
+ const variantStyles = {
+ primary: styles.primary,
+ danger: styles.danger,
+ transparent: styles.transparent,
+ default: styles.default,
+ };
+ const btnStyle = variantStyles[variant in variantStyles ? variant : "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..48f9ce6
--- /dev/null
+++ b/src/components/ui/input/input.tsx
@@ -0,0 +1,107 @@
+/*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;*/
+
+
+import styles from "./input.module.css";
+import { useState, InputHTMLAttributes, ChangeEvent } from "react";
+
+interface TextInputProps extends InputHTMLAttributes {
+ placeholder?: string;
+ onChange: (event: ChangeEvent) => void;
+ value: string;
+ borderStyle?: "square" | "rounded";
+ password?: boolean;
+ className?: string;
+}
+
+const TextInput = ({
+ placeholder,
+ onChange,
+ value,
+ borderStyle = "square",
+ password = false,
+ className = "",
+ ...props
+}: TextInputProps) => {
+ const [showPassword, setShowPassword] = useState(false);
+ const borderStyles = {
+ square: styles.square,
+ rounded: styles.rounded,
+ };
+
+ const inputBorderStyle = borderStyles[borderStyle] || styles.square;
+
+ const toggleShowPassword = () => {
+ setShowPassword(!showPassword);
+ };
+
+ if (password) {
+ return (
+
+
+
+
+ );
+ }
+
+ return (
+
+ );
+};
+
+export default TextInput;
diff --git a/src/components/ui/modal/modal.jsx b/src/components/ui/modal/modal.jsx
deleted file mode 100644
index 822398c..0000000
--- a/src/components/ui/modal/modal.jsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { createPortal } from "react-dom";
-import styles from "./modal.module.css";
-import Button from "../button/button.jsx";
-
-const Modal = ({ open, onClose, children, title }) => {
-
- if (!open) return null;
-
- const handleOverlayClick = () => {
- onClose();
- };
-
- const handleModalClick = (e) => {
- e.stopPropagation();
- };
-
- return createPortal(
-
-
- {title &&
{title}
}
- {children}
-
-
-
-
-
,
- document.body
- );
-};
-
-export default Modal;
diff --git a/src/components/ui/modal/modal.tsx b/src/components/ui/modal/modal.tsx
new file mode 100644
index 0000000..e8ba5db
--- /dev/null
+++ b/src/components/ui/modal/modal.tsx
@@ -0,0 +1,71 @@
+/*import { createPortal } from "react-dom";
+import styles from "./modal.module.css";
+import Button from "../button/button.jsx";
+
+const Modal = ({ open, onClose, children, title }) => {
+
+ if (!open) return null;
+
+ const handleOverlayClick = () => {
+ onClose();
+ };
+
+ const handleModalClick = (e) => {
+ e.stopPropagation();
+ };
+
+ return createPortal(
+
+
+ {title &&
{title}
}
+ {children}
+
+
+
+
+
,
+ document.body
+ );
+};
+
+export default Modal;*/
+
+import { createPortal } from "react-dom";
+import styles from "./modal.module.css";
+import Button from "../button/button";
+import { ReactNode, MouseEvent } from "react";
+
+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: MouseEvent) => {
+ e.stopPropagation();
+ };
+
+ return createPortal(
+
+
+ {title &&
{title}
}
+ {children}
+
+
+
+
+
,
+ document.body
+ );
+};
+
+export default Modal;
+
diff --git a/src/components/ui/themeSwitcher/ThemeSwitcher.jsx b/src/components/ui/themeSwitcher/ThemeSwitcher.jsx
deleted file mode 100644
index ef3ffc6..0000000
--- a/src/components/ui/themeSwitcher/ThemeSwitcher.jsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import Button from "../button/button.jsx";
-import { useState, useEffect } from "react";
-import styles from "./ThemeSwitcher.module.css";
-
-
-export default function ThemeSwitcher() {
-
- const [theme, setTheme] = useState("");
-
- useEffect(() => {
- const t = localStorage.getItem("theme");
- if(t) setTheme(t);
- else setTheme("light");
- }, []);
-
- const switchTheme = () => {
-
- let newTheme = theme === "light" ? "dark" : "light";
-
- if(theme === null || theme === "") newTheme = "dark";
-
- localStorage.setItem("theme", newTheme);
- setTheme(newTheme);
-
- window.dispatchEvent(new Event("theme-changed"));
- };
-
- return
-}
\ No newline at end of file
diff --git a/src/components/ui/themeSwitcher/ThemeSwitcher.tsx b/src/components/ui/themeSwitcher/ThemeSwitcher.tsx
new file mode 100644
index 0000000..4062bb8
--- /dev/null
+++ b/src/components/ui/themeSwitcher/ThemeSwitcher.tsx
@@ -0,0 +1,73 @@
+/*import Button from "../button/button.jsx";
+import { useState, useEffect } from "react";
+import styles from "./ThemeSwitcher.module.css";
+
+
+export default function ThemeSwitcher() {
+
+ const [theme, setTheme] = useState("");
+
+ useEffect(() => {
+ const t = localStorage.getItem("theme");
+ if(t) setTheme(t);
+ else setTheme("light");
+ }, []);
+
+ const switchTheme = () => {
+
+ let newTheme = theme === "light" ? "dark" : "light";
+
+ if(theme === null || theme === "") newTheme = "dark";
+
+ localStorage.setItem("theme", newTheme);
+ setTheme(newTheme);
+
+ window.dispatchEvent(new Event("theme-changed"));
+ };
+
+ return
+}*/
+
+import Button from "../button/button";
+import { useState, useEffect } from "react";
+import styles from "./ThemeSwitcher.module.css";
+
+type Theme = "light" | "dark";
+
+export default function ThemeSwitcher() {
+ const [theme, setTheme] = useState("");
+
+ useEffect(() => {
+ const savedTheme = localStorage.getItem("theme") as Theme | null;
+ if (savedTheme) {
+ setTheme(savedTheme);
+ } else {
+ setTheme("light");
+ }
+ }, []);
+
+ const switchTheme = () => {
+ const newTheme: Theme = theme === "light" ? "dark" : "light";
+ localStorage.setItem("theme", newTheme);
+ setTheme(newTheme);
+ window.dispatchEvent(new Event("theme-changed"));
+ };
+
+ return (
+
+ );
+}
diff --git a/src/pages/Profile/components/SettingsModal/SettingsModal.jsx b/src/pages/Profile/components/SettingsModal/SettingsModal.jsx
deleted file mode 100644
index 4283559..0000000
--- a/src/pages/Profile/components/SettingsModal/SettingsModal.jsx
+++ /dev/null
@@ -1,86 +0,0 @@
-import Modal from "../../../../components/ui/modal/modal.jsx";
-import Button from "../../../../components/ui/button/button.jsx";
-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 updateUser from "../../../../utils/users/updateUser.js";
-import deleteUser from "../../../../utils/users/deleteUser.js";
-
-
-export default function SettingsModal() {
-
- const { user, logout, update } = useContext(AuthContext);
-
- const [open, setOpen] = useState(false);
- const [isDelete, setIsDelete] = useState(false);
-
- const [name, setName] = useState(user?.name);
- const [lastname, setLastName] = useState(user?.lastname);
- const [phone, setPhone] = useState(user?.phone);
-
- const handleLogout = () => {
- logout();
- }
-
- const handleSubmit = async () => {
- await updateUser(name, lastname, phone);
- update();
- }
-
- const handleDelete = async () => {
- await deleteUser();
- update();
- }
-
- return (
- <>
-
-
- setOpen(false)}>
-
-
-
-
Compte
-
-
-
-
-
Changer de Prénom
- setName(e.target.value)} type={"text"} />
-
-
-
-
Changer de nom
- setLastName(e.target.value)} type={"text"} />
-
-
-
-
Changer de numéro de téléphone
- setPhone(e.target.value)} type={"text"} />
-
-
-
-
-
-
-
-
Apparence
-
-
-
-
-
-
- setIsDelete(false)}>
-
-
Êtes vous vraiment sûr de vouloir supprimer votre compte ?
-
-
-
- >
- )
-}
\ No newline at end of file
diff --git a/src/pages/Profile/components/SettingsModal/SettingsModal.tsx b/src/pages/Profile/components/SettingsModal/SettingsModal.tsx
new file mode 100644
index 0000000..452d668
--- /dev/null
+++ b/src/pages/Profile/components/SettingsModal/SettingsModal.tsx
@@ -0,0 +1,187 @@
+/*import Modal from "../../../../components/ui/modal/modal.jsx";
+import Button from "../../../../components/ui/button/button.jsx";
+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 updateUser from "../../../../utils/users/updateUser.js";
+import deleteUser from "../../../../utils/users/deleteUser.js";
+
+
+export default function SettingsModal() {
+
+ const { user, logout, update } = useContext(AuthContext);
+
+ const [open, setOpen] = useState(false);
+ const [isDelete, setIsDelete] = useState(false);
+
+ const [name, setName] = useState(user?.name);
+ const [lastname, setLastName] = useState(user?.lastname);
+ const [phone, setPhone] = useState(user?.phone);
+
+ const handleLogout = () => {
+ logout();
+ }
+
+ const handleSubmit = async () => {
+ await updateUser(name, lastname, phone);
+ update();
+ }
+
+ const handleDelete = async () => {
+ await deleteUser();
+ update();
+ }
+
+ return (
+ <>
+
+
+ setOpen(false)}>
+
+
+
+
Compte
+
+
+
+
+
Changer de Prénom
+ setName(e.target.value)} type={"text"} />
+
+
+
+
Changer de nom
+ setLastName(e.target.value)} type={"text"} />
+
+
+
+
Changer de numéro de téléphone
+ setPhone(e.target.value)} type={"text"} />
+
+
+
+
+
+
+
+
Apparence
+
+
+
+
+
+
+ setIsDelete(false)}>
+
+
Êtes vous vraiment sûr de vouloir supprimer votre compte ?
+
+
+
+ >
+ )
+}*/
+
+import Modal from "../../../../components/ui/modal/modal";
+import Button from "../../../../components/ui/button/button";
+import styles from "./SettingsModal.module.css";
+import { useContext, useState } from "react";
+import ThemeSwitcher from "../../../../components/ui/themeSwitcher/ThemeSwitcher";
+import { AuthContext } from "../../../../contexts/auth/AuthContext";
+import TextInput from "../../../../components/ui/input/input";
+import updateUser from "../../../../utils/users/updateUser";
+import deleteUser from "../../../../utils/users/deleteUser";
+
+interface User {
+ name: string;
+ lastname: string;
+ phone: string | null;
+}
+
+interface AuthContextType {
+ user: User | null;
+ logout: () => void;
+ update: () => void;
+}
+
+export default function SettingsModal() {
+ const { user, logout, update } = useContext(AuthContext) as AuthContextType;
+
+ const [open, setOpen] = useState(false);
+ const [isDelete, setIsDelete] = useState(false);
+ const [name, setName] = useState(user?.name || "");
+ const [lastname, setLastName] = useState(user?.lastname || "");
+ const [phone, setPhone] = useState(user?.phone || null);
+
+ const handleLogout = () => {
+ logout();
+ };
+
+ const handleSubmit = async () => {
+ await updateUser(name, lastname, phone);
+ update();
+ };
+
+ const handleDelete = async () => {
+ await deleteUser();
+ update();
+ };
+
+ return (
+ <>
+
+
+ setOpen(false)}>
+
+
+
Compte
+
+
+
+
+
Changer de Prénom
+ setName(e.target.value)} type={"text"} />
+
+
+
+
Changer de nom
+ setLastName(e.target.value)} type={"text"} />
+
+
+
+
Changer de numéro de téléphone
+ setPhone(e.target.value)} type={"text"} />
+
+
+
+
+
+
+
Apparence
+
+
+
+
+
+ setIsDelete(false)}>
+
+
Êtes-vous vraiment sûr de vouloir supprimer votre compte ?
+
+
+
+ >
+ );
+}
diff --git a/src/utils/fetchWrapper.js b/src/utils/fetchWrapper.js
deleted file mode 100644
index aa9f0a0..0000000
--- a/src/utils/fetchWrapper.js
+++ /dev/null
@@ -1,45 +0,0 @@
-export default async function fetchWrapper(
- path,
- data = null,
- method = "GET",
- headers = {}
-) {
- try {
- const res = await fetch(
- `${import.meta.env.VITE_API_URL}${path}`,
- {
- method,
- credentials: "include",
- headers: {
- "Accept": "application/json",
- "Content-Type": "application/json",
- ...headers,
- },
- body: data ? JSON.stringify(data) : null,
- }
- );
-
- let responseData = null;
-
- try {
- responseData = await res.json();
- } catch (_) {
- responseData = null;
- }
-
- return {
- status: res.status,
- data: responseData,
- };
-
- } catch (err) {
- console.error("❌ Erreur réseau :", err);
-
- return {
- status: 0,
- data: {
- message: "Network error",
- },
- };
- }
-}
diff --git a/src/utils/fetchWrapper.ts b/src/utils/fetchWrapper.ts
new file mode 100644
index 0000000..a130373
--- /dev/null
+++ b/src/utils/fetchWrapper.ts
@@ -0,0 +1,92 @@
+/*export default async function fetchWrapper(path,data = null,method = "GET",headers = {}) {
+ try {
+ const res = await fetch(
+ `${import.meta.env.VITE_API_URL}${path}`,
+ {
+ method,
+ credentials: "include",
+ headers: {
+ "Accept": "application/json",
+ "Content-Type": "application/json",
+ ...headers,
+ },
+ body: data ? JSON.stringify(data) : null,
+ }
+ );
+
+ let responseData = null;
+
+ try {
+ responseData = await res.json();
+ } catch (_) {
+ responseData = null;
+ }
+
+ return {
+ status: res.status,
+ data: responseData,
+ };
+
+ } catch (err) {
+ console.error("❌ Erreur réseau :", err);
+
+ return {
+ status: 0,
+ data: {
+ message: "Network error",
+ },
+ };
+ }
+}*/
+
+interface FetchResponse {
+ status: number;
+ data: T | null;
+}
+
+export default async function fetchWrapper(
+ path: string,
+ data: any = null,
+ method: string = "GET",
+ headers: Record = {}
+): Promise {
+ try {
+ const res = await fetch(
+ `${import.meta.env.VITE_API_URL}${path}`,
+ {
+ method,
+ credentials: "include",
+ headers: {
+ "Accept": "application/json",
+ "Content-Type": "application/json",
+ ...headers,
+ },
+ body: data ? JSON.stringify(data) : null,
+ }
+ );
+
+ let responseData = null;
+
+ try {
+ responseData = await res.json();
+ } catch (_) {
+ responseData = null;
+ }
+
+ return {
+ status: res.status,
+ data: responseData,
+ };
+
+ } catch (err) {
+ console.error("❌ Erreur réseau :", err);
+
+ return {
+ status: 0,
+ data: {
+ message: "Network error",
+ },
+ };
+ }
+}
+
diff --git a/src/utils/getXSRF.js b/src/utils/getXSRF.js
deleted file mode 100644
index f1dc5fc..0000000
--- a/src/utils/getXSRF.js
+++ /dev/null
@@ -1,19 +0,0 @@
-export default async function getXSRFToken() {
- const response = await fetch(`${import.meta.env.VITE_API_URL}/sanctum/csrf-cookie`, {
- method: 'GET',
- credentials: 'include'
- });
-
- if (!response.ok && response.status !== 204) {
- throw new Error(`Error : ${response.status}`);
- }
-
- const name = 'XSRF-TOKEN';
- const value = `; ${document.cookie}`;
- const parts = value.split(`; ${name}=`);
- if (parts.length === 2) {
- return decodeURIComponent(parts.pop().split(';').shift());
- }
-
- throw new Error('Error: Invalid XSRF-TOKEN');
-}
diff --git a/src/utils/getXSRF.ts b/src/utils/getXSRF.ts
new file mode 100644
index 0000000..f96606d
--- /dev/null
+++ b/src/utils/getXSRF.ts
@@ -0,0 +1,40 @@
+/*export default async function getXSRFToken() {
+ const response = await fetch(`${import.meta.env.VITE_API_URL}/sanctum/csrf-cookie`, {
+ method: 'GET',
+ credentials: 'include'
+ });
+
+ if (!response.ok && response.status !== 204) {
+ throw new Error(`Error : ${response.status}`);
+ }
+
+ const name = 'XSRF-TOKEN';
+ const value = `; ${document.cookie}`;
+ const parts = value.split(`; ${name}=`);
+ if (parts.length === 2) {
+ return decodeURIComponent(parts.pop().split(';').shift());
+ }
+
+ throw new Error('Error: Invalid XSRF-TOKEN');
+}*/
+
+export default async function getXSRFToken(): Promise {
+ const response = await fetch(`${import.meta.env.VITE_API_URL}/sanctum/csrf-cookie`, {
+ method: 'GET',
+ credentials: 'include'
+ });
+
+ if (!response.ok && response.status !== 204) {
+ throw new Error(`Error : ${response.status}`);
+ }
+
+ const name = 'XSRF-TOKEN';
+ const value = `; ${document.cookie}`;
+ const parts = value.split(`; ${name}=`);
+ if (parts.length === 2) {
+ return decodeURIComponent(parts.pop()!.split(';').shift()!);
+ }
+
+ throw new Error('Error: Invalid XSRF-TOKEN');
+}
+
diff --git a/src/utils/users/deleteUser.js b/src/utils/users/deleteUser.js
deleted file mode 100644
index 4cb9dcf..0000000
--- a/src/utils/users/deleteUser.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import fetchWrapper from "../fetchWrapper.js";
-import getXSRFToken from "../getXSRF.js";
-
-export default async function deleteUser() {
- const csrfToken = await getXSRFToken();
-
- return fetchWrapper(
- "/api/users",
- null,
- "DELETE",
- { "X-XSRF-TOKEN": csrfToken }
- );
-}
diff --git a/src/utils/users/deleteUser.ts b/src/utils/users/deleteUser.ts
new file mode 100644
index 0000000..193e5b0
--- /dev/null
+++ b/src/utils/users/deleteUser.ts
@@ -0,0 +1,13 @@
+import fetchWrapper from "../fetchWrapper";
+import getXSRFToken from "../getXSRF";
+
+export default async function deleteUser(): Promise<{status: number;data: any;}> {
+ const csrfToken: string = await getXSRFToken();
+
+ return fetchWrapper(
+ "/api/users",
+ null,
+ "DELETE",
+ { "X-XSRF-TOKEN": csrfToken }
+ );
+}
diff --git a/src/utils/users/updateUser.js b/src/utils/users/updateUser.js
deleted file mode 100644
index af18273..0000000
--- a/src/utils/users/updateUser.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import fetchWrapper from "../fetchWrapper.js";
-import getXSRFToken from "../getXSRF.js";
-
-export default async function updateUser(name, lastname, phone) {
- const csrfToken = await getXSRFToken();
-
- return fetchWrapper(
- "/api/users/update",
- { name, lastname, phone },
- "POST",
- { "X-XSRF-TOKEN": csrfToken }
- );
-}
diff --git a/src/utils/users/updateUser.ts b/src/utils/users/updateUser.ts
new file mode 100644
index 0000000..6714250
--- /dev/null
+++ b/src/utils/users/updateUser.ts
@@ -0,0 +1,33 @@
+/*import fetchWrapper from "../fetchWrapper.js";
+import getXSRFToken from "../getXSRF.js";
+
+export default async function updateUser(name, lastname, phone) {
+ const csrfToken = await getXSRFToken();
+
+ return fetchWrapper(
+ "/api/users/update",
+ { name, lastname, phone },
+ "POST",
+ { "X-XSRF-TOKEN": csrfToken }
+ );
+}*/
+
+import fetchWrapper from "../fetchWrapper";
+import getXSRFToken from "../getXSRF";
+
+interface UserUpdateData {
+ name: string;
+ lastname: string;
+ phone: string | null;
+}
+
+interface RequestHeaders {
+ "X-XSRF-TOKEN": string;
+}
+export default async function updateUser(name: string,lastname: string,phone: string | null): Promise {
+ const csrfToken: string = await getXSRFToken();
+ const userData: UserUpdateData = {name,lastname,phone,};
+ const headers: RequestHeaders = {"X-XSRF-TOKEN": csrfToken,};
+ return fetchWrapper("/api/users/update",userData,"POST",headers);
+}
+
diff --git a/tsconfig.json b/tsconfig.json
index 693c67f..f5783f0 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -54,7 +54,7 @@
"isolatedModules": true,
"noUncheckedIndexedAccess": true,
- "exactOptionalPropertyTypes": true,
+ "exactOptionalPropertyTypes": false,
"resolveJsonModule": true,
"skipLibCheck": true