1
1
import { useEffect , useState , useRef } from 'react'
2
2
3
3
// material-ui
4
- import { Box , Stack , Button , ButtonGroup , Skeleton } from '@mui/material'
4
+ import { Box , Stack , Button , ButtonGroup , Skeleton , ToggleButtonGroup , ToggleButton } from '@mui/material'
5
5
6
6
// project imports
7
7
import MainCard from '@/ui-component/cards/MainCard'
@@ -10,6 +10,7 @@ import { gridSpacing } from '@/store/constant'
10
10
import ToolEmptySVG from '@/assets/images/tools_empty.svg'
11
11
import { StyledButton } from '@/ui-component/button/StyledButton'
12
12
import ToolDialog from './ToolDialog'
13
+ import { ToolsTable } from '@/ui-component/table/ToolsListTable'
13
14
14
15
// API
15
16
import toolsApi from '@/api/tools'
@@ -18,22 +19,31 @@ import toolsApi from '@/api/tools'
18
19
import useApi from '@/hooks/useApi'
19
20
20
21
// icons
21
- import { IconPlus , IconFileUpload } from '@tabler/icons-react'
22
+ import { IconPlus , IconFileUpload , IconLayoutGrid , IconList } from '@tabler/icons-react'
22
23
import ViewHeader from '@/layout/MainLayout/ViewHeader'
23
24
import ErrorBoundary from '@/ErrorBoundary'
25
+ import { useTheme } from '@mui/material/styles'
24
26
25
27
// ==============================|| CHATFLOWS ||============================== //
26
28
27
29
const Tools = ( ) => {
30
+ const theme = useTheme ( )
28
31
const getAllToolsApi = useApi ( toolsApi . getAllTools )
29
32
30
33
const [ isLoading , setLoading ] = useState ( true )
31
34
const [ error , setError ] = useState ( null )
32
35
const [ showDialog , setShowDialog ] = useState ( false )
33
36
const [ dialogProps , setDialogProps ] = useState ( { } )
37
+ const [ view , setView ] = useState ( localStorage . getItem ( 'toolsDisplayStyle' ) || 'card' )
34
38
35
39
const inputRef = useRef ( null )
36
40
41
+ const handleChange = ( event , nextView ) => {
42
+ if ( nextView === null ) return
43
+ localStorage . setItem ( 'toolsDisplayStyle' , nextView )
44
+ setView ( nextView )
45
+ }
46
+
37
47
const onUploadFile = ( file ) => {
38
48
try {
39
49
const dialogProp = {
@@ -118,6 +128,38 @@ const Tools = () => {
118
128
) : (
119
129
< Stack flexDirection = 'column' sx = { { gap : 3 } } >
120
130
< ViewHeader title = 'Tools' >
131
+ < ToggleButtonGroup
132
+ sx = { { borderRadius : 2 , maxHeight : 40 } }
133
+ value = { view }
134
+ color = 'primary'
135
+ exclusive
136
+ onChange = { handleChange }
137
+ >
138
+ < ToggleButton
139
+ sx = { {
140
+ borderColor : theme . palette . grey [ 900 ] + 25 ,
141
+ borderRadius : 2 ,
142
+ color : theme ?. customization ?. isDarkMode ? 'white' : 'inherit'
143
+ } }
144
+ variant = 'contained'
145
+ value = 'card'
146
+ title = 'Card View'
147
+ >
148
+ < IconLayoutGrid />
149
+ </ ToggleButton >
150
+ < ToggleButton
151
+ sx = { {
152
+ borderColor : theme . palette . grey [ 900 ] + 25 ,
153
+ borderRadius : 2 ,
154
+ color : theme ?. customization ?. isDarkMode ? 'white' : 'inherit'
155
+ } }
156
+ variant = 'contained'
157
+ value = 'list'
158
+ title = 'List View'
159
+ >
160
+ < IconList />
161
+ </ ToggleButton >
162
+ </ ToggleButtonGroup >
121
163
< Box sx = { { display : 'flex' , alignItems : 'center' } } >
122
164
< Button
123
165
variant = 'outlined'
@@ -147,19 +189,25 @@ const Tools = () => {
147
189
</ StyledButton >
148
190
</ ButtonGroup >
149
191
</ ViewHeader >
150
- { isLoading ? (
151
- < Box display = 'grid' gridTemplateColumns = 'repeat(3, 1fr)' gap = { gridSpacing } >
152
- < Skeleton variant = 'rounded' height = { 160 } />
153
- < Skeleton variant = 'rounded' height = { 160 } />
154
- < Skeleton variant = 'rounded' height = { 160 } />
155
- </ Box >
192
+ { ! view || view === 'card' ? (
193
+ < >
194
+ { isLoading ? (
195
+ < Box display = 'grid' gridTemplateColumns = 'repeat(3, 1fr)' gap = { gridSpacing } >
196
+ < Skeleton variant = 'rounded' height = { 160 } />
197
+ < Skeleton variant = 'rounded' height = { 160 } />
198
+ < Skeleton variant = 'rounded' height = { 160 } />
199
+ </ Box >
200
+ ) : (
201
+ < Box display = 'grid' gridTemplateColumns = 'repeat(3, 1fr)' gap = { gridSpacing } >
202
+ { getAllToolsApi . data &&
203
+ getAllToolsApi . data . map ( ( data , index ) => (
204
+ < ItemCard data = { data } key = { index } onClick = { ( ) => edit ( data ) } />
205
+ ) ) }
206
+ </ Box >
207
+ ) }
208
+ </ >
156
209
) : (
157
- < Box display = 'grid' gridTemplateColumns = 'repeat(3, 1fr)' gap = { gridSpacing } >
158
- { getAllToolsApi . data &&
159
- getAllToolsApi . data . map ( ( data , index ) => (
160
- < ItemCard data = { data } key = { index } onClick = { ( ) => edit ( data ) } />
161
- ) ) }
162
- </ Box >
210
+ < ToolsTable data = { getAllToolsApi . data } isLoading = { isLoading } onSelect = { edit } />
163
211
) }
164
212
{ ! isLoading && ( ! getAllToolsApi . data || getAllToolsApi . data . length === 0 ) && (
165
213
< Stack sx = { { alignItems : 'center' , justifyContent : 'center' } } flexDirection = 'column' >
0 commit comments