Skip to content

Commit eef6e5b

Browse files
Add embedded automate react component
1 parent e252cf3 commit eef6e5b

File tree

7 files changed

+152
-8
lines changed

7 files changed

+152
-8
lines changed

app/controllers/catalog_controller.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,14 @@ def ae_tree_select_toggle
664664
session[:edit] = @edit
665665
end
666666

667+
def ae_tree_load
668+
assert_new_or_edit_by_service_type
669+
670+
require 'byebug'
671+
byebug
672+
session[:edit]
673+
end
674+
667675
# Method to open the workflows dialog box
668676
# params[:field] => :fqname || :retire_fqname || :reconfigure_fqname
669677
# params[:selected] => Holds the value of the *_configuration_script_id
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import React, { useState, useEffect } from 'react';
2+
import PropTypes from 'prop-types';
3+
import { Loading, Modal, ModalBody } from 'carbon-components-react';
4+
import MiqDataTable from '../miq-data-table';
5+
import { http } from '../../http_api';
6+
7+
const AutomateEntryPoints = ({
8+
field, selected, type, setShowModal, setSelectedValue,
9+
}) => {
10+
const [data, setData] = useState({
11+
isLoading: true, list: {}, selectedItemId: selected,
12+
});
13+
14+
const workflowTypes = {
15+
provision: __('Provision'),
16+
reconfigure: __('Reconfigure'),
17+
retire: __('Retirement'),
18+
};
19+
20+
useEffect(() => {
21+
http.post(`/catalog/ae_tree_load?typ=${type}`, {}, { headers: {}, skipJsonParsing: true })
22+
.then((_data) => {
23+
console.log(data);
24+
API.get('/api/automate_domains?expand=resources')
25+
.then((response) => {
26+
console.log(response);
27+
// API.get('/api/automate_workspaces?expand=resources').then((response) => {
28+
// console.log(response);
29+
// });
30+
setData({
31+
...data,
32+
isLoading: false,
33+
});
34+
});
35+
});
36+
}, []);
37+
38+
/** Function to handle a row's click event. */
39+
const onSelect = (selectedItemId) => {
40+
setData({
41+
...data,
42+
selectedItemId: (data.selectedItemId === selectedItemId) ? undefined : selectedItemId,
43+
});
44+
const params = `cfp-${encodeURIComponent(selectedItemId)}&tree=automate_catalog_tree&field=${field}`;
45+
window.miqJqueryRequest(`/catalog/ae_tree_select/?id=${params}&typ=${type}`);
46+
};
47+
if (data.isLoading) {
48+
return (<Loading active small withOverlay={false} className="loading" />);
49+
}
50+
/** Function to handle the modal box close button click event. */
51+
const onCloseModal = () => {
52+
if (setShowModal) {
53+
setShowModal(false);
54+
} else {
55+
document.getElementById(`${type}-workflows`).innerHTML = '';
56+
http.post('/catalog/ae_tree_select_toggle?button=cancel', {}, { headers: {}, skipJsonParsing: true });
57+
}
58+
};
59+
/** Function to handle the modal box apply button click event. */
60+
const onApply = () => {
61+
const seletedItem = data.list.rows.find((item) => item.id === data.selectedItemId);
62+
const name = seletedItem.name.text;
63+
if (seletedItem) {
64+
if (setShowModal && setSelectedValue) {
65+
setShowModal(false);
66+
setSelectedValue(seletedItem);
67+
} else {
68+
const nameField = document.getElementById(field);
69+
const selectedField = document.getElementById(`${type}_configuration_script_id`);
70+
71+
if (nameField && selectedField) {
72+
nameField.value = name;
73+
selectedField.value = data.selectedItemId;
74+
http.post('/catalog/ae_tree_select_toggle?button=submit&automation_type=workflow', {}, { headers: {}, skipJsonParsing: true })
75+
.then((_data) => {
76+
document.getElementById(`${type}-workflows`).innerHTML = '';
77+
});
78+
}
79+
}
80+
}
81+
};
82+
return (
83+
<Modal
84+
open
85+
modalHeading={sprintf(__('Select Embedded Workflow - %s Entry Point'), workflowTypes[type])}
86+
primaryButtonText={__('Apply')}
87+
secondaryButtonText={__('Cancel')}
88+
onRequestSubmit={onApply}
89+
onRequestClose={onCloseModal}
90+
className="workflows-entry-point-modal"
91+
>
92+
<ModalBody className="workflows-entry-point-modal-body">
93+
<MiqDataTable
94+
headers={data.list.headers}
95+
rows={data.list.rows}
96+
onCellClick={(selectedRow) => onSelect(selectedRow.id)}
97+
showPagination={false}
98+
truncateText={false}
99+
mode="automated-workflow-entry-points"
100+
gridChecks={[data.selectedItemId]}
101+
size="md"
102+
/>
103+
</ModalBody>
104+
</Modal>
105+
);
106+
};
107+
AutomateEntryPoints.propTypes = {
108+
field: PropTypes.string.isRequired,
109+
type: PropTypes.string.isRequired,
110+
selected: PropTypes.string,
111+
setShowModal: PropTypes.func,
112+
setSelectedValue: PropTypes.func,
113+
};
114+
115+
AutomateEntryPoints.defaultProps = {
116+
selected: '',
117+
setShowModal: undefined,
118+
setSelectedValue: undefined,
119+
};
120+
121+
export default AutomateEntryPoints;

app/javascript/components/embedded-automate-entry-point/index.jsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import PropTypes from 'prop-types';
33
import { Button, TextInput } from 'carbon-components-react';
44
import { Close16, TreeViewAlt16 } from '@carbon/icons-react';
55
import { useFieldApi } from '@@ddf';
6-
import WorkflowEntryPoints from '../workflows/workflow-entry-points';
6+
import AutomateEntryPoints from '../automate-entry-points';
77

8-
const EmbeddedEntryPoint = (props) => {
8+
const EmbeddedAutomateEntryPoint = (props) => {
99
const {
1010
label, initialValue, id, field, selected, type,
1111
} = props;
@@ -33,7 +33,7 @@ const EmbeddedEntryPoint = (props) => {
3333
return (
3434
<div>
3535
{showModal ? (
36-
<WorkflowEntryPoints
36+
<AutomateEntryPoints
3737
field={field}
3838
selected={selected}
3939
type={type}
@@ -70,7 +70,7 @@ const EmbeddedEntryPoint = (props) => {
7070
);
7171
};
7272

73-
EmbeddedEntryPoint.propTypes = {
73+
EmbeddedAutomateEntryPoint.propTypes = {
7474
id: PropTypes.string.isRequired,
7575
label: PropTypes.string.isRequired,
7676
initialValue: PropTypes.string,
@@ -79,9 +79,9 @@ EmbeddedEntryPoint.propTypes = {
7979
type: PropTypes.string.isRequired,
8080
};
8181

82-
EmbeddedEntryPoint.defaultProps = {
82+
EmbeddedAutomateEntryPoint.defaultProps = {
8383
initialValue: '',
8484
selected: '',
8585
};
8686

87-
export default EmbeddedEntryPoint;
87+
export default EmbeddedAutomateEntryPoint;

app/javascript/components/terraform-template-catalog-form/terraform-template-catalog-form.schema.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,19 @@ const basicInformationTabSchema = (availableCatalogs, tenantTree, roleAllows, zo
4949
is: 'embedded_automate',
5050
},
5151
},
52+
// {
53+
// component: 'embedded-automate-entry-point',
54+
// id: 'provisioning_entry_point_automate',
55+
// name: 'provisioning_entry_point_automate',
56+
// label: 'Provisioning Entry Point',
57+
// field: 'fqname',
58+
// selected: '',
59+
// type: 'provision',
60+
// condition: {
61+
// when: 'provisioning_entry_point_type',
62+
// is: 'embedded_automate',
63+
// },
64+
// },
5265
{
5366
component: 'embedded-workflow-entry-point',
5467
id: 'provisioning_entry_point_workflow',

app/javascript/components/workflows/workflow-entry-points.jsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { http } from '../../http_api';
88
const WorkflowEntryPoints = ({
99
field, selected, type, setShowModal, setSelectedValue,
1010
}) => {
11-
console.log(selected);
1211
const [data, setData] = useState({
1312
isLoading: true, list: {}, selectedItemId: selected,
1413
});

app/javascript/forms/mappers/componentMapper.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,17 @@ import { TreeViewField, TreeViewSelector } from '../../components/tree-view';
1010
import MultiSelectWithSelectAll from '../../components/multiselect-with-selectall';
1111
import FontIconPicker from '../../components/fonticon-picker';
1212
import FontIconPickerDdf from '../../components/fonticon-picker/font-icon-picker-ddf';
13+
import EmbeddedAutomateEntryPoint from '../../components/embedded-automate-entry-point';
1314
import EmbeddedWorkflowEntryPoint from '../../components/embedded-workflow-entry-point';
1415

1516
const mapper = {
1617
...componentMapper,
1718
'code-editor': CodeEditor,
19+
'embedded-automate-entry-point': EmbeddedAutomateEntryPoint,
20+
'embedded-workflow-entry-point': EmbeddedWorkflowEntryPoint,
1821
'edit-password-field': EditPasswordField,
1922
'file-upload': FileUploadComponent,
2023
'password-field': PasswordField,
21-
'embedded-workflow-entry-point': EmbeddedWorkflowEntryPoint,
2224
'validate-credentials': AsyncCredentials,
2325
'tree-view': TreeViewField,
2426
'tree-selector': TreeViewSelector,

config/routes.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@
310310
ae_tree_select
311311
ae_tree_select_discard
312312
ae_tree_select_toggle
313+
ae_tree_load
313314
atomic_form_field_changed
314315
atomic_st_edit
315316
automate_button_field_changed

0 commit comments

Comments
 (0)