|
1 |
| -import React, { useState } from "react"; |
| 1 | +import React, { useEffect, useState } from "react"; |
2 | 2 | import { QnTable } from "../../components/QnTable/QnTable.component";
|
3 | 3 | import { FilterBar } from "../../components/QnFilter/QnFilter.component";
|
4 | 4 | import { VStack } from "@chakra-ui/react";
|
5 | 5 | import { QnFilter } from "../../models/Quesiton.model";
|
6 | 6 | import { Question } from "../../models/Quesiton.model";
|
7 | 7 | import { dummyQn } from "../../data/sampleqn";
|
| 8 | +import { useDispatch, useSelector } from "react-redux"; |
| 9 | +import { selectFilteredQuestions, setQuestions } from "../../reducers/questionsSlice"; |
| 10 | +import { RootState } from "../../reducers/store"; |
8 | 11 |
|
9 |
| -const filterQn = (questions: Question[], filter: QnFilter) => { |
10 |
| - return questions.filter((qn) => { |
11 |
| - if (filter.difficultyFilter) { |
12 |
| - if ( |
13 |
| - qn.difficulty > filter.difficultyFilter[1] || |
14 |
| - qn.difficulty < filter.difficultyFilter[0] |
15 |
| - ) |
16 |
| - return false; |
17 |
| - } |
18 |
| - |
19 |
| - if (filter.tagFilter && filter.tagFilter.size) { |
20 |
| - if (qn.categories.every((tag) => !filter.tagFilter?.has(tag))) { |
21 |
| - return false; |
22 |
| - } |
23 |
| - } |
24 |
| - |
25 |
| - if (filter.qnFilter) { |
26 |
| - if (qn.displayedQuestion.toLowerCase().indexOf(filter.qnFilter) === -1) { |
27 |
| - return false; |
28 |
| - } |
29 |
| - } |
30 |
| - |
31 |
| - return true; |
32 |
| - }); |
33 |
| -}; |
34 | 12 |
|
35 | 13 | const BankPage = () => {
|
36 |
| - const allQuestion = dummyQn; |
37 |
| - const [filter, changeFilter] = useState<QnFilter>({}); |
38 |
| - const [filteredQn, setFilteredQn] = useState<Question[]>( |
39 |
| - filterQn(allQuestion, filter) |
40 |
| - ); |
41 |
| - const onFilterChange = (newFilter: QnFilter) => { |
42 |
| - changeFilter(newFilter); |
43 |
| - setFilteredQn(filterQn(allQuestion, newFilter)); |
44 |
| - }; |
| 14 | + const [filter, setFilter] = useState<QnFilter>({}); |
| 15 | + const filteredQns = useSelector((state : RootState) => selectFilteredQuestions(state, filter)) |
| 16 | + const dispatch = useDispatch(); |
| 17 | + |
| 18 | + useEffect(() => { |
| 19 | + console.log('dispatching...') |
| 20 | + setTimeout(() => dispatch(setQuestions(dummyQn)), 3000) //simulating network fetch |
| 21 | + }, []) |
| 22 | + |
45 | 23 | return (
|
46 | 24 | <VStack spacing="3">
|
47 |
| - <FilterBar onFilterChange={onFilterChange} /> |
| 25 | + <FilterBar setFilter={setFilter} /> |
48 | 26 |
|
49 |
| - <QnTable filteredQn={filteredQn} pageSize={7}></QnTable> |
| 27 | + <QnTable filteredQn={filteredQns} pageSize={7}></QnTable> |
50 | 28 | </VStack>
|
51 | 29 | );
|
52 | 30 | };
|
|
0 commit comments