-
-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathIdeaFilter.js
More file actions
97 lines (86 loc) · 2.34 KB
/
IdeaFilter.js
File metadata and controls
97 lines (86 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import React, { useState, useEffect } from "react";
import Pagination from "@/components/Pagination";
import SortButtons from "@/components/SortButtons";
import OwnerFilter from "@/components/OwnerFilter";
import StatusFilter from "../StatusFilter";
export default function IdeaFilters({
total,
pagesize,
onChange,
isAuthenticated,
}) {
const [filter, setFilter] = useState({});
useEffect(() => {}, [total]);
const resetFilter = () => {
filter.sort_col = "created_at";
filter.sort_asc = true;
filter.page = 1;
filter.owner = "all";
filter.pagesize = pagesize;
filter.status_filter = undefined;
return filter;
};
const onPageChanged = (index) => {
const fl = resetFilter();
fl.page = index;
setFilter({ ...fl });
invokeChange(fl);
};
const onOwnerChanged = (owner) => {
const fl = resetFilter();
fl.owner = owner;
setFilter({ ...fl });
invokeChange(fl);
};
const onSortChanged = (button) => {
const fl = resetFilter();
fl.sort_col = button.field;
fl.sort_asc = button.asc;
setFilter({ ...fl });
invokeChange(fl);
};
const onStatusFilterChanged = (status) => {
const fl = resetFilter();
fl.status_filter = status;
setFilter({ ...fl });
invokeChange(fl);
};
const invokeChange = (filter) => {
if (onChange) {
onChange(filter);
}
};
return (
<div className="flex flex-1 z-[9] border-slate-600 pb-3 justify-center">
{isAuthenticated ? (
<div className="flex-1">
<OwnerFilter
onChange={(r) => onOwnerChanged(r)}
selected={filter.owner}
></OwnerFilter>
</div>
) : null}
<div className="flex-1 hidden md:block">
<StatusFilter
onChange={(r) => onStatusFilterChanged(r)}
selected={filter.status_filter}
></StatusFilter>
</div>
<div className="flex border-b-2 ">
<Pagination
total={total}
pagesize={pagesize}
onChange={(page) => onPageChanged(page)}
></Pagination>
<SortButtons
onChange={(b) => onSortChanged(b)}
buttons={[
{ label: "Date", field: "created_at" },
{ label: "Name", field: "title" },
// { label: 'Popularity', field: 'liked' },
]}
></SortButtons>
</div>
</div>
);
}