Skip to content

Commit 09ffa20

Browse files
committed
add headers to token encoder cards
1 parent 51867df commit 09ffa20

File tree

2 files changed

+70
-32
lines changed

2 files changed

+70
-32
lines changed

src/features/encoder/components/token-encoder-input.component.tsx

Lines changed: 53 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
"use client";
22

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";
410
import { HeaderEditorComponent } from "@/features/encoder/components/header-editor.component";
511
import {
612
CardComponent,
713
CardComponentProps,
814
} from "@/features/common/components/card/card.component";
915
import { PayloadEditorComponent } from "@/features/encoder/components/payload-editor.component";
10-
import { TokenEncoderEncodingFormatPickerComponent } from "@/features/encoder/components/token-encoder-encoding-format-picker.component";
1116
import { TokenEncoderKeyFormatPickerComponent } from "@/features/encoder/components/token-encoder-key-format-picker.component";
1217
import { SigningSecretEditorComponent } from "@/features/encoder/components/signing-secret-editor.component";
1318
import { SigningPrivateKeyEditorComponent } from "@/features/encoder/components/signing-private-key-editor.component";
@@ -28,6 +33,7 @@ import {
2833
import { dataTestidDictionary } from "@/libs/testing/data-testid.dictionary";
2934
import { CardToolbarComponent } from "@/features/common/components/card-toolbar/card-toolbar.component";
3035
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";
3137

3238
type HeaderInputComponentProps = {
3339
languageCode: string;
@@ -41,32 +47,32 @@ export const TokenEncoderInputComponent: React.FC<
4147
const headerErrors$ = useEncoderStore((state) =>
4248
state.headerErrors && state.headerErrors.length > 0
4349
? state.headerErrors
44-
: null,
50+
: null
4551
);
4652
const headerWarnings$ = useEncoderStore((state) =>
4753
state.headerWarnings && state.headerWarnings.length > 0
4854
? state.headerWarnings
49-
: null,
55+
: null
5056
);
5157
const payloadErrors$ = useEncoderStore((state) =>
5258
state.payloadErrors && state.payloadErrors.length > 0
5359
? state.payloadErrors
54-
: null,
60+
: null
5561
);
5662
const signingErrors$ = useEncoderStore((state) =>
5763
state.signingErrors && state.signingErrors.length > 0
5864
? state.signingErrors
59-
: null,
65+
: null
6066
);
6167
const controlledHeader$ = useEncoderStore((state) => state.controlledHeader);
6268
const controlledPayload$ = useEncoderStore(
63-
(state) => state.controlledPayload,
69+
(state) => state.controlledPayload
6470
);
6571
const controlledSymmetricSecretKey$ = useEncoderStore(
66-
(state) => state.controlledSymmetricSecretKey,
72+
(state) => state.controlledSymmetricSecretKey
6773
);
6874
const controlledAsymmetricPrivateKey$ = useEncoderStore(
69-
(state) => state.controlledAsymmetricPrivateKey,
75+
(state) => state.controlledAsymmetricPrivateKey
7076
);
7177

7278
const [header, setHeader] = useState<string>(DEFAULT_HEADER);
@@ -95,28 +101,28 @@ export const TokenEncoderInputComponent: React.FC<
95101
}, [controlledAsymmetricPrivateKey$]);
96102

97103
const handleHeaderChange$ = useEncoderStore(
98-
(state) => state.handleHeaderChange,
104+
(state) => state.handleHeaderChange
99105
);
100106
const resetControlledHeader$ = useEncoderStore(
101-
(state) => state.resetControlledHeader,
107+
(state) => state.resetControlledHeader
102108
);
103109
const handlePayloadChange$ = useEncoderStore(
104-
(state) => state.handlePayloadChange,
110+
(state) => state.handlePayloadChange
105111
);
106112
const resetControlledPayload$ = useEncoderStore(
107-
(state) => state.resetControlledPayload,
113+
(state) => state.resetControlledPayload
108114
);
109115
const handleSymmetricSecretKeyChange$ = useEncoderStore(
110-
(state) => state.handleSymmetricSecretKeyChange,
116+
(state) => state.handleSymmetricSecretKeyChange
111117
);
112118
const resetControlledSymmetricSecretKey$ = useEncoderStore(
113-
(state) => state.resetControlledSymmetricSecretKey,
119+
(state) => state.resetControlledSymmetricSecretKey
114120
);
115121
const handleAsymmetricPrivateKeyChange$ = useEncoderStore(
116-
(state) => state.handleAsymmetricPrivateKeyChange,
122+
(state) => state.handleAsymmetricPrivateKeyChange
117123
);
118124
const resetControlledAsymmetricPrivateKey$ = useEncoderStore(
119-
(state) => state.resetControlledAsymmetricPrivateKey,
125+
(state) => state.resetControlledAsymmetricPrivateKey
120126
);
121127

122128
const clearHeader = async () => {
@@ -153,7 +159,7 @@ export const TokenEncoderInputComponent: React.FC<
153159

154160
handleHeaderChange$(cleanValue);
155161
},
156-
[handleHeaderChange$],
162+
[handleHeaderChange$]
157163
);
158164

159165
const handlePayloadChange = useCallback(
@@ -164,11 +170,11 @@ export const TokenEncoderInputComponent: React.FC<
164170

165171
handlePayloadChange$(cleanValue);
166172
},
167-
[handlePayloadChange$],
173+
[handlePayloadChange$]
168174
);
169175

170176
const handleSymmetricSecretKeyChange = async (
171-
e: ChangeEvent<HTMLTextAreaElement>,
177+
e: ChangeEvent<HTMLTextAreaElement>
172178
) => {
173179
const key = e.target.value;
174180

@@ -180,7 +186,7 @@ export const TokenEncoderInputComponent: React.FC<
180186
};
181187

182188
const handleAsymmetricPrivateKeyChange = async (
183-
e: ChangeEvent<HTMLTextAreaElement>,
189+
e: ChangeEvent<HTMLTextAreaElement>
184190
) => {
185191
const key = e.target.value;
186192

@@ -197,6 +203,7 @@ export const TokenEncoderInputComponent: React.FC<
197203
languageCode: languageCode,
198204
title: dictionary.headerEditor.title,
199205
compactTitle: dictionary.headerEditor.compactTitle,
206+
hasHeaderIcon: true,
200207
children: (
201208
<HeaderEditorComponent
202209
header={header}
@@ -219,7 +226,7 @@ export const TokenEncoderInputComponent: React.FC<
219226
</CardToolbarComponent>
220227
),
221228
},
222-
options: { noPadding: true },
229+
options: { noPadding: false },
223230
},
224231
{
225232
id: dataTestidDictionary.encoder.payloadEditor.id,
@@ -232,6 +239,7 @@ export const TokenEncoderInputComponent: React.FC<
232239
handlePayloadChange={handlePayloadChange}
233240
/>
234241
),
242+
hasHeaderIcon: true,
235243
messages: {
236244
success: [dictionary.payloadEditor.successMessage],
237245
errors: payloadErrors$,
@@ -247,22 +255,23 @@ export const TokenEncoderInputComponent: React.FC<
247255
</CardToolbarComponent>
248256
),
249257
},
250-
options: { noPadding: true },
258+
options: { noPadding: false },
251259
},
252260
];
253261

254262
if (isHmacAlg(alg$) || isDigitalSignatureAlg(alg$)) {
255263
cards.push({
256264
id: dataTestidDictionary.encoder.secretKeyEditor.id,
257265
languageCode: languageCode,
266+
hasHeaderIcon: true,
258267
title: isHmacAlg(alg$)
259268
? dictionary.signatureEditor.title.secret
260269
: dictionary.signatureEditor.title.privateKey,
261270
compactTitle: isHmacAlg(alg$)
262271
? dictionary.signatureEditor.compactTitle.secret
263272
: dictionary.signatureEditor.compactTitle.privateKey,
264273
options: {
265-
noPadding: true,
274+
noPadding: false,
266275
},
267276
children: (
268277
<>
@@ -307,13 +316,6 @@ export const TokenEncoderInputComponent: React.FC<
307316
/>
308317
</CardToolbarComponent>
309318
),
310-
footer: isHmacAlg(alg$) ? (
311-
<TokenEncoderEncodingFormatPickerComponent
312-
languageCode={languageCode}
313-
/>
314-
) : (
315-
<TokenEncoderKeyFormatPickerComponent languageCode={languageCode} />
316-
),
317319
},
318320
});
319321
}
@@ -322,7 +324,26 @@ export const TokenEncoderInputComponent: React.FC<
322324
<>
323325
<div heap-ignore="true" className={styles.encoderCards}>
324326
{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>
326347
))}
327348
</div>
328349
<div heap-ignore="true" className={styles.encoderCardTabs}>

src/features/encoder/components/token-encoder-input.module.scss

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,20 @@
2424
display: none;
2525
}
2626
}
27+
.headline_container {
28+
display: flex;
29+
grid-column: 1/-1;
30+
width: 100%;
31+
justify-content: space-between;
32+
}
33+
34+
.headline {
35+
display: flex;
36+
grid-column: 1/-1;
37+
width: 100%;
38+
font-size: 1rem;
39+
font-weight: 700;
40+
line-height: 1.15;
41+
letter-spacing: -.1px;
42+
color: var(--color_fg_default);
43+
}

0 commit comments

Comments
 (0)