-
Notifications
You must be signed in to change notification settings - Fork 67
/
MissingVariablesModal.provider.tsx
78 lines (66 loc) 路 1.96 KB
/
MissingVariablesModal.provider.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
import {noop} from 'lodash';
import {createContext, useCallback, useContext, useMemo, useState} from 'react';
import MissingVariablesModal from 'components/MissingVariablesModal';
import VariablesService from 'services/Variables.service';
import MissingVariables from 'models/MissingVariables.model';
import {TEnvironmentValue} from 'models/Environment.model';
import Test from 'models/Test.model';
type TOnOPenProps = {
missingVariables: MissingVariables;
name: string;
onSubmit(draft: TEnvironmentValue[]): void;
onCancel?(): void;
testList: Test[];
};
interface IContext {
onOpen(props: TOnOPenProps): void;
}
export const Context = createContext<IContext>({
onOpen: noop,
});
interface IProps {
children: React.ReactNode;
}
export const useMissingVariablesModal = () => useContext(Context);
const MissingVariablesModalProvider = ({children}: IProps) => {
const [{missingVariables = [], testList = [], onSubmit, onCancel = noop, name}, setProps] = useState<TOnOPenProps>({
missingVariables: [],
onSubmit: noop,
onCancel: noop,
name: '',
testList: [],
});
const [isOpen, setIsOpen] = useState(false);
const onOpen = useCallback((newProps: TOnOPenProps) => {
setProps(newProps);
setIsOpen(true);
}, []);
const handleSubmit = useCallback(
(draft: TEnvironmentValue[]) => {
onSubmit(draft);
setIsOpen(false);
},
[onSubmit]
);
const value = useMemo<IContext>(() => ({onOpen}), [onOpen]);
const testVariables = useMemo(
() => VariablesService.getVariableEntries(missingVariables, testList),
[missingVariables, testList]
);
return (
<Context.Provider value={value}>
{children}
<MissingVariablesModal
testVariables={testVariables}
onClose={() => {
setIsOpen(false);
onCancel();
}}
onSubmit={handleSubmit}
isOpen={isOpen}
name={name}
/>
</Context.Provider>
);
};
export default MissingVariablesModalProvider;