Skip to content

Commit b21ce22

Browse files
Merge pull request #189 from jeswanke/ACM-20347-difficult-to-edit-yaml2
ACM-20347-difficult-to-edit-yaml
2 parents b384390 + 627f807 commit b21ce22

File tree

6 files changed

+59
-8
lines changed

6 files changed

+59
-8
lines changed

src/Wizard.tsx

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { ShowValidationProvider, useSetShowValidation, useShowValidation } from
2424
import { StepHasInputsProvider } from './contexts/StepHasInputsProvider'
2525
import { StepShowValidationProvider, useSetStepShowValidation, useStepShowValidation } from './contexts/StepShowValidationProvider'
2626
import { StepValidationProvider, useStepHasValidationError } from './contexts/StepValidationProvider'
27-
import { useHasValidationError, ValidationProvider } from './contexts/ValidationProvider'
27+
import { useHasValidationError, useEditorValidationStatus, ValidationProvider, EditorValidationStatus } from './contexts/ValidationProvider'
2828
import { Step } from './Step'
2929

3030
export interface WizardProps {
@@ -229,6 +229,7 @@ function MyFooter(props: {
229229
const setShowValidation = useSetShowValidation()
230230
const showWizardValidation = useShowValidation()
231231
const wizardHasValidationError = useHasValidationError()
232+
const { editorValidationStatus } = useEditorValidationStatus()
232233

233234
const firstStep = props.steps[0]
234235
const lastStep = props.steps[props.steps.length - 1]
@@ -255,17 +256,36 @@ function MyFooter(props: {
255256
}
256257
}, [lastStep.name, setShowValidation, wizardContext.activeStep.name])
257258

258-
const { fixValidationErrorsMsg, submitText, submittingText, cancelButtonText, backButtonText, nextButtonText } = useStringContext()
259+
const {
260+
fixValidationErrorsMsg,
261+
fixEditorValidationErrorsMsg,
262+
waitforEditorValidationErrorsMsg,
263+
submitText,
264+
submittingText,
265+
cancelButtonText,
266+
backButtonText,
267+
nextButtonText,
268+
} = useStringContext()
259269

260270
if (wizardContext.activeStep.name === lastStep.name) {
261271
return (
262272
<div className="pf-v5-u-box-shadow-sm-top">
273+
{editorValidationStatus === EditorValidationStatus.failure && showWizardValidation && (
274+
<Alert title={fixEditorValidationErrorsMsg} isInline variant="danger" />
275+
)}
263276
{wizardHasValidationError && showWizardValidation && <Alert title={fixValidationErrorsMsg} isInline variant="danger" />}
277+
{editorValidationStatus === EditorValidationStatus.pending && showWizardValidation && (
278+
<Alert title={waitforEditorValidationErrorsMsg} isInline variant="warning" />
279+
)}
264280
{submitError && <Alert title={submitError} isInline variant="danger" />}
265281
<WizardFooter>
266282
<Button
267283
onClick={onSubmitClick}
268-
isDisabled={(wizardHasValidationError && showWizardValidation) || submitting}
284+
isDisabled={
285+
((wizardHasValidationError || editorValidationStatus !== EditorValidationStatus.success) &&
286+
showWizardValidation) ||
287+
submitting
288+
}
269289
isLoading={submitting}
270290
type="submit"
271291
>
@@ -324,7 +344,7 @@ function RenderHiddenSteps(props: { stepComponents: ReactElement[] }) {
324344
function WizardDrawer(props: { yamlEditor?: () => ReactNode }) {
325345
const [yamlEditor] = useState(props.yamlEditor ?? undefined)
326346
return (
327-
<DrawerPanelContent isResizable={true} defaultSize="800px" style={{ backgroundColor: 'rgb(21, 21, 21)' }}>
347+
<DrawerPanelContent isResizable={true} defaultSize="600px">
328348
{yamlEditor}
329349
</DrawerPanelContent>
330350
)

src/contexts/StringContext.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ export interface WizardStrings {
1919
cancelButtonText: string
2020
nextButtonText: string
2121
fixValidationErrorsMsg: string
22+
fixEditorValidationErrorsMsg: string
23+
waitforEditorValidationErrorsMsg: string
2224
submitText: string
2325
submittingText: string
2426
moreInfo: string
@@ -53,6 +55,8 @@ export const defaultStrings: WizardStrings = {
5355
cancelButtonText: 'Cancel',
5456
nextButtonText: 'Next',
5557
fixValidationErrorsMsg: 'Please fix validation errors',
58+
fixEditorValidationErrorsMsg: 'Please fix editor syntax errors',
59+
waitforEditorValidationErrorsMsg: 'Please wait for editor syntax check',
5660
submitText: 'Submit',
5761
submittingText: 'Submitting',
5862
moreInfo: 'More info',

src/contexts/ValidationProvider.tsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
import { createContext, ReactNode, useCallback, useContext, useLayoutEffect, useState } from 'react'
22

3+
export enum EditorValidationStatus {
4+
success = 'success',
5+
pending = 'pending',
6+
failure = 'failure',
7+
}
8+
9+
export const EditorValidationStatusContext = createContext<{
10+
editorValidationStatus: EditorValidationStatus
11+
setEditorValidationStatus: (status: EditorValidationStatus) => void
12+
}>({
13+
editorValidationStatus: EditorValidationStatus.success,
14+
setEditorValidationStatus: () => void 0,
15+
})
16+
export const useEditorValidationStatus = () => useContext(EditorValidationStatusContext)
17+
318
const SetHasValidationErrorContext = createContext<() => void>(() => null)
419
SetHasValidationErrorContext.displayName = 'SetHasValidationErrorContext'
520
export const useSetHasValidationError = () => useContext(SetHasValidationErrorContext)
@@ -13,6 +28,8 @@ ValidateContext.displayName = 'ValidateContext'
1328
export const useValidate = () => useContext(ValidateContext)
1429

1530
export function ValidationProvider(props: { children: ReactNode }) {
31+
const [editorValidationStatus, setEditorValidationStatus] = useState<EditorValidationStatus>(EditorValidationStatus.success)
32+
1633
const [hasValidationError, setHasValidationErrorState] = useState(false)
1734
const [previousHasValidationError, setPreviousHasValidationError] = useState(false)
1835
const setHasValidationError = useCallback(() => {
@@ -47,9 +64,11 @@ export function ValidationProvider(props: { children: ReactNode }) {
4764

4865
return (
4966
<ValidateContext.Provider value={validate}>
50-
<SetHasValidationErrorContext.Provider value={setHasValidationError}>
51-
<HasValidationErrorContext.Provider value={hasValidationError}>{props.children}</HasValidationErrorContext.Provider>
52-
</SetHasValidationErrorContext.Provider>
67+
<EditorValidationStatusContext.Provider value={{ editorValidationStatus, setEditorValidationStatus }}>
68+
<SetHasValidationErrorContext.Provider value={setHasValidationError}>
69+
<HasValidationErrorContext.Provider value={hasValidationError}>{props.children}</HasValidationErrorContext.Provider>
70+
</SetHasValidationErrorContext.Provider>
71+
</EditorValidationStatusContext.Provider>
5372
</ValidateContext.Provider>
5473
)
5574
}

src/inputs/WizKeyValue.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,17 @@ export function WizKeyValue(props: KeyValueProps) {
9696
{pairs.map((pair, index) => {
9797
return (
9898
<Fragment key={index}>
99-
<TextInput id={`key-${index + 1}`} value={pair.key} onChange={(_event, value) => onKeyChange(index, value)} />
99+
<TextInput
100+
id={`key-${index + 1}`}
101+
value={pair.key}
102+
spellCheck="false"
103+
onChange={(_event, value) => onKeyChange(index, value)}
104+
/>
100105
<span>=</span>
101106
<TextInput
102107
id={`value-${index + 1}`}
103108
value={pair.value}
109+
spellCheck="false"
104110
onChange={(_event, value) => onValueChange(index, value)}
105111
/>
106112
<Button variant="plain" aria-label={removeItemAriaLabel} onClick={() => onDeleteKey(index)}>

src/inputs/WizStringsInput.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ export function StringsMapInput(props: StringsMapInputProps) {
173173
<PFTextInput
174174
id={`${id}-${index + 1}`}
175175
value={pair}
176+
spellCheck="false"
176177
onChange={(_event, value) => onKeyChange(index, value)}
177178
required
178179
/>

src/inputs/WizTextInput.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export function WizTextInput(props: WizTextInputProps) {
4141
onChange={onChange}
4242
type={!props.secret || showSecrets ? 'text' : 'password'}
4343
isDisabled={disabled}
44+
spellCheck="false"
4445
readOnlyVariant={props.readonly ? 'default' : undefined}
4546
/>
4647
</InputGroupItem>

0 commit comments

Comments
 (0)