1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

B #5608: Fix provision stepper form (#1568)

This commit is contained in:
Sergio Betanzos 2021-11-10 18:32:22 +01:00 committed by GitHub
parent 606f0dbf82
commit 47b8fe5411
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 12 additions and 64 deletions

View File

@ -27,7 +27,7 @@ import { useProvisionTemplate } from 'client/features/One'
import { ListCards } from 'client/components/List'
import { ProvisionTemplateCard } from 'client/components/Cards'
import { sanitize, deepmerge } from 'client/utils'
import { isValidProviderTemplate, getProvisionTypeFromTemplate } from 'client/models/ProviderTemplate'
import { isValidProviderTemplate } from 'client/models/ProviderTemplate'
import { T } from 'client/constants'
import { STEP_FORM_SCHEMA } from 'client/components/Forms/Provider/CreateForm/Steps/Template/schema'
@ -58,12 +58,9 @@ const Content = ({ data, setFormData }) => {
)
], [])
const provisionTypeSelected = useMemo(() => (
getProvisionTypeFromTemplate(provisionTemplates, templateSelected)
), [])
const [provisionSelected, setProvision] = useState(() => provisionTypeSelected ?? provisionTypes[0])
const [providerSelected, setProvider] = useState(() => templateSelected?.provider)
const [provisionSelected, setProvision] =
useState(() => templateSelected?.plain?.provision_type ?? provisionTypes[0])
const [templatesByProvisionSelected, providerTypes, description] = useMemo(() => {
const templates = Object.values(provisionTemplates[provisionSelected]?.providers).flat()

View File

@ -19,10 +19,9 @@ import { useWatch } from 'react-hook-form'
import { useListForm } from 'client/hooks'
import { useAuth } from 'client/features/Auth'
import { useProvider, useProvisionTemplate } from 'client/features/One'
import { useProvider } from 'client/features/One'
import { ListCards } from 'client/components/List'
import { EmptyCard, ProvisionCard } from 'client/components/Cards'
import { getProvisionTypeFromTemplate } from 'client/models/ProvisionTemplate'
import { T } from 'client/constants'
import { STEP_ID as INPUTS_ID } from 'client/components/Forms/Provision/CreateForm/Steps/Inputs'
@ -37,24 +36,19 @@ const Provider = () => ({
resolver: () => STEP_FORM_SCHEMA,
content: useCallback(({ data, setFormData }) => {
const providers = useProvider()
const provisionTemplates = useProvisionTemplate()
const { providerConfig } = useAuth()
const provisionTemplateSelected = useWatch({ name: TEMPLATE_ID })?.[0] ?? {}
const providersAvailable = useMemo(() => {
const templateProvisionType =
getProvisionTypeFromTemplate(provisionTemplates, provisionTemplateSelected)
return providers.filter(provider => {
const providersAvailable = useMemo(() =>
providers.filter(provider => {
const { TEMPLATE: { PLAIN = {} } } = provider ?? {}
return (
PLAIN.provider === provisionTemplateSelected.provider &&
PLAIN.provision_type === templateProvisionType
PLAIN.provision_type === provisionTemplateSelected.provision_type
)
})
}, [])
}), [])
const {
handleSelect,

View File

@ -25,7 +25,7 @@ import { useProvider, useProvisionTemplate } from 'client/features/One'
import { ListCards } from 'client/components/List'
import { ProvisionTemplateCard } from 'client/components/Cards'
import { sanitize } from 'client/utils'
import { isValidProvisionTemplate, getProvisionTypeFromTemplate } from 'client/models/ProvisionTemplate'
import { isValidProvisionTemplate } from 'client/models/ProvisionTemplate'
import { T } from 'client/constants'
import { STEP_ID as PROVIDER_ID } from 'client/components/Forms/Provision/CreateForm/Steps/Provider'
@ -61,12 +61,9 @@ const Template = () => ({
)
], [])
const provisionTypeSelected = useMemo(() => (
getProvisionTypeFromTemplate(provisionTemplates, templateSelected)
), [])
const [provisionSelected, setProvision] = useState(() => provisionTypeSelected ?? provisionTypes[0])
const [providerSelected, setProvider] = useState(() => templateSelected?.provider)
const [provisionSelected, setProvision] =
useState(() => templateSelected?.provision_type ?? provisionTypes[0])
const [templatesByProvisionSelected, providerTypes, description] = useMemo(() => {
const templates = Object.values(provisionTemplates[provisionSelected]?.provisions).flat()
@ -122,7 +119,7 @@ const Template = () => ({
isSelected
? handleUnselect(name, item => item.name === name)
: handleSelect(template)
: handleSelect({ ...template, provision_type: provisionSelected })
}
const RenderDescription = ({ description = '' }) => {

View File

@ -107,23 +107,3 @@ export const getConnectionEditable = (template = {}, providerConfig) => {
...(!keys?.includes(name) && { [name]: value })
}), {})
}
/**
* Returns the provision type from a provider template.
*
* @param {object} provisionTemplates - List of provision templates, from: /provision/defaults
* @param {object} template - Provider template
* @param {string} template.name - Name
* @param {string} template.provider - Provider type
* @returns {string} - Provision type. eg: 'onprem'
*/
export const getProvisionTypeFromTemplate = (provisionTemplates, template) => {
const { name, provider } = template ?? {}
return Object.entries(provisionTemplates)
.find(([_, { providers = {} } = {}]) =>
Object.values(providers)
.flat()
.some(prov => prov.name === name && prov.provider === provider)
)?.[0]
}

View File

@ -56,23 +56,3 @@ export const isValidProvisionTemplate = template => {
[name, provider].includes(undefined)
)
}
/**
* Returns the provision type from a provider template.
*
* @param {object} provisionTemplates - List of provision templates, from: /provision/defaults
* @param {object} template - Provision template
* @param {string} template.name - Name
* @param {string} template.playbook - Provider type
* @returns {string} - Provision type. eg: 'onprem'
*/
export const getProvisionTypeFromTemplate = (provisionTemplates, template) => {
const { provider } = template ?? {}
return Object.entries(provisionTemplates)
.find(([_, { provisions = {} } = {}]) =>
Object.values(provisions)
.flat()
.some(prov => prov.provider === provider)
)?.[0]
}