1
1
import { CircularProgress , Dialog , DialogContent , DialogTitle , Divider , IconButton , Stack , TextField , Typography } from "@mui/material" ;
2
2
import { Card , CardContent } from "@mui/material" ;
3
3
import { useEffect , useState } from "react" ;
4
- import { CatalogItemWithName } from "../../types/catalog" ;
4
+ import { CatalogItemRichened } from "../../types/catalog" ;
5
5
import { Save , LockReset } from "@mui/icons-material" ;
6
6
import Secrets from "../../Secrets" ;
7
7
import ConfigurationModal from "./Modal" ;
8
8
import Top from "./Top" ;
9
9
import Center from "./Center" ;
10
10
import Bottom from "./Bottom" ;
11
- import { Secret } from "../../types" ;
12
11
import { v1 } from "@docker/extension-api-client-types" ;
12
+ import { useSecrets } from "../../hooks/useSecrets" ;
13
+ import { useCatalog , useCatalogOperations , useRegistry } from "../../hooks/useCatalog" ;
14
+ import { MCP_POLICY_NAME } from "../../Constants" ;
13
15
14
16
type TileProps = {
15
- item : CatalogItemWithName ;
16
- registered : boolean ;
17
- onSecretChange : ( secret : { name : string , value : string } ) => Promise < void > ;
18
- secrets : Secret [ ] ;
17
+ item : CatalogItemRichened ;
19
18
client : v1 . DockerDesktopClient ;
20
19
unAssignedConfig : { name : string ; assigned : boolean } [ ] ;
21
20
}
22
21
23
- const Tile = ( { item, registered, onSecretChange, secrets, client, unAssignedConfig } : TileProps ) => {
24
- const loadAssignedSecrets = ( ) => {
25
- const assignedSecrets = Secrets . getSecretsWithAssignment ( item , secrets ) ;
26
- setAssignedSecrets ( assignedSecrets )
27
- }
22
+ const Tile = ( { item, client, unAssignedConfig } : TileProps ) => {
28
23
29
24
const [ showSecretDialog , setShowSecretDialog ] = useState ( false )
30
- const [ assignedSecrets , setAssignedSecrets ] = useState < { name : string , assigned : boolean } [ ] > ( [ ] )
25
+ const [ assignedSecrets ] = useState < { name : string , assigned : boolean } [ ] > ( [ ] )
31
26
const [ changedSecrets , setChangedSecrets ] = useState < { [ key : string ] : string | undefined } > ( { } )
32
27
const [ secretLoading , setSecretLoading ] = useState ( false )
33
-
34
- const { registryLoading, registerCatalogItem, unregisterCatalogItem } = useCatalogContext ( )
35
28
const [ showConfigModal , setShowConfigModal ] = useState ( false )
29
+ const { isLoading : secretsLoading , mutate : mutateSecret } = useSecrets ( client )
30
+ const { registryLoading } = useRegistry ( client )
31
+ const { registerCatalogItem, unregisterCatalogItem } = useCatalogOperations ( client )
36
32
37
- useEffect ( ( ) => {
38
- loadAssignedSecrets ( )
39
- } , [ secrets ] )
40
-
41
- if ( registryLoading ) {
33
+ if ( registryLoading || secretsLoading ) {
42
34
return < >
43
35
< CircularProgress size = { 20 } />
44
36
< Typography > Loading registry...</ Typography >
@@ -47,10 +39,6 @@ const Tile = ({ item, registered, onSecretChange, secrets, client, unAssignedCon
47
39
48
40
const unAssignedSecrets = assignedSecrets . filter ( s => ! s . assigned )
49
41
50
- useEffect ( ( ) => {
51
- loadAssignedSecrets ( )
52
- } , [ secrets ] )
53
-
54
42
return (
55
43
< >
56
44
< Dialog open = { showSecretDialog } onClose = { ( ) => setShowSecretDialog ( false ) } >
@@ -72,7 +60,7 @@ const Tile = ({ item, registered, onSecretChange, secrets, client, unAssignedCon
72
60
</ IconButton > }
73
61
{ changedSecrets [ secret . name ] && < IconButton onClick = { ( ) => {
74
62
setSecretLoading ( true )
75
- onSecretChange ( { name : secret . name , value : changedSecrets [ secret . name ] || '' } ) . then ( ( ) => {
63
+ mutateSecret . mutateAsync ( { name : secret . name , value : changedSecrets [ secret . name ] || '' , policies : [ MCP_POLICY_NAME ] } ) . then ( ( ) => {
76
64
setSecretLoading ( false )
77
65
const newChangedSecrets = { ...changedSecrets }
78
66
delete newChangedSecrets [ secret . name ]
@@ -92,15 +80,6 @@ const Tile = ({ item, registered, onSecretChange, secrets, client, unAssignedCon
92
80
onClose = { ( ) => setShowConfigModal ( false ) }
93
81
catalogItem = { item }
94
82
client = { client }
95
- registered = { registered }
96
- onToggleRegister = { ( checked ) => {
97
- if ( checked ) {
98
- registerCatalogItem ( item )
99
- } else {
100
- unregisterCatalogItem ( item )
101
- }
102
- } }
103
- onSecretChange = { onSecretChange }
104
83
/>
105
84
< Card onClick = { ( e ) => {
106
85
if ( ( e . target as HTMLElement ) . tagName !== 'INPUT' ) {
@@ -115,7 +94,7 @@ const Tile = ({ item, registered, onSecretChange, secrets, client, unAssignedCon
115
94
} else {
116
95
unregisterCatalogItem ( item )
117
96
}
118
- } } item = { item } unAssignedConfig = { unAssignedConfig } unAssignedSecrets = { unAssignedSecrets } registered = { registered } />
97
+ } } item = { item } unAssignedConfig = { unAssignedConfig } unAssignedSecrets = { unAssignedSecrets } registered = { true } />
119
98
< Center item = { item } />
120
99
< Divider sx = { { marginBottom : 1 } } />
121
100
< Bottom item = { item } needsConfiguration = { Boolean ( unAssignedSecrets . length || unAssignedConfig . length ) } />
0 commit comments