@@ -6,21 +6,28 @@ import React, { useEffect, useMemo, useState } from 'react';
66import { CATALOG_LAYOUT_SX } from '../../Constants' ;
77import { useCatalogAll } from '../../queries/useCatalog' ;
88import Tile from '../tile/Index' ;
9+ import ConfigurationModal from '../tile/Modal' ;
10+ import { CatalogItemRichened } from '../../types' ;
911
1012interface ToolCatalogProps {
1113 search : string ;
1214 client : v1 . DockerDesktopClient ;
1315 sort : 'name-asc' | 'name-desc' ;
1416}
1517
16- const ToolCatalog : React . FC < ToolCatalogProps > = ( {
17- search,
18- client,
19- sort,
20- } ) => {
18+ const ToolCatalog : React . FC < ToolCatalogProps > = ( { search, client, sort } ) => {
2119 const { catalogItems, registryLoading } = useCatalogAll ( client ) ;
22- const [ expandedEnabled , setExpandedEnabled ] = useState ( localStorage . getItem ( 'expandedEnabled' ) !== 'false' ) ;
23- const [ expandedNotEnabled , setExpandedNotEnabled ] = useState ( localStorage . getItem ( 'expandedNotEnabled' ) !== 'false' ) ;
20+ const [ expandedEnabled , setExpandedEnabled ] = useState (
21+ localStorage . getItem ( 'expandedEnabled' ) !== 'false' ,
22+ ) ;
23+ const [ expandedNotEnabled , setExpandedNotEnabled ] = useState (
24+ localStorage . getItem ( 'expandedNotEnabled' ) !== 'false' ,
25+ ) ;
26+
27+ const [ showConfigModal , setShowConfigModal ] = useState ( false ) ;
28+ const [ selectedItem , setSelectedItem ] = useState < CatalogItemRichened | null > (
29+ null ,
30+ ) ;
2431
2532 // Memoize the filtered catalog items to prevent unnecessary recalculations
2633 const all = useMemo ( ( ) => {
@@ -30,31 +37,54 @@ const ToolCatalog: React.FC<ToolCatalogProps> = ({
3037
3138 return sort === 'name-asc'
3239 ? filteredItems . sort ( ( a , b ) => {
33- return a . name . localeCompare ( b . name ) ;
34- } )
40+ return a . name . localeCompare ( b . name ) ;
41+ } )
3542 : sort === 'name-desc'
3643 ? filteredItems . sort ( ( a , b ) => {
37- return b . name . localeCompare ( a . name ) ;
38- } )
44+ return b . name . localeCompare ( a . name ) ;
45+ } )
3946 : filteredItems ;
4047 } , [ catalogItems , search , sort ] ) ;
4148 const enabled = all . filter ( ( item ) => item . registered ) ;
4249
4350 return (
4451 < >
45- { ( enabled . length > 0 ) && (
52+ { selectedItem !== null && (
53+ < ConfigurationModal
54+ open = { showConfigModal }
55+ onClose = { ( ) => setShowConfigModal ( false ) }
56+ catalogItem = { selectedItem }
57+ client = { client }
58+ registryLoading = { registryLoading }
59+ />
60+ ) }
61+ { enabled . length > 0 && (
4662 < >
4763 < Typography
48- variant = 'subtitle2'
49- sx = { { color : "text.secondary" , display : "flex" , alignItems : "center" , cursor : "pointer" , width : 'fit-content' } }
64+ variant = "subtitle2"
65+ sx = { {
66+ color : 'text.secondary' ,
67+ display : 'flex' ,
68+ alignItems : 'center' ,
69+ cursor : 'pointer' ,
70+ width : 'fit-content' ,
71+ } }
5072 onClick = { ( ) => {
51- const newExpanded = ! expandedEnabled
73+ const newExpanded = ! expandedEnabled ;
5274 setExpandedEnabled ( newExpanded ) ;
53- localStorage . setItem ( 'expandedEnabled' , JSON . stringify ( newExpanded ) ) ;
54- } } >
75+ localStorage . setItem (
76+ 'expandedEnabled' ,
77+ JSON . stringify ( newExpanded ) ,
78+ ) ;
79+ } }
80+ >
5581 { `Enabled (${ enabled . length } )` }
56- { expandedEnabled ? < KeyboardArrowDownIcon fontSize = "small" /> : < KeyboardArrowRightIcon fontSize = "small" /> }
57- </ Typography >
82+ { expandedEnabled ? (
83+ < KeyboardArrowDownIcon fontSize = "small" />
84+ ) : (
85+ < KeyboardArrowRightIcon fontSize = "small" />
86+ ) }
87+ </ Typography >
5888
5989 < Collapse in = { expandedEnabled } >
6090 < Grid2 container spacing = { 1 } sx = { CATALOG_LAYOUT_SX } >
@@ -65,6 +95,8 @@ const ToolCatalog: React.FC<ToolCatalogProps> = ({
6595 item = { catalogItem }
6696 client = { client }
6797 registryLoading = { registryLoading }
98+ setSelectedItem = { setSelectedItem }
99+ setShowConfigModal = { setShowConfigModal }
68100 />
69101 </ Grid2 >
70102 ) ;
@@ -75,15 +107,29 @@ const ToolCatalog: React.FC<ToolCatalogProps> = ({
75107 ) }
76108
77109 < Typography
78- variant = 'subtitle2'
79- sx = { { color : "text.secondary" , display : "flex" , alignItems : "center" , cursor : "pointer" , width : 'fit-content' } }
110+ variant = "subtitle2"
111+ sx = { {
112+ color : 'text.secondary' ,
113+ display : 'flex' ,
114+ alignItems : 'center' ,
115+ cursor : 'pointer' ,
116+ width : 'fit-content' ,
117+ } }
80118 onClick = { ( ) => {
81- const newExpanded = ! expandedNotEnabled
119+ const newExpanded = ! expandedNotEnabled ;
82120 setExpandedNotEnabled ( newExpanded ) ;
83- localStorage . setItem ( 'expandedNotEnabled' , JSON . stringify ( newExpanded ) ) ;
84- } } >
121+ localStorage . setItem (
122+ 'expandedNotEnabled' ,
123+ JSON . stringify ( newExpanded ) ,
124+ ) ;
125+ } }
126+ >
85127 { `All (${ all . length } )` }
86- { expandedNotEnabled ? < KeyboardArrowDownIcon fontSize = "small" /> : < KeyboardArrowRightIcon fontSize = "small" /> }
128+ { expandedNotEnabled ? (
129+ < KeyboardArrowDownIcon fontSize = "small" />
130+ ) : (
131+ < KeyboardArrowRightIcon fontSize = "small" />
132+ ) }
87133 </ Typography >
88134
89135 < Collapse in = { expandedNotEnabled } >
@@ -95,6 +141,8 @@ const ToolCatalog: React.FC<ToolCatalogProps> = ({
95141 item = { catalogItem }
96142 client = { client }
97143 registryLoading = { registryLoading }
144+ setSelectedItem = { setSelectedItem }
145+ setShowConfigModal = { setShowConfigModal }
98146 />
99147 </ Grid2 >
100148 ) ;
0 commit comments