|
|
@@ -12,11 +12,15 @@ You should have received a copy of the GNU Affero General Public License
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
*/
|
|
|
|
|
|
+// @flow
|
|
|
+
|
|
|
import cookie from 'js-cookie'
|
|
|
|
|
|
import Api from '../utils/ApiCaller'
|
|
|
import NotificationStore from '../stores/NotificationStore'
|
|
|
import { servicesUrl, executionOptions } from '../config'
|
|
|
+import type { WizardData } from '../types/WizardData'
|
|
|
+import type { MainItem } from '../types/MainItem'
|
|
|
|
|
|
class WizardSourceUtils {
|
|
|
static getDestinationEnv(data) {
|
|
|
@@ -26,6 +30,7 @@ class WizardSourceUtils {
|
|
|
if (data.options) {
|
|
|
Object.keys(data.options).forEach(optionName => {
|
|
|
if (specialOptions.find(o => o === optionName)
|
|
|
+ // $FlowIssue
|
|
|
|| data.options[optionName] === null || data.options[optionName] === undefined) {
|
|
|
return
|
|
|
}
|
|
|
@@ -36,7 +41,7 @@ class WizardSourceUtils {
|
|
|
env.network_map = {}
|
|
|
if (data.networks && data.networks.length) {
|
|
|
data.networks.forEach(mapping => {
|
|
|
- env.network_map[mapping.sourceNic.network_name] = mapping.targetNetwork.name
|
|
|
+ env.network_map[mapping.sourceNic.network_name] = mapping.targetNetwork.id
|
|
|
})
|
|
|
}
|
|
|
|
|
|
@@ -45,16 +50,16 @@ class WizardSourceUtils {
|
|
|
}
|
|
|
|
|
|
class WizardSource {
|
|
|
- static create(type, data) {
|
|
|
+ static create(type: string, data: WizardData): Promise<MainItem> {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
let projectId = cookie.get('projectId')
|
|
|
|
|
|
let payload = {}
|
|
|
payload[type] = {
|
|
|
- origin_endpoint_id: data.source.id,
|
|
|
- destination_endpoint_id: data.target.id,
|
|
|
+ origin_endpoint_id: data.source ? data.source.id : 'null',
|
|
|
+ destination_endpoint_id: data.target ? data.target.id : 'null',
|
|
|
destination_environment: WizardSourceUtils.getDestinationEnv(data),
|
|
|
- instances: data.selectedInstances.map(i => i.instance_name),
|
|
|
+ instances: data.selectedInstances ? data.selectedInstances.map(i => i.instance_name) : 'null',
|
|
|
notes: '',
|
|
|
security_groups: ['testgroup'],
|
|
|
}
|
|
|
@@ -64,7 +69,7 @@ class WizardSource {
|
|
|
}
|
|
|
|
|
|
Api.sendAjaxRequest({
|
|
|
- url: `${servicesUrl.coriolis}/${projectId}/${type}s`,
|
|
|
+ url: `${servicesUrl.coriolis}/${projectId || 'null'}/${type}s`,
|
|
|
method: 'POST',
|
|
|
data: payload,
|
|
|
}).then(response => {
|
|
|
@@ -73,17 +78,23 @@ class WizardSource {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- static createMultiple(type, data) {
|
|
|
+ static createMultiple(type: string, data: WizardData): Promise<MainItem[]> {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
let items = []
|
|
|
let count = 0
|
|
|
|
|
|
+ if (!data.selectedInstances) {
|
|
|
+ reject('No selected instances')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
data.selectedInstances.forEach(instance => {
|
|
|
let newData = { ...data }
|
|
|
newData.selectedInstances = [instance]
|
|
|
WizardSource.create(type, newData).then(item => {
|
|
|
count += 1
|
|
|
items.push(item)
|
|
|
+ // $FlowIssue
|
|
|
if (count === data.selectedInstances.length) {
|
|
|
if (items.length > 0) {
|
|
|
resolve(items)
|
|
|
@@ -102,7 +113,7 @@ class WizardSource {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- static setPermalink(data) {
|
|
|
+ static setPermalink(data: WizardData) {
|
|
|
let hashExp = /(#\/wizard\/.*?)(?:\?|$)/
|
|
|
|
|
|
if (!hashExp.test(window.location.hash)) {
|