1
- import { CircularProgress , Dialog , DialogContent , DialogTitle , IconButton , Stack , TextField , Tooltip , Typography } from "@mui/material" ;
1
+ import { CircularProgress , Dialog , DialogContent , DialogTitle , IconButton , Paper , Stack , TextField , Tooltip , Typography } from "@mui/material" ;
2
2
import { Card , CardActions , CardContent , CardMedia } from "@mui/material" ;
3
3
import { ReactNode , useEffect , useState } from "react" ;
4
4
import Secrets from "../../Secrets" ;
@@ -22,15 +22,14 @@ export interface CatalogItemWithName extends CatalogItem {
22
22
}
23
23
24
24
export interface TileProps {
25
- openUrl : ( ) => void ;
26
25
item : CatalogItemWithName ;
27
26
registered : boolean ;
28
27
onSecretChange : ( secret : { name : string , value : string } ) => Promise < void > ;
29
28
secrets : Secrets . Secret [ ] ;
30
29
ActionsSlot : ReactNode
31
30
}
32
31
33
- const Tile = ( { openUrl , item, registered, onSecretChange, secrets, ActionsSlot } : TileProps ) => {
32
+ const Tile = ( { item, registered, onSecretChange, secrets, ActionsSlot } : TileProps ) => {
34
33
const loadAssignedSecrets = ( ) => {
35
34
const assignedSecrets = Secrets . getAssignedSecrets ( item , secrets ) ;
36
35
setAssignedSecrets ( assignedSecrets )
@@ -55,51 +54,55 @@ const Tile = ({ openUrl, item, registered, onSecretChange, secrets, ActionsSlot
55
54
</ DialogTitle >
56
55
< DialogContent >
57
56
< Stack direction = "column" spacing = { 2 } >
58
- { assignedSecrets ?. map ( secret => (
59
- < Stack key = { secret . name } direction = "row" spacing = { 2 } alignItems = "center" >
60
- < TextField placeholder = { assignedSecrets . find ( s => s . name === secret . name ) ?. assigned ? '********' : 'Enter secret value' } type = "password" key = { secret . name } label = { secret . name } value = { changedSecrets [ secret . name ] || '' } onChange = { ( event ) => setChangedSecrets ( { ...changedSecrets , [ secret . name ] : event . target . value } ) } />
61
- { assignedSecrets . find ( s => s . name === secret . name ) ?. assigned && changedSecrets [ secret . name ] && < IconButton onClick = { ( ) => setChangedSecrets ( { ...changedSecrets , [ secret . name ] : undefined } ) } >
62
- < LockReset />
63
- </ IconButton > }
64
- { changedSecrets [ secret . name ] && < IconButton onClick = { ( ) => {
65
- setSecretLoading ( true )
66
- onSecretChange ( { name : secret . name , value : changedSecrets [ secret . name ] || '' } ) . then ( ( ) => {
67
- setSecretLoading ( false )
68
- const newChangedSecrets = { ...changedSecrets }
69
- delete newChangedSecrets [ secret . name ]
70
- setChangedSecrets ( newChangedSecrets )
71
- } )
72
- } } >
73
- { secretLoading ? < CircularProgress size = { 20 } /> : < Save /> }
74
- </ IconButton > }
75
- </ Stack >
76
- ) ) }
57
+ { assignedSecrets ?. map ( secret => {
58
+ const isAssigned = assignedSecrets . find ( s => s . name === secret . name )
59
+ return (
60
+ < Stack key = { secret . name } direction = "row" spacing = { 2 } alignItems = "center" >
61
+ < Typography variant = "body2" > { secret . name } { isAssigned ?. assigned ? 'assigned' : 'not assigned' } </ Typography >
62
+ < TextField placeholder = { isAssigned ?. assigned ? '********' : 'Enter secret value' } type = "password" key = { secret . name } label = { secret . name } value = { changedSecrets [ secret . name ] || '' } onChange = { ( event ) => setChangedSecrets ( { ...changedSecrets , [ secret . name ] : event . target . value } ) } />
63
+ { isAssigned ?. assigned && changedSecrets [ secret . name ] && < IconButton onClick = { ( ) => setChangedSecrets ( { ...changedSecrets , [ secret . name ] : undefined } ) } >
64
+ < LockReset />
65
+ </ IconButton > }
66
+ { changedSecrets [ secret . name ] && < IconButton onClick = { ( ) => {
67
+ setSecretLoading ( true )
68
+ onSecretChange ( { name : secret . name , value : changedSecrets [ secret . name ] || '' } ) . then ( ( ) => {
69
+ setSecretLoading ( false )
70
+ const newChangedSecrets = { ...changedSecrets }
71
+ delete newChangedSecrets [ secret . name ]
72
+ setChangedSecrets ( newChangedSecrets )
73
+ } )
74
+ } } >
75
+ { secretLoading ? < CircularProgress size = { 20 } /> : < Save /> }
76
+ </ IconButton > }
77
+ </ Stack >
78
+ )
79
+ } ) }
77
80
</ Stack >
78
81
</ DialogContent >
79
82
</ Dialog >
80
- < Card sx = { ( theme ) => ( { height : 150 , borderColor : registered ? theme . palette . docker . grey [ 600 ] : theme . palette . docker . grey [ 300 ] , borderWidth : registered ? 1 : 0.5 } ) } variant = "outlined" >
83
+ < Card sx = { ( theme ) => ( { height : 140 , borderColor : 'divider' , borderWidth : 1 , borderStyle : 'solid' } ) } >
81
84
< Stack direction = "column" height = "100%" sx = { { justifyContent : 'space-between' } } >
82
- < CardContent sx = { { p : 2 , paddingBottom : 1 , '&:hover .hover-underline' : { textDecoration : 'underline' } } } >
83
- < Stack onClick = { openUrl } direction = "row" spacing = { 1 } justifyContent = "space-between" sx = { { cursor : 'pointer' } } >
84
- < Stack direction = "column" spacing = { 1 } >
85
- < Typography className = "hover-underline" gutterBottom component = "div" sx = { { fontWeight : 'bold' , textTransform : 'capitalize' , fontSize : '1.2em' } } >
86
- { item . name . replace ( '_' , ' ' ) }
85
+ < CardContent sx = { { paddingBottom : 0 , paddingTop : 2 } } >
86
+ < Stack direction = "column" spacing = { 0 } >
87
+ < Stack direction = "row" spacing = { 0 } justifyContent = "space-between" >
88
+ < CardMedia
89
+ component = "img"
90
+ sx = { { width : '3em' , height : '3em' , padding : 1 , background : 'white' , borderRadius : 1 , boxSizing : 'border-box' , mt : - 1 , ml : - 1 } }
91
+ alt = { `Icon for ${ item . name } ` }
92
+ image = { item . icon }
93
+ />
94
+ < Typography gutterBottom component = "div" sx = { { fontWeight : 'bold' , fontSize : '1.2em' } } >
95
+ { item . name }
87
96
</ Typography >
88
- < Tooltip title = { item . description } >
89
- < Typography variant = "body2" sx = { { mt : 0.5 } } >
90
- { item . description ?. slice ( 0 , 70 ) } ...
91
- </ Typography >
92
- </ Tooltip >
93
97
</ Stack >
94
- < CardMedia
95
- component = "img"
96
- sx = { { width : 50 , height : 50 , padding : 1 , background : 'white' , borderRadius : 1 , boxSizing : 'border-box' , mt : - 1 } }
97
- alt = { `Icon for ${ item . name } ` }
98
- image = { item . icon }
99
- />
98
+ < Tooltip title = { item . description } >
99
+ < Typography variant = "caption" sx = { { color : 'text.secondary' , pt : 1 } } >
100
+ { item . description ?. slice ( 0 , 70 ) } ...
101
+ </ Typography >
102
+ </ Tooltip >
100
103
</ Stack >
101
104
</ CardContent >
102
- < CardActions sx = { { padding : 1 , paddingTop : 0 } } >
105
+ < CardActions sx = { { px : 1.5 , height : 30 } } >
103
106
{ ActionsSlot }
104
107
</ CardActions >
105
108
</ Stack >
0 commit comments