Skip to content

Commit 3228249

Browse files
ViktorKorladinovDianaKorladinovataban03balhar-jakubachmelo
authored
feat: Wizard automatic onboarding & SAF check (#1751)
* Allows for more inputs where multiple configurations can be present. Updated input data for the Plain Java Enabler. TBD: testing. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * WizardInputs test coverage now at 100%. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Multiple configs of same category now visually divided, wizard-reducer test coverage raised to 100% Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Squashed bug occurring after loading already wrapped in array category content. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Plain Java Enabler data configuration. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Wizard reducer refactoring. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Raised wizard reducer coverage to 100%. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Foundation for YAML generation. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * YAML now shows in its own tab. TBD: lots of bug squashing. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * YAML Visualizer test Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Wizard actions and reducer test coverage raised to 100%. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Fixed Next / Save button bug, added 'Copy' button the the YAML result tab. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Test coverage for wizard files raised to 100%. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Styling of YAML code Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Added a missing function after merge. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Hotfix. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Fixed npm warning on yaml package Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Moved the yaml dependency to the correct package.json Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Spring Enabler category configuration Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Created a defaults file and configured spring defaults. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Injecting default values operational. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Raised test coverage to 100% & added a missing category for the Spring Enabler. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Moved different components into separate sub-folders, reduced size of wizard-config.jsx by dividing the data inside into 2 files - wizard_categories.jsx and wizard_onboarding_methods.jsx. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * WizardNavigation component now able to group multiple categories under a single tab. Test coverage raised to 100%. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Added comments to wizard-actions and all components' functions that weren't self-explanatory. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Fixed several bugs after merging. TBD: improve test coverage. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Test coverage of wizard files raised to 100%. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Added comments to wizard-reducer, hopefully reduced cognitive complexity Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Test fixes Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Mechanism for handling optional fields and checking for empty compulsory fields. TBD: Fix tests. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Wizard now shows true/false options as checkboxes Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Boolean property fully works. TBD: mountains of testing : ) Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * UI now alerts when a compulsory field is left empty & optional fields are marked as such Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Option property fully works. Fake events substitute the events Select fires. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Improved test coverage. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Test coverage for WizardInputs raised. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Redid functions for unfilled compulsory fields. TBD: fix tests Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Fixed failing tests & improved test coverage. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * maxLength and lowercase properties functional. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Tab reorganization. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Hotfix. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Dependencies now functional. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Tabs now indicate if they have an unfilled field & improved test coverage. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Test coverage of WizardInputs raised Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Added mechanism for generating warnings when deleting filled fields & improved test coverage. TBD: Add the actual warnings Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Hotfixes of unfilled validation Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Fixed failing tests. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Restructuring. TBD: fix tests. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Raised coverage of WizardNavigation, WizardInputs and WizardDialog to 100. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Fixed wizard-reducer tests. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Fixed some code smells. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Indentation dependency now available. TBD: fix tests. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Array wrapping of some YAML categories for static onboarding. TBD: fix tests. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Simplified and streamlined the way a category's content is used. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Fixed & added tests. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Reduced reducer's cognitive complexity Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Fixed a failing test Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Request now fires with valid YAML as body. Response is handled both for success and error. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * YAML is sent only if data validation checks pass. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Raised test coverage Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Fetch-action sends a valid POST request Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Fetch-action request body refactored to a plain/text format Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * WIP Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Ready for SAF check. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Add controller and error handler Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Add override controller Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Refactoring and debug log Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Add license and fix checkstyle Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Add functionality to retrieve static location from discovery env endpoint Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Add unit test Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Add tests Signed-off-by: at670475 <andrea.tabone@broadcom.com> * SAF check determines whether user can onboard APIs or not. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Fix code smell Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Fix bug Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Add more test Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Raise coverage Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Address code review comments Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Address code review comments pt.2 Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Change the logic and add shared volumes mount Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Add integration tests Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Fix location Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Add logs Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Set environment variable in docker containers Signed-off-by: at670475 <andrea.tabone@broadcom.com> * more debugging Signed-off-by: at670475 <andrea.tabone@broadcom.com> * additional debug Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Fix test Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Improve check Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Fix indentation Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Change the way to get static location Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Fix IT Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Fix static def path Signed-off-by: at670475 <andrea.tabone@broadcom.com> * POST requests now contain serviceId in the headers Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Try the docker URL Signed-off-by: Jakub Balhar <jakub@balhar.net> * Another take on volumes Signed-off-by: Jakub Balhar <jakub@balhar.net> * Fix assertion message Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Fix Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Revert changes Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Get the first directory defined Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Fix code smells Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Revert staticApiservice Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Increase code coverage Signed-off-by: at670475 <andrea.tabone@broadcom.com> * revert docker-compose.yml files for local setup Signed-off-by: at670475 <andrea.tabone@broadcom.com> * Merged backend endpoints and wired them together. Automatic onboarding now successfully handles normal saves & overwrites. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Bugfix Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Test coverage of wizard-actions, wizard-reducer and WizardInputs now at 100%. Raised test coverage for wizard-fetch-actions. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * Test coverage of ConfirmDialog raised to 100%. Signed-off-by: DianaKorladinova <chanchunche@gmail.com> * post-merge fixes Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Fixed bug where all enablers tried to save Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Static onboarding shows up only if user's SAF check passes. Signed-off-by: ViktorKorladinov <v.korladinov@gmail.com> * Post-merge fixes (handleIndentationDependency, handleArrayIndentation, tests). Signed-off-by: DianaKorladinova <chanchunche@gmail.com> Co-authored-by: DianaKorladinova <chanchunche@gmail.com> Co-authored-by: Andrea Tabone <andrea.tabone@broadcom.com> Co-authored-by: Jakub Balhar <jakub@balhar.net> Co-authored-by: achmelo <a.chmelo@gmail.com>
1 parent 691036a commit 3228249

21 files changed

+521
-127
lines changed

api-catalog-ui/frontend/src/actions/wizard-actions.jsx

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
READY_YAML_OBJECT,
1818
REMOVE_INDEX,
1919
VALIDATE_INPUT,
20+
UPDATE_SERVICE_ID,
2021
} from '../constants/wizard-constants';
2122

2223
/**
@@ -97,8 +98,8 @@ export const insert = (parent, content) => {
9798
*/
9899
export function handleIndentationDependency(inputData, indentationDependency, indentation) {
99100
let result = indentation;
100-
if (indentationDependency !== undefined) {
101-
inputData.forEach(category => {
101+
inputData.forEach(category => {
102+
if (Array.isArray(category.content)) {
102103
category.content.forEach(inpt => {
103104
Object.keys(inpt).forEach(k => {
104105
if (k === indentationDependency) {
@@ -107,8 +108,15 @@ export function handleIndentationDependency(inputData, indentationDependency, in
107108
}
108109
});
109110
});
110-
});
111-
}
111+
} else {
112+
Object.keys(category.content).forEach(k => {
113+
if (k === indentationDependency) {
114+
result = result.concat('/', category.content[k].value);
115+
return result;
116+
}
117+
});
118+
}
119+
});
112120
return result;
113121
}
114122

@@ -168,7 +176,10 @@ export const addCategoryToYamlObject = (category, parent, inputData) => {
168176
if (!category.indentation) {
169177
insert(result, content);
170178
} else {
171-
const indent = handleIndentationDependency(inputData, category.indentationDependency, category.indentation);
179+
let indent = category.indentation;
180+
if (category.indentationDependency !== undefined) {
181+
indent = handleIndentationDependency(inputData, category.indentationDependency, category.indentation);
182+
}
172183
const arr = indent.split('/');
173184
arr.reverse().forEach(key => {
174185
if (key.length > 0)
@@ -235,3 +246,14 @@ export function validateInput(navName, silent) {
235246
payload: { navName, silent },
236247
};
237248
}
249+
250+
/**
251+
* Store serviceId's value, because it's needed for saving staatic definitons
252+
* @param value value of serviceId
253+
*/
254+
export function updateServiceId(value) {
255+
return {
256+
type: UPDATE_SERVICE_ID,
257+
payload: { value },
258+
};
259+
}

api-catalog-ui/frontend/src/actions/wizard-actions.test.jsx

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ describe('>>> Wizard actions tests', () => {
102102
expect(result).toEqual({ '0': 'value 1' , '1': 'value 2' });
103103

104104
});
105-
it('should handle indentation dependencies', () => {
105+
it('should handle indentation dependencies when content is an array', () => {
106106
const inputData = [
107107
{
108108
text: 'Category 1',
@@ -120,6 +120,25 @@ describe('>>> Wizard actions tests', () => {
120120
const indentationDepenedency = 'test2';
121121
const result = handleIndentationDependency(inputData, indentationDepenedency, indentation);
122122
expect(result).toEqual('indent/val');
123+
});
124+
it('should handle indentation dependencies when content is an object', () => {
125+
const inputData = [
126+
{
127+
text: 'Category 1',
128+
content: { test: { value: '', question: 'Why', }, },
129+
},
130+
{
131+
text: 'Category 2',
132+
content: {
133+
test3: { value: 'smth', question: 'Why not?', },
134+
test2: { value: 'val', question: 'Why not?', },
135+
},
136+
},
137+
];
138+
const indentation = 'indent';
139+
const indentationDepenedency = 'test2';
140+
const result = handleIndentationDependency(inputData, indentationDepenedency, indentation);
141+
expect(result).toEqual('indent/val');
123142
})
124143
it('should add categories to the YAML object and handle indentation', () => {
125144
const category = {
@@ -217,4 +236,11 @@ describe('>>> Wizard actions tests', () => {
217236
const result = handleArrayIndentation(arrIndent,content);
218237
expect(result).toEqual([{indent: {test: ''}}]);
219238
})
239+
it('should update service ID', () => {
240+
const expectedAction = {
241+
type: constants.UPDATE_SERVICE_ID,
242+
payload: { value: 'hey' },
243+
};
244+
expect(actions.updateServiceId('hey')).toEqual(expectedAction);
245+
});
220246
});
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import { toast } from 'react-toastify';
2+
import { OVERRIDE_DEF, TOGGLE_DISPLAY, WIZARD_VISIBILITY_TOGGLE } from '../constants/wizard-constants';
3+
4+
export function notifySuccess() {
5+
toast.success('Automatic onboarding successful!', {
6+
closeOnClick: true,
7+
autoClose: 2000,
8+
});
9+
return {
10+
type: TOGGLE_DISPLAY,
11+
};
12+
}
13+
14+
export function notifyError(error) {
15+
toast.error(error, {
16+
closeOnClick: true,
17+
autoClose: 2000,
18+
});
19+
return {
20+
type: 'IGNORE',
21+
payload: null,
22+
};
23+
}
24+
25+
/**
26+
* Toggle confirmation dialog
27+
*/
28+
export function confirmStaticDefOverride() {
29+
return {
30+
type: OVERRIDE_DEF,
31+
payload: null,
32+
};
33+
}
34+
35+
/**
36+
* Communicates with the backend, to either save or override a YAML static definition.
37+
* @param yamlText valid YAML config
38+
* @param serviceId serviceId of the API
39+
* @param endpoint specifies whether to override or save the definition
40+
*/
41+
function yamlEndpointConnect(yamlText, serviceId, endpoint) {
42+
const url = `${process.env.REACT_APP_GATEWAY_URL}${process.env.REACT_APP_CATALOG_HOME}/static-api/${endpoint}`;
43+
return dispatch => {
44+
fetch(url, {
45+
method: 'POST',
46+
headers: {
47+
'Service-Id': serviceId,
48+
},
49+
body: yamlText,
50+
})
51+
.then(res => {
52+
const { status } = res;
53+
if (status === 201) {
54+
dispatch(notifySuccess());
55+
} else if (status === 409) {
56+
dispatch(confirmStaticDefOverride());
57+
} else {
58+
dispatch(notifyError('The automatic onboarding was unsuccessful..'));
59+
}
60+
})
61+
.catch(() => dispatch(notifyError('The automatic onboarding was unsuccessful..')));
62+
};
63+
}
64+
65+
export function toggleWizardVisibility(state) {
66+
return {
67+
type: WIZARD_VISIBILITY_TOGGLE,
68+
payload: { state },
69+
};
70+
}
71+
72+
/**
73+
* Assert logged user has authorization to save static definitions
74+
* @returns {(function(*): void)|*}
75+
*/
76+
export function assertAuthorization() {
77+
const url = `${process.env.REACT_APP_GATEWAY_URL}/gateway/auth/check`;
78+
const body = {
79+
resourceClass: 'ZOWE',
80+
resourceName: 'APIML.SERVICES',
81+
accessLevel: 'READ',
82+
};
83+
return dispatch => {
84+
fetch(url, {
85+
headers: {
86+
'Content-Type': 'application/json',
87+
},
88+
method: 'POST',
89+
body: JSON.stringify(body),
90+
})
91+
.then(res => {
92+
const { status } = res;
93+
if (status === 204) {
94+
dispatch(toggleWizardVisibility(true));
95+
} else {
96+
dispatch(toggleWizardVisibility(false));
97+
}
98+
})
99+
.catch(() => dispatch(notifyError('Error while trying to establish authorization level..')));
100+
};
101+
}
102+
103+
/**
104+
* Send request to override a static def with a certain serviceId
105+
* @param yamlText valid YAML config
106+
* @param serviceId serviceId of the API
107+
*/
108+
export function overrideStaticDef(yamlText, serviceId) {
109+
return yamlEndpointConnect(yamlText, serviceId, 'override');
110+
}
111+
112+
/**
113+
* Send request to save a static def with a certain serviceId
114+
* @param yamlText valid YAML config
115+
* @param serviceId serviceId of the API
116+
*/
117+
export function sendYAML(yamlText, serviceId) {
118+
return yamlEndpointConnect(yamlText, serviceId, 'generate');
119+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import * as constants from '../constants/wizard-constants';
2+
import * as actions from './wizard-fetch-actions';
3+
import {
4+
assertAuthorization,
5+
overrideStaticDef,
6+
sendYAML,
7+
} from './wizard-fetch-actions';
8+
9+
describe('>>> Wizard actions tests', () => {
10+
it('should do nothing on YAML error', () => {
11+
const expectedAction = {
12+
type: 'IGNORE',
13+
payload: null,
14+
};
15+
expect(actions.notifyError()).toEqual(expectedAction);
16+
});
17+
18+
it('should close on YAML success', () => {
19+
const expectedAction = {
20+
type: constants.TOGGLE_DISPLAY,
21+
};
22+
expect(actions.notifySuccess()).toEqual(expectedAction);
23+
});
24+
it('should confirm static definition override', () => {
25+
const expectedAction = {
26+
type: constants.OVERRIDE_DEF,
27+
payload: null,
28+
};
29+
expect(actions.confirmStaticDefOverride()).toEqual(expectedAction);
30+
});
31+
it('should toggle wizard visibility', () => {
32+
const expectedAction = {
33+
type: constants.WIZARD_VISIBILITY_TOGGLE,
34+
payload: {state: true},
35+
};
36+
expect(actions.toggleWizardVisibility(true)).toEqual(expectedAction);
37+
});
38+
it('should override static definition', () => {
39+
const yamlText = {test: 'hey'};
40+
const serviceId = 'Id';
41+
overrideStaticDef(yamlText, serviceId);
42+
const expectedAction = {
43+
type: constants.TOGGLE_DISPLAY,
44+
};
45+
expect(actions.notifySuccess()).toEqual(expectedAction);
46+
});
47+
it('should add static definition', () => {
48+
const yamlText = {test: 'hey'};
49+
const serviceId = 'Id';
50+
sendYAML(yamlText, serviceId);
51+
const expectedAction = {
52+
type: constants.TOGGLE_DISPLAY,
53+
};
54+
expect(actions.notifySuccess()).toEqual(expectedAction);
55+
});
56+
it('should assert authorization', () => {
57+
assertAuthorization();
58+
const expectedAction = {
59+
type: constants.WIZARD_VISIBILITY_TOGGLE,
60+
payload: {state: true},
61+
};
62+
expect(actions.toggleWizardVisibility(true)).toEqual(expectedAction);
63+
});
64+
});

api-catalog-ui/frontend/src/components/Dashboard/Dashboard.jsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,12 @@ import ErrorDialog from '../Error/ErrorDialog';
1010
import WizardContainer from '../Wizard/WizardContainer';
1111
import DialogDropdown from '../Wizard/DialogDropdown';
1212
import { enablerData } from '../Wizard/configs/wizard_onboarding_methods';
13+
import ConfirmDialogContainer from '../Wizard/ConfirmDialogContainer';
1314

1415
export default class Dashboard extends Component {
15-
constructor(props) {
16-
super(props);
17-
this.state = {
18-
WIP: true,
19-
};
20-
}
21-
2216
componentDidMount() {
23-
const { fetchTilesStart, clearService } = this.props;
17+
const { fetchTilesStart, clearService, assertAuthorization } = this.props;
18+
assertAuthorization();
2419
clearService();
2520
fetchTilesStart();
2621
}
@@ -56,6 +51,7 @@ export default class Dashboard extends Component {
5651
fetchTilesStop,
5752
refreshedStaticApisError,
5853
clearError,
54+
userCanAutoOnboard,
5955
} = this.props;
6056
const hasSearchCriteria = searchCriteria !== undefined && searchCriteria !== null && searchCriteria.length > 0;
6157
const hasTiles = !fetchTilesError && tiles && tiles.length > 0;
@@ -70,15 +66,17 @@ export default class Dashboard extends Component {
7066
<div id="dash-buttons">
7167
<DialogDropdown
7268
selectEnabler={this.props.selectEnabler}
73-
WIP={this.state.WIP}
69+
userCanAutoOnboard={userCanAutoOnboard}
7470
data={enablerData}
7571
toggleWizard={this.toggleWizard}
72+
visible
7673
/>
7774
<Button id="refresh-api-button" size="medium" onClick={this.refreshStaticApis}>
7875
Refresh Static APIs
7976
</Button>
8077
</div>
8178
<WizardContainer />
79+
<ConfirmDialogContainer />
8280
<Spinner isLoading={isLoading} />
8381
{fetchTilesError && (
8482
<div className="no-tiles-container">

0 commit comments

Comments
 (0)