foreman_acd 0.0.6 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/foreman_acd/api/v2/app_definitions_controller.rb +1 -2
  3. data/app/controllers/foreman_acd/app_definitions_controller.rb +29 -1
  4. data/app/controllers/foreman_acd/app_instances_controller.rb +70 -21
  5. data/app/controllers/foreman_acd/concerns/app_definition_parameters.rb +1 -1
  6. data/app/controllers/foreman_acd/concerns/app_instance_parameters.rb +1 -1
  7. data/app/controllers/ui_acd_controller.rb +0 -1
  8. data/app/models/foreman_acd/app_definition.rb +0 -1
  9. data/app/views/foreman_acd/app_definitions/_form.html.erb +6 -14
  10. data/app/views/foreman_acd/app_definitions/import.html.erb +18 -0
  11. data/app/views/foreman_acd/app_definitions/index.html.erb +9 -5
  12. data/app/views/foreman_acd/app_instances/_form.html.erb +5 -5
  13. data/app/views/foreman_acd/app_instances/deploy.html.erb +19 -0
  14. data/app/views/foreman_acd/app_instances/index.html.erb +6 -5
  15. data/app/views/foreman_acd/app_instances/report.html.erb +19 -0
  16. data/app/views/ui_acd/app_definition.json.rabl +1 -1
  17. data/config/routes.rb +7 -0
  18. data/db/migrate/20190610202252_create_app_definitions.rb +1 -3
  19. data/db/migrate/20190625140305_create_app_instances.rb +1 -1
  20. data/lib/foreman_acd/plugin.rb +19 -2
  21. data/lib/foreman_acd/version.rb +1 -1
  22. data/webpack/components/ApplicationDefinition/ApplicationDefinition.js +261 -0
  23. data/webpack/components/ApplicationDefinition/ApplicationDefinition.scss +1 -0
  24. data/webpack/components/ApplicationDefinition/ApplicationDefinitionActions.js +211 -0
  25. data/webpack/components/ApplicationDefinition/ApplicationDefinitionConstants.js +9 -0
  26. data/webpack/components/ApplicationDefinition/ApplicationDefinitionReducer.js +147 -0
  27. data/webpack/components/ApplicationDefinition/ApplicationDefinitionSelectors.js +6 -0
  28. data/webpack/components/ApplicationDefinition/index.js +29 -0
  29. data/webpack/components/ApplicationInstance/ApplicationInstance.js +342 -0
  30. data/webpack/components/ApplicationInstance/ApplicationInstance.scss +11 -0
  31. data/webpack/components/ApplicationInstance/ApplicationInstanceActions.js +210 -0
  32. data/webpack/components/ApplicationInstance/ApplicationInstanceConstants.js +12 -0
  33. data/webpack/components/ApplicationInstance/ApplicationInstanceReducer.js +223 -0
  34. data/webpack/components/ApplicationInstance/ApplicationInstanceSelectors.js +8 -0
  35. data/webpack/components/ApplicationInstance/components/AppDefinitionSelector.js +49 -0
  36. data/webpack/components/ApplicationInstance/components/Service.js +30 -0
  37. data/webpack/components/ApplicationInstance/components/ServiceCounter.js +37 -0
  38. data/webpack/components/ApplicationInstance/index.js +33 -0
  39. data/webpack/components/ApplicationInstanceReport/ApplicationInstanceReport.js +155 -0
  40. data/webpack/components/ApplicationInstanceReport/ApplicationInstanceReport.scss +27 -0
  41. data/webpack/components/ApplicationInstanceReport/ApplicationInstanceReportActions.js +86 -0
  42. data/webpack/components/ApplicationInstanceReport/ApplicationInstanceReportConstants.js +4 -0
  43. data/webpack/components/ApplicationInstanceReport/ApplicationInstanceReportReducer.js +52 -0
  44. data/webpack/components/ApplicationInstanceReport/ApplicationInstanceReportSelectors.js +5 -0
  45. data/webpack/components/ApplicationInstanceReport/components/ReportViewer.js +26 -0
  46. data/webpack/components/ApplicationInstanceReport/index.js +27 -0
  47. data/webpack/components/ParameterSelection/ParameterSelection.js +65 -161
  48. data/webpack/components/ParameterSelection/ParameterSelection.scss +9 -0
  49. data/webpack/components/ParameterSelection/ParameterSelectionActions.js +42 -71
  50. data/webpack/components/ParameterSelection/ParameterSelectionConstants.js +12 -19
  51. data/webpack/components/ParameterSelection/ParameterSelectionHelper.js +3 -3
  52. data/webpack/components/ParameterSelection/ParameterSelectionReducer.js +76 -75
  53. data/webpack/components/ParameterSelection/ParameterSelectionSelectors.js +2 -6
  54. data/webpack/components/ParameterSelection/__fixtures__/parameterSelection.fixtures.js +12 -21
  55. data/webpack/components/ParameterSelection/__fixtures__/parameterSelectionData_1.fixtures.js +1 -1
  56. data/webpack/components/ParameterSelection/__fixtures__/parameterSelectionReducer.fixtures.js +3 -45
  57. data/webpack/components/ParameterSelection/__tests__/ParameterSelection.test.js +20 -0
  58. data/webpack/components/ParameterSelection/__tests__/ParameterSelectionReducer.test.js +22 -46
  59. data/webpack/components/ParameterSelection/__tests__/ParameterSelectionSelectors.test.js +6 -6
  60. data/webpack/components/ParameterSelection/__tests__/__snapshots__/ParameterSelection.test.js.snap +40 -265
  61. data/webpack/components/ParameterSelection/__tests__/__snapshots__/ParameterSelectionReducer.test.js.snap +11 -96
  62. data/webpack/components/ParameterSelection/__tests__/__snapshots__/ParameterSelectionSelectors.test.js.snap +3 -9
  63. data/webpack/components/ParameterSelection/index.js +4 -6
  64. data/webpack/components/common/AddTableEntry.js +30 -0
  65. data/webpack/components/common/DeleteTableEntry.js +39 -0
  66. data/webpack/components/common/ExtSelect.js +43 -0
  67. data/webpack/components/common/RailsData.js +27 -0
  68. data/webpack/components/common/__tests__/AddTableEntry.test.js +26 -0
  69. data/webpack/components/common/__tests__/DeleteTableEntry.test.js +29 -0
  70. data/webpack/components/common/__tests__/ExtSelect.test.js +38 -0
  71. data/webpack/components/common/__tests__/RailsData.test.js +16 -0
  72. data/webpack/components/common/__tests__/__snapshots__/AddParameter.test.js.snap +35 -0
  73. data/webpack/components/common/__tests__/__snapshots__/AddTableEntry.test.js.snap +35 -0
  74. data/webpack/components/common/__tests__/__snapshots__/DeleteParameter.test.js.snap +41 -0
  75. data/webpack/components/common/__tests__/__snapshots__/DeleteTableEntry.test.js.snap +41 -0
  76. data/webpack/components/common/__tests__/__snapshots__/ExtSelect.test.js.snap +18 -0
  77. data/webpack/components/common/__tests__/__snapshots__/RailsData.test.js.snap +10 -0
  78. data/webpack/helper.js +20 -0
  79. data/webpack/index.js +6 -0
  80. data/webpack/reducer.js +40 -3
  81. metadata +47 -46
@@ -7,7 +7,7 @@ class CreateAppInstances < ActiveRecord::Migration[5.2]
7
7
  t.string :name, :default => '', :null => false, :limit => 255, :unique => true
8
8
  t.column :app_definition_id, :integer, :null => false
9
9
  t.text :description
10
- t.text :parameters
10
+ t.text :hosts
11
11
  t.timestamps :null => true
12
12
  end
13
13
  add_foreign_key :app_instances, :app_definitions
@@ -39,6 +39,16 @@ Foreman::Plugin.register :foreman_acd do
39
39
  :'foreman_acd/api/v2/app_definitions' => [:destroy] },
40
40
  :resource_type => 'ForemanAcd::AppDefinition'
41
41
 
42
+ permission :export_app_definitions,
43
+ { :'foreman_acd/app_definitions' => [:export],
44
+ :'foreman_acd/api/v2/app_definitions' => [:export] },
45
+ :resource_type => 'ForemanAcd::AppDefinition'
46
+
47
+ permission :import_app_definitions,
48
+ { :'foreman_acd/app_definitions' => [:import],
49
+ :'foreman_acd/api/v2/app_definitions' => [:import] },
50
+ :resource_type => 'ForemanAcd::AppDefinition'
51
+
42
52
  permission :create_app_instances,
43
53
  { :'foreman_acd/app_instances' => [:new, :create],
44
54
  :'foreman_acd/api/v2/app_instances' => [:create] },
@@ -63,18 +73,25 @@ Foreman::Plugin.register :foreman_acd do
63
73
  { :'foreman_acd/app_instances' => [:deploy],
64
74
  :'foreman_acd/api/v2/app_instances' => [:deploy] },
65
75
  :resource_type => 'ForemanAcd::AppInstance'
76
+
77
+ permission :report_app_instances,
78
+ { :'foreman_acd/app_instances' => [:report],
79
+ :'foreman_acd/api/v2/app_instances' => [:report] },
80
+ :resource_type => 'ForemanAcd::AppInstance'
66
81
  end
67
82
 
68
83
  # Manager Role
69
84
  role 'Application Centric Deployment Manager', [:create_app_definitions,
70
85
  :view_app_definitions,
71
86
  :edit_app_definitions,
72
- :destroy_app_definitions]
87
+ :export_app_definitions,
88
+ :import_app_definitions]
73
89
 
74
90
  # User Role
75
91
  role 'Application Centric Deployment User', [:create_app_instances,
76
92
  :view_app_instances,
77
93
  :edit_app_instances,
78
94
  :destroy_app_instances,
79
- :deploy_app_instances]
95
+ :deploy_app_instances,
96
+ :report_app_instances]
80
97
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ForemanAcd
4
- VERSION = '0.0.6'
4
+ VERSION = '0.2.1'
5
5
  end
@@ -0,0 +1,261 @@
1
+ import React, { useState } from 'react'
2
+ import PropTypes from 'prop-types';
3
+ import {
4
+ Icon,
5
+ Button,
6
+ } from 'patternfly-react';
7
+ import * as resolve from 'table-resolver';
8
+ import ForemanModal from 'foremanReact/components/ForemanModal';
9
+ import Select from 'foremanReact/components/common/forms/Select';
10
+ import ParameterSelection from '../ParameterSelection';
11
+ import AddTableEntry from '../common/AddTableEntry';
12
+ import DeleteTableEntry from '../common/DeleteTableEntry';
13
+ import RailsData from '../common/RailsData'
14
+
15
+ import {
16
+ Table,
17
+ FormControl,
18
+ inlineEditFormatterFactory,
19
+ } from 'patternfly-react';
20
+
21
+ class ApplicationDefinition extends React.Component {
22
+
23
+ constructor(props) {
24
+ super(props);
25
+ }
26
+
27
+ isEditing({rowData}) {
28
+ return (rowData.backup !== undefined);
29
+ }
30
+
31
+ componentDidMount() {
32
+ const {
33
+ data: { services, hostgroups },
34
+ initApplicationDefinition,
35
+ addApplicationDefinitionService,
36
+ deleteApplicationDefinitionService,
37
+ activateEditApplicationDefinitionService,
38
+ changeEditApplicationDefinitionService,
39
+ openParameterSelectionModal,
40
+ closeParameterSelectionModal,
41
+ } = this.props;
42
+
43
+ const inlineEditButtonsFormatter = inlineEditFormatterFactory({
44
+ isEditing: additionalData => this.props.editMode,
45
+ renderValue: (value, additionalData) => (
46
+ <td style={{ padding: '2px' }}>
47
+ <Button
48
+ bsStyle="default"
49
+ onClick={() => activateEditApplicationDefinitionService(additionalData)}
50
+ >
51
+ <Icon type="pf" name="edit" />
52
+ </Button>
53
+ <Button
54
+ bsStyle="default"
55
+ onClick={() => openParameterSelectionModal(additionalData)}
56
+ >
57
+ <Icon type="pf" name="settings" />
58
+ </Button>
59
+ <DeleteTableEntry
60
+ hidden={false}
61
+ disabled={false}
62
+ onDeleteTableEntry={deleteApplicationDefinitionService}
63
+ additionalData={additionalData}
64
+ />
65
+ </td>
66
+ ),
67
+ renderEdit: (value, additionalData) => (
68
+ <td style={{ padding: '2px' }}>
69
+ <Button bsStyle="default" disabled>
70
+ <Icon type="pf" name="edit" />
71
+ </Button>
72
+ <Button bsStyle="default" disabled>
73
+ <Icon type="pf" name="settings" />
74
+ </Button>
75
+ <DeleteTableEntry
76
+ hidden={false}
77
+ disabled={true}
78
+ onDeleteTableEntry={deleteApplicationDefinitionService}
79
+ additionalData={additionalData}
80
+ />
81
+ </td>
82
+ )
83
+ });
84
+ this.inlineEditButtonsFormatter = inlineEditButtonsFormatter;
85
+
86
+ const headerFormatter = value => <Table.Heading>{value}</Table.Heading>;
87
+ this.headerFormatter = headerFormatter;
88
+
89
+ const inlineEditFormatterImpl = {
90
+ renderValue: (value, additionalData) => (
91
+ <td>
92
+ <span className="static">{value}</span>
93
+ </td>
94
+ ),
95
+ renderEditText: (value, additionalData, subtype='text') => (
96
+ <td className="editing">
97
+ <FormControl
98
+ type={subtype}
99
+ defaultValue={value}
100
+ onBlur={e => changeEditApplicationDefinitionService(e.target.value, additionalData) }
101
+ />
102
+ </td>
103
+ ),
104
+ renderEditSelect: (value, additionalData, options) => (
105
+ <td className="editing">
106
+ <Select
107
+ value={value.toString()}
108
+ onChange={e => changeEditApplicationDefinitionService(e.target.value, additionalData) }
109
+ options={options}
110
+ allowClear
111
+ key="key"
112
+ />
113
+ </td>
114
+ )
115
+ };
116
+
117
+ const inlineEditFormatter = inlineEditFormatterFactory({
118
+ isEditing: additionalData => this.isEditing(additionalData),
119
+ renderValue: (value, additionalData) => {
120
+ let prettyValue = value;
121
+ if (additionalData.property == 'hostgroup') {
122
+ prettyValue = hostgroups[value];
123
+ }
124
+ return inlineEditFormatterImpl.renderValue(prettyValue, additionalData)
125
+ },
126
+ renderEdit: (value, additionalData) => {
127
+ if (additionalData.property == 'hostgroup') {
128
+ if (additionalData.rowData.newEntry === true) {
129
+ return inlineEditFormatterImpl.renderEditSelect(value, additionalData, hostgroups);
130
+ }
131
+ return inlineEditFormatterImpl.renderValue(hostgroups[value], additionalData)
132
+ }
133
+ return inlineEditFormatterImpl.renderEditText(value, additionalData);
134
+ }
135
+ });
136
+ this.inlineEditFormatter = inlineEditFormatter;
137
+
138
+ initApplicationDefinition(
139
+ services,
140
+ this.headerFormatter,
141
+ this.inlineEditFormatter,
142
+ this.inlineEditButtonsFormatter,
143
+ );
144
+ };
145
+
146
+ render() {
147
+ const {
148
+ data: { organization, location, loadForemanDataUrl },
149
+ services,
150
+ columns,
151
+ addApplicationDefinitionService,
152
+ confirmEditApplicationDefinitionService,
153
+ cancelEditApplicationDefinitionService,
154
+ openParameterSelectionModal,
155
+ closeParameterSelectionModal,
156
+ ParameterSelectionModal,
157
+ } = this.props;
158
+
159
+ return (
160
+ <span>
161
+ <div className="form-group">
162
+ <AddTableEntry
163
+ hidden={ false }
164
+ disabled={ this.props.editMode }
165
+ onAddTableEntry={ addApplicationDefinitionService }
166
+ />
167
+ <Table.PfProvider
168
+ striped
169
+ bordered
170
+ hover
171
+ dataTable
172
+ inlineEdit
173
+ columns={columns}
174
+ components={{
175
+ body: {
176
+ row: Table.InlineEditRow,
177
+ cell: cellProps => cellProps.children
178
+ }
179
+ }}
180
+ >
181
+ <Table.Header headerRows={resolve.headerRows({ columns })} />
182
+ <Table.Body
183
+ rows={services}
184
+ rowKey="id"
185
+ onRow={(rowData, { rowIndex }) => ({
186
+ role: 'row',
187
+ isEditing: () => this.isEditing({ rowData }),
188
+ onCancel: () => cancelEditApplicationDefinitionService({ rowData, rowIndex }),
189
+ onConfirm: () => confirmEditApplicationDefinitionService({ rowData, rowIndex }),
190
+ last: rowIndex === services.length - 1
191
+ })}
192
+ />
193
+ </Table.PfProvider>
194
+ <AddTableEntry
195
+ hidden={ false }
196
+ disabled={ this.props.editMode }
197
+ onAddTableEntry={ addApplicationDefinitionService }
198
+ />
199
+ </div>
200
+ <div>
201
+ <ForemanModal
202
+ id="AppDefinitionParamSelection"
203
+ dialogClassName="param_selection_modal"
204
+ title="Parameter definition for Application Definition"
205
+ >
206
+ <ForemanModal.Header closeButton={false}>
207
+ Parameter definition
208
+ </ForemanModal.Header>
209
+ {this.props.parametersData ? (
210
+ <ParameterSelection
211
+ location={ location }
212
+ organization={ organization }
213
+ loadForemanDataUrl= { loadForemanDataUrl }
214
+ data={ this.props.parametersData }
215
+ />
216
+ ) : (<span>Empty</span>)
217
+ }
218
+ <ForemanModal.Footer>
219
+ <div>
220
+ <Button bsStyle="primary" onClick={() => closeParameterSelectionModal({ mode: 'save' })}>Save</Button>
221
+ <Button bsStyle="default" onClick={() => closeParameterSelectionModal({ mode: 'cancel' })}>Cancel</Button>
222
+ </div>
223
+ </ForemanModal.Footer>
224
+ </ForemanModal>
225
+ </div>
226
+ <RailsData
227
+ key='applications_definition'
228
+ view='app_definition'
229
+ parameter='services'
230
+ value={JSON.stringify(this.props.services)}
231
+ />
232
+ </span>
233
+ )};
234
+ }
235
+
236
+ ApplicationDefinition.defaultProps = {
237
+ error: {},
238
+ editMode: false,
239
+ services: [],
240
+ parametersData: {},
241
+ columns: [],
242
+ editParamsOfRowId: null,
243
+ }
244
+
245
+ ApplicationDefinition.propTypes = {
246
+ initApplicationDefinition: PropTypes.func,
247
+ editMode: PropTypes.bool.isRequired,
248
+ services: PropTypes.array,
249
+ columns: PropTypes.array,
250
+ addApplicationDefinitionService: PropTypes.func,
251
+ deleteApplicationDefinitionService: PropTypes.func,
252
+ activateEditApplicationDefinitionService: PropTypes.func,
253
+ confirmEditApplicationDefinitionService: PropTypes.func,
254
+ cancelEditApplicationDefinitionService: PropTypes.func,
255
+ changeEditApplicationDefinitionService: PropTypes.func,
256
+ openParameterSelectionModal: PropTypes.func,
257
+ closeParameterSelectionModal: PropTypes.func,
258
+ parametersData: PropTypes.object,
259
+ };
260
+
261
+ export default ApplicationDefinition;
@@ -0,0 +1 @@
1
+ @import '~@theforeman/vendor/scss/variables';
@@ -0,0 +1,211 @@
1
+ import React from 'react';
2
+ import api from 'foremanReact/API';
3
+
4
+ import {
5
+ setModalOpen,
6
+ setModalClosed,
7
+ } from 'foremanReact/components/ForemanModal/ForemanModalActions';
8
+
9
+ import {
10
+ actionHeaderCellFormatter,
11
+ } from 'patternfly-react';
12
+
13
+ import {
14
+ propsToSnakeCase,
15
+ propsToCamelCase,
16
+ } from 'foremanReact/common/helpers';
17
+
18
+ import {
19
+ APPLICATION_DEFINITION_INIT,
20
+ APPLICATION_DEFINITION_SERVICE_DELETE,
21
+ APPLICATION_DEFINITION_SERVICE_ADD,
22
+ APPLICATION_DEFINITION_SERVICE_EDIT_ACTIVATE,
23
+ APPLICATION_DEFINITION_SERVICE_EDIT_CONFIRM,
24
+ APPLICATION_DEFINITION_SERVICE_EDIT_CHANGE,
25
+ APPLICATION_DEFINITION_SERVICE_EDIT_CANCEL,
26
+ APPLICATION_DEFINITION_PARAMETER_SELECTION_MODAL_OPEN,
27
+ APPLICATION_DEFINITION_PARAMETER_SELECTION_MODAL_CLOSE,
28
+ } from './ApplicationDefinitionConstants';
29
+
30
+ export const initApplicationDefinition = (
31
+ services,
32
+ headerFormatter,
33
+ inlineEditFormatter,
34
+ inlineEditButtonsFormatter,
35
+ ) => dispatch => {
36
+ const initialState = {};
37
+
38
+ initialState.columns = [
39
+ {
40
+ property: 'name',
41
+ header: {
42
+ label: 'Name',
43
+ formatters: [headerFormatter],
44
+ props: {
45
+ index: 0,
46
+ style: {
47
+ width: '20%'
48
+ }
49
+ },
50
+ },
51
+ cell: {
52
+ formatters: [inlineEditFormatter]
53
+ }
54
+ },
55
+ {
56
+ property: 'description',
57
+ header: {
58
+ label: 'Description',
59
+ formatters: [headerFormatter],
60
+ props: {
61
+ index: 1,
62
+ style: {
63
+ width: '20%'
64
+ }
65
+ },
66
+ },
67
+ cell: {
68
+ formatters: [inlineEditFormatter]
69
+ }
70
+ },
71
+ {
72
+ property: 'hostgroup',
73
+ header: {
74
+ label: 'Hostgroup',
75
+ formatters: [headerFormatter],
76
+ props: {
77
+ index: 2,
78
+ style: {
79
+ width: '20%'
80
+ }
81
+ },
82
+ },
83
+ cell: {
84
+ formatters: [inlineEditFormatter]
85
+ }
86
+ },
87
+ {
88
+ property: 'minCount',
89
+ header: {
90
+ label: 'min count',
91
+ formatters: [headerFormatter],
92
+ props: {
93
+ index: 3,
94
+ style: {
95
+ width: '10%'
96
+ }
97
+ },
98
+ },
99
+ cell: {
100
+ formatters: [inlineEditFormatter]
101
+ }
102
+ },
103
+ {
104
+ property: 'maxCount',
105
+ header: {
106
+ label: 'max count',
107
+ formatters: [headerFormatter],
108
+ props: {
109
+ index: 3,
110
+ style: {
111
+ width: '10%'
112
+ }
113
+ },
114
+ },
115
+ cell: {
116
+ formatters: [inlineEditFormatter]
117
+ }
118
+ },
119
+ {
120
+ property: 'actions',
121
+ header: {
122
+ label: 'Actions',
123
+ formatters: [actionHeaderCellFormatter],
124
+ props: {
125
+ index: 4,
126
+ style: {
127
+ width: '20%'
128
+ }
129
+ },
130
+ },
131
+ cell: {
132
+ formatters: [inlineEditButtonsFormatter]
133
+ }
134
+ }
135
+ ];
136
+
137
+ initialState.services = services;
138
+
139
+ dispatch({
140
+ type: APPLICATION_DEFINITION_INIT,
141
+ payload: initialState,
142
+ });
143
+ };
144
+
145
+ export const addApplicationDefinitionService = (additionalData) => ({
146
+ type: APPLICATION_DEFINITION_SERVICE_ADD,
147
+ payload: {
148
+ ...additionalData,
149
+ },
150
+ });
151
+
152
+ export const deleteApplicationDefinitionService = (additionalData) => ({
153
+ type: APPLICATION_DEFINITION_SERVICE_DELETE,
154
+ payload: {
155
+ ...additionalData,
156
+ },
157
+ });
158
+
159
+ export const activateEditApplicationDefinitionService = (additionalData) => ({
160
+ type: APPLICATION_DEFINITION_SERVICE_EDIT_ACTIVATE,
161
+ payload: {
162
+ ...additionalData,
163
+ },
164
+ });
165
+
166
+ export const confirmEditApplicationDefinitionService = (rowData) => ({
167
+ type: APPLICATION_DEFINITION_SERVICE_EDIT_CONFIRM,
168
+ payload: {
169
+ ...rowData,
170
+ },
171
+ });
172
+
173
+ export const cancelEditApplicationDefinitionService = (rowData) => ({
174
+ type: APPLICATION_DEFINITION_SERVICE_EDIT_CANCEL,
175
+ payload: {
176
+ ...rowData,
177
+ },
178
+ });
179
+
180
+ export const changeEditApplicationDefinitionService = (value, additionalData) => ({
181
+ type: APPLICATION_DEFINITION_SERVICE_EDIT_CHANGE,
182
+ payload: {
183
+ value,
184
+ ...additionalData,
185
+ },
186
+ });
187
+
188
+ export const openParameterSelectionModal = (additionalData) => dispatch => {
189
+ dispatch({
190
+ type: APPLICATION_DEFINITION_PARAMETER_SELECTION_MODAL_OPEN,
191
+ payload: {
192
+ ...additionalData,
193
+ }
194
+ });
195
+ dispatch(
196
+ setModalOpen({ id: 'AppDefinitionParamSelection' })
197
+ );
198
+ }
199
+
200
+ export const closeParameterSelectionModal = (additionalData) => dispatch => {
201
+ dispatch({
202
+ type: APPLICATION_DEFINITION_PARAMETER_SELECTION_MODAL_CLOSE,
203
+ payload: {
204
+ ...additionalData,
205
+ }
206
+ });
207
+
208
+ dispatch(
209
+ setModalClosed({ id: 'AppDefinitionParamSelection' })
210
+ );
211
+ }