Quellcode durchsuchen

Fix Openstack source options not being sent right

Sergiu Miclea vor 5 Jahren
Ursprung
Commit
2b5e5af3c7

+ 17 - 5
src/components/organisms/EditReplica/EditReplica.tsx

@@ -408,12 +408,24 @@ class EditReplica extends React.Component<Props, State> {
     const data = type === 'source' ? { ...this.state.sourceData } : { ...this.state.destinationData }
 
     if (field.type === 'array') {
-      const oldValues: string[] = data[field.name] || []
-      if (oldValues.find(v => v === value)) {
-        data[field.name] = oldValues.filter(v => v !== value)
+      const replicaData: any = type === 'source' ? this.props.replica.source_environment
+        : this.props.replica.destination_environment
+      const currentValues: string[] = data[field.name] || []
+      const oldValues: string[] = replicaData[field.name] || []
+      let values: string[] = currentValues
+      if (!currentValues.length) {
+        values = [...oldValues]
+      }
+      if (values.find(v => v === value)) {
+        data[field.name] = values.filter(v => v !== value)
       } else {
-        data[field.name] = [...oldValues, value]
+        data[field.name] = [...values, value]
+      }
+    } else if (field.groupName) {
+      if (!data[field.groupName]) {
+        data[field.groupName] = {}
       }
+      data[field.groupName][field.name] = value
     } else if (parentFieldName) {
       data[parentFieldName] = data[parentFieldName] || {}
       data[parentFieldName][field.name] = value
@@ -423,7 +435,7 @@ class EditReplica extends React.Component<Props, State> {
 
     if (field.enum && field.subFields) {
       field.subFields.forEach(subField => {
-        const subFieldKeys = Object.keys(data).filter(k => k.indexOf(`${subField.name}/`) > -1)
+        const subFieldKeys = Object.keys(data).filter(k => k.indexOf(subField.name) > -1)
         subFieldKeys.forEach(k => {
           delete data[k]
         })

+ 2 - 2
src/components/organisms/WizardOptions/WizardOptions.tsx

@@ -313,7 +313,7 @@ class WizardOptions extends React.Component<Props> {
       }
     } else {
       additionalProps = {
-        value: this.getFieldValue(field.name, field.default),
+        value: this.getFieldValue(field.name, field.default, field.groupName),
         onChange: (value: any) => { this.props.onChange(field, value) },
       }
     }
@@ -434,7 +434,7 @@ class WizardOptions extends React.Component<Props> {
             {g.name ? (
               <GroupName>
                 <GroupNameBar />
-                <GroupNameText>{g.name}</GroupNameText>
+                <GroupNameText>{LabelDictionary.get(g.name)}</GroupNameText>
                 <GroupNameBar />
               </GroupName>
             ) : null}

+ 6 - 1
src/components/organisms/WizardSummary/WizardSummary.tsx

@@ -273,7 +273,12 @@ class WizardSummary extends React.Component<Props> {
         <SectionTitle>{type} Source Options</SectionTitle>
         <OptionsList>
           {data.sourceOptions ? Object.keys(data.sourceOptions).map(optionName => {
-            if (!data.sourceOptions || data.sourceOptions[optionName] == null || data.sourceOptions[optionName] === '') {
+            if (
+              !data.sourceOptions
+              || data.sourceOptions[optionName] == null
+              || data.sourceOptions[optionName] === ''
+              || typeof data.sourceOptions[optionName] === 'object'
+            ) {
               return null
             }
             const optionLabel = optionName.split('/')

+ 3 - 1
src/plugins/endpoint/default/OptionsSchemaPlugin.ts

@@ -95,7 +95,9 @@ export const defaultGetDestinationEnv = (
     if (specialOptions.find(o => o === optionName) || !options || options[optionName] == null || options[optionName] === '') {
       return
     }
-    if (typeof options[optionName] === 'object') {
+    if (Array.isArray(options[optionName])) {
+      env[optionName] = options[optionName]
+    } else if (typeof options[optionName] === 'object') {
       const oldOption = oldOptions?.[optionName] || {}
       env[optionName] = {
         ...oldOption,

+ 2 - 4
src/plugins/endpoint/openstack/OptionsSchemaPlugin.ts

@@ -19,8 +19,6 @@ import DefaultOptionsSchemaPlugin, {
   defaultFillMigrationImageMapValues,
 } from '../default/OptionsSchemaPlugin'
 
-import LabelDictionary from '../../../utils/LabelDictionary'
-
 import type { InstanceScript } from '../../../@types/Instance'
 import type { Field } from '../../../@types/Field'
 import type { OptionValues, StorageMap } from '../../../@types/Endpoint'
@@ -46,9 +44,9 @@ export default class OptionsSchemaParser {
         const exportTypeFieldIdx = fields.findIndex(f => f.name === `${exportType}_options`)
         if (exportTypeFieldIdx > -1) {
           const subField = fields[exportTypeFieldIdx]
-          if (subField.properties && subField.properties.length > 2) {
+          if (subField.properties && subField.properties.length) {
             subField.properties = subField.properties
-              .map((p: any) => ({ ...p, groupName: LabelDictionary.get(subField.name) }))
+              .map((p: any) => ({ ...p, groupName: subField.name }))
           }
           exportMechField.subFields.push(subField)
           fields.splice(exportTypeFieldIdx, 1)

+ 6 - 1
src/stores/WizardStore.ts

@@ -37,6 +37,11 @@ const updateOptions = (
     } else {
       options[data.field.name] = [...oldValues, data.value]
     }
+  } else if (data.field.groupName) {
+    if (!options[data.field.groupName]) {
+      options[data.field.groupName] = {}
+    }
+    options[data.field.groupName][data.field.name] = data.value
   } else if (data.parentFieldName) {
     if (!options[data.parentFieldName]) {
       options[data.parentFieldName] = {}
@@ -48,7 +53,7 @@ const updateOptions = (
 
   if (data.field.enum && data.field.subFields) {
     data.field.subFields.forEach(subField => {
-      const subFieldKeys = Object.keys(options).filter(k => k.indexOf(`${subField.name}/`) > -1)
+      const subFieldKeys = Object.keys(options).filter(k => k.indexOf(subField.name) > -1)
       subFieldKeys.forEach(k => {
         delete options[k]
       })