)
diff --git a/src/fireedge/src/client/components/Tables/Virtualized/toolbar.js b/src/fireedge/src/client/components/Tables/Virtualized/toolbar.js
index b5e97b6759..688393434c 100644
--- a/src/fireedge/src/client/components/Tables/Virtualized/toolbar.js
+++ b/src/fireedge/src/client/components/Tables/Virtualized/toolbar.js
@@ -33,7 +33,7 @@ const Toolbar = ({ useTableProps }) => {
}
+ startIcon={
}
className={classes.filterButton}
>
Filters
diff --git a/src/fireedge/src/client/components/Tables/Vms/columns.js b/src/fireedge/src/client/components/Tables/Vms/columns.js
index 59b942159e..4d3959f146 100644
--- a/src/fireedge/src/client/components/Tables/Vms/columns.js
+++ b/src/fireedge/src/client/components/Tables/Vms/columns.js
@@ -1,3 +1,6 @@
+import * as React from 'react'
+
+import { StatusBadge } from 'client/components/Status'
import * as VirtualMachineModel from 'client/models/VirtualMachine'
export default [
@@ -21,15 +24,20 @@ export default [
)
}, */
{
- Header: '#', accessor: 'ID'
- // Cell: ({ value }) =>
- //
- },
- { Header: 'Name', accessor: 'NAME' },
- {
- Header: 'State',
+ Header: '',
id: 'STATE',
- accessor: row => VirtualMachineModel.getState(row)?.name
+ width: 50,
+ accessor: row => {
+ const state = VirtualMachineModel.getState(row)
+
+ return (
+
+ )
+ }
// Cell: ({ value: { name, color } = {} }) => name && (
//
// ),
@@ -39,6 +47,8 @@ export default [
// filter: (rows, id, filterValue) =>
// rows.filter(row => row.values[id]?.name === filterValue)
},
+ { Header: '#', accessor: 'ID', width: 45 },
+ { Header: 'Name', accessor: 'NAME' },
{
Header: 'Owner/Group',
accessor: row => `${row.UNAME}/${row.GNAME}`
diff --git a/src/fireedge/src/client/components/Tables/Vms/index.js b/src/fireedge/src/client/components/Tables/Vms/index.js
index 3914d0af9c..31a8382866 100644
--- a/src/fireedge/src/client/components/Tables/Vms/index.js
+++ b/src/fireedge/src/client/components/Tables/Vms/index.js
@@ -1,20 +1,18 @@
-import React, { useEffect, useState } from 'react'
+import React, { useEffect, useState, useCallback } from 'react'
import { useAuth } from 'client/features/Auth'
import { useFetch } from 'client/hooks'
import { useVm, useVmApi } from 'client/features/One'
-import { VirtualizedTable } from 'client/components/Tables'
+import { EnhancedTable } from 'client/components/Tables'
+import { VirtualMachineCard } from 'client/components/Cards'
import Columns from 'client/components/Tables/Vms/columns'
const INITIAL_ELEMENT = 0
-const NUMBER_OF_INTERVAL = 20
+const NUMBER_OF_INTERVAL = 6
const VmsTable = () => {
- const [{ start, end }, setPage] = useState({
- start: INITIAL_ELEMENT,
- end: -NUMBER_OF_INTERVAL
- })
+ const [[start, end], setPage] = useState([INITIAL_ELEMENT, -NUMBER_OF_INTERVAL])
const columns = React.useMemo(() => Columns, [])
@@ -26,26 +24,29 @@ const VmsTable = () => {
useEffect(() => { fetchRequest({ start, end }) }, [filterPool])
- const fetchMore = () => {
- setPage(prevState => {
- const newStart = prevState.start + NUMBER_OF_INTERVAL
- const newEnd = prevState.end - NUMBER_OF_INTERVAL
+ const fetchMore = useCallback(() => {
+ setPage(([prevStart, prevEnd]) => {
+ const newStart = prevStart + NUMBER_OF_INTERVAL
+ const newEnd = prevEnd - NUMBER_OF_INTERVAL
fetchRequest({ start: newStart, end: newEnd })
- return { start: newStart, end: newEnd }
+ return [newStart, newEnd]
})
- }
+ }, [start, end])
- const canFetchMore = error || data?.vms?.length < NUMBER_OF_INTERVAL
+ const canFetchMore = !error && data?.vms?.length % NUMBER_OF_INTERVAL === 0
return (
-
)
}
diff --git a/src/fireedge/src/client/components/Tables/index.js b/src/fireedge/src/client/components/Tables/index.js
index 4be3687b16..59a66bad8f 100644
--- a/src/fireedge/src/client/components/Tables/index.js
+++ b/src/fireedge/src/client/components/Tables/index.js
@@ -1,11 +1,13 @@
+import DatastoresTable from 'client/components/Tables/Datastores'
+import EnhancedTable from 'client/components/Tables/Enhanced'
+import HostsTable from 'client/components/Tables/Hosts'
import VirtualizedTable from 'client/components/Tables/Virtualized'
import VmsTable from 'client/components/Tables/Vms'
-import DatastoresTable from 'client/components/Tables/Datastores'
-import HostsTable from 'client/components/Tables/Hosts'
export {
- VirtualizedTable,
- VmsTable,
DatastoresTable,
- HostsTable
+ EnhancedTable,
+ HostsTable,
+ VirtualizedTable,
+ VmsTable
}
diff --git a/src/fireedge/src/client/containers/Login/schema.js b/src/fireedge/src/client/containers/Login/schema.js
index d539ee8653..097e012905 100644
--- a/src/fireedge/src/client/containers/Login/schema.js
+++ b/src/fireedge/src/client/containers/Login/schema.js
@@ -81,7 +81,7 @@ export const GROUP = {
const formatGroups = sortedGroupsById.map(({ ID, NAME }) => {
const markAsPrimary = user?.GID === ID ? (
-
+
) : null
diff --git a/src/fireedge/src/client/containers/Newstone/index.js b/src/fireedge/src/client/containers/Newstone/index.js
index 78e2c87939..6de19fee55 100644
--- a/src/fireedge/src/client/containers/Newstone/index.js
+++ b/src/fireedge/src/client/containers/Newstone/index.js
@@ -47,6 +47,15 @@ const AntTab = withStyles(theme => ({
selected: {}
}))(props =>
)
+const AntContainer = withStyles({
+ root: {
+ height: '100%',
+ display: 'flex',
+ flexDirection: 'column',
+ paddingInline: 0
+ }
+})(Container)
+
const Newstone = () => {
const history = useHistory()
const { resource } = useParams()
@@ -70,10 +79,10 @@ const Newstone = () => {
), [resource])
return (
-
+
{Object.values(TABS).includes(history.location.pathname) && renderTabs}
-
+
@@ -82,7 +91,7 @@ const Newstone = () => {
} />
-
+
)
}
diff --git a/src/fireedge/src/client/features/One/utils.js b/src/fireedge/src/client/features/One/utils.js
index cfb3113c9b..c50e1587d9 100644
--- a/src/fireedge/src/client/features/One/utils.js
+++ b/src/fireedge/src/client/features/One/utils.js
@@ -6,14 +6,14 @@ import { requestParams, RestClient } from 'client/utils'
export const createAction = (type, service, wrapResult) =>
createAsyncThunk(type, async (payload, { getState, rejectWithValue }) => {
try {
- const { filterPool } = getState().auth
+ const { auth: { filterPool }, one } = getState()
const response = await service({
...payload,
filter: filterPool
})
- return wrapResult ? wrapResult(response) : response
+ return wrapResult ? wrapResult(response, one) : response
} catch (err) {
return rejectWithValue(typeof err === 'string' ? err : err?.response?.data)
}
diff --git a/src/fireedge/src/client/features/One/vm/actions.js b/src/fireedge/src/client/features/One/vm/actions.js
index d1cbe59200..a5407e4b5e 100644
--- a/src/fireedge/src/client/features/One/vm/actions.js
+++ b/src/fireedge/src/client/features/One/vm/actions.js
@@ -1,12 +1,17 @@
import { createAction } from 'client/features/One/utils'
import { vmService } from 'client/features/One/vm/services'
+import { filterBy } from 'client/utils'
export const getVm = createAction('vm', vmService.getVm)
export const getVms = createAction(
'vm/pool',
vmService.getVms,
- response => ({ vms: response })
+ (response, { vms: currentVms }) => {
+ const vms = filterBy([...currentVms, ...response], 'ID')
+
+ return { vms }
+ }
)
export const terminateVm = createAction(