-
+
{selectedRows?.length > 0 && (
diff --git a/src/fireedge/src/client/features/One/application/actions.js b/src/fireedge/src/client/features/One/application/actions.js
index 0e904a16b9..9974d4256b 100644
--- a/src/fireedge/src/client/features/One/application/actions.js
+++ b/src/fireedge/src/client/features/One/application/actions.js
@@ -17,10 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { applicationService } from 'client/features/One/application/services'
import { RESOURCES } from 'client/features/One/slice'
-export const getApplication = createAction('cluster', applicationService.getApplication)
+/** @see {@link RESOURCES.document} */
+const SERVICE_APPLICATION = 'document[100]'
+
+export const getApplication = createAction(
+ `${SERVICE_APPLICATION}/detail`,
+ applicationService.getApplication
+)
export const getApplications = createAction(
- 'application/pool',
+ `${SERVICE_APPLICATION}/pool`,
applicationService.getApplications,
response => ({ [RESOURCES.document[100]]: response })
)
diff --git a/src/fireedge/src/client/features/One/application/hooks.js b/src/fireedge/src/client/features/One/application/hooks.js
index e061cbf22e..56382b4762 100644
--- a/src/fireedge/src/client/features/One/application/hooks.js
+++ b/src/fireedge/src/client/features/One/application/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/application/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useApplication = () => (
- useSelector(state => state.one[RESOURCES.document[100]])
+ useSelector(state => state[name]?.[RESOURCES.document[100]] ?? [])
)
export const useApplicationApi = () => {
diff --git a/src/fireedge/src/client/features/One/applicationTemplate/actions.js b/src/fireedge/src/client/features/One/applicationTemplate/actions.js
index 3240dca9f7..64ba9c44ed 100644
--- a/src/fireedge/src/client/features/One/applicationTemplate/actions.js
+++ b/src/fireedge/src/client/features/One/applicationTemplate/actions.js
@@ -17,28 +17,31 @@ import { createAction } from 'client/features/One/utils'
import { applicationTemplateService } from 'client/features/One/applicationTemplate/services'
import { RESOURCES } from 'client/features/One/slice'
+/** @see {@link RESOURCES.document} */
+const SERVICE_TEMPLATE = 'document[101]'
+
export const getApplicationTemplate = createAction(
- 'application-template',
+ `${SERVICE_TEMPLATE}/detail`,
applicationTemplateService.getApplicationTemplate
)
export const getApplicationsTemplates = createAction(
- 'application-template/pool',
+ `${SERVICE_TEMPLATE}/pool`,
applicationTemplateService.getApplicationsTemplates,
response => ({ [RESOURCES.document[101]]: response })
)
export const createApplicationTemplate = createAction(
- 'application-template/create',
+ `${SERVICE_TEMPLATE}/create`,
applicationTemplateService.createApplicationTemplate
)
export const updateApplicationTemplate = createAction(
- 'application-template/update',
+ `${SERVICE_TEMPLATE}/update`,
applicationTemplateService.updateApplicationTemplate
)
export const instantiateApplicationTemplate = createAction(
- 'application-template/instantiate',
+ `${SERVICE_TEMPLATE}/instantiate`,
applicationTemplateService.instantiateApplicationTemplate
)
diff --git a/src/fireedge/src/client/features/One/applicationTemplate/hooks.js b/src/fireedge/src/client/features/One/applicationTemplate/hooks.js
index ddb820a103..6757fe59b6 100644
--- a/src/fireedge/src/client/features/One/applicationTemplate/hooks.js
+++ b/src/fireedge/src/client/features/One/applicationTemplate/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/applicationTemplate/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useApplicationTemplate = () => (
- useSelector(state => state.one[RESOURCES.document[101]])
+ useSelector(state => state[name]?.[RESOURCES.document[101]] ?? [])
)
export const useApplicationTemplateApi = () => {
diff --git a/src/fireedge/src/client/features/One/cluster/actions.js b/src/fireedge/src/client/features/One/cluster/actions.js
index 69b1b9bdeb..9eb250e328 100644
--- a/src/fireedge/src/client/features/One/cluster/actions.js
+++ b/src/fireedge/src/client/features/One/cluster/actions.js
@@ -17,10 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { clusterService } from 'client/features/One/cluster/services'
import { RESOURCES } from 'client/features/One/slice'
-export const getCluster = createAction('cluster', clusterService.getCluster)
+/** @see {@link RESOURCES.cluster} */
+const CLUSTER = 'cluster'
+
+export const getCluster = createAction(
+ `${CLUSTER}/detail`,
+ clusterService.getCluster
+)
export const getClusters = createAction(
- 'cluster/pool',
+ `${CLUSTER}/pool`,
clusterService.getClusters,
response => ({ [RESOURCES.cluster]: response })
)
diff --git a/src/fireedge/src/client/features/One/cluster/hooks.js b/src/fireedge/src/client/features/One/cluster/hooks.js
index 03f357bef8..1ac29b8654 100644
--- a/src/fireedge/src/client/features/One/cluster/hooks.js
+++ b/src/fireedge/src/client/features/One/cluster/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/cluster/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useCluster = () => (
- useSelector(state => state.one[RESOURCES.cluster])
+ useSelector(state => state[name]?.[RESOURCES.cluster] ?? [])
)
export const useClusterApi = () => {
diff --git a/src/fireedge/src/client/features/One/datastore/actions.js b/src/fireedge/src/client/features/One/datastore/actions.js
index 51c2f47d46..165befbfcc 100644
--- a/src/fireedge/src/client/features/One/datastore/actions.js
+++ b/src/fireedge/src/client/features/One/datastore/actions.js
@@ -17,10 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { datastoreService } from 'client/features/One/datastore/services'
import { RESOURCES } from 'client/features/One/slice'
-export const getDatastore = createAction('datastore', datastoreService.getDatastore)
+/** @see {@link RESOURCES.datastore} */
+const DATASTORE = 'datastore'
+
+export const getDatastore = createAction(
+ `${DATASTORE}/detail`,
+ datastoreService.getDatastore
+)
export const getDatastores = createAction(
- 'datastore/pool',
+ `${DATASTORE}/pool`,
datastoreService.getDatastores,
response => ({ [RESOURCES.datastore]: response })
)
diff --git a/src/fireedge/src/client/features/One/datastore/hooks.js b/src/fireedge/src/client/features/One/datastore/hooks.js
index d4b26cf8d8..84dbc4d393 100644
--- a/src/fireedge/src/client/features/One/datastore/hooks.js
+++ b/src/fireedge/src/client/features/One/datastore/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/datastore/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useDatastore = () => (
- useSelector(state => state.one[RESOURCES.datastore])
+ useSelector(state => state[name]?.[RESOURCES.datastore] ?? [])
)
export const useDatastoreApi = () => {
diff --git a/src/fireedge/src/client/features/One/group/actions.js b/src/fireedge/src/client/features/One/group/actions.js
index 5592515e17..3d07d83591 100644
--- a/src/fireedge/src/client/features/One/group/actions.js
+++ b/src/fireedge/src/client/features/One/group/actions.js
@@ -17,10 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { groupService } from 'client/features/One/group/services'
import { RESOURCES } from 'client/features/One/slice'
-export const getGroup = createAction('group', groupService.getGroup)
+/** @see {@link RESOURCES.group} */
+const GROUP = 'group'
+
+export const getGroup = createAction(
+ `${GROUP}/detail`,
+ groupService.getGroup
+)
export const getGroups = createAction(
- 'group/pool',
+ `${GROUP}/pool`,
groupService.getGroups,
response => ({ [RESOURCES.group]: response })
)
diff --git a/src/fireedge/src/client/features/One/group/hooks.js b/src/fireedge/src/client/features/One/group/hooks.js
index afacb95d61..5d2caf1590 100644
--- a/src/fireedge/src/client/features/One/group/hooks.js
+++ b/src/fireedge/src/client/features/One/group/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/group/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useGroup = () => (
- useSelector(state => state.one[RESOURCES.group])
+ useSelector(state => state[name]?.[RESOURCES.group] ?? [])
)
export const useGroupApi = () => {
diff --git a/src/fireedge/src/client/features/One/host/actions.js b/src/fireedge/src/client/features/One/host/actions.js
index e1287d71cc..ac34b9d73c 100644
--- a/src/fireedge/src/client/features/One/host/actions.js
+++ b/src/fireedge/src/client/features/One/host/actions.js
@@ -17,10 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { hostService } from 'client/features/One/host/services'
import { RESOURCES } from 'client/features/One/slice'
-export const getHost = createAction('host', hostService.getHost)
+/** @see {@link RESOURCES.host} */
+const HOST = 'host'
+
+export const getHost = createAction(
+ `${HOST}/detail`,
+ hostService.getHost
+)
export const getHosts = createAction(
- 'host/pool',
+ `${HOST}/pool`,
hostService.getHosts,
response => ({ [RESOURCES.host]: response })
)
diff --git a/src/fireedge/src/client/features/One/host/hooks.js b/src/fireedge/src/client/features/One/host/hooks.js
index 351ffbcd87..435e6d926f 100644
--- a/src/fireedge/src/client/features/One/host/hooks.js
+++ b/src/fireedge/src/client/features/One/host/hooks.js
@@ -19,9 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/host/actions'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useHost = () => (
- useSelector(state => state.one.hosts)
+ useSelector(state => state[name]?.[RESOURCES.host])
)
export const useHostApi = () => {
diff --git a/src/fireedge/src/client/features/One/image/actions.js b/src/fireedge/src/client/features/One/image/actions.js
index 599938f509..b17bad92cd 100644
--- a/src/fireedge/src/client/features/One/image/actions.js
+++ b/src/fireedge/src/client/features/One/image/actions.js
@@ -17,10 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { imageService } from 'client/features/One/image/services'
import { RESOURCES } from 'client/features/One/slice'
-export const getImage = createAction('image', imageService.getImage)
+/** @see {@link RESOURCES.image} */
+const IMAGE = 'image'
+
+export const getImage = createAction(
+ `${IMAGE}/detail`,
+ imageService.getImage
+)
export const getImages = createAction(
- 'image/pool',
+ `${IMAGE}/pool`,
imageService.getImages,
response => ({ [RESOURCES.image]: response })
)
diff --git a/src/fireedge/src/client/features/One/image/hooks.js b/src/fireedge/src/client/features/One/image/hooks.js
index d6c3053337..3728b2606a 100644
--- a/src/fireedge/src/client/features/One/image/hooks.js
+++ b/src/fireedge/src/client/features/One/image/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/image/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useImage = () => (
- useSelector(state => state.one[RESOURCES.image])
+ useSelector(state => state[name]?.[RESOURCES.image] ?? [])
)
export const useImageApi = () => {
diff --git a/src/fireedge/src/client/features/One/marketplace/actions.js b/src/fireedge/src/client/features/One/marketplace/actions.js
index 9f57f471ad..9cd708bec0 100644
--- a/src/fireedge/src/client/features/One/marketplace/actions.js
+++ b/src/fireedge/src/client/features/One/marketplace/actions.js
@@ -17,10 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { marketplaceService } from 'client/features/One/marketplace/services'
import { RESOURCES } from 'client/features/One/slice'
-export const getMarketplace = createAction('marketplace', marketplaceService.getMarketplace)
+/** @see {@link RESOURCES.marketplace} */
+const MARKETPLACE = 'marketplace'
+
+export const getMarketplace = createAction(
+ `${MARKETPLACE}/detail`,
+ marketplaceService.getMarketplace
+)
export const getMarketplaces = createAction(
- 'marketplace/pool',
+ `${MARKETPLACE}/pool`,
marketplaceService.getMarketplaces,
response => ({ [RESOURCES.marketplace]: response })
)
diff --git a/src/fireedge/src/client/features/One/marketplace/hooks.js b/src/fireedge/src/client/features/One/marketplace/hooks.js
index 29d84e578f..e238619c9e 100644
--- a/src/fireedge/src/client/features/One/marketplace/hooks.js
+++ b/src/fireedge/src/client/features/One/marketplace/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/marketplace/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useMarketplace = () => (
- useSelector(state => state.one[RESOURCES.marketplace])
+ useSelector(state => state[name]?.[RESOURCES.marketplace] ?? [])
)
export const useMarketplaceApi = () => {
diff --git a/src/fireedge/src/client/features/One/marketplaceApp/actions.js b/src/fireedge/src/client/features/One/marketplaceApp/actions.js
index eb57266466..4b918a8805 100644
--- a/src/fireedge/src/client/features/One/marketplaceApp/actions.js
+++ b/src/fireedge/src/client/features/One/marketplaceApp/actions.js
@@ -17,13 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { marketplaceAppService } from 'client/features/One/marketplaceApp/services'
import { RESOURCES } from 'client/features/One/slice'
+/** @see {@link RESOURCES.app} */
+const APP = 'app'
+
export const getMarketplaceApp = createAction(
- 'app',
+ `${APP}/detail`,
marketplaceAppService.getMarketplaceApp
)
export const getMarketplaceApps = createAction(
- 'app/pool',
+ `${APP}/pool`,
marketplaceAppService.getMarketplaceApps,
response => ({ [RESOURCES.app]: response })
)
diff --git a/src/fireedge/src/client/features/One/marketplaceApp/hooks.js b/src/fireedge/src/client/features/One/marketplaceApp/hooks.js
index 9aecc29f01..4b3ec30730 100644
--- a/src/fireedge/src/client/features/One/marketplaceApp/hooks.js
+++ b/src/fireedge/src/client/features/One/marketplaceApp/hooks.js
@@ -19,9 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/marketplaceApp/actions'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useMarketplaceApp = () => (
- useSelector(state => state.one.apps)
+ useSelector(state => state[name]?.[RESOURCES.app])
)
export const useMarketplaceAppApi = () => {
diff --git a/src/fireedge/src/client/features/One/user/actions.js b/src/fireedge/src/client/features/One/user/actions.js
index b6b2aedb49..87e47d3bec 100644
--- a/src/fireedge/src/client/features/One/user/actions.js
+++ b/src/fireedge/src/client/features/One/user/actions.js
@@ -17,13 +17,19 @@ import { createAction } from 'client/features/One/utils'
import { userService } from 'client/features/One/user/services'
import { RESOURCES } from 'client/features/One/slice'
-export const changeGroup = createAction('user/change-group', userService.changeGroup)
-export const getUser = createAction('user', userService.getUser)
+/** @see {@link RESOURCES.user} */
+const USER = 'user'
+
+export const getUser = createAction(
+ `${USER}/detail`,
+ userService.getUser
+)
export const getUsers = createAction(
- 'user/pool',
+ `${USER}/pool`,
userService.getUsers,
response => ({ [RESOURCES.user]: response })
)
-export const updateUser = createAction('user/update', userService.updateUser)
+export const updateUser = createAction(`${USER}/update`, userService.updateUser)
+export const changeGroup = createAction(`${USER}/change-group`, userService.changeGroup)
diff --git a/src/fireedge/src/client/features/One/user/hooks.js b/src/fireedge/src/client/features/One/user/hooks.js
index 21f112d039..2a7c040ac7 100644
--- a/src/fireedge/src/client/features/One/user/hooks.js
+++ b/src/fireedge/src/client/features/One/user/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/user/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useUser = () => (
- useSelector(state => state.one[RESOURCES.user])
+ useSelector(state => state[name]?.[RESOURCES.user] ?? [])
)
export const useUserApi = () => {
diff --git a/src/fireedge/src/client/features/One/vm/actions.js b/src/fireedge/src/client/features/One/vm/actions.js
index 3e0ec28c5b..cc68d0eea5 100644
--- a/src/fireedge/src/client/features/One/vm/actions.js
+++ b/src/fireedge/src/client/features/One/vm/actions.js
@@ -16,21 +16,25 @@
import { createAction } from 'client/features/One/utils'
import { vmService } from 'client/features/One/vm/services'
import { filterBy } from 'client/utils'
+import { RESOURCES } from 'client/features/One/slice'
-export const getVm = createAction('vm/detail', vmService.getVm)
+/** @see {@link RESOURCES.vm} */
+const VM = 'vm'
+
+export const getVm = createAction(`${VM}/detail`, vmService.getVm)
export const getVms = createAction(
- 'vm/pool',
+ `${VM}/pool`,
vmService.getVms,
(response, { vms: currentVms }) => {
const vms = filterBy([...currentVms, ...response], 'ID')
- return { vms }
+ return { [RESOURCES.vm]: vms }
}
)
export const terminateVm = createAction(
- 'vm/delete',
+ `${VM}/delete`,
payload => vmService.actionVm({
...payload,
action: {
@@ -40,24 +44,24 @@ export const terminateVm = createAction(
})
)
-export const updateUserTemplate = createAction('vm/update', vmService.updateUserTemplate)
-export const rename = createAction('vm/rename', vmService.rename)
-export const resize = createAction('vm/resize', vmService.resize)
-export const changePermissions = createAction('vm/chmod', vmService.changePermissions)
-export const changeOwnership = createAction('vm/chown', vmService.changeOwnership)
-export const attachDisk = createAction('vm/attach/disk', vmService.attachDisk)
-export const detachDisk = createAction('vm/detach/disk', vmService.detachDisk)
-export const saveAsDisk = createAction('vm/saveas/disk', vmService.saveAsDisk)
-export const resizeDisk = createAction('vm/resize/disk', vmService.resizeDisk)
-export const createDiskSnapshot = createAction('vm/create/disk-snapshot', vmService.createDiskSnapshot)
-export const renameDiskSnapshot = createAction('vm/rename/disk-snapshot', vmService.renameDiskSnapshot)
-export const revertDiskSnapshot = createAction('vm/revert/disk-snapshot', vmService.revertDiskSnapshot)
-export const deleteDiskSnapshot = createAction('vm/delete/disk-snapshot', vmService.deleteDiskSnapshot)
-export const attachNic = createAction('vm/attach/nic', vmService.attachNic)
-export const detachNic = createAction('vm/detach/nic', vmService.detachNic)
-export const createSnapshot = createAction('vm/create/snapshot', vmService.createSnapshot)
-export const revertSnapshot = createAction('vm/revert/snapshot', vmService.revertSnapshot)
-export const deleteSnapshot = createAction('vm/delete/snapshot', vmService.deleteSnapshot)
-export const addScheduledAction = createAction('vm/add/scheduled-action', vmService.addScheduledAction)
-export const updateScheduledAction = createAction('vm/update/scheduled-action', vmService.updateScheduledAction)
-export const deleteScheduledAction = createAction('vm/delete/scheduled-action', vmService.deleteScheduledAction)
+export const updateUserTemplate = createAction(`${VM}/update`, vmService.updateUserTemplate)
+export const rename = createAction(`${VM}/rename`, vmService.rename)
+export const resize = createAction(`${VM}/resize`, vmService.resize)
+export const changePermissions = createAction(`${VM}/chmod`, vmService.changePermissions)
+export const changeOwnership = createAction(`${VM}/chown`, vmService.changeOwnership)
+export const attachDisk = createAction(`${VM}/attach/disk`, vmService.attachDisk)
+export const detachDisk = createAction(`${VM}/detach/disk`, vmService.detachDisk)
+export const saveAsDisk = createAction(`${VM}/saveas/disk`, vmService.saveAsDisk)
+export const resizeDisk = createAction(`${VM}/resize/disk`, vmService.resizeDisk)
+export const createDiskSnapshot = createAction(`${VM}/create/disk-snapshot`, vmService.createDiskSnapshot)
+export const renameDiskSnapshot = createAction(`${VM}/rename/disk-snapshot`, vmService.renameDiskSnapshot)
+export const revertDiskSnapshot = createAction(`${VM}/revert/disk-snapshot`, vmService.revertDiskSnapshot)
+export const deleteDiskSnapshot = createAction(`${VM}/delete/disk-snapshot`, vmService.deleteDiskSnapshot)
+export const attachNic = createAction(`${VM}/attach/nic`, vmService.attachNic)
+export const detachNic = createAction(`${VM}/detach/nic`, vmService.detachNic)
+export const createSnapshot = createAction(`${VM}/create/snapshot`, vmService.createSnapshot)
+export const revertSnapshot = createAction(`${VM}/revert/snapshot`, vmService.revertSnapshot)
+export const deleteSnapshot = createAction(`${VM}/delete/snapshot`, vmService.deleteSnapshot)
+export const addScheduledAction = createAction(`${VM}/add/scheduled-action`, vmService.addScheduledAction)
+export const updateScheduledAction = createAction(`${VM}/update/scheduled-action`, vmService.updateScheduledAction)
+export const deleteScheduledAction = createAction(`${VM}/delete/scheduled-action`, vmService.deleteScheduledAction)
diff --git a/src/fireedge/src/client/features/One/vm/hooks.js b/src/fireedge/src/client/features/One/vm/hooks.js
index a066554c56..bcd7d98e01 100644
--- a/src/fireedge/src/client/features/One/vm/hooks.js
+++ b/src/fireedge/src/client/features/One/vm/hooks.js
@@ -19,9 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/vm/actions'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useVm = () => (
- useSelector(state => state.one.vms)
+ useSelector(state => state[name]?.[RESOURCES.vm] ?? [])
)
export const useVmApi = () => {
diff --git a/src/fireedge/src/client/features/One/vmGroup/actions.js b/src/fireedge/src/client/features/One/vmGroup/actions.js
index 043e7d9814..048d8eeb44 100644
--- a/src/fireedge/src/client/features/One/vmGroup/actions.js
+++ b/src/fireedge/src/client/features/One/vmGroup/actions.js
@@ -17,13 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { vmGroupService } from 'client/features/One/vmGroup/services'
import { RESOURCES } from 'client/features/One/slice'
+/** @see {@link RESOURCES.vmgroup} */
+const VM_GROUP = 'vmgroup'
+
export const getVmGroup = createAction(
- 'vmgroup/detail',
+ `${VM_GROUP}/detail`,
vmGroupService.getVmGroup
)
export const getVmGroups = createAction(
- 'vmgroup/pool',
+ `${VM_GROUP}/pool`,
vmGroupService.getVmGroups,
response => ({ [RESOURCES.vmgroup]: response })
)
diff --git a/src/fireedge/src/client/features/One/vmGroup/hooks.js b/src/fireedge/src/client/features/One/vmGroup/hooks.js
index 1f109d8ef6..26a558bb3b 100644
--- a/src/fireedge/src/client/features/One/vmGroup/hooks.js
+++ b/src/fireedge/src/client/features/One/vmGroup/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/vmGroup/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useVmGroup = () => (
- useSelector(state => state.one[RESOURCES.vmgroup])
+ useSelector(state => state[name]?.[RESOURCES.vmgroup])
)
export const useVmGroupApi = () => {
diff --git a/src/fireedge/src/client/features/One/vmTemplate/actions.js b/src/fireedge/src/client/features/One/vmTemplate/actions.js
index fbe08d5ea2..333d153005 100644
--- a/src/fireedge/src/client/features/One/vmTemplate/actions.js
+++ b/src/fireedge/src/client/features/One/vmTemplate/actions.js
@@ -17,12 +17,27 @@ import { createAction } from 'client/features/One/utils'
import { vmTemplateService } from 'client/features/One/vmTemplate/services'
import { RESOURCES } from 'client/features/One/slice'
-export const getVmTemplate = createAction('vm-template', vmTemplateService.getVmTemplate)
+/** @see {@link RESOURCES.template} */
+const TEMPLATE = 'template'
+
+export const getVmTemplate = createAction(
+ `${TEMPLATE}/detail`,
+ vmTemplateService.getVmTemplate
+)
export const getVmTemplates = createAction(
- 'vm-template/pool',
+ `${TEMPLATE}/pool`,
vmTemplateService.getVmTemplates,
response => ({ [RESOURCES.template]: response })
)
-export const instantiate = createAction('vm-template/instantiate', vmTemplateService.instantiate)
+export const instantiate = createAction(`${TEMPLATE}/instantiate`, vmTemplateService.instantiate)
+export const allocate = createAction(`${TEMPLATE}/allocate`, vmTemplateService.allocate)
+export const clone = createAction(`${TEMPLATE}/clone`, vmTemplateService.clone)
+export const remove = createAction(`${TEMPLATE}/delete`, vmTemplateService.delete)
+export const update = createAction(`${TEMPLATE}/update`, vmTemplateService.update)
+export const changePermissions = createAction(`${TEMPLATE}/chmod`, vmTemplateService.changePermissions)
+export const changeOwnership = createAction(`${TEMPLATE}/chown`, vmTemplateService.changeOwnership)
+export const rename = createAction(`${TEMPLATE}/rename`, vmTemplateService.rename)
+export const lock = createAction(`${TEMPLATE}/lock`, vmTemplateService.lock)
+export const unlock = createAction(`${TEMPLATE}/unlock`, vmTemplateService.lock)
diff --git a/src/fireedge/src/client/features/One/vmTemplate/hooks.js b/src/fireedge/src/client/features/One/vmTemplate/hooks.js
index 4104605e47..e267b8e068 100644
--- a/src/fireedge/src/client/features/One/vmTemplate/hooks.js
+++ b/src/fireedge/src/client/features/One/vmTemplate/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/vmTemplate/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useVmTemplate = () => (
- useSelector(state => state.one[RESOURCES.template])
+ useSelector(state => state[name]?.[RESOURCES.template] ?? [])
)
export const useVmTemplateApi = () => {
@@ -36,6 +36,18 @@ export const useVmTemplateApi = () => {
return {
getVmTemplate: (id, data) => unwrapDispatch(actions.getVmTemplate({ id, ...data })),
getVmTemplates: () => unwrapDispatch(actions.getVmTemplates()),
- instantiate: (id, data) => unwrapDispatch(actions.instantiate({ id, ...data }))
+ instantiate: (id, data) => unwrapDispatch(actions.instantiate({ id, ...data })),
+ allocate: template => unwrapDispatch(actions.allocate(template)),
+ clone: (id, data) => unwrapDispatch(actions.clone({ id, ...data })),
+ remove: (id, image) => unwrapDispatch(actions.remove({ id, image })),
+ update: (id, template, replace) =>
+ unwrapDispatch(actions.update({ id, template, replace })),
+ changePermissions: (id, data) =>
+ unwrapDispatch(actions.changePermissions({ id, ...data })),
+ changeOwnership: (id, ownership) =>
+ unwrapDispatch(actions.changeOwnership({ id, ownership })),
+ rename: (id, name) => unwrapDispatch(actions.rename({ id, name })),
+ lock: (id, data) => unwrapDispatch(actions.lock({ id, ...data })),
+ unlock: id => unwrapDispatch(actions.unlock({ id }))
}
}
diff --git a/src/fireedge/src/client/features/One/vmTemplate/services.js b/src/fireedge/src/client/features/One/vmTemplate/services.js
index eaa34a0318..867d1a5d66 100644
--- a/src/fireedge/src/client/features/One/vmTemplate/services.js
+++ b/src/fireedge/src/client/features/One/vmTemplate/services.js
@@ -63,6 +63,219 @@ export const vmTemplateService = ({
return [res?.data?.VMTEMPLATE_POOL?.VMTEMPLATE ?? []].flat()
},
+ /**
+ * Allocates a new template in OpenNebula.
+ *
+ * @param {object} params - Request params
+ * @param {string} params.template - A string containing the template contents
+ * @returns {number} Template id
+ * @throws Fails when response isn't code 200
+ */
+ allocate: async params => {
+ const name = Actions.TEMPLATE_ALLOCATE
+ const command = { name, ...Commands[name] }
+ const config = requestConfig(params, command)
+
+ const res = await RestClient.request(config)
+
+ if (!res?.id || res?.id !== httpCodes.ok.id) throw res
+
+ return res?.data
+ },
+
+ /**
+ * Clones an existing virtual machine template.
+ *
+ * @param {object} params - Request params
+ * @param {number|string} params.id - The ID of the template to be cloned
+ * @param {string} params.name - Name for the new template
+ * @param {boolean} params.image
+ * - `true` to clone the template plus any image defined in DISK.
+ * The new IMAGE_ID is set into each DISK
+ * @returns {number} Template id
+ * @throws Fails when response isn't code 200
+ */
+ clone: async params => {
+ const name = Actions.TEMPLATE_CLONE
+ const command = { name, ...Commands[name] }
+ const config = requestConfig(params, command)
+
+ const res = await RestClient.request(config)
+
+ if (!res?.id || res?.id !== httpCodes.ok.id) throw res
+
+ return res?.data
+ },
+
+ /**
+ * Deletes the given template from the pool.
+ *
+ * @param {object} params - Request params
+ * @param {number|string} params.id - Template id
+ * @param {boolean} params.image
+ * - `true` to delete the template plus any image defined in DISK
+ * @returns {number} Template id
+ * @throws Fails when response isn't code 200
+ */
+ delete: async params => {
+ const name = Actions.TEMPLATE_DELETE
+ const command = { name, ...Commands[name] }
+ const config = requestConfig(params, command)
+
+ const res = await RestClient.request(config)
+
+ if (!res?.id || res?.id !== httpCodes.ok.id) throw res
+
+ return res?.data
+ },
+
+ /**
+ * Replaces the template contents.
+ *
+ * @param {object} params - Request params
+ * @param {number|string} params.id - Template id
+ * @param {boolean} params.template - The new template contents
+ * @param {0|1} params.replace
+ * - Update type:
+ * ``0``: Replace the whole template.
+ * ``1``: Merge new template with the existing one.
+ * @returns {number} Template id
+ * @throws Fails when response isn't code 200
+ */
+ update: async params => {
+ const name = Actions.TEMPLATE_UPDATE
+ const command = { name, ...Commands[name] }
+ const config = requestConfig(params, command)
+
+ const res = await RestClient.request(config)
+
+ if (!res?.id || res?.id !== httpCodes.ok.id) throw res
+
+ return res?.data
+ },
+
+ /**
+ * Changes the permission bits of a template.
+ *
+ * @param {object} params - Request parameters
+ * @param {string|number} params.id - Template id
+ * @param {{
+ * ownerUse: number,
+ * ownerManage: number,
+ * ownerAdmin: number,
+ * groupUse: number,
+ * groupManage: number,
+ * groupAdmin: number,
+ * otherUse: number,
+ * otherManage: number,
+ * otherAdmin: number
+ * }} params.permissions - Permissions data
+ * @param {boolean} params.image
+ * - `true` to chmod the template plus any image defined in DISK
+ * @returns {number} Template id
+ * @throws Fails when response isn't code 200
+ */
+ changePermissions: async ({ id, image, permissions }) => {
+ const name = Actions.TEMPLATE_CHMOD
+ const command = { name, ...Commands[name] }
+ const config = requestConfig({ id, image, ...permissions }, command)
+
+ const res = await RestClient.request(config)
+
+ if (!res?.id || res?.id !== httpCodes.ok.id) throw res?.data
+
+ return res?.data
+ },
+
+ /**
+ * Changes the ownership of a template.
+ *
+ * @param {object} params - Request parameters
+ * @param {string|number} params.id - Template id
+ * @param {{user: number, group: number}} params.ownership - Ownership data
+ * @returns {number} Template id
+ * @throws Fails when response isn't code 200
+ */
+ changeOwnership: async ({ id, ownership }) => {
+ const name = Actions.TEMPLATE_CHOWN
+ const command = { name, ...Commands[name] }
+ const config = requestConfig({ id, ...ownership }, command)
+
+ const res = await RestClient.request(config)
+
+ if (!res?.id || res?.id !== httpCodes.ok.id) throw res?.data
+
+ return res?.data
+ },
+
+ /**
+ * Renames a Template.
+ *
+ * @param {object} params - Request parameters
+ * @param {string|number} params.id - Template id
+ * @param {string} params.name - New name
+ * @returns {number} Template id
+ * @throws Fails when response isn't code 200
+ */
+ rename: async params => {
+ const name = Actions.TEMPLATE_RENAME
+ const command = { name, ...Commands[name] }
+ const config = requestConfig(params, command)
+
+ const res = await RestClient.request(config)
+
+ if (!res?.id || res?.id !== httpCodes.ok.id) throw res?.data
+
+ return res?.data
+ },
+
+ /**
+ * Locks a Template.
+ *
+ * @param {object} params - Request parameters
+ * @param {string|number} params.id - Template id
+ * @param {1|2|3|4} params.lock
+ * - Lock level:
+ * ``1``: Use
+ * ``2``: Manage
+ * ``3``: Admin
+ * ``4``: All
+ * @param {boolean} params.test - Check if the object is already locked to return an error
+ * @returns {number} Template id
+ * @throws Fails when response isn't code 200
+ */
+ lock: async params => {
+ const name = Actions.TEMPLATE_LOCK
+ const command = { name, ...Commands[name] }
+ const config = requestConfig(params, command)
+
+ const res = await RestClient.request(config)
+
+ if (!res?.id || res?.id !== httpCodes.ok.id) throw res?.data
+
+ return res?.data
+ },
+
+ /**
+ * Unlocks a Template.
+ *
+ * @param {object} params - Request parameters
+ * @param {string|number} params.id - Template id
+ * @returns {number} Template id
+ * @throws Fails when response isn't code 200
+ */
+ unlock: async params => {
+ const name = Actions.TEMPLATE_UNLOCK
+ const command = { name, ...Commands[name] }
+ const config = requestConfig(params, command)
+
+ const res = await RestClient.request(config)
+
+ if (!res?.id || res?.id !== httpCodes.ok.id) throw res?.data
+
+ return res?.data
+ },
+
/**
* Instantiates a new virtual machine from a template.
*
diff --git a/src/fireedge/src/client/features/One/vnetwork/actions.js b/src/fireedge/src/client/features/One/vnetwork/actions.js
index 8162ea7549..54b6c63f2e 100644
--- a/src/fireedge/src/client/features/One/vnetwork/actions.js
+++ b/src/fireedge/src/client/features/One/vnetwork/actions.js
@@ -17,10 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { vNetworkService } from 'client/features/One/vnetwork/services'
import { RESOURCES } from 'client/features/One/slice'
-export const getVNetwork = createAction('vnet', vNetworkService.getVNetwork)
+/** @see {@link RESOURCES.vn} */
+const VNET = 'vn'
+
+export const getVNetwork = createAction(
+ `${VNET}/detail`,
+ vNetworkService.getVNetwork
+)
export const getVNetworks = createAction(
- 'vnet/pool',
+ `${VNET}/pool`,
vNetworkService.getVNetworks,
response => ({ [RESOURCES.vn]: response })
)
diff --git a/src/fireedge/src/client/features/One/vnetwork/hooks.js b/src/fireedge/src/client/features/One/vnetwork/hooks.js
index 38bd5e3bb6..59ab64b80c 100644
--- a/src/fireedge/src/client/features/One/vnetwork/hooks.js
+++ b/src/fireedge/src/client/features/One/vnetwork/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/vnetwork/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useVNetwork = () => (
- useSelector(state => state.one[RESOURCES.vn])
+ useSelector(state => state[name]?.[RESOURCES.vn] ?? [])
)
export const useVNetworkApi = () => {
diff --git a/src/fireedge/src/client/features/One/vnetworkTemplate/actions.js b/src/fireedge/src/client/features/One/vnetworkTemplate/actions.js
index 063b8b5316..cf56f102f3 100644
--- a/src/fireedge/src/client/features/One/vnetworkTemplate/actions.js
+++ b/src/fireedge/src/client/features/One/vnetworkTemplate/actions.js
@@ -17,13 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { vNetworkTemplateService } from 'client/features/One/vnetworkTemplate/services'
import { RESOURCES } from 'client/features/One/slice'
+/** @see {@link RESOURCES.vntemplate} */
+const VNET_TEMPLATE = 'vntemplate'
+
export const getVNetworkTemplate = createAction(
- 'vnet-template',
+ `${VNET_TEMPLATE}/detail`,
vNetworkTemplateService.getVNetworkTemplate
)
export const getVNetworkTemplates = createAction(
- 'vnet-template/pool',
+ `${VNET_TEMPLATE}/pool`,
vNetworkTemplateService.getVNetworkTemplates,
response => ({ [RESOURCES.vntemplate]: response })
)
diff --git a/src/fireedge/src/client/features/One/vnetworkTemplate/hooks.js b/src/fireedge/src/client/features/One/vnetworkTemplate/hooks.js
index f8cfbe8878..01bc6c8efb 100644
--- a/src/fireedge/src/client/features/One/vnetworkTemplate/hooks.js
+++ b/src/fireedge/src/client/features/One/vnetworkTemplate/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/vnetworkTemplate/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useVNetworkTemplate = () => (
- useSelector(state => state.one[RESOURCES.vntemplate])
+ useSelector(state => state[name]?.[RESOURCES.vntemplate] ?? [])
)
export const useVNetworkTemplateApi = () => {
diff --git a/src/fireedge/src/client/features/One/vrouter/actions.js b/src/fireedge/src/client/features/One/vrouter/actions.js
index 6f4a10bb8a..a5f58f5b34 100644
--- a/src/fireedge/src/client/features/One/vrouter/actions.js
+++ b/src/fireedge/src/client/features/One/vrouter/actions.js
@@ -17,13 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { vRouterService } from 'client/features/One/vrouter/services'
import { RESOURCES } from 'client/features/One/slice'
+/** @see {@link RESOURCES.vrouter} */
+const VROUTER = 'vrouter'
+
export const getVRouter = createAction(
- 'vrouter/detail',
+ `${VROUTER}/detail`,
vRouterService.getVRouter
)
export const getVRouters = createAction(
- 'vrouter/pool',
+ `${VROUTER}/pool`,
vRouterService.getVRouters,
response => ({ [RESOURCES.vrouter]: response })
)
diff --git a/src/fireedge/src/client/features/One/vrouter/hooks.js b/src/fireedge/src/client/features/One/vrouter/hooks.js
index e0ef638a15..fbfbcad6ef 100644
--- a/src/fireedge/src/client/features/One/vrouter/hooks.js
+++ b/src/fireedge/src/client/features/One/vrouter/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/vrouter/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useVRouter = () => (
- useSelector(state => state.one[RESOURCES.vrouter])
+ useSelector(state => state[name]?.[RESOURCES.vrouter] ?? [])
)
export const useVRouterApi = () => {
diff --git a/src/fireedge/src/client/features/One/zone/actions.js b/src/fireedge/src/client/features/One/zone/actions.js
index 2b3bc26d04..4ab70ec5fa 100644
--- a/src/fireedge/src/client/features/One/zone/actions.js
+++ b/src/fireedge/src/client/features/One/zone/actions.js
@@ -17,13 +17,16 @@ import { createAction } from 'client/features/One/utils'
import { zoneService } from 'client/features/One/zone/services'
import { RESOURCES } from 'client/features/One/slice'
+/** @see {@link RESOURCES.zone} */
+const ZONE = 'zone'
+
export const getZone = createAction(
- 'zone/detail',
+ `${ZONE}/detail`,
zoneService.getZone
)
export const getZones = createAction(
- 'zone/pool',
+ `${ZONE}/pool`,
zoneService.getZones,
response => ({ [RESOURCES.zone]: response })
)
diff --git a/src/fireedge/src/client/features/One/zone/hooks.js b/src/fireedge/src/client/features/One/zone/hooks.js
index ad098d8212..188bee4abc 100644
--- a/src/fireedge/src/client/features/One/zone/hooks.js
+++ b/src/fireedge/src/client/features/One/zone/hooks.js
@@ -19,10 +19,10 @@ import { useDispatch, useSelector } from 'react-redux'
import { unwrapResult } from '@reduxjs/toolkit'
import * as actions from 'client/features/One/zone/actions'
-import { RESOURCES } from 'client/features/One/slice'
+import { name, RESOURCES } from 'client/features/One/slice'
export const useZone = () => (
- useSelector(state => state.one[RESOURCES.zone])
+ useSelector(state => state[name]?.[RESOURCES.zone] ?? [])
)
export const useZoneApi = () => {
diff --git a/src/fireedge/src/client/hooks/useFetch.js b/src/fireedge/src/client/hooks/useFetch.js
index 46b104d774..673a52029a 100644
--- a/src/fireedge/src/client/hooks/useFetch.js
+++ b/src/fireedge/src/client/hooks/useFetch.js
@@ -140,7 +140,7 @@ const useFetch = (request, socket) => {
* @param {number} options.delay - Delay to trigger the request
* @returns {Promise} - Returns a promise with response or error
*/
- (payload, options = {}) => {
+ async (payload, options = {}) => {
const { reload = false, delay = 0 } = options
if (!(Number.isInteger(delay) && delay >= 0)) {
@@ -149,7 +149,8 @@ const useFetch = (request, socket) => {
If you're using it as a function, it must also return a number >= 0.`)
}
- return fakeDelay(delay).then(() => doFetch(payload, reload))
+ await fakeDelay(delay)
+ await doFetch(payload, reload)
}, [request])
return { ...state, fetchRequest, STATUS }
diff --git a/src/fireedge/src/client/hooks/useListForm.js b/src/fireedge/src/client/hooks/useListForm.js
index 3d09396347..42973b503e 100644
--- a/src/fireedge/src/client/hooks/useListForm.js
+++ b/src/fireedge/src/client/hooks/useListForm.js
@@ -151,7 +151,7 @@ const useListForm = ({
handleSetList(newList)
},
- [list]
+ [list, setList]
)
const handleClear = useCallback(
@@ -174,7 +174,7 @@ const useListForm = ({
[list, defaultValue]
)
- const handleRemove = useCallback(handleUnselect, [key, list])
+ const handleRemove = handleUnselect
const handleSave = useCallback(
(values, id = getItemId(values) ?? uuidv4()) => {
diff --git a/src/fireedge/src/client/models/ProviderTemplate.js b/src/fireedge/src/client/models/ProviderTemplate.js
index 53de9348e8..53a41fd3c8 100644
--- a/src/fireedge/src/client/models/ProviderTemplate.js
+++ b/src/fireedge/src/client/models/ProviderTemplate.js
@@ -19,8 +19,7 @@
* @property {string} [description] - Description
* @property {string} provider - Provider type
* @property {object} plain - Information in plain format
- * @property {string} [plain.image] - Image to card
- * @property {string} plain.provision_type - Provision type
+ * @property {string} plain.provider - Provider type
* @property {string|string[]} plain.location_key - Location key/s
* @property {object} connection - Connections
* @property {Array} inputs - Inputs to provision form
diff --git a/src/fireedge/src/client/models/ProvisionTemplate.js b/src/fireedge/src/client/models/ProvisionTemplate.js
index 836e864bf3..61f935de56 100644
--- a/src/fireedge/src/client/models/ProvisionTemplate.js
+++ b/src/fireedge/src/client/models/ProvisionTemplate.js
@@ -18,7 +18,6 @@
* @property {string} name - Name
* @property {string} image - Image to card
* @property {string} provider - Provider type
- * @property {string} provision_type - Provision type
* @property {object} defaults - Common configuration attributes
* @property {object} [defaults.provision] - Provision information
* @property {string} [defaults.provision.provider_name] - Provider name
diff --git a/src/fireedge/src/client/models/VirtualMachine.js b/src/fireedge/src/client/models/VirtualMachine.js
index 372ec413c4..b7a71486d6 100644
--- a/src/fireedge/src/client/models/VirtualMachine.js
+++ b/src/fireedge/src/client/models/VirtualMachine.js
@@ -58,7 +58,7 @@ export const getHistoryRecords = vm =>
export const getLastHistory = vm => {
const records = getHistoryRecords(vm)
- return records.at(-1)
+ return records.at(-1) ?? {}
}
/**
diff --git a/src/fireedge/src/client/utils/schema.js b/src/fireedge/src/client/utils/schema.js
index e1b16e4d6f..905e63c4da 100644
--- a/src/fireedge/src/client/utils/schema.js
+++ b/src/fireedge/src/client/utils/schema.js
@@ -118,7 +118,7 @@ import { INPUT_TYPES } from 'client/constants'
/**
* @typedef {object} ExtraParams
* @property {function(object):object} [transformBeforeSubmit] - Transform validated form data after submit
- * @property {function(object):object} [transformInitialValue] - Transform initial value after load form
+ * @property {function(object, BaseSchema):object} [transformInitialValue] - Transform initial value after load form
*/
/**
@@ -313,21 +313,23 @@ export const createSteps = (steps, extraParams = {}) =>
const stepCallbacks = typeof steps === 'function' ? steps(stepProps) : steps
const performedSteps = stepCallbacks.map(step => step(stepProps))
- const schemas = object()
+ const schemas = {}
for (const { id, resolver } of performedSteps) {
const schema = typeof resolver === 'function' ? resolver() : resolver
- schemas.concat(object({ [id]: schema }))
+ schemas[id] = schema
}
+ const allResolver = object(schemas)
+
const defaultValues = initialValues
- ? transformInitialValue(initialValues, schemas)
- : schemas.default()
+ ? transformInitialValue(initialValues, allResolver)
+ : allResolver.default()
return {
steps: performedSteps,
defaultValues,
- resolver: () => schemas,
+ resolver: () => allResolver,
...extraParams
}
}
diff --git a/src/fireedge/src/server/utils/constants/commands/template.js b/src/fireedge/src/server/utils/constants/commands/template.js
index fed14b5766..8b2ade48d7 100644
--- a/src/fireedge/src/server/utils/constants/commands/template.js
+++ b/src/fireedge/src/server/utils/constants/commands/template.js
@@ -194,11 +194,11 @@ module.exports = {
from: resource,
default: 0
},
- userId: {
+ user: {
from: postBody,
default: -1
},
- groupId: {
+ group: {
from: postBody,
default: -1
}
@@ -229,6 +229,10 @@ module.exports = {
lock: {
from: postBody,
default: 4
+ },
+ test: {
+ from: postBody,
+ default: false
}
}
},