-
Notifications
You must be signed in to change notification settings - Fork 67
/
RunDetailTrigger.tsx
96 lines (83 loc) 路 3.4 KB
/
RunDetailTrigger.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import {Form, Input} from 'antd';
import Header from 'components/CreateTest/Header';
import {StepsID} from 'components/GuidedTour/testRunSteps';
import RunDetailTriggerResponseFactory from 'components/RunDetailTriggerResponse/RunDetailTriggerResponseFactory';
import RunEvents from 'components/RunEvents';
import FormFactory from 'components/TestPlugins/FormFactory';
import {TriggerTypeToPlugin} from 'constants/Plugins.constants';
import {TriggerTypes} from 'constants/Test.constants';
import {TestState} from 'constants/TestRun.constants';
import {TestRunStage} from 'constants/TestRunEvents.constants';
import useValidateTestDraft from 'hooks/useValidateTestDraft';
import Test from 'models/Test.model';
import TestRun, {isRunStateFinished} from 'models/TestRun.model';
import TestRunEvent from 'models/TestRunEvent.model';
import {useTest} from 'providers/Test/Test.provider';
import {useTestRun} from 'providers/TestRun/TestRun.provider';
import {useEffect, useMemo, useState} from 'react';
import TestService from 'services/Test.service';
import {TDraftTest} from 'types/Test.types';
import * as S from './RunDetailTrigger.styled';
import {useShortcutWithDefault} from '../TestPlugins/hooks/useShortcut';
export const FORM_ID = 'create-test';
interface IProps {
test: Test;
run: TestRun;
runEvents: TestRunEvent[];
isError: boolean;
}
const RunDetailTrigger = ({test, run: {id, state, triggerResult, triggerTime}, runEvents, isError}: IProps) => {
const shouldDisplayError = isError || state === TestState.TRIGGER_FAILED;
const [form] = Form.useForm<TDraftTest>();
const {isEditLoading: isLoading, onEdit} = useTest();
const plugin = TriggerTypeToPlugin[test.trigger.type];
const [isValid, setIsValid] = useState(true);
const onValidateTest = useValidateTestDraft({pluginName: plugin.name, setIsValid});
const {run} = useTestRun();
const stateIsFinished = isRunStateFinished(run.state);
const initialValues = useMemo(() => TestService.getInitialValues(test), [test]);
const isDisabled = isLoading || !stateIsFinished;
useShortcutWithDefault(form);
useEffect(() => {
form.setFieldsValue(initialValues);
}, [form, initialValues]);
return (
<S.Container>
<Form<TDraftTest>
autoComplete="off"
data-cy="edit-test-form"
form={form}
initialValues={initialValues}
layout="vertical"
name={FORM_ID}
onFinish={values => !isDisabled && onEdit(values)}
onValuesChange={onValidateTest}
>
<Form.Item name="name" hidden>
<Input type="hidden" value={test.name} />
</Form.Item>
<Header isLoading={isDisabled} isValid={isValid} triggerType={test.trigger.type} />
<S.Body>
<S.SectionLeft data-tour={StepsID.Trigger}>
<FormFactory type={test.trigger.type} />
</S.SectionLeft>
<S.SectionRight>
{shouldDisplayError ? (
<RunEvents events={runEvents} stage={TestRunStage.Trigger} state={state} />
) : (
<RunDetailTriggerResponseFactory
runId={id}
state={state}
testId={test.id}
triggerResult={triggerResult}
triggerTime={triggerTime}
type={triggerResult?.type ?? TriggerTypes.http}
/>
)}
</S.SectionRight>
</S.Body>
</Form>
</S.Container>
);
};
export default RunDetailTrigger;