-
Notifications
You must be signed in to change notification settings - Fork 66
/
CurrentSpanSelector.tsx
59 lines (53 loc) 路 1.82 KB
/
CurrentSpanSelector.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
import {useCallback} from 'react';
import {LoadingOutlined} from '@ant-design/icons';
import SpanService from 'services/Span.service';
import {useTest} from 'providers/Test/Test.provider';
import {useTestRun} from 'providers/TestRun/TestRun.provider';
import {useAppSelector} from 'redux/hooks';
import SpanSelectors from 'selectors/Span.selectors';
import {useSpan} from 'providers/Span/Span.provider';
import TestOutput from 'models/TestOutput.model';
import {useTestOutput} from 'providers/TestOutput/TestOutput.provider';
import {useTestSpecForm} from '../TestSpecForm/TestSpecForm.provider';
import * as S from './CurrentSpanSelector.styled';
interface IProps {
spanId: string;
}
const CurrentSpanSelector = ({spanId}: IProps) => {
const {open, isOpen: isTestSpecFormOpen} = useTestSpecForm();
const {onOpen} = useTestOutput();
const {
run: {id: runId},
} = useTestRun();
const {
test: {id: testId},
} = useTest();
const {isTriggerSelectorLoading} = useSpan();
const span = useAppSelector(state => SpanSelectors.selectSpanById(state, spanId, testId, runId));
const handleOnClick = useCallback(() => {
const selector = SpanService.getSelectorInformation(span!);
if (isTestSpecFormOpen)
open({
isEditing: false,
selector,
defaultValues: {
selector,
},
});
else onOpen(TestOutput({selector: {query: selector}}));
}, [isTestSpecFormOpen, onOpen, open, span]);
return (
<S.Container className="matched">
<S.FloatingText onClick={() => !isTriggerSelectorLoading && handleOnClick()}>
{isTriggerSelectorLoading ? (
<>
Updating selected span <LoadingOutlined />
</>
) : (
<>Select as current span</>
)}
</S.FloatingText>
</S.Container>
);
};
export default CurrentSpanSelector;