1
1
"use client" ;
2
2
3
- import React , { ChangeEvent , useCallback , useEffect , useState } from "react" ;
3
+ import React , {
4
+ ChangeEvent ,
5
+ Fragment ,
6
+ useCallback ,
7
+ useEffect ,
8
+ useState ,
9
+ } from "react" ;
4
10
import { HeaderEditorComponent } from "@/features/encoder/components/header-editor.component" ;
5
11
import {
6
12
CardComponent ,
7
13
CardComponentProps ,
8
14
} from "@/features/common/components/card/card.component" ;
9
15
import { PayloadEditorComponent } from "@/features/encoder/components/payload-editor.component" ;
10
- import { TokenEncoderEncodingFormatPickerComponent } from "@/features/encoder/components/token-encoder-encoding-format-picker.component" ;
11
16
import { TokenEncoderKeyFormatPickerComponent } from "@/features/encoder/components/token-encoder-key-format-picker.component" ;
12
17
import { SigningSecretEditorComponent } from "@/features/encoder/components/signing-secret-editor.component" ;
13
18
import { SigningPrivateKeyEditorComponent } from "@/features/encoder/components/signing-private-key-editor.component" ;
@@ -28,6 +33,7 @@ import {
28
33
import { dataTestidDictionary } from "@/libs/testing/data-testid.dictionary" ;
29
34
import { CardToolbarComponent } from "@/features/common/components/card-toolbar/card-toolbar.component" ;
30
35
import { CardToolbarClearButtonComponent } from "@/features/common/components/card-toolbar-buttons/card-toolbar-clear-button/card-toolbar-clear-button.component" ;
36
+ import { EncodingFormatToggleSwitchComponent } from "@/features/decoder/components/encoding-format-toggle-swith/encoding-format-toggle-switch" ;
31
37
32
38
type HeaderInputComponentProps = {
33
39
languageCode : string ;
@@ -41,32 +47,32 @@ export const TokenEncoderInputComponent: React.FC<
41
47
const headerErrors$ = useEncoderStore ( ( state ) =>
42
48
state . headerErrors && state . headerErrors . length > 0
43
49
? state . headerErrors
44
- : null ,
50
+ : null
45
51
) ;
46
52
const headerWarnings$ = useEncoderStore ( ( state ) =>
47
53
state . headerWarnings && state . headerWarnings . length > 0
48
54
? state . headerWarnings
49
- : null ,
55
+ : null
50
56
) ;
51
57
const payloadErrors$ = useEncoderStore ( ( state ) =>
52
58
state . payloadErrors && state . payloadErrors . length > 0
53
59
? state . payloadErrors
54
- : null ,
60
+ : null
55
61
) ;
56
62
const signingErrors$ = useEncoderStore ( ( state ) =>
57
63
state . signingErrors && state . signingErrors . length > 0
58
64
? state . signingErrors
59
- : null ,
65
+ : null
60
66
) ;
61
67
const controlledHeader$ = useEncoderStore ( ( state ) => state . controlledHeader ) ;
62
68
const controlledPayload$ = useEncoderStore (
63
- ( state ) => state . controlledPayload ,
69
+ ( state ) => state . controlledPayload
64
70
) ;
65
71
const controlledSymmetricSecretKey$ = useEncoderStore (
66
- ( state ) => state . controlledSymmetricSecretKey ,
72
+ ( state ) => state . controlledSymmetricSecretKey
67
73
) ;
68
74
const controlledAsymmetricPrivateKey$ = useEncoderStore (
69
- ( state ) => state . controlledAsymmetricPrivateKey ,
75
+ ( state ) => state . controlledAsymmetricPrivateKey
70
76
) ;
71
77
72
78
const [ header , setHeader ] = useState < string > ( DEFAULT_HEADER ) ;
@@ -95,28 +101,28 @@ export const TokenEncoderInputComponent: React.FC<
95
101
} , [ controlledAsymmetricPrivateKey$ ] ) ;
96
102
97
103
const handleHeaderChange$ = useEncoderStore (
98
- ( state ) => state . handleHeaderChange ,
104
+ ( state ) => state . handleHeaderChange
99
105
) ;
100
106
const resetControlledHeader$ = useEncoderStore (
101
- ( state ) => state . resetControlledHeader ,
107
+ ( state ) => state . resetControlledHeader
102
108
) ;
103
109
const handlePayloadChange$ = useEncoderStore (
104
- ( state ) => state . handlePayloadChange ,
110
+ ( state ) => state . handlePayloadChange
105
111
) ;
106
112
const resetControlledPayload$ = useEncoderStore (
107
- ( state ) => state . resetControlledPayload ,
113
+ ( state ) => state . resetControlledPayload
108
114
) ;
109
115
const handleSymmetricSecretKeyChange$ = useEncoderStore (
110
- ( state ) => state . handleSymmetricSecretKeyChange ,
116
+ ( state ) => state . handleSymmetricSecretKeyChange
111
117
) ;
112
118
const resetControlledSymmetricSecretKey$ = useEncoderStore (
113
- ( state ) => state . resetControlledSymmetricSecretKey ,
119
+ ( state ) => state . resetControlledSymmetricSecretKey
114
120
) ;
115
121
const handleAsymmetricPrivateKeyChange$ = useEncoderStore (
116
- ( state ) => state . handleAsymmetricPrivateKeyChange ,
122
+ ( state ) => state . handleAsymmetricPrivateKeyChange
117
123
) ;
118
124
const resetControlledAsymmetricPrivateKey$ = useEncoderStore (
119
- ( state ) => state . resetControlledAsymmetricPrivateKey ,
125
+ ( state ) => state . resetControlledAsymmetricPrivateKey
120
126
) ;
121
127
122
128
const clearHeader = async ( ) => {
@@ -153,7 +159,7 @@ export const TokenEncoderInputComponent: React.FC<
153
159
154
160
handleHeaderChange$ ( cleanValue ) ;
155
161
} ,
156
- [ handleHeaderChange$ ] ,
162
+ [ handleHeaderChange$ ]
157
163
) ;
158
164
159
165
const handlePayloadChange = useCallback (
@@ -164,11 +170,11 @@ export const TokenEncoderInputComponent: React.FC<
164
170
165
171
handlePayloadChange$ ( cleanValue ) ;
166
172
} ,
167
- [ handlePayloadChange$ ] ,
173
+ [ handlePayloadChange$ ]
168
174
) ;
169
175
170
176
const handleSymmetricSecretKeyChange = async (
171
- e : ChangeEvent < HTMLTextAreaElement > ,
177
+ e : ChangeEvent < HTMLTextAreaElement >
172
178
) => {
173
179
const key = e . target . value ;
174
180
@@ -180,7 +186,7 @@ export const TokenEncoderInputComponent: React.FC<
180
186
} ;
181
187
182
188
const handleAsymmetricPrivateKeyChange = async (
183
- e : ChangeEvent < HTMLTextAreaElement > ,
189
+ e : ChangeEvent < HTMLTextAreaElement >
184
190
) => {
185
191
const key = e . target . value ;
186
192
@@ -197,6 +203,7 @@ export const TokenEncoderInputComponent: React.FC<
197
203
languageCode : languageCode ,
198
204
title : dictionary . headerEditor . title ,
199
205
compactTitle : dictionary . headerEditor . compactTitle ,
206
+ hasHeaderIcon : true ,
200
207
children : (
201
208
< HeaderEditorComponent
202
209
header = { header }
@@ -219,7 +226,7 @@ export const TokenEncoderInputComponent: React.FC<
219
226
</ CardToolbarComponent >
220
227
) ,
221
228
} ,
222
- options : { noPadding : true } ,
229
+ options : { noPadding : false } ,
223
230
} ,
224
231
{
225
232
id : dataTestidDictionary . encoder . payloadEditor . id ,
@@ -232,6 +239,7 @@ export const TokenEncoderInputComponent: React.FC<
232
239
handlePayloadChange = { handlePayloadChange }
233
240
/>
234
241
) ,
242
+ hasHeaderIcon : true ,
235
243
messages : {
236
244
success : [ dictionary . payloadEditor . successMessage ] ,
237
245
errors : payloadErrors$ ,
@@ -247,22 +255,23 @@ export const TokenEncoderInputComponent: React.FC<
247
255
</ CardToolbarComponent >
248
256
) ,
249
257
} ,
250
- options : { noPadding : true } ,
258
+ options : { noPadding : false } ,
251
259
} ,
252
260
] ;
253
261
254
262
if ( isHmacAlg ( alg$ ) || isDigitalSignatureAlg ( alg$ ) ) {
255
263
cards . push ( {
256
264
id : dataTestidDictionary . encoder . secretKeyEditor . id ,
257
265
languageCode : languageCode ,
266
+ hasHeaderIcon : true ,
258
267
title : isHmacAlg ( alg$ )
259
268
? dictionary . signatureEditor . title . secret
260
269
: dictionary . signatureEditor . title . privateKey ,
261
270
compactTitle : isHmacAlg ( alg$ )
262
271
? dictionary . signatureEditor . compactTitle . secret
263
272
: dictionary . signatureEditor . compactTitle . privateKey ,
264
273
options : {
265
- noPadding : true ,
274
+ noPadding : false ,
266
275
} ,
267
276
children : (
268
277
< >
@@ -307,13 +316,6 @@ export const TokenEncoderInputComponent: React.FC<
307
316
/>
308
317
</ CardToolbarComponent >
309
318
) ,
310
- footer : isHmacAlg ( alg$ ) ? (
311
- < TokenEncoderEncodingFormatPickerComponent
312
- languageCode = { languageCode }
313
- />
314
- ) : (
315
- < TokenEncoderKeyFormatPickerComponent languageCode = { languageCode } />
316
- ) ,
317
319
} ,
318
320
} ) ;
319
321
}
@@ -322,7 +324,26 @@ export const TokenEncoderInputComponent: React.FC<
322
324
< >
323
325
< div heap-ignore = "true" className = { styles . encoderCards } >
324
326
{ cards . map ( ( props ) => (
325
- < CardComponent key = { props . title } { ...props } />
327
+ < Fragment key = { props . title } >
328
+ { props . id === dataTestidDictionary . encoder . secretKeyEditor . id ? (
329
+ < div className = { styles . headline_container } >
330
+ < h4 className = { styles . headline } > { props . compactTitle } </ h4 >
331
+ { isHmacAlg ( alg$ ) ? (
332
+ < EncodingFormatToggleSwitchComponent
333
+ languageCode = { languageCode }
334
+ isEncoding
335
+ />
336
+ ) : (
337
+ < TokenEncoderKeyFormatPickerComponent
338
+ languageCode = { languageCode }
339
+ />
340
+ ) }
341
+ </ div >
342
+ ) : (
343
+ < h4 className = { styles . headline } > { props . compactTitle } </ h4 >
344
+ ) }
345
+ < CardComponent { ...props } />
346
+ </ Fragment >
326
347
) ) }
327
348
</ div >
328
349
< div heap-ignore = "true" className = { styles . encoderCardTabs } >
0 commit comments