Projekt

Obecné

Profil

Stáhnout (3.96 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
import AddNewLocationDialog from './AddNewLocationDialog'
18

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

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

    
29
    // current filter object
30
    const filter = useSelector((state: RootState) => state.catalog.filter)
31
    const applyFilter = () => {
32
        dispatch(fetchItems())
33
    }
34

    
35
    return (
36
        <Fragment>
37
            <Stack direction="row" spacing={2} sx={{ mb: 2 }}>
38
                <Button
39
                    startIcon={
40
                        filterOpen ? <FilterListOffIcon /> : <FilterListIcon />
41
                    }
42
                    variant="outlined"
43
                    color="primary"
44
                    onClick={toggleFilter}
45
                >
46
                    Filter
47
                </Button>
48
                <AddNewLocationDialog />
49
            </Stack>
50
            <Collapse in={filterOpen} timeout="auto" unmountOnExit>
51
                <Stack direction="row" spacing={2} sx={{ mt: 2 }}>
52
                    <TextField
53
                        size="small"
54
                        id="name"
55
                        label="Name"
56
                        onChange={(e: any) => {
57
                            dispatch(
58
                                setFilter({
59
                                    ...filter,
60
                                    name: e.target.value,
61
                                })
62
                            )
63
                        }}
64
                        value={filter.name}
65
                    />
66
                    <TextField
67
                        size="small"
68
                        id="type"
69
                        label="Type"
70
                        onChange={(e: any) => {
71
                            dispatch(
72
                                setFilter({
73
                                    ...filter,
74
                                    type: e.target.value,
75
                                })
76
                            )
77
                        }}
78
                        value={filter.type}
79
                    />
80
                    <TextField
81
                        size="small"
82
                        id="writtenForm"
83
                        label="Written form"
84
                    />
85

    
86
                    <TextField
87
                        size="small"
88
                        id="stateOrTerritory"
89
                        label="State or territory"
90
                        onChange={(e: any) => {
91
                            dispatch(
92
                                setFilter({
93
                                    ...filter,
94
                                    country: e.target.value,
95
                                })
96
                            )
97
                        }}
98
                        value={filter.country}
99
                    />
100
                    <TextField size="small" id="groupBy" label="Group by" />
101
                </Stack>
102
                <Stack alignItems="flex-end" sx={{ mt: 2 }}>
103
                    <Button
104
                        startIcon={<ManageSearchIcon />}
105
                        variant="contained"
106
                        onClick={applyFilter}
107
                    >
108
                        Search
109
                    </Button>
110
                </Stack>
111
            </Collapse>
112
            {filterOpen ? <Divider sx={{ mb: 5, mt: 1 }} /> : null}
113
        </Fragment>
114
    )
115
}
116

    
117
export default CatalogFilter
(3-3/8)