Projekt

Obecné

Profil

Stáhnout (4.69 KB) Statistiky
| Větev: | Tag: | Revize:
1
import {
2
    Button,
3
    Collapse,
4
    Divider,
5
    Grid,
6
    Stack,
7
    TextField,
8
} from '@mui/material'
9
import { Fragment } from 'react'
10
import { useDispatch, useSelector } from 'react-redux'
11
import { setFilter, setFilterOpen } from './catalogSlice'
12
import { fetchItems } from './catalogThunks'
13
import FilterListIcon from '@mui/icons-material/FilterList'
14
import FilterListOffIcon from '@mui/icons-material/FilterListOff'
15
import ManageSearchIcon from '@mui/icons-material/ManageSearch'
16
import { RootState } from '../redux/store'
17

    
18
const CatalogFilter = () => {
19
    const dispatch = useDispatch()
20

    
21
    const filterOpen = useSelector((state: RootState) => state.catalog.filterOpen)
22
    const toggleFilter = () => {
23
        dispatch(setFilterOpen(!filterOpen))
24
    }
25

    
26
    // current filter object
27
    const filter = useSelector((state: RootState) => state.catalog.filter)
28
    const applyFilter = () => {
29
        dispatch(fetchItems())
30
    }
31

    
32
    return (
33
        <Fragment>
34
            <Button
35
                startIcon={
36
                    filterOpen ? <FilterListOffIcon /> : <FilterListIcon />
37
                }
38
                // variant="outlined"
39
                color="primary"
40
                onClick={toggleFilter}
41
            >
42
                Filter
43
            </Button>
44
            <Collapse in={filterOpen} timeout="auto" unmountOnExit>
45
                <Grid container spacing={1} alignItems="stretch">
46
                    <Grid item xs={6}>
47
                        <Stack direction="column" spacing={1} sx={{ mt: 2 }}>
48
                            <Stack direction="row" spacing={2}>
49
                                <TextField
50
                                    size="small"
51
                                    id="name"
52
                                    label="Name"
53
                                    onChange={(e: any) => {
54
                                        dispatch(setFilter({
55
                                            ...filter,
56
                                            name: e.target.value
57
                                        }))
58
                                    }}
59
                                    value={filter.name}
60
                                />
61
                                <TextField
62
                                    size="small"
63
                                    id="type"
64
                                    label="Type"
65
                                    onChange={(e: any) => {
66
                                        dispatch(setFilter({
67
                                            ...filter,
68
                                            type: e.target.value
69
                                        }))
70
                                    }}
71
                                    value={filter.type}
72
                                />
73
                            </Stack>
74
                            <Stack direction="row" spacing={2}>
75
                                <TextField
76
                                    size="small"
77
                                    id="writtenForm"
78
                                    label="Written form"
79
                                />
80
                                <TextField
81
                                    size="small"
82
                                    id="stateOrTerritory"
83
                                    label="State or territory"
84
                                    onChange={(e: any) => {
85
                                        dispatch(setFilter({
86
                                            ...filter,
87
                                            country: e.target.value
88
                                        }))
89
                                    }}
90
                                    value={filter.country}
91
                                />
92
                                <TextField
93
                                    size="small"
94
                                    id="groupBy"
95
                                    label="Group by"
96
                                />
97
                            </Stack>
98
                        </Stack>
99
                    </Grid>
100
                    <Grid item xs sx={{ mt: 'auto', ml: 1, mb: 1 }}>
101
                        <Stack
102
                            direction="row"
103
                            justifyContent="flex-start"
104
                            alignItems="flex-end"
105
                        >
106
                            <Button startIcon={<ManageSearchIcon/>} variant="contained" onClick={applyFilter}>
107
                                Search
108
                            </Button>
109
                        </Stack>
110
                    </Grid>
111
                </Grid>
112
            </Collapse>
113
            {filterOpen ? <Divider sx={{ mb: 5, mt: 1 }} /> : null}
114
        </Fragment>
115
    )
116
}
117

    
118
export default CatalogFilter
(2-2/7)