From c9be87cbb02f0d6f9ca5a35cfe5592d417af8332 Mon Sep 17 00:00:00 2001 From: VividTruthKeeper Date: Thu, 22 Sep 2022 21:31:07 +0500 Subject: [PATCH] filters handled --- src/pages/Posts.tsx | 218 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 173 insertions(+), 45 deletions(-) diff --git a/src/pages/Posts.tsx b/src/pages/Posts.tsx index 4c84c32..bcd646f 100644 --- a/src/pages/Posts.tsx +++ b/src/pages/Posts.tsx @@ -1,6 +1,6 @@ // Modules import { v4 as uuidv4 } from "uuid"; -import React, { useContext, useEffect, useState } from "react"; +import React, { useCallback, useContext, useEffect, useState } from "react"; import { PostContext } from "../context/PostContext"; import { IconContext } from "react-icons"; @@ -28,9 +28,18 @@ interface pageType { pageNumber: number; } -interface searchType { - type: string; - query: string; +interface filterType { + name: string; + value: string; +} + +interface filtersType { + fil_title: filterType; + fil_link: filterType; + fil_publish_date: filterType; + fil_summary: filterType; + fil_createdAt: filterType; + fil_updatedAt: filterType; } const Posts = () => { @@ -44,10 +53,6 @@ const Posts = () => { perPage: 10, pageNumber: 1, }); - const [search, setSearch] = useState({ - type: "fil_title", - query: "", - }); const [params, setParams] = useState({ id: "asc", @@ -59,14 +64,55 @@ const Posts = () => { updated: "asc", }); + const [filters, setFilters] = useState({ + fil_title: { + name: "fil_title", + value: "", + }, + fil_link: { + name: "fil_link", + value: "", + }, + fil_publish_date: { + name: "fil_publish_date", + value: "", + }, + fil_summary: { + name: "fil_summary", + value: "", + }, + fil_createdAt: { + name: "fil_createdAt", + value: "", + }, + fil_updatedAt: { + name: "fil_updatedAt", + value: "", + }, + }); + + const defineFilters = useCallback(() => { + let outString: string = ""; + const keys: string[] = Object.keys(filters); + keys.map((key) => { + const keyy = key as keyof typeof filters; + if (filters[keyy].value.length > 0) { + outString = outString + `&${filters[keyy].name}=${filters[keyy].value}`; + } + }); + + return outString; + }, [filters, setFilters]); + useEffect(() => { + const filters = defineFilters(); const key = sort as keyof typeof params; getPosts( setLoad, setPosts, - `?sortBy=${sort}.${params[key]}&category=${category}&strLimit=${page.perPage}&strOffset=${page.pageNumber}&${search.type}=${search.query}` + `?sortBy=${sort}.${params[key]}&category=${category}&strLimit=${page.perPage}&strOffset=${page.pageNumber}${filters}` ); - }, [params, sort, page, search, category]); + }, [params, sort, page, category, filters]); return (
@@ -127,56 +173,48 @@ const Posts = () => { -
- - -
-
- - - ) => { - setSearch({ ...search, query: e.target.value }); - }} - /> -
+ @@ -310,6 +348,96 @@ const Posts = () => { Updated + + + + + + + + + + {load ? : null}
+ ) => + setFilters({ + ...filters, + fil_title: { + ...filters.fil_title, + value: e.target.value, + }, + }) + } + /> + + ) => + setFilters({ + ...filters, + fil_link: { + ...filters.fil_link, + value: e.target.value, + }, + }) + } + /> + + ) => + setFilters({ + ...filters, + fil_publish_date: { + ...filters.fil_publish_date, + value: e.target.value, + }, + }) + } + /> + + ) => + setFilters({ + ...filters, + fil_createdAt: { + ...filters.fil_createdAt, + value: e.target.value, + }, + }) + } + /> + + ) => + setFilters({ + ...filters, + fil_updatedAt: { + ...filters.fil_updatedAt, + value: e.target.value, + }, + }) + } + /> +