@@ -3,10 +3,9 @@ import { BoolCodeControl } from "comps/controls/codeControl";
3
3
import { BoolControl } from "comps/controls/boolControl" ;
4
4
import { stringExposingStateControl , numberExposingStateControl } from "comps/controls/codeStateControl" ;
5
5
import { ChangeEventHandlerControl } from "comps/controls/eventHandlerControl" ;
6
- import { LabelControl } from "comps/controls/labelControl" ;
7
6
import { StepOptionControl } from "comps/controls/optionsControl" ;
8
7
import { styleControl } from "comps/controls/styleControl" ;
9
- import { StepsStyle , StepsStyleType } from "comps/controls/styleControlConstants" ;
8
+ import { StepsStyle , StepsStyleType , heightCalculator , widthCalculator , marginCalculator } from "comps/controls/styleControlConstants" ;
10
9
import styled , { css } from "styled-components" ;
11
10
import { UICompBuilder } from "../../generators" ;
12
11
import { CommonNameConfig , NameConfig , withExposingConfigs } from "../../generators/withExposing" ;
@@ -17,7 +16,6 @@ import { trans } from "i18n";
17
16
import { hasIcon } from "comps/utils" ;
18
17
import { RefControl } from "comps/controls/refControl" ;
19
18
import { dropdownControl } from "comps/controls/dropdownControl" ;
20
-
21
19
import { useContext , useState , useEffect } from "react" ;
22
20
import { EditorContext } from "comps/editorState" ;
23
21
@@ -79,15 +77,16 @@ const statusOptions = [
79
77
]
80
78
81
79
const StepsChildrenMap = {
82
- initialValue : numberExposingStateControl ( "0 " ) ,
80
+ initialValue : numberExposingStateControl ( "1 " ) ,
83
81
value : stringExposingStateControl ( "value" ) ,
84
- stepsStatus : stringExposingStateControl ( "process" ) ,
82
+ stepStatus : stringExposingStateControl ( "process" ) ,
83
+ stepPercent : numberExposingStateControl ( "60" ) ,
85
84
size : dropdownControl ( sizeOptions , "default" ) ,
86
85
displayType : dropdownControl ( typeOptions , "default" ) ,
87
86
direction : dropdownControl ( directionOptions , "horizontal" ) ,
88
87
showDots : BoolControl ,
89
88
showIcons : BoolControl ,
90
- label : LabelControl ,
89
+ selectable : BoolControl ,
91
90
labelPlacement : dropdownControl ( directionOptions , "horizontal" ) ,
92
91
disabled : BoolCodeControl ,
93
92
onEvent : ChangeEventHandlerControl ,
@@ -99,56 +98,81 @@ const StepsChildrenMap = {
99
98
let StepControlBasicComp = ( function ( ) {
100
99
return new UICompBuilder ( StepsChildrenMap , ( props ) => {
101
100
102
- // enabling user interaction to change the current step
103
- const [ current , setCurrent ] = useState ( 0 ) ;
101
+ const StyledWrapper = styled . div < { style : StepsStyleType } > `
102
+ min-height: 24px;
103
+ max-width: ${ widthCalculator ( props . style . margin ) } ;
104
+ max-height: ${ heightCalculator ( props . style . margin ) } ;
105
+ display: flex;
106
+ flex-direction: column;
107
+ justify-content: center;
108
+ align-items: center;
109
+ text-decoration: ${ props . style . textDecoration } ;
110
+ font-style: ${ props . style . fontStyle } ;
111
+ font-weight: ${ props . style . textWeight } ;
112
+ font-size: ${ props . style . textSize } ;
113
+ text-transform: ${ props . style . textTransform } ;
114
+ margin: ${ props . style . margin } ;
115
+ padding: ${ props . style . padding } ;
116
+ background-color: ${ props . style . background } ;
117
+ border: ${ props . style . borderWidth } solid ${ props . style . border } ;
118
+ border-radius: ${ props . style . radius } ;
119
+ background-image: ${ props . style . backgroundImage } ;
120
+ background-repeat: ${ props . style . backgroundImageRepeat } ;
121
+ background-size: ${ props . style . backgroundImageSize } ;
122
+ background-position: ${ props . style . backgroundImagePosition } ;
123
+ background-origin: ${ props . style . backgroundImageOrigin } ;
124
+ .ant-steps-item { padding-top: 5px !important; }
125
+ .ant-steps.ant-steps-label-vertical.ant-steps-small .ant-steps-item-icon { margin-top: 17px !important; }
126
+ .ant-steps.ant-steps-label-vertical.ant-steps-default .ant-steps-item-icon { margin-top: 12px !important; }
127
+ .ant-steps.ant-steps-dot .ant-steps-item-process .ant-steps-icon .ant-steps-icon-dot { margin-top: 4px !important; }
128
+ .ant-steps.ant-steps-default .ant-steps-item-icon .ant-steps-icon-dot { margin-top: 9px !important; }
129
+ .ant-steps.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot { margin-top: 4px !important; }
130
+ .ant-steps.ant-steps-dot .ant-steps-item-title { margin-top: 10px !important; }
131
+ .ant-steps.ant-steps-default.ant-steps-with-progress.ant-steps-label-horizontal .ant-steps-item.ant-steps-item-custom div.ant-steps-item-icon { margin-top:4px !important; }
132
+ .ant-steps.ant-steps-default.ant-steps-with-progress.ant-steps-label-vertical .ant-steps-item.ant-steps-item-custom div.ant-steps-item-icon { margin-top:17px !important; }
133
+ .ant-steps.ant-steps-dot.ant-steps-small.ant-steps-with-progress .ant-steps-item-icon .ant-progress { inset-block-start: -8px !important; inset-inline-start: -11px !important; }
134
+ .ant-steps.ant-steps-dot.ant-steps-default.ant-steps-with-progress .ant-steps-item-icon .ant-progress { inset-block-start: -7px !important; inset-inline-start: -13px !important; }
135
+ .ant-steps.ant-steps-small.ant-steps-with-progress .ant-steps-item:not(.ant-steps-item-custom) .ant-progress { inset-block-start: -5px !important; inset-inline-start: -5px !important; }
136
+ .ant-steps.ant-steps-default.ant-steps-with-progress .ant-steps-item:not(.ant-steps-item-custom) .ant-progress { inset-block-start: -5px !important; inset-inline-start: -5px !important; }
137
+ .ant-steps.ant-steps-small.ant-steps-with-progress .ant-steps-item.ant-steps-item-custom .ant-progress { inset-block-start: -5px !important; inset-inline-start: -10px !important; }
138
+ .ant-steps.ant-steps-default.ant-steps-with-progress .ant-steps-item.ant-steps-item-custom .ant-progress { inset-block-start: -4px !important; inset-inline-start: -13px !important; }
139
+ ` ;
140
+
141
+ const [ current , setCurrent ] = useState ( props . initialValue . value - 1 ) ; // Convert 1-based index to 0-based.
104
142
105
- // updating the state of current by the expose value
106
143
useEffect ( ( ) => {
107
- setCurrent ( Number ( props . value . value ) ) ;
144
+ const newValue = Number ( props . value . value ) ;
145
+ setCurrent ( newValue - 1 ) ; // Adjust for 0-based index.
108
146
} , [ props . value . value ] ) ;
109
147
110
-
111
- const onChange = ( current : number ) => {
112
- setCurrent ( current ) ;
113
- if ( props . options [ current ] ?. value !== undefined ) {
114
- props . value . onChange ( props . options [ current ] . value + "" ) ;
148
+ const onChange = ( index : number ) => {
149
+ if ( props . selectable == false ) return ;
150
+ const newIndex = Math . max ( 0 , index ) ;
151
+ setCurrent ( newIndex ) ;
152
+ if ( props . options [ newIndex ] ?. value !== undefined ) {
153
+ props . value . onChange ( newIndex + 1 + "" ) ; // Convert back to 1-based index for display.
115
154
props . onEvent ( "change" ) ;
116
155
}
117
156
} ;
118
157
119
- // margin-top: 17px; is important cause the dots where placed wrong.
120
- /*
121
- .ant-steps.ant-steps-small .ant-steps-item-icon {
122
- margin-top: 17px;
123
- }
124
- */
125
- const StepsWrapper = styled . div `
126
- width: 100%;
127
- min-height: 24px;
128
-
129
- ` ;
130
-
131
- return props . label ( {
132
- children : (
133
- < StepsWrapper ref = { props . viewRef } >
134
- < ConfigProvider
135
- theme = { {
136
- components : {
137
- Steps : {
138
- colorPrimary : '#00b96b' ,
139
- algorithm : true ,
140
- }
141
- } ,
142
- } }
143
- >
158
+ return (
159
+ < ConfigProvider
160
+ theme = { {
161
+ token : {
162
+ colorPrimary : props . style . activeBackground ,
163
+ colorText : props . style . titleText ,
164
+ colorTextDescription : props . style . text ,
165
+ fontFamily : props . style . fontFamily ,
166
+ }
167
+ } }
168
+ >
169
+ < StyledWrapper style = { props . style } >
144
170
< Steps
145
- initial = { Number ( props . initialValue . value ) - 1 }
171
+ initial = { props . initialValue . value - 1 }
146
172
current = { current }
147
- onChange = { ( current ) => {
148
- onChange ( current ) ;
149
- } }
150
- percent = { 60 }
151
- status = { props . stepsStatus . value as "error" | "finish" | "process" | "wait" }
173
+ onChange = { onChange }
174
+ percent = { props . stepPercent . value }
175
+ status = { props . stepStatus . value as "error" | "finish" | "process" | "wait" }
152
176
type = { props . displayType }
153
177
size = { props . size }
154
178
labelPlacement = { props . labelPlacement }
@@ -166,16 +190,16 @@ let StepControlBasicComp = (function () {
166
190
/>
167
191
) ) }
168
192
</ Steps >
169
- </ ConfigProvider >
170
- </ StepsWrapper >
171
- ) ,
172
- } ) ;
193
+ </ StyledWrapper >
194
+ </ ConfigProvider >
195
+ ) ;
196
+
173
197
} )
174
198
. setPropertyViewFn ( ( children ) => (
175
199
< >
176
200
< Section name = { sectionNames . basic } >
177
201
{ children . options . propertyView ( { } ) }
178
- { children . initialValue . propertyView ( { label : trans ( "step.initialValue" ) } ) }
202
+ { children . initialValue . propertyView ( { label : trans ( "step.initialValue" ) , tooltip : trans ( "step.initialValueTooltip" ) } ) }
179
203
</ Section >
180
204
181
205
{ [ "logic" , "both" ] . includes ( useContext ( EditorContext ) . editorModeStatus ) && (
@@ -184,14 +208,12 @@ let StepControlBasicComp = (function () {
184
208
{ children . onEvent . getPropertyView ( ) }
185
209
{ disabledPropertyView ( children ) }
186
210
{ hiddenPropertyView ( children ) }
187
- { children . stepsStatus . propertyView ( { label : trans ( "step.status" ) } ) }
211
+ { children . stepStatus . propertyView ( { label : trans ( "step.status" ) } ) }
212
+ { children . stepPercent . propertyView ( { label : trans ( "step.percent" ) } ) }
213
+ { children . selectable . propertyView ( { label : trans ( "step.selectable" ) } ) }
188
214
</ Section > </ >
189
215
) }
190
216
191
- { [ "layout" , "both" ] . includes ( useContext ( EditorContext ) . editorModeStatus ) && (
192
- children . label . getPropertyView ( )
193
- ) }
194
-
195
217
{ [ "layout" , "both" ] . includes ( useContext ( EditorContext ) . editorModeStatus ) && (
196
218
< Section name = { sectionNames . layout } >
197
219
{ children . size . propertyView ( {
@@ -206,12 +228,18 @@ let StepControlBasicComp = (function () {
206
228
label : trans ( "step.direction" ) ,
207
229
radioButton : true ,
208
230
} ) }
209
- { children . labelPlacement . propertyView ( {
210
- label : trans ( "step.labelPlacement" ) ,
211
- radioButton : true ,
212
- } ) }
213
- { children . showDots . propertyView ( { label : trans ( "step.showDots" ) } ) }
214
- { children . showIcons . propertyView ( { label : trans ( "step.showIcons" ) } ) }
231
+ { children . direction . getView ( ) == "horizontal" &&
232
+ children . labelPlacement . propertyView ( {
233
+ label : trans ( "step.labelPlacement" ) ,
234
+ radioButton : true ,
235
+ } )
236
+ }
237
+ { children . displayType . getView ( ) != "inline" && ! children . showIcons . getView ( ) && (
238
+ children . showDots . propertyView ( { label : trans ( "step.showDots" ) }
239
+ ) ) }
240
+ { children . displayType . getView ( ) != "inline" && ! children . showDots . getView ( ) && (
241
+ children . showIcons . propertyView ( { label : trans ( "step.showIcons" ) }
242
+ ) ) }
215
243
</ Section >
216
244
) }
217
245
@@ -228,5 +256,7 @@ let StepControlBasicComp = (function () {
228
256
229
257
export const StepComp = withExposingConfigs ( StepControlBasicComp , [
230
258
new NameConfig ( "value" , trans ( "step.valueDesc" ) ) ,
259
+ new NameConfig ( "stepStatus" , trans ( "step.status" ) ) ,
260
+ new NameConfig ( "stepPercent" , trans ( "step.percent" ) ) ,
231
261
...CommonNameConfig ,
232
262
] ) ;
0 commit comments