浏览代码

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 8 年之前
父节点
当前提交
376caa0417
共有 3 个文件被更改,包括 31 次插入13 次删除
  1. 7 7
      src/plugins/endpoint/openstack/ContentPlugin.jsx
  2. 22 5
      src/plugins/endpoint/openstack/SchemaPlugin.js
  3. 2 1
      src/types/Field.js

+ 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 { Wrapper, Fields, FieldStyled, Row } from '../default/ContentPlugin'
 
-const ToggleButtonBarStyled = styled(ToggleButtonBar)`
+const ToggleButtonBarStyled = styled(ToggleButtonBar) `
   margin-top: 16px;
 `
 
@@ -88,18 +88,18 @@ class ContentPlugin extends React.Component<Props, State> {
 
   filterSimpleAdvanced(): Field[] {
     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 => {
       if (this.state.useAdvancedOptions) {
         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 {
-        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,
     identity_api_version: 8,
     project_domain_name: 9,
-    user_domain_name: 10,
+    project_domain_id: 10,
+    user_domain_name: 11,
+    user_domain_id: 12,
   }
   fields.sort((a, b) => {
     if (sortPriority[a.name] && sortPriority[b.name]) {
@@ -58,11 +60,26 @@ export default class ConnectionSchemaParser {
     customSort(fields)
 
     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 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

+ 2 - 1
src/types/Field.js

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