@@ -17,6 +17,8 @@ import {
17
17
LanguageSelector ,
18
18
LibrarySelector ,
19
19
} from '@codiga/components' ;
20
+ import { Outlet } from 'react-router-dom' ;
21
+
20
22
import { useFilters } from '../FiltersContext' ;
21
23
import { ALL_LANGUAGES } from '../../lib/constants' ;
22
24
import {
@@ -46,110 +48,114 @@ export default function Filters() {
46
48
} = useFilters ( ) ;
47
49
48
50
return (
49
- < Box bg = "neutral.25" _dark = { { bg : 'base.dark' } } >
50
- < HStack w = "full" spacing = "space_16" py = "space_16" pr = "space_16" >
51
- < Input
52
- flex = { 1 }
53
- minWidth = "200px"
54
- maxWidth = "400px"
55
- placeholder = "Search"
56
- value = { searchTerm }
57
- onChange = { ( e ) => setSearchTerm ( e . target . value ) }
58
- />
59
- < LanguageSelector
60
- minW = "150px"
61
- maxW = "300px"
62
- value = { language || '' }
63
- options = { [ '' , ...ALL_LANGUAGES ] }
64
- emptyLabel = "All Languages"
65
- onChange = { ( newLanguage ) => {
66
- setLanguage ( newLanguage as LanguageEnumeration ) ;
67
- setLibrary ( '' as LibraryEnumeration ) ;
68
- } }
69
- labelProps = { { hidden : true , children : 'Filter by language' } }
70
- />
71
- < LibrarySelector
72
- minW = "150px"
73
- maxW = "300px"
74
- isCreatable
75
- value = { library || '' }
76
- language = { language || '' }
77
- onChange = { ( newLibrary ) =>
78
- setLibrary ( newLibrary as LibraryEnumeration )
79
- }
80
- emptyLabel = "No library"
81
- isDisabled = { ! language }
82
- labelProps = { {
83
- fontSize : 'md' ,
84
- fontWeight : 'bold' ,
85
- hidden : true ,
86
- } }
87
- />
88
- < Tooltip label = "More Filters" isDisabled = { isOpen } >
89
- < IconButton
90
- size = "xs"
91
- variant = "unstyled"
92
- aria-label = "Open more filter options"
93
- icon = { isOpen ? < ChevronUpIcon /> : < ChevronDownIcon /> }
94
- onClick = { onToggle }
95
- />
96
- </ Tooltip >
97
- </ HStack >
98
-
99
- < Collapse in = { isOpen } >
100
- < Flex gridGap = "space_16" mb = "space_16" flexWrap = "wrap" pr = "space_16" >
51
+ < >
52
+ < Box bg = "neutral.25" _dark = { { bg : 'base.dark' } } >
53
+ < HStack w = "full" spacing = "space_16" py = "space_16" pr = "space_16" >
101
54
< Input
102
55
flex = { 1 }
103
56
minWidth = "200px"
104
57
maxWidth = "400px"
105
- placeholder = "Search by tags"
106
- value = { tags }
107
- onChange = { ( e ) => setTags ( e . target . value ) }
58
+ placeholder = "Search"
59
+ value = { searchTerm }
60
+ onChange = { ( e ) => setSearchTerm ( e . target . value ) }
61
+ />
62
+ < LanguageSelector
63
+ minW = "150px"
64
+ maxW = "300px"
65
+ value = { language || '' }
66
+ options = { [ '' , ...ALL_LANGUAGES ] }
67
+ emptyLabel = "All Languages"
68
+ onChange = { ( newLanguage ) => {
69
+ setLanguage ( newLanguage as LanguageEnumeration ) ;
70
+ setLibrary ( '' as LibraryEnumeration ) ;
71
+ } }
72
+ labelProps = { { hidden : true , children : 'Filter by language' } }
108
73
/>
109
- < Flex flexWrap = "nowrap" gridRowGap = "0" gridColumnGap = "space_16" >
110
- < Radio
111
- isDisabled = { ! isAuthenticated }
112
- isChecked = { privacy === 'all' }
113
- onChange = { ( ) => setPrivacy ( 'all' ) }
114
- mb = { 0 }
115
- >
116
- < Text as = "span" size = "sm" fontFamily = "body" >
117
- All
118
- </ Text >
119
- </ Radio >
120
- < Radio
121
- isDisabled = { ! isAuthenticated }
122
- isChecked = { privacy === 'public' }
123
- onChange = { ( ) => setPrivacy ( 'public' ) }
124
- mb = { 0 }
125
- >
126
- < Text as = "span" size = "sm" fontFamily = "body" >
127
- Public
128
- </ Text >
129
- </ Radio >
130
- < Radio
131
- isDisabled = { ! isAuthenticated }
132
- isChecked = { privacy === 'private' }
133
- onChange = { ( ) => setPrivacy ( 'private' ) }
134
- mb = { 0 }
135
- >
136
- < Text as = "span" size = "sm" fontFamily = "body" >
137
- Private
138
- </ Text >
139
- </ Radio >
140
- < Checkbox
141
- isDisabled = { ! isAuthenticated }
142
- checked = { isSubscribed }
143
- onChange = { ( e ) => setIsSubscribed ( e . target . checked ) }
144
- mb = { 0 }
145
- >
146
- < Text as = "span" size = "sm" fontFamily = "body" >
147
- Favorites only
148
- </ Text >
149
- </ Checkbox >
74
+ < LibrarySelector
75
+ minW = "150px"
76
+ maxW = "300px"
77
+ isCreatable
78
+ value = { library || '' }
79
+ language = { language || '' }
80
+ onChange = { ( newLibrary ) =>
81
+ setLibrary ( newLibrary as LibraryEnumeration )
82
+ }
83
+ emptyLabel = "No library"
84
+ isDisabled = { ! language }
85
+ labelProps = { {
86
+ fontSize : 'md' ,
87
+ fontWeight : 'bold' ,
88
+ hidden : true ,
89
+ } }
90
+ />
91
+ < Tooltip label = "More Filters" isDisabled = { isOpen } >
92
+ < IconButton
93
+ size = "xs"
94
+ variant = "unstyled"
95
+ aria-label = "Open more filter options"
96
+ icon = { isOpen ? < ChevronUpIcon /> : < ChevronDownIcon /> }
97
+ onClick = { onToggle }
98
+ />
99
+ </ Tooltip >
100
+ </ HStack >
101
+
102
+ < Collapse in = { isOpen } >
103
+ < Flex gridGap = "space_16" mb = "space_16" flexWrap = "wrap" pr = "space_16" >
104
+ < Input
105
+ flex = { 1 }
106
+ minWidth = "200px"
107
+ maxWidth = "400px"
108
+ placeholder = "Search by tags"
109
+ value = { tags }
110
+ onChange = { ( e ) => setTags ( e . target . value ) }
111
+ />
112
+ < Flex flexWrap = "nowrap" gridRowGap = "0" gridColumnGap = "space_16" >
113
+ < Radio
114
+ isDisabled = { ! isAuthenticated }
115
+ isChecked = { privacy === 'all' }
116
+ onChange = { ( ) => setPrivacy ( 'all' ) }
117
+ mb = { 0 }
118
+ >
119
+ < Text as = "span" size = "sm" fontFamily = "body" >
120
+ All
121
+ </ Text >
122
+ </ Radio >
123
+ < Radio
124
+ isDisabled = { ! isAuthenticated }
125
+ isChecked = { privacy === 'public' }
126
+ onChange = { ( ) => setPrivacy ( 'public' ) }
127
+ mb = { 0 }
128
+ >
129
+ < Text as = "span" size = "sm" fontFamily = "body" >
130
+ Public
131
+ </ Text >
132
+ </ Radio >
133
+ < Radio
134
+ isDisabled = { ! isAuthenticated }
135
+ isChecked = { privacy === 'private' }
136
+ onChange = { ( ) => setPrivacy ( 'private' ) }
137
+ mb = { 0 }
138
+ >
139
+ < Text as = "span" size = "sm" fontFamily = "body" >
140
+ Private
141
+ </ Text >
142
+ </ Radio >
143
+ < Checkbox
144
+ isDisabled = { ! isAuthenticated }
145
+ checked = { isSubscribed }
146
+ onChange = { ( e ) => setIsSubscribed ( e . target . checked ) }
147
+ mb = { 0 }
148
+ >
149
+ < Text as = "span" size = "sm" fontFamily = "body" >
150
+ Favorites only
151
+ </ Text >
152
+ </ Checkbox >
153
+ </ Flex >
150
154
</ Flex >
151
- </ Flex >
152
- </ Collapse >
153
- </ Box >
155
+ </ Collapse >
156
+ </ Box >
157
+
158
+ < Outlet />
159
+ </ >
154
160
) ;
155
161
}
0 commit comments