Explorar el Código

Add 2 more fields to Openstack API v3 simple form

This is an intermediate PR to quickly solve the issue of not displaying
the fields in the 'Simple' form when v3 API is selected when creating an
Openstack endpoint.
Sergiu Miclea hace 8 años
padre
commit
376caa0417

+ 7 - 7
src/plugins/endpoint/openstack/ContentPlugin.jsx

@@ -21,7 +21,7 @@ import ToggleButtonBar from '../../../components/atoms/ToggleButtonBar'
 import type { Field } from '../../../types/Field'
 import type { Field } from '../../../types/Field'
 import { Wrapper, Fields, FieldStyled, Row } from '../default/ContentPlugin'
 import { Wrapper, Fields, FieldStyled, Row } from '../default/ContentPlugin'
 
 
-const ToggleButtonBarStyled = styled(ToggleButtonBar)`
+const ToggleButtonBarStyled = styled(ToggleButtonBar) `
   margin-top: 16px;
   margin-top: 16px;
 `
 `
 
 
@@ -88,18 +88,18 @@ class ContentPlugin extends React.Component<Props, State> {
 
 
   filterSimpleAdvanced(): Field[] {
   filterSimpleAdvanced(): Field[] {
     const apiVersion = this.props.getFieldValue(this.props.connectionInfoSchema.find(n => n.name === 'identity_api_version'))
     const apiVersion = this.props.getFieldValue(this.props.connectionInfoSchema.find(n => n.name === 'identity_api_version'))
-    const extraAdvancedFields = ['description', 'glance_api_version', 'identity_api_version']
+    const extraAdvancedFields = ['description']
     return this.props.connectionInfoSchema.filter(field => {
     return this.props.connectionInfoSchema.filter(field => {
       if (this.state.useAdvancedOptions) {
       if (this.state.useAdvancedOptions) {
         return true
         return true
       }
       }
-      let required
-      if (typeof field.required === 'function') {
-        required = field.required(apiVersion)
+      let isBasic
+      if (typeof field.isBasic === 'function') {
+        isBasic = field.isBasic(apiVersion)
       } else {
       } else {
-        required = field.required
+        isBasic = field.isBasic
       }
       }
-      return required || extraAdvancedFields.find(fieldName => field.name === fieldName)
+      return field.required || isBasic || extraAdvancedFields.find(fieldName => field.name === fieldName)
     })
     })
   }
   }
 
 

+ 22 - 5
src/plugins/endpoint/openstack/SchemaPlugin.js

@@ -30,7 +30,9 @@ const customSort = (fields: Field[]) => {
     glance_api_version: 7,
     glance_api_version: 7,
     identity_api_version: 8,
     identity_api_version: 8,
     project_domain_name: 9,
     project_domain_name: 9,
-    user_domain_name: 10,
+    project_domain_id: 10,
+    user_domain_name: 11,
+    user_domain_id: 12,
   }
   }
   fields.sort((a, b) => {
   fields.sort((a, b) => {
     if (sortPriority[a.name] && sortPriority[b.name]) {
     if (sortPriority[a.name] && sortPriority[b.name]) {
@@ -58,11 +60,26 @@ export default class ConnectionSchemaParser {
     customSort(fields)
     customSort(fields)
 
 
     let projectDomainField = fields.find(f => f.name === 'project_domain_name')
     let projectDomainField = fields.find(f => f.name === 'project_domain_name')
+    let projectDomainIdField = fields.find(f => f.name === 'project_domain_id')
     let userDomainField = fields.find(f => f.name === 'user_domain_name')
     let userDomainField = fields.find(f => f.name === 'user_domain_name')
-    let requiredFunc = (apiVersion: number) => apiVersion > 2
-    if (projectDomainField && userDomainField) {
-      projectDomainField.required = requiredFunc
-      userDomainField.required = requiredFunc
+    let userDomainIdField = fields.find(f => f.name === 'user_domain_id')
+    let glanceApiVersionField = fields.find(f => f.name === 'glance_api_version')
+    let identityApiVersionField = fields.find(f => f.name === 'identity_api_version')
+    let isBasicFunc = (apiVersion: number) => apiVersion > 2
+    if (
+      projectDomainField &&
+      userDomainField &&
+      glanceApiVersionField &&
+      identityApiVersionField &&
+      userDomainIdField &&
+      projectDomainIdField
+    ) {
+      projectDomainField.isBasic = isBasicFunc
+      projectDomainIdField.isBasic = isBasicFunc
+      userDomainField.isBasic = isBasicFunc
+      userDomainIdField.isBasic = isBasicFunc
+      glanceApiVersionField.isBasic = true
+      glanceApiVersionField.isBasic = true
     }
     }
 
 
     return fields
     return fields

+ 2 - 1
src/types/Field.js

@@ -19,7 +19,7 @@ export type Field = {
   type?: string,
   type?: string,
   value?: any,
   value?: any,
   enum?: string[],
   enum?: string[],
-  required?: boolean | (value: any) => boolean,
+  required?: boolean,
   default?: any,
   default?: any,
   items?: Field[],
   items?: Field[],
   fields?: Field[],
   fields?: Field[],
@@ -27,4 +27,5 @@ export type Field = {
   maximum?: number,
   maximum?: number,
   parent?: string,
   parent?: string,
   properties?: Field[],
   properties?: Field[],
+  isBasic?: boolean | (value: any) => boolean, // show this field in simple view even if is not 'required'
 }
 }