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..754f071 100644 --- a/src/components/Footer/Footer.jsx +++ b/src/components/Footer/Footer.jsx @@ -2,7 +2,7 @@ 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 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..becbc76 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 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.jsx index 822398c..82d60a2 100644 --- a/src/components/ui/modal/modal.jsx +++ b/src/components/ui/modal/modal.jsx @@ -1,6 +1,6 @@ import { createPortal } from "react-dom"; import styles from "./modal.module.css"; -import Button from "../button/button.jsx"; +import Button from "../button/button.tsx"; const Modal = ({ open, onClose, children, title }) => { 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/pages/Admin/components/pendingMembers/PendingMembers.jsx b/src/pages/Admin/components/pendingMembers/PendingMembers.jsx index 69dc4e4..151856e 100644 --- a/src/pages/Admin/components/pendingMembers/PendingMembers.jsx +++ b/src/pages/Admin/components/pendingMembers/PendingMembers.jsx @@ -1,5 +1,5 @@ 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 getUserToValidate from "../../../../utils/users/getUserToValidate.js"; 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..80654f3 100644 --- a/src/pages/Login/components/loginform/loginForm.jsx +++ b/src/pages/Login/components/loginform/loginForm.jsx @@ -1,7 +1,7 @@ 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 Button from "../../../../components/ui/button/button.tsx"; +import Input from "../../../../components/ui/input/input.tsx"; import Modal from "../../../../components/ui/modal/modal.jsx"; 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..a831fba 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 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..f3bebaa 100644 --- a/src/pages/Register/RegisterPage.jsx +++ b/src/pages/Register/RegisterPage.jsx @@ -1,7 +1,7 @@ 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"; diff --git a/src/pages/VolunteerProfile/components/manageMember/ManageMember.jsx b/src/pages/VolunteerProfile/components/manageMember/ManageMember.jsx index 6266501..2ee7fc0 100644 --- a/src/pages/VolunteerProfile/components/manageMember/ManageMember.jsx +++ b/src/pages/VolunteerProfile/components/manageMember/ManageMember.jsx @@ -1,4 +1,4 @@ -import Button from "../../../../components/ui/button/button.jsx"; +import Button from "../../../../components/ui/button/button.tsx"; import Modal from "../../../../components/ui/modal/modal.jsx"; import {useContext, useState} from "react"; import styles from "./manageMember.module.css" diff --git a/src/pages/VolunteerProfile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx b/src/pages/VolunteerProfile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx index ccb8390..af6c7af 100644 --- a/src/pages/VolunteerProfile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx +++ b/src/pages/VolunteerProfile/components/manageMember/deactivateMember/deactivateMemberBtn.jsx @@ -1,4 +1,4 @@ -import Button from "../../../../../components/ui/button/button.jsx"; +import Button from "../../../../../components/ui/button/button.tsx"; import Modal from "../../../../../components/ui/modal/modal.jsx"; import { useState } from "react"; import deactivateUser from "../../../../../utils/users/deactivateUser.js" diff --git a/src/pages/VolunteerProfile/components/manageMember/modifyrole/ModifyRole.jsx b/src/pages/VolunteerProfile/components/manageMember/modifyrole/ModifyRole.jsx index bc4d495..b5ac70b 100644 --- a/src/pages/VolunteerProfile/components/manageMember/modifyrole/ModifyRole.jsx +++ b/src/pages/VolunteerProfile/components/manageMember/modifyrole/ModifyRole.jsx @@ -1,5 +1,5 @@ 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"; 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..2c60a79 100644 --- a/src/pages/eventDetail/components/EventTask/EventTask.jsx +++ b/src/pages/eventDetail/components/EventTask/EventTask.jsx @@ -1,6 +1,6 @@ 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"; diff --git a/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx b/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx index 8862ada..a6bdb89 100644 --- a/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx +++ b/src/pages/eventDetail/components/createTaskBtn/createTaskBtn.jsx @@ -1,7 +1,7 @@ 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 TextInput from "../../../../components/ui/input/input.tsx"; import Modal from "../../../../components/ui/modal/modal.jsx"; 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..92eb5c3 100644 --- a/src/pages/eventDetail/components/deleteEventBtn/deleteEventBtn.jsx +++ b/src/pages/eventDetail/components/deleteEventBtn/deleteEventBtn.jsx @@ -1,5 +1,5 @@ import styles from "../../eventDetail.module.css"; -import Button from "../../../../components/ui/button/button.jsx"; +import Button from "../../../../components/ui/button/button.tsx"; import Modal from "../../../../components/ui/modal/modal.jsx"; import { useContext, useState } from "react"; import { EventDetailContext } from "../../../../contexts/eventDetail/eventDetail.js"; diff --git a/src/pages/eventDetail/components/deleteTaskBtn/deleteTaskBtn.jsx b/src/pages/eventDetail/components/deleteTaskBtn/deleteTaskBtn.jsx index fdad16f..28f507a 100644 --- a/src/pages/eventDetail/components/deleteTaskBtn/deleteTaskBtn.jsx +++ b/src/pages/eventDetail/components/deleteTaskBtn/deleteTaskBtn.jsx @@ -1,7 +1,7 @@ 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 styles from "../../eventDetail.module.css"; 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..eb0b6ec 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 Button from "../components/ui/button/button.tsx"; import { useState } from "react"; export default {