foreman_acd 0.0.6 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }