From 2ecc64f821affcb67cd16b96c02b84b9654f48c8 Mon Sep 17 00:00:00 2001 From: Sendou <38327916+Sendouc@users.noreply.github.com> Date: Fri, 15 May 2020 23:05:25 +0300 Subject: [PATCH] filter for tournaments page --- .../src/components/calendar/CalendarPage.tsx | 47 +++++++++++++------ .../src/components/elements/Input.tsx | 9 +++- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/frontend-react/src/components/calendar/CalendarPage.tsx b/frontend-react/src/components/calendar/CalendarPage.tsx index 8499245e7..60f5a72cb 100644 --- a/frontend-react/src/components/calendar/CalendarPage.tsx +++ b/frontend-react/src/components/calendar/CalendarPage.tsx @@ -1,20 +1,22 @@ -import React, { useContext } from "react" import { useQuery } from "@apollo/react-hooks" -import { - UPCOMING_EVENTS, - UpcomingEventsData, -} from "../../graphql/queries/upcomingEvents" +import { Badge, Box, Divider, Flex } from "@chakra-ui/core" import { RouteComponentProps } from "@reach/router" -import PageHeader from "../common/PageHeader" -import Loading from "../common/Loading" -import Error from "../common/Error" -import { getWeek, ordinal_suffix_of } from "../../utils/helperFunctions" -import SubHeader from "../common/SubHeader" -import { Box, Badge, Flex, Divider } from "@chakra-ui/core" -import { months, days } from "../../utils/lists" -import MyThemeContext from "../../themeContext" -import TournamentInfo from "./TournamentInfo" +import React, { useContext, useState } from "react" import { Helmet } from "react-helmet-async" +import { + UpcomingEventsData, + UPCOMING_EVENTS, +} from "../../graphql/queries/upcomingEvents" +import MyThemeContext from "../../themeContext" +import { getWeek, ordinal_suffix_of } from "../../utils/helperFunctions" +import { days, months } from "../../utils/lists" +import Error from "../common/Error" +import Loading from "../common/Loading" +import PageHeader from "../common/PageHeader" +import SubHeader from "../common/SubHeader" +import TournamentInfo from "./TournamentInfo" +import Input from "../elements/Input" +import { FaFilter } from "react-icons/fa" const badgeColor: { [key: string]: string } = { Friday: "purple", @@ -25,6 +27,7 @@ const badgeColor: { [key: string]: string } = { const CalendarPage: React.FC = () => { const { darkerBgColor, grayWithShade } = useContext(MyThemeContext) const { data, error, loading } = useQuery(UPCOMING_EVENTS) + const [filter, setFilter] = useState("") if (loading) return if (error) return @@ -35,13 +38,27 @@ const CalendarPage: React.FC = () => { let lastPrintedDay: number | null = null let lastPrintedMonth: number | null = null const thisWeekNumber = getWeek(new Date()) + + const filteredTournaments = events.filter( + (event) => + event.name.toLowerCase().includes(filter.toLowerCase()) || + `${event.poster_discord_user.username}#${event.poster_discord_user.discord_id}` + .toLowerCase() + .includes(filter.toLowerCase()) + ) return ( <> Competitive Calendar | sendou.ink - {events.map((event) => { + setFilter(value)} + label="Filter tournaments" + icon={FaFilter} + /> + {filteredTournaments.map((event) => { const time = new Date(parseInt(event.date)) const weekNumber = getWeek(time) const thisDay = time.getDate() diff --git a/frontend-react/src/components/elements/Input.tsx b/frontend-react/src/components/elements/Input.tsx index 9338a3a6e..7f5aed700 100644 --- a/frontend-react/src/components/elements/Input.tsx +++ b/frontend-react/src/components/elements/Input.tsx @@ -4,9 +4,12 @@ import { InputGroup, InputLeftAddon, Box, + InputLeftElement, + Icon, } from "@chakra-ui/core" import MyThemeContext from "../../themeContext" import Label from "./Label" +import { IconType } from "react-icons/lib/cjs" interface InputProps { value?: string @@ -17,6 +20,7 @@ interface InputProps { disabled?: boolean textLeft?: string size?: "sm" | "md" | "lg" + icon?: IconType } const Input: React.FC = ({ @@ -28,8 +32,9 @@ const Input: React.FC = ({ limit, textLeft, size, + icon, }) => { - const { themeColorHex, grayWithShade, darkerBgColor } = useContext( + const { themeColorHex, grayWithShade, darkerBgColor, textColor } = useContext( MyThemeContext ) @@ -41,6 +46,8 @@ const Input: React.FC = ({ {label && } {textLeft && {textLeft}} + } /> + {icon && }