@@ -4,7 +4,6 @@ import DragIndicator from '@mui/icons-material/DragIndicator';
4
4
import { Box , IconButton , Typography , styled } from '@mui/material' ;
5
5
import type { IFeatureStrategy } from 'interfaces/strategy' ;
6
6
import { formatStrategyName } from 'utils/strategyNames' ;
7
- import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender' ;
8
7
import type { PlaygroundStrategySchema } from 'openapi' ;
9
8
import { Badge } from '../Badge/Badge' ;
10
9
import { Link } from 'react-router-dom' ;
@@ -16,16 +15,20 @@ type StrategyItemContainerProps = {
16
15
onDragStart ?: DragEventHandler < HTMLButtonElement > ;
17
16
onDragEnd ?: DragEventHandler < HTMLButtonElement > ;
18
17
headerItemsRight ?: ReactNode ;
18
+ headerItemsLeft ?: ReactNode ;
19
19
className ?: string ;
20
20
style ?: React . CSSProperties ;
21
21
children ?: React . ReactNode ;
22
22
} ;
23
23
24
- const DragIcon = styled ( IconButton ) ( {
24
+ const inlinePadding = 3 ;
25
+
26
+ const DragIcon = styled ( IconButton ) ( ( { theme } ) => ( {
27
+ marginLeft : theme . spacing ( - inlinePadding ) ,
25
28
padding : 0 ,
26
29
cursor : 'inherit' ,
27
30
transition : 'color 0.2s ease-in-out' ,
28
- } ) ;
31
+ } ) ) ;
29
32
30
33
const StyledHeaderContainer = styled ( 'hgroup' ) ( ( { theme } ) => ( {
31
34
display : 'flex' ,
@@ -38,9 +41,14 @@ const StyledHeaderContainer = styled('hgroup')(({ theme }) => ({
38
41
} ,
39
42
} ) ) ;
40
43
41
- const StyledContainer = styled ( 'article' ) ( {
44
+ const StyledContainer = styled ( 'article' ) ( ( { theme } ) => ( {
42
45
background : 'inherit' ,
43
- } ) ;
46
+ padding : theme . spacing ( inlinePadding ) ,
47
+ paddingTop : theme . spacing ( 0.5 ) ,
48
+ display : 'flex' ,
49
+ flexDirection : 'column' ,
50
+ rowGap : theme . spacing ( 0.5 ) ,
51
+ } ) ) ;
44
52
45
53
const StyledTruncator = styled ( Truncator ) ( ( { theme } ) => ( {
46
54
fontSize : theme . typography . body1 . fontSize ,
@@ -49,102 +57,101 @@ const StyledTruncator = styled(Truncator)(({ theme }) => ({
49
57
} ) ) ;
50
58
51
59
const StyledHeader = styled ( 'div' , {
52
- shouldForwardProp : ( prop ) => prop !== 'draggable' && prop !== 'disabled' ,
53
- } ) < { draggable : boolean ; disabled : boolean } > (
54
- ( { theme, draggable, disabled } ) => ( {
55
- padding : theme . spacing ( 0.5 , 2 ) ,
56
- display : 'flex' ,
57
- gap : theme . spacing ( 1 ) ,
58
- alignItems : 'center' ,
59
- paddingLeft : draggable ? theme . spacing ( 1 ) : theme . spacing ( 2 ) ,
60
- color : disabled
61
- ? theme . palette . text . secondary
62
- : theme . palette . text . primary ,
63
- } ) ,
64
- ) ;
60
+ shouldForwardProp : ( prop ) => prop !== 'disabled' ,
61
+ } ) < { disabled : boolean } > ( ( { theme, disabled } ) => ( {
62
+ display : 'flex' ,
63
+ alignItems : 'center' ,
64
+ color : disabled ? theme . palette . text . secondary : theme . palette . text . primary ,
65
+ } ) ) ;
66
+
67
+ const StyledHeaderInner = styled ( 'div' ) ( ( { theme } ) => ( {
68
+ display : 'flex' ,
69
+ alignItems : 'center' ,
70
+ gap : theme . spacing ( 1 ) ,
71
+ } ) ) ;
65
72
66
73
export const StrategyItemContainer : FC < StrategyItemContainerProps > = ( {
67
74
strategy,
68
75
onDragStart,
69
76
onDragEnd,
70
77
headerItemsRight,
78
+ headerItemsLeft,
71
79
strategyHeaderLevel = 3 ,
72
80
children,
73
81
style = { } ,
82
+ className,
74
83
} ) => {
75
84
const StrategyHeaderLink : React . FC < { children ?: React . ReactNode } > =
76
- 'links' in strategy // todo: revisit this when we get to playground, related to flag `flagOverviewRedesign`
85
+ 'links' in strategy
77
86
? ( { children } ) => < Link to = { strategy . links . edit } > { children } </ Link >
78
87
: ( { children } ) => < > { children } </ > ;
79
88
80
89
return (
81
90
< Box sx = { { position : 'relative' } } >
82
- < StyledContainer style = { style } >
83
- < StyledHeader
84
- draggable = { Boolean ( onDragStart ) }
85
- disabled = { Boolean ( strategy ?. disabled ) }
86
- >
87
- < ConditionallyRender
88
- condition = { Boolean ( onDragStart ) }
89
- show = { ( ) => (
90
- < DragIcon
91
- draggable
92
- disableRipple
93
- size = 'small'
94
- onDragStart = { onDragStart }
95
- onDragEnd = { onDragEnd }
96
- sx = { { cursor : 'move' } }
97
- >
98
- < DragIndicator
99
- titleAccess = 'Drag to reorder'
100
- cursor = 'grab'
101
- sx = { { color : 'action.active' } }
102
- />
103
- </ DragIcon >
104
- ) }
105
- />
106
- < StrategyHeaderLink >
107
- < StyledHeaderContainer >
108
- { strategy . title ? (
109
- < >
110
- < p className = 'strategy-name' >
91
+ < StyledContainer style = { style } className = { className } >
92
+ < StyledHeader disabled = { Boolean ( strategy ?. disabled ) } >
93
+ { onDragStart ? (
94
+ < DragIcon
95
+ draggable
96
+ disableRipple
97
+ size = 'small'
98
+ onDragStart = { onDragStart }
99
+ onDragEnd = { onDragEnd }
100
+ sx = { { cursor : 'move' } }
101
+ >
102
+ < DragIndicator
103
+ titleAccess = 'Drag to reorder'
104
+ cursor = 'grab'
105
+ sx = { { color : 'action.active' } }
106
+ />
107
+ </ DragIcon >
108
+ ) : null }
109
+ < StyledHeaderInner >
110
+ < StrategyHeaderLink >
111
+ < StyledHeaderContainer >
112
+ { strategy . title ? (
113
+ < >
114
+ < p className = 'strategy-name' >
115
+ { formatStrategyName (
116
+ String ( strategy . name ) ,
117
+ ) }
118
+ :
119
+ </ p >
120
+ < StyledTruncator
121
+ component = { `h${ strategyHeaderLevel } ` }
122
+ >
123
+ { strategy . title }
124
+ </ StyledTruncator >
125
+ </ >
126
+ ) : (
127
+ < Typography
128
+ className = 'strategy-name'
129
+ component = { `h${ strategyHeaderLevel } ` }
130
+ >
111
131
{ formatStrategyName (
112
132
String ( strategy . name ) ,
113
133
) }
114
- :
115
- </ p >
116
- < StyledTruncator
117
- component = { `h${ strategyHeaderLevel } ` }
118
- >
119
- { strategy . title }
120
- </ StyledTruncator >
121
- </ >
122
- ) : (
123
- < Typography
124
- className = 'strategy-name'
125
- component = { `h${ strategyHeaderLevel } ` }
126
- >
127
- { formatStrategyName ( String ( strategy . name ) ) }
128
- </ Typography >
129
- ) }
130
- </ StyledHeaderContainer >
131
- </ StrategyHeaderLink >
134
+ </ Typography >
135
+ ) }
136
+ </ StyledHeaderContainer >
137
+ </ StrategyHeaderLink >
132
138
133
- { strategy . disabled ? (
134
- < Badge color = 'disabled' > Disabled</ Badge >
135
- ) : null }
139
+ { strategy . disabled ? (
140
+ < Badge color = 'disabled' > Disabled</ Badge >
141
+ ) : null }
142
+ { headerItemsLeft }
143
+ </ StyledHeaderInner >
136
144
< Box
137
145
sx = { {
138
146
marginLeft : 'auto' ,
139
147
display : 'flex' ,
140
- minHeight : ( theme ) => theme . spacing ( 6 ) ,
141
148
alignItems : 'center' ,
142
149
} }
143
150
>
144
151
{ headerItemsRight }
145
152
</ Box >
146
153
</ StyledHeader >
147
- < Box sx = { { p : 2 , pt : 0 } } > { children } </ Box >
154
+ < Box > { children } </ Box >
148
155
</ StyledContainer >
149
156
</ Box >
150
157
) ;
0 commit comments