diff --git a/components/Events/Event.js b/components/Events/Event.js index 38b87ebc..4b0465a5 100644 --- a/components/Events/Event.js +++ b/components/Events/Event.js @@ -1,1220 +1,1077 @@ -/* eslint-disable react/destructuring-assignment */ -/* eslint-disable max-len */ -import React, { Component } from 'react'; -import axios from 'axios'; -import Swiper from 'swiper'; -import Select from 'react-select'; -import CreateEvent from '../CreateEvent'; -import EventCard from './EventCard'; -import EventCardFeatured from './EventCardFeatured'; -import EventCardSkeleton from './EventCardSkeleton'; -import EventCardFeaturedSkeleton from './EventCardFeaturedSkeleton'; -import 'swiper/css/swiper.min.css'; -import 'swiper/css/swiper.css'; -import EventMoreInfo from './EventMoreInfo'; -import Card from '../login-signup/card/index'; -import EventCategoryFilterButton from './EventCategoryFilterButton'; +// /* eslint-disable react/destructuring-assignment */ +// /* eslint-disable max-len */ -class Event extends Component { - constructor(props) { - super(props); - this.state = { - loading: true, - Swiperdata: [], - AllEvent: [], - PastEvent: [], - moreInfoData: [], - allsavedEvents: [], - userSavedEvents: [], - userEvents: [], - showMoreInfo: false, - createEventData: { - step: 0, - EventPicture: '', - eventName: '', - catName: '', - catNameOptions: '', - EventDescription: '', - eventLink: '', - Virtual: '', - VirtualOptions: '', - eventTime: '', - eventDate: '', - time: '', - isError: false, - }, - showCreateEvent: false, - showMyEvent: false, - eventDateTime: '', - myEvent: false, - categoryButtons: [ - { - category: 'Lectures/Webinars', - description: 'On The Hottest Topic', - activebtn: false, - }, - { - category: 'Workshops/Conferences', - description: 'Hands on Training', - activebtn: false, - }, - { - category: 'Hackathons', - description: 'Compete For Prizes', - activebtn: false, - }, - { - category: 'Incubators/Accelerators', - description: 'Start Your Tech Business', - activebtn: false, - }, +import React, { useEffect, useState } from "react"; +import axios from "axios"; +import Select from "react-select"; +import CreateEvent from "../CreateEvent"; +import EventCard from "./EventCard"; +import EventCardFeatured from "./EventCardFeatured"; +import { useRouter } from "next/router"; +import EventCardSkeleton from "./EventCardSkeleton"; +import EventCardFeaturedSkeleton from "./EventCardFeaturedSkeleton"; +import EventMoreInfo from "./EventMoreInfo"; +import Card from "../login-signup/card/index"; +import EventCategoryFilterButton from "./EventCategoryFilterButton"; +import PastEventCard from "./PastEventCard"; +import Slider from "react-slick"; +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; + +const eventdata = { + step: 0, + EventPicture: "", + eventName: "", + catName: "", + catNameOptions: "", + EventDescription: "", + eventLink: "", + Virtual: "", + VirtualOptions: "", + eventTime: "", + eventDate: "", + time: "", + isError: false, +}; + +const ctgButtons = [ + { + category: "Lectures/Webinars", + description: "On The Hottest Topic", + activebtn: false, + }, + { + category: "Workshops/Conferences", + description: "Hands on Training", + activebtn: false, + }, + { + category: "Hackathons", + description: "Compete For Prizes", + activebtn: false, + }, + { + category: "Incubators/Accelerators", + description: "Start Your Tech Business", + activebtn: false, + }, +]; + +const Event = (props) => { + const [Swiperdata, setSwiperData] = useState([]); + const [loading, setLoading] = useState(true); + const [AllEvent, setAllEvent] = useState([]); + const [PastEvent, setPastEvent] = useState([]); + const [moreInfoData, setMoreInfoData] = useState([]); + const [allsavedEvents, setAllSavedEvents] = useState([]); + const [userSavedEvents, setUserSavedEvents] = useState([]); + const [userEvents, setUserEvents] = useState([]); + const [showMoreInfo, setShowMoreInfo] = useState(false); + const [createEventData, setCreateEventData] = useState(eventdata); + const [showCreateEvent, setShowCreateEvent] = useState(false); + const [showMyEvent, setShowMyEvent] = useState(false); + const [eventDateTime, setEventDateTime] = useState(""); + const [myEvent, setMyEvent] = useState(false); + const [categoryButtons, setCategoryButtons] = useState(ctgButtons); + const [categoryButtonsActiveIndex, setCategoryButtonsActiveIndex] = + useState(-1); + const [categoryFilterLoading, setCategoryFilterLoading] = useState(false); + const [filter, setFilters] = useState({ + event_time: "", + catName: "", + Virtual: "", + Featured: "", + }); + const [categories, setCategories] = useState([]); + const [currentIndex, setCurrentIndex] = useState(0); + const [sliderRef, setSliderRef] = useState(null); + const { userData, active, clickRegister, setClickRegister, token } = props; + + const options = [ + { + label: "Event Location", + options: [ + { label: "Virtual Event", value: "Virtual Event" }, + { label: "In-person Event", value: "In-person Event" }, ], - categoryButtonsActiveIndex: -1, - catergoryFilterLoading: false, - filter: { - event_time: '', - catName: '', - Virtual: '', - Featured: '', - }, - categories: [], - }; - } + }, + { + label: "happening in", + options: [ + { label: "Week", value: "Week" }, + { label: "Month", value: "Month" }, + ], + }, + { + label: "Cost", + options: [ + { label: "Free", value: "Free" }, + { label: "Paid", value: "Paid" }, + ], + }, + ]; + + const router = useRouter(); - // fetch events when page loaded - async componentDidMount() { + useEffect(() => { Promise.all([ - this.getEvents(), - this.getSavedEvents(), - this.findSavedEvents(), - this.getUserSavedEvents(), + getEvents(), + getSavedEvents(), + findSavedEvents(), + getUserSavedEvents(), ]) .then(() => { setTimeout(() => { - this.setState({ loading: false }); + setLoading(false); }, 1500); }) .catch((err) => console.error(err)); - } + }, []); - componentDidUpdate(prevProps, prevState) { - if (prevState.Swiperdata !== this.state.Swiperdata) { - const swiper = new Swiper('.swiper-container', { - direction: 'horizontal', - navigation: { - nextEl: '.swiper-button-next', - prevEl: '.swiper-button-prev', - }, - centeredSlides: false, - spaceBetween: 50, - loop: false, - reverseDirection: true, - stopOnLastSlide: false, - // loopAdditionalSlides: 1000, - preloadImages: true, - updateOnImagesReady: true, - observeParents: true, - observer: true, - breakpoints: { - // when window width is >= 640px - 1: { - slidesPerView: 1, - }, - // when window width is >= 918px - 918: { - slidesPerView: 1.5, - }, - // when window width is >= 1400px - 1400: { - slidesPerView: 2.3, - }, - // when window width is >= 2400px - 2400: { - slidesPerView: 3, - }, - }, - }); - } - } - - // fetch Event data - getEvents = async () => { + const getEvents = async () => { const dateNow = Date.now(); await axios.get(`${process.env.BASE_URI}/event`).then((response) => { - this.setState({ - AllEvent: response.data.data.filter((event) => { + setAllEvent(() => + response.data.data.filter((event) => { const eventTime = new Date(event.time).getTime(); if ( - dateNow < eventTime - && event.approved !== null - && event.approved === true - ) { + dateNow < eventTime && + event.approved !== null && + event.approved === true + ) return event; - } - }), - }); + }) + ); - this.setState({ - Swiperdata: response.data.data.filter((event) => { + setSwiperData(() => + response.data.data.filter((event) => { const eventTime = new Date(event.time).getTime(); if (event.approved !== null && event.approved === true) { return event.Featured === true; } - }), - }); + }) + ); - this.setState({ - PastEvent: response.data.data + setPastEvent(() => + response.data.data .filter((event) => { const eventTime = new Date(event.time).getTime(); if ( - dateNow > eventTime - && event.approved !== null - && event.approved === true + dateNow > eventTime && + event.approved !== null && + event.approved === true ) { return event; } }) - .sort((a, b) => new Date(a.time) - new Date(b.time)), - }); + .sort((a, b) => new Date(a.time) - new Date(b.time)) + ); }); }; - // fetch SavedEvents data from a user - getSavedEvents = async () => { - const token = window.localStorage.getItem('jwtToken'); + const getSavedEvents = async () => { + const token = window.localStorage.getItem("jwtToken"); return axios .get(`${process.env.BASE_URI}/saveEvent/`, { headers: { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': 'GET', - 'Access-Control-Allow-Headers': 'Content-Type', + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "GET", + "Access-Control-Allow-Headers": "Content-Type", Authorization: `Bearer ${token}`, - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, }) - .then((res) => { - this.setState({ - allsavedEvents: res.data.data, - }); - }); + .then((res) => setAllSavedEvents(res.data.data)); }; - getUserSavedEvents = async () => { - const token = window.localStorage.getItem('jwtToken'); + const getUserSavedEvents = async () => { + const token = window.localStorage.getItem("jwtToken"); if (token != null) { return axios .get(`${process.env.BASE_URI}/saveEvent/userEvents`, { headers: { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': 'GET', - 'Access-Control-Allow-Headers': 'Content-Type', + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "GET", + "Access-Control-Allow-Headers": "Content-Type", Authorization: `Bearer ${token}`, - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, }) .then((res) => { - this.setState({ - userEvents: res.data.data, - userSavedEvents: res.data.data, - }); + setUserEvents(res.data.data); + setUserSavedEvents(res.data.data); }); } }; - setEventState = (response) => { + const setEventState = (response) => { const dateNow = Date.now(); - this.setState({ - AllEvent: response.data.filter((event) => { + setAllEvent(() => + response?.data?.filter((event) => { const eventTime = new Date(event.time).getTime(); if ( - dateNow < eventTime - && event.approved !== null - && event.approved === true + dateNow < eventTime && + event.approved !== null && + event.approved === true ) { return event; } - }), - }); - this.setState({ - Swiperdata: response.data.filter((event) => { + }) + ); + + setSwiperData(() => + response?.data?.filter((event) => { const eventTime = new Date(event.time).getTime(); if (event.approved !== null && event.approved === true) { - return event.Featured === true; + return event.Featured; } - }), - }); - this.setState({ - PastEvent: response.data - .filter((event) => { + }) + ); + setPastEvent(() => + response?.data + ?.filter((event) => { const eventTime = new Date(event.time).getTime(); if ( - dateNow > eventTime - && event.approved !== null - && event.approved === true + dateNow > eventTime && + event.approved !== null && + event.approved === true ) { return event; } }) - .sort((a, b) => new Date(a.time) - new Date(b.time)), - }); - this.setState({ catergoryFilterLoading: false }); + .sort((a, b) => new Date(a.time) - new Date(b.time)) + ); + setCategoryFilterLoading(false); }; - filterEvents = () => { - const { filter } = this.state; - this.setState({ catergoryFilterLoading: true }); + const filterEvents = () => { + setCategoryFilterLoading(true); fetch( - `${process.env.BASE_URI}/event/?Virtual=${filter.Virtual}&event_time=${filter.event_time}&catName=${filter.catName}`, + `${process.env.BASE_URI}/event/?Virtual=${filter.Virtual}&event_time=${filter.event_time}&catName=${filter.catName}` ) .then((response) => response.json()) .then((response) => { setTimeout(() => { - this.setEventState(response); + setEventState(response); }, 1500); }); }; - findSavedEvents = () => { - if (this.props.userData !== null) { - this.state.userEvents.map((all) => { + const findSavedEvents = () => { + if (userData !== null) { + userEvents?.map((all) => { if (all.event_id !== null) { if ( - all.user_id._id === this.props.userData._id - && all.event_id.approved !== null - && all.event_id.approved === true + all.user_id._id === userData._id && + all.event_id.approved !== null && + all.event_id.approved === true ) { - this.setState({ - userSavedEvents: [...this.state.userSavedEvents, all], - }); + setUserSavedEvents((current) => [...current, all]); } } }); - this.setState({ - userSavedEvents: this.state.allsavedEvents.filter( - (event) => event.user_id._id === this.props.userData._id, - ), - }); - - return this.state.userSavedEvents; + setUserSavedEvents((current) => + current.filter((event) => event.user_id._id === userData._id) + ); + return userSavedEvents; } return false; }; - render() { - const { - userData, active, clickRegister, setClickRegister, token, - } = this.props; - const { userSavedEvents, allsavedEvents } = this.state; - - const options = [ - { - label: 'Event Location', - options: [ - { label: 'Virtual Event', value: 'Virtual Event' }, - { label: 'In-person Event', value: 'In-person Event' }, - ], - }, - { - label: 'happening in', - options: [ - { label: 'Week', value: 'Week' }, - { label: 'Month', value: 'Month' }, - ], - }, - { - label: 'Cost', - options: [ - { label: 'Free', value: 'Free' }, - { label: 'Paid', value: 'Paid' }, - ], - }, - ]; + const handleSubmit = async (e) => { + e.preventDefault(); - const handleSubmit = async (e) => { - e.preventDefault(); + if (e.target.childNodes[0].value) { + const searchValue = e.target.childNodes[0].value; + setAllEvent((current) => + [...current].filter((event) => + event.eventName.toLowerCase().includes(searchValue.toLowerCase()) + ) + ); + setPastEvent((current) => + [...current].filter((event) => + event.eventName.toLowerCase().includes(searchValue.toLowerCase()) + ) + ); + setSwiperData((current) => + [...current].filter((event) => + event.eventName.toLowerCase().includes(searchValue.toLowerCase()) + ) + ); + } else { + filterEvents(); + } + }; - if (e.target.childNodes[0].value) { - const searchValue = e.target.childNodes[0].value; - this.setState({ - AllEvent: [...this.state.AllEvent].filter((event) => event.eventName.toLowerCase().includes(searchValue.toLowerCase())), - }); - this.setState({ - PastEvent: [...this.state.PastEvent].filter((event) => event.eventName.toLowerCase().includes(searchValue.toLowerCase())), - }); - this.setState({ - Swiperdata: [...this.state.Swiperdata].filter((event) => event.eventName.toLowerCase().includes(searchValue.toLowerCase())), - }); + const handleMoreInfo = (item) => { + if (showCreateEvent === true) { + if (showMoreInfo === true) { + setMoreInfoData([]); + setShowMoreInfo(false); } else { - this.filterEvents(); + setMoreInfoData(createEventData); + setShowMoreInfo(true); } - }; - // Handle showMoreInfo change - const handleMoreInfo = (item) => { - if (this.state.showCreateEvent === true) { - if (this.state.showMoreInfo === true) { - this.setState({ moreInfoData: [], showMoreInfo: false }); - } else { - const data = this.state.createEventData; - this.setState({ moreInfoData: data, showMoreInfo: true }); - } - } else if (this.state.showMoreInfo === false) { - this.setState({ moreInfoData: item, showMoreInfo: true }); - } else { - this.setState({ moreInfoData: [], showMoreInfo: false }); - } - }; - const handleCreateEvent = () => { - if (this.state.showCreateEvent === false) { - this.setState({ showCreateEvent: true }); + } else if (showMoreInfo === false) { + setMoreInfoData(item); + setShowMoreInfo(true); + } else { + setMoreInfoData([]); + setShowMoreInfo(false); + } + }; + + const handleCreateEvent = () => { + if (showCreateEvent === false) { + showCreateEvent(true); + } else { + showCreateEvent(false); + const changedState = { + ...createEventData, + step: 0, + EventPicture: "", + }; + setCreateEventData(changedState); + } + }; + + const handleError = (input) => { + let changedState = { ...createEventData }; + if (input === "isError") { + if (createEventData.isError === false) { + changedState = { ...createEventData, [input]: true }; } else { - this.setState({ showCreateEvent: false }); - const changedState = { - ...this.state.createEventData, - step: 0, - EventPicture: '', - }; - this.setState({ createEventData: changedState }); + changedState = { ...createEventData, [input]: false }; } - }; + setCreateEventData(changedState); + } + }; - const handleError = (input) => { - let changedState = { ...this.state.createEventData }; - if (input === 'isError') { - if (this.state.createEventData.isError === false) { - changedState = { ...this.state.createEventData, [input]: true }; - } else { - changedState = { ...this.state.createEventData, [input]: false }; - } - this.setState({ createEventData: changedState }); - } - }; + const conditionalInfinite = { + arrows: false, + dots: false, + speed: 2000, + slidesToShow: 2, + infinite: Swiperdata?.length > 2, + autoplay: true, + slidesToScroll: 1, + className: "profile__projects-slider", + afterChange: (current) => setCurrentIndex(current), + responsive: [ + { + breakpoint: 1755, + settings: { + slidesToShow: 2, + infinite: Swiperdata?.length > 2, + }, + }, + { + breakpoint: 1180, + settings: { + slidesToShow: 1, + infinite: Swiperdata?.length > 1, + }, + }, + ], + }; - const handleEventDateTime = (inputDateTime) => { - this.setState({ - eventDateTime: inputDateTime.toISOString(), - }); - const changedState = [this.state.createEventData]; - changedState[0].time = inputDateTime.toISOString(); - this.setState({ changedState }); - }; + const handleEventDateTime = (inputDateTime) => { + setEventDateTime(inputDateTime.toISOString()); + const changedState = [...createEventData]; + changedState[0].time = inputDateTime.toISOString(); + setCreateEventData(changedState); + }; - const handleCreateEventData = (input) => (e) => { - if (input === 'step') { - const { step } = this.state.createEventData; - const changedState = { - ...this.state.createEventData, - [input]: step + 1, - }; - this.setState({ createEventData: changedState }); - if (step === 2) { - handleMoreInfo(); + const handleCreateEventData = (input) => (e) => { + if (input === "step") { + const { step } = createEventData; + const changedState = { + ...createEventData, + [input]: step + 1, + }; + setCreateEventData(changedState); + if (step === 2) { + handleMoreInfo(); + } + } else if (input === "catName" || input === "Virtual") { + if (input === "eventDate") { + if (createEventData?.eventTime?.length === 0) { + const changedState = { + ...createEventData, + [input]: e.target.value, + time: `${e.target.value}T00:00:00.000Z`, + }; + setCreateEventData(changedState); + } else { + const changedState = { + ...createEventData, + [input]: e.target.value, + time: `${e.target.value}T${createEventData?.eventTime}:00.000Z`, + }; + createEventData(changedState); } - } else if (input === 'catName' || input === 'Virtual') { - const changedState = { - ...this.state.createEventData, - [input]: e.value, - [`${input}Options`]: e, - }; - this.setState({ createEventData: changedState }); - } else if (input === 'eventDate' || input === 'eventTime') { - if (input === 'eventDate') { - if (this.state.createEventData.eventTime.length === 0) { - const changedState = { - ...this.state.createEventData, - [input]: e.target.value, - time: `${e.target.value}T00:00:00.000Z`, - }; - this.setState({ createEventData: changedState }); - } else { - const changedState = { - ...this.state.createEventData, - [input]: e.target.value, - time: `${e.target.value}T${this.state.createEventData.eventTime}:00.000Z`, - }; - this.setState({ createEventData: changedState }); - } - } else if (input === 'eventTime') { - if (this.state.createEventData.eventDate.length === 0) { - const changedState = { - ...this.state.createEventData, - [input]: e.target.value, - time: `2021-01-01'T${e.target.value}:00.000Z`, - }; - this.setState({ createEventData: changedState }); - } else { - const changedState = { - ...this.state.createEventData, - [input]: e.target.value, - time: `${this.state.createEventData.eventDate}T${e.target.value}:00.000Z`, - }; - this.setState({ createEventData: changedState }); - } + } else if (input === "eventTime") { + if (createEventData.eventDate?.length === 0) { + const changedState = { + ...createEventData, + [input]: e.target.value, + time: `2021-01-01'T${e.target.value}:00.000Z`, + }; + setCreateEventData(changedState); } - } else { - const changedState = { - ...this.state.createEventData, - [input]: e.target.value, - }; - this.setState({ createEventData: changedState }); } - }; - - const handleCreateEventPicture = (input) => { + } else { const changedState = { - ...this.state.createEventData, - EventPicture: input, + ...createEventData, + [input]: e.target.value, }; - this.setState({ createEventData: changedState }); - }; + setCreateEventData(changedState); + } + }; - const selectStyles = { - menu: (provided) => ({ - ...provided, - padding: 10, - cursor: 'pointer', - backgroundColor: 'var(--secondary-high-contrast)', - zIndex: '2', - }), - input: (provided) => ({ - ...provided, - padding: 0, - height: 50, - minHeight: 50, - }), - container: (provided) => ({ - ...provided, - padding: 0, - height: 50, - minHeight: 50, - width: 200, - minWidth: 200, - '@media only screen and (max-width: 666px)': { - width: '80%', - minWidth: '80%', - }, - }), - indicatorsContainer: (provided) => ({ - ...provided, - padding: 0, - height: 50, - minHeight: 50, - }), - valueContainer: (provided) => ({ - ...provided, - height: 50, - minHeight: 50, - }), - control: (base) => ({ - ...base, - backgroundColor: 'var(--secondary-high-contrast)', - '&:hover': { borderColor: 'var(--tertiary-accent-3)' }, - border: '1px solid var(--secondary-accent)', - boxShadow: 'none', - padding: 0, - height: 50, - minHeight: 50, - }), - option: (provided, state) => ({ - ...provided, - backgroundColor: state.isSelected ? 'var(--tertiary-low-contrast)' : 'none', - '&:hover': { backgroundColor: 'var(--tertiary-high-contrast)' }, - '&:focused': { backgroundColor: 'none' }, - color: '#fff', - cursor: 'pointer', - padding: 10, - }), - placeholder: (base) => ({ - ...base, - fontSize: '1em', - color: 'var(--light-low-contrast)', - fontWeight: 500, - }), - indicatorSeparator: (base) => ({ - ...base, - display: 'none', - }), - groupHeading: (base) => ({ - ...base, - fontSize: '1.02em', - color: '#afafaf', - fontWeight: 700, - }), + const handleCreateEventPicture = (input) => { + const changedState = { + ...createEventData, + EventPicture: input, }; + setCreateEventData(changedState); + }; - const fetchEvents = async () => { - const dateNow = Date.now(); - const response = await axios.get(`${process.env.BASE_URI}/event`, { - headers: { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': 'POST, GET', - 'Access-Control-Allow-Headers': 'Content-Type', - }, - }); - this.setState({ - Swiperdata: response.data.data.filter((event) => { - const eventTime = new Date(event.time).getTime(); - if ( - dateNow < eventTime - && event.approved !== null - && event.approved === true - ) { - return event.Featured === true; - } - }), - }); - this.setState({ - AllEvent: response.data.data.filter((event) => { - const eventTime = new Date(event.time).getTime(); - if ( - dateNow < eventTime - && event.approved !== null - && event.approved === true - ) { - return event; - } - }), - }); - this.setState({ - PastEvent: response.data.data.filter((event) => { - const eventTime = new Date(event.time).getTime(); - if ( - dateNow > eventTime - && event.approved !== null - && event.approved === true - ) { - return event; - } - }), - }); - }; + const selectStyles = { + menu: (provided) => ({ + ...provided, + padding: 10, + cursor: "pointer", + backgroundColor: "var(--secondary-high-contrast)", + zIndex: "2", + }), + input: (provided) => ({ + ...provided, + padding: 0, + height: 50, + minHeight: 50, + }), + container: (provided) => ({ + ...provided, + height: 50, + minHeight: 50, + width: 200, + minWidth: 200, - const onChangeInput = async (value) => { - if ((await value) != null) { - if (value.value === 'Virtual Event') { - this.setState((prevState) => ({ - filter: { - ...prevState.filter, - Virtual: true, - }, - })); - } - if (value.value === 'In-person Event') { - this.setState((prevState) => ({ - filter: { - ...prevState.filter, - Virtual: false, - }, - })); + "@media only screen and (max-width: 666px)": { + width: "80%", + minWidth: "80%", + }, + }), + indicatorsContainer: (provided) => ({ + ...provided, + padding: 0, + height: 50, + minHeight: 50, + }), + valueContainer: (provided) => ({ + ...provided, + height: 50, + minHeight: 50, + }), + control: (base) => ({ + ...base, + backgroundColor: "var(--secondary-high-contrast)", + "&:hover": { borderColor: "#6938EF" }, + border: "1px solid var(--secondary-accent)", + boxShadow: "none", + padding: 0, + height: 50, + minHeight: 50, + borderRadius: "50px", + }), + option: (provided, state) => ({ + ...provided, + backgroundColor: state.isSelected ? "#6938EF" : "none", + "&:hover": { + backgroundColor: "#6938EF", + transition: "all 0.3s ease-in", + }, + "&:focused": { backgroundColor: "#6938EF", color: "#6938EF" }, + color: "#fff", + cursor: "pointer", + padding: 10, + }), + placeholder: (base) => ({ + ...base, + fontSize: "12px", + color: "#fff", + fontWeight: 500, + }), + indicatorSeparator: (base) => ({ + ...base, + display: "none", + }), + groupHeading: (base) => ({ + ...base, + fontSize: "1.02em", + color: "#fff", + fontWeight: 700, + }), + }; + + const fetchEvents = async () => { + const dateNow = Date.now(); + const response = await axios.get(`${process.env.BASE_URI}/event`, { + headers: { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "POST, GET", + "Access-Control-Allow-Headers": "Content-Type", + }, + }); + setSwiperData(() => + response.data.data.filter((event) => { + const eventTime = new Date(event.time).getTime(); + if ( + dateNow < eventTime && + event.approved !== null && + event.approved === true + ) { + return event.Featured === true; } - if (value.value === 'Week') { - this.setState((prevState) => ({ - filter: { - ...prevState.filter, - event_time: 'week', - }, - })); + }) + ); + setAllEvent(() => + response.data.data.filter((event) => { + const eventTime = new Date(event.time).getTime(); + if ( + dateNow < eventTime && + event.approved !== null && + event.approved === true + ) { + return event; } - if (value.value === 'Month') { - this.setState((prevState) => ({ - filter: { - ...prevState.filter, - event_time: 'month', - }, - })); + }) + ); + setPastEvent(() => + response.data.data.filter((event) => { + const eventTime = new Date(event.time).getTime(); + if ( + dateNow > eventTime && + event.approved !== null && + event.approved === true + ) { + return event; } - } else { - fetchEvents(); - } - - this.filterEvents(); - }; + }) + ); + }; - const { - categoryButtons, - categoryButtonsActiveIndex, - catergoryFilterLoading, - AllEvent, - PastEvent, - Swiperdata, - } = this.state; + const onChangeInput = async (value) => { + if ((await value) !== null) { + if (value.value === "Virtual Event") { + setFilters((current) => [{ ...current.filter, Virtual: true }]); + } + if (value.value === "In-person Event") { + setFilters((current) => [{ ...current.filter, Virtual: false }]); + } + if (value.value === "Week") { + setFilters((current) => [{ ...current.filter, event_time: "week" }]); + } + if (value.value === "Month") { + setFilters((current) => [{ ...current.filter, event_time: "month" }]); + } + } else { + fetchEvents(); + } + filterEvents(); + }; - const categoryFilter = async (idx) => { - this.setState({ catergoryFilterLoading: true }); - await this.setState({ categoryButtonsActiveIndex: idx }); + const categoryFilter = async (idx) => { + setCategoryFilterLoading(true); + setCategoryButtonsActiveIndex(idx); - if (idx === categoryButtonsActiveIndex) { - await this.setState({ categoryButtonsActiveIndex: -1 }); + if (idx === categoryButtonsActiveIndex) { + setCategoryButtonsActiveIndex(-1); + } + if (idx !== -1) { + if (idx === 0) { + if (categories.includes("Webinar") || categories.includes("Lecture")) { + setCategories((current) => + [...current].filter( + (category) => category !== "Webinar" && category !== "Lecture" + ) + ); + } + } else { + setCategories((current) => [...current, "Webinar", "Lecture"]); } - if (idx !== -1) { - if (idx === 0) { - if ( - (await this.state.categories.includes('Webinar')) - || this.state.categories.includes('Lecture') - ) { - this.setState({ - categories: [...this.state.categories].filter( - (category) => category !== 'Webinar' && category !== 'Lecture', - ), - }); - } else { - await this.setState({ - categories: [...this.state.categories, 'Webinar', 'Lecture'], - }); - } - } - await this.setState((prevState) => ({ - filter: { - ...prevState.filter, - catName: this.state.categories, - }, - })); - if (idx === 1) { - if ( - this.state.categories.includes('Workshop') - || this.state.categories.includes('Conference') - ) { - this.setState({ - categories: [...this.state.categories].filter( - (category) => category !== 'Workshop' && category !== 'Conference', - ), - }); - } else { - await this.setState({ - categories: [...this.state.categories, 'Workshop', 'Conference'], - }); - } - } - await this.setState((prevState) => ({ - filter: { - ...prevState.filter, - catName: this.state.categories, - }, - })); - if (idx === 2) { - if (this.state.categories.includes('Hackathon')) { - this.setState({ - categories: [...this.state.categories].filter( - (category) => category !== 'Hackathon', - ), - }); - } else { - await this.setState({ - categories: [...this.state.categories, 'Hackathon'], - }); - } + setFilters((current) => [{ ...current, catName: categories }]); + if (idx === 1) { + if ( + categories.includes("Workshop") || + categories.includes("Conference") + ) { + setCategories((current) => + [...current].filter((category) => { + category !== "Workshop" && category !== "Conference"; + }) + ); + } else { + setCategories((current) => [...current, "Workshop", "Conference"]); } - await this.setState((prevState) => ({ - filter: { - ...prevState.filter, - catName: this.state.categories, - }, - })); - if (idx === 3) { - if ( - this.state.categories.includes('Incubator') - || this.state.categories.includes('Accelerator') - ) { - this.setState({ - categories: [...this.state.categories].filter( - (category) => category !== 'Incubator' && category !== 'Accelerator', - ), - }); - } else { - await this.setState({ - categories: [ - ...this.state.categories, - 'Incubator', - 'Accelerator', - ], - }); - } + } + setFilters((current) => [{ ...current, catName: categories }]); + if (idx === 2) { + if (categories.includes("Hackathon")) { + setCategories((current) => + [...current].filter((category) => category !== "Hackathon") + ); + } else { + setCategories((current) => [...current, "Hackathon"]); } - await this.setState((prevState) => ({ - filter: { - ...prevState.filter, - catName: this.state.categories, - }, - })); - } /* else { } */ - this.filterEvents(); - }; + } + setFilters((current) => [{ ...current, catName: categories }]); - const searchNoValue = (e) => { - if (!e.target.value) fetchEvents(); - }; + if (idx === 3) { + if ( + categories.includes("Incubator") || + categories.includes("Accelerator") + ) { + setCategories((current) => + [...current].filter( + (category) => + category !== "Incubator" && category !== "Accelerator" + ) + ); + } else { + setCategories((current) => [...current, "Incubator, Accelerator"]); + } + } + setFilters((current) => [{ ...current, catName: categories }]); + } + filterEvents(); + }; - const resetFilter = async () => { - await this.setState({ categories: [] }); - this.setState((prevState) => ({ - filter: { - ...prevState.filter, - catName: this.state.categories, - }, - })); + const searchNoValue = (e) => { + if (!e.target.value) fetchEvents(); + }; - this.setState({ categoryButtonsActiveIndex: -1 }); + const resetFilter = () => { + setCategories([]); + setFilters((current) => [{ ...current, catName: categories }]); + setCategoryButtonsActiveIndex(-1); + categoryButtons?.map((button) => { + button.activebtn = false; + }); + filterEvents(); + }; - this.state.categoryButtons.map((button) => { - button.activebtn = false; - }); - this.filterEvents(); - }; + const clearFilters = () => [ + getEvents(), + getSavedEvents(), + getUserSavedEvents(), + filterEvents(), + ]; - return ( -