forked from theforeman/foreman_remote_execution
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
95 lines (87 loc) · 2.58 KB
/
index.js
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
import React, { useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import PropTypes from 'prop-types';
import URI from 'urijs';
import { get } from 'foremanReact/redux/API';
import {
selectJobCategories,
selectJobTemplates,
selectJobCategoriesStatus,
filterJobTemplates,
selectCategoryError,
selectAllTemplatesError,
selectTemplateError,
} from '../../JobWizardSelectors';
import { CategoryAndTemplate } from './CategoryAndTemplate';
import {
JOB_TEMPLATES,
JOB_CATEGORIES,
templatesUrl,
} from '../../JobWizardConstants';
const ConnectedCategoryAndTemplate = ({
jobTemplate,
setJobTemplate,
category,
setCategory,
}) => {
const dispatch = useDispatch();
const jobCategoriesStatus = useSelector(selectJobCategoriesStatus);
useEffect(() => {
if (!jobCategoriesStatus) {
// Don't reload categories if they are already loaded
dispatch(
get({
key: JOB_CATEGORIES,
url: '/ui_job_wizard/categories',
handleSuccess: response =>
setCategory(response.data.job_categories[0] || ''),
})
);
}
}, [jobCategoriesStatus, dispatch, setCategory]);
const jobCategories = useSelector(selectJobCategories);
useEffect(() => {
if (category) {
const templatesUrlObject = new URI(templatesUrl);
dispatch(
get({
key: JOB_TEMPLATES,
url: templatesUrlObject.addSearch({
search: `job_category="${category}"`,
per_page: 'all',
}),
handleSuccess: response => {
setJobTemplate(
Number(filterJobTemplates(response?.data?.results)[0]?.id) || null
);
},
})
);
}
}, [category, dispatch, setJobTemplate]);
const jobTemplates = useSelector(selectJobTemplates);
const errors = {
categoryError: useSelector(selectCategoryError),
allTemplatesError: useSelector(selectAllTemplatesError),
templateError: useSelector(selectTemplateError),
};
return (
<CategoryAndTemplate
jobTemplates={jobTemplates}
jobCategories={jobCategories}
setJobTemplate={setJobTemplate}
selectedTemplateID={jobTemplate}
setCategory={setCategory}
selectedCategory={category}
errors={errors}
/>
);
};
ConnectedCategoryAndTemplate.propTypes = {
jobTemplate: PropTypes.number,
setJobTemplate: PropTypes.func.isRequired,
category: PropTypes.string.isRequired,
setCategory: PropTypes.func.isRequired,
};
ConnectedCategoryAndTemplate.defaultProps = { jobTemplate: null };
export default ConnectedCategoryAndTemplate;