diff --git a/src/fireedge/src/client/containers/Clusters/index.js b/src/fireedge/src/client/containers/Clusters/index.js index eb0ba91d0f..e75edcabaf 100644 --- a/src/fireedge/src/client/containers/Clusters/index.js +++ b/src/fireedge/src/client/containers/Clusters/index.js @@ -36,12 +36,11 @@ function Clusters() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && ( diff --git a/src/fireedge/src/client/containers/Datastores/index.js b/src/fireedge/src/client/containers/Datastores/index.js index 1a6968f30b..721dc1a73a 100644 --- a/src/fireedge/src/client/containers/Datastores/index.js +++ b/src/fireedge/src/client/containers/Datastores/index.js @@ -36,12 +36,11 @@ function Datastores() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && ( diff --git a/src/fireedge/src/client/containers/Groups/index.js b/src/fireedge/src/client/containers/Groups/index.js index f86f190bf7..2876903fb4 100644 --- a/src/fireedge/src/client/containers/Groups/index.js +++ b/src/fireedge/src/client/containers/Groups/index.js @@ -36,12 +36,11 @@ function Groups() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && ( diff --git a/src/fireedge/src/client/containers/Hosts/index.js b/src/fireedge/src/client/containers/Hosts/index.js index 87651c4315..ef8b5b3247 100644 --- a/src/fireedge/src/client/containers/Hosts/index.js +++ b/src/fireedge/src/client/containers/Hosts/index.js @@ -19,13 +19,14 @@ import { BookmarkEmpty } from 'iconoir-react' import { Typography, Box, Stack, Chip, IconButton } from '@mui/material' import { Row } from 'react-table' +import hostApi from 'client/features/OneApi/host' import { HostsTable } from 'client/components/Tables' import HostTabs from 'client/components/Tabs/Host' import HostActions from 'client/components/Tables/Hosts/actions' import SplitPane from 'client/components/SplitPane' import MultipleTags from 'client/components/MultipleTags' import { Tr } from 'client/components/HOC' -import { T, Host } from 'client/constants' +import { T } from 'client/constants' /** * Displays a list of Hosts with a split pane between the list and selected row(s). @@ -38,12 +39,11 @@ function Hosts() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + ) : ( )} @@ -71,28 +71,34 @@ function Hosts() { /** * Displays details of a Host. * - * @param {Host} host - Host to display + * @param {string} id - Host id to display * @param {Function} [gotoPage] - Function to navigate to a page of a Host * @returns {ReactElement} Host details */ -const InfoTabs = memo(({ host, gotoPage }) => ( - - - - {`#${host.ID} | ${host.NAME}`} - - {gotoPage && ( - - - - )} +const InfoTabs = memo(({ id, gotoPage }) => { + const host = hostApi.endpoints.getHosts.useQueryState(undefined, { + selectFromResult: ({ data = [] }) => data.find((item) => +item.ID === +id), + }) + + return ( + + + + {`#${id} | ${host.NAME}`} + + {gotoPage && ( + + + + )} + + - - -)) + ) +}) InfoTabs.propTypes = { - host: PropTypes.object.isRequired, + id: PropTypes.string.isRequired, gotoPage: PropTypes.func, } diff --git a/src/fireedge/src/client/containers/Images/index.js b/src/fireedge/src/client/containers/Images/index.js index 1f7628849f..414f0e5bb5 100644 --- a/src/fireedge/src/client/containers/Images/index.js +++ b/src/fireedge/src/client/containers/Images/index.js @@ -36,12 +36,11 @@ function Images() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && ( diff --git a/src/fireedge/src/client/containers/MarketplaceApps/index.js b/src/fireedge/src/client/containers/MarketplaceApps/index.js index d7c66336b0..83fa77af08 100644 --- a/src/fireedge/src/client/containers/MarketplaceApps/index.js +++ b/src/fireedge/src/client/containers/MarketplaceApps/index.js @@ -19,13 +19,14 @@ import { BookmarkEmpty } from 'iconoir-react' import { Typography, Box, Stack, Chip, IconButton } from '@mui/material' import { Row } from 'react-table' +import marketAppApi from 'client/features/OneApi/marketplaceApp' import { MarketplaceAppsTable } from 'client/components/Tables' import MarketplaceAppActions from 'client/components/Tables/MarketplaceApps/actions' import MarketplaceAppsTabs from 'client/components/Tabs/MarketplaceApp' import SplitPane from 'client/components/SplitPane' import MultipleTags from 'client/components/MultipleTags' import { Tr } from 'client/components/HOC' -import { T, MarketplaceApp } from 'client/constants' +import { T } from 'client/constants' /** * Displays a list of Marketplace Apps with a split pane between the list and selected row(s). @@ -38,12 +39,11 @@ function MarketplaceApps() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + ) : ( )} @@ -71,28 +71,38 @@ function MarketplaceApps() { /** * Displays details of a Marketplace App. * - * @param {MarketplaceApp} app - Marketplace App to display + * @param {string} id - Marketplace App id to display * @param {Function} [gotoPage] - Function to navigate to a page of a Marketplace App * @returns {ReactElement} Marketplace App details */ -const InfoTabs = memo(({ app, gotoPage }) => ( - - - - {`#${app.ID} | ${app.NAME}`} - - {gotoPage && ( - - - - )} +const InfoTabs = memo(({ id, gotoPage }) => { + const app = marketAppApi.endpoints.getMarketplaceApps.useQueryState( + undefined, + { + selectFromResult: ({ data = [] }) => + data.find((item) => +item.ID === +id), + } + ) + + return ( + + + + {`#${id} | ${app.NAME}`} + + {gotoPage && ( + + + + )} + + - - -)) + ) +}) InfoTabs.propTypes = { - app: PropTypes.object.isRequired, + id: PropTypes.string.isRequired, gotoPage: PropTypes.func, } diff --git a/src/fireedge/src/client/containers/Marketplaces/index.js b/src/fireedge/src/client/containers/Marketplaces/index.js index 6e5a38577c..32743d3718 100644 --- a/src/fireedge/src/client/containers/Marketplaces/index.js +++ b/src/fireedge/src/client/containers/Marketplaces/index.js @@ -36,12 +36,11 @@ function Marketplaces() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && ( diff --git a/src/fireedge/src/client/containers/ServiceTemplates/index.js b/src/fireedge/src/client/containers/ServiceTemplates/index.js index 6393cbdca9..e967ea7571 100644 --- a/src/fireedge/src/client/containers/ServiceTemplates/index.js +++ b/src/fireedge/src/client/containers/ServiceTemplates/index.js @@ -38,12 +38,11 @@ function ServiceTemplates() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && ( diff --git a/src/fireedge/src/client/containers/Services/index.js b/src/fireedge/src/client/containers/Services/index.js index fb73f74de6..c6aaa7325a 100644 --- a/src/fireedge/src/client/containers/Services/index.js +++ b/src/fireedge/src/client/containers/Services/index.js @@ -38,12 +38,11 @@ function Services() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && ( diff --git a/src/fireedge/src/client/containers/Users/index.js b/src/fireedge/src/client/containers/Users/index.js index 2aee3ad613..8e60ac2518 100644 --- a/src/fireedge/src/client/containers/Users/index.js +++ b/src/fireedge/src/client/containers/Users/index.js @@ -36,12 +36,11 @@ function Users() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && ( diff --git a/src/fireedge/src/client/containers/VNetworkTemplates/index.js b/src/fireedge/src/client/containers/VNetworkTemplates/index.js index 061eb850c5..26993a40b5 100644 --- a/src/fireedge/src/client/containers/VNetworkTemplates/index.js +++ b/src/fireedge/src/client/containers/VNetworkTemplates/index.js @@ -36,12 +36,11 @@ function VNetworkTemplates() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && ( diff --git a/src/fireedge/src/client/containers/VirtualMachines/index.js b/src/fireedge/src/client/containers/VirtualMachines/index.js index ae0e0fb905..6452bacd2b 100644 --- a/src/fireedge/src/client/containers/VirtualMachines/index.js +++ b/src/fireedge/src/client/containers/VirtualMachines/index.js @@ -19,13 +19,14 @@ import { BookmarkEmpty } from 'iconoir-react' import { Typography, Box, Stack, Chip, IconButton } from '@mui/material' import { Row } from 'react-table' +import vmApi from 'client/features/OneApi/vm' import { VmsTable } from 'client/components/Tables' import VmActions from 'client/components/Tables/Vms/actions' import VmTabs from 'client/components/Tabs/Vm' import SplitPane from 'client/components/SplitPane' import MultipleTags from 'client/components/MultipleTags' import { Tr } from 'client/components/HOC' -import { T, VM } from 'client/constants' +import { T } from 'client/constants' /** * Displays a list of VMs with a split pane between the list and selected row(s). @@ -38,12 +39,11 @@ function VirtualMachines() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + ) : ( )} @@ -71,28 +71,34 @@ function VirtualMachines() { /** * Displays details of a VM. * - * @param {VM} vm - VM to display + * @param {string} id - VM id to display * @param {Function} [gotoPage] - Function to navigate to a page of a VM * @returns {ReactElement} VM details */ -const InfoTabs = memo(({ vm, gotoPage }) => ( - - - - {`#${vm.ID} | ${vm.NAME}`} - - {gotoPage && ( - - - - )} +const InfoTabs = memo(({ id, gotoPage }) => { + const vm = vmApi.endpoints.getVms.useQueryState(undefined, { + selectFromResult: ({ data = [] }) => data.find((item) => +item.ID === +id), + }) + + return ( + + + + {`#${id} | ${vm.NAME}`} + + {gotoPage && ( + + + + )} + + - - -)) + ) +}) InfoTabs.propTypes = { - vm: PropTypes.object.isRequired, + id: PropTypes.string.isRequired, gotoPage: PropTypes.func, } diff --git a/src/fireedge/src/client/containers/VirtualNetworks/index.js b/src/fireedge/src/client/containers/VirtualNetworks/index.js index 4b9bdab6d9..5838d1e2de 100644 --- a/src/fireedge/src/client/containers/VirtualNetworks/index.js +++ b/src/fireedge/src/client/containers/VirtualNetworks/index.js @@ -36,12 +36,11 @@ function VirtualNetworks() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && ( diff --git a/src/fireedge/src/client/containers/VmTemplates/index.js b/src/fireedge/src/client/containers/VmTemplates/index.js index a32d383619..0be1b18e05 100644 --- a/src/fireedge/src/client/containers/VmTemplates/index.js +++ b/src/fireedge/src/client/containers/VmTemplates/index.js @@ -19,13 +19,14 @@ import { BookmarkEmpty } from 'iconoir-react' import { Typography, Box, Stack, Chip, IconButton } from '@mui/material' import { Row } from 'react-table' +import vmTemplateApi from 'client/features/OneApi/vmTemplate' import { VmTemplatesTable } from 'client/components/Tables' import VmTemplateActions from 'client/components/Tables/VmTemplates/actions' import VmTemplateTabs from 'client/components/Tabs/VmTemplate' import SplitPane from 'client/components/SplitPane' import MultipleTags from 'client/components/MultipleTags' import { Tr } from 'client/components/HOC' -import { T, VmTemplate } from 'client/constants' +import { T } from 'client/constants' /** * Displays a list of VM Templates with a split pane between the list and selected row(s). @@ -38,12 +39,11 @@ function VmTemplates() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + ) : ( )} @@ -71,28 +71,38 @@ function VmTemplates() { /** * Displays details of a VM Template. * - * @param {VmTemplate} vmTemplate - VM Template to display + * @param {string} id - VM Template id to display * @param {Function} [gotoPage] - Function to navigate to a page of a VM Template * @returns {ReactElement} VM Template details */ -const InfoTabs = memo(({ vmTemplate, gotoPage }) => ( - - - - {`#${vmTemplate.ID} | ${vmTemplate.NAME}`} - - {gotoPage && ( - - - - )} +const InfoTabs = memo(({ id, gotoPage }) => { + const vmTemplate = vmTemplateApi.endpoints.getTemplates.useQueryState( + undefined, + { + selectFromResult: ({ data = [] }) => + data.find((item) => +item.ID === +id), + } + ) + + return ( + + + + {`#${id} | ${vmTemplate.NAME}`} + + {gotoPage && ( + + + + )} + + - - -)) + ) +}) InfoTabs.propTypes = { - vmTemplate: PropTypes.object.isRequired, + id: PropTypes.string.isRequired, gotoPage: PropTypes.func, } diff --git a/src/fireedge/src/client/containers/Zones/index.js b/src/fireedge/src/client/containers/Zones/index.js index 617f5a9ce4..4ebe679033 100644 --- a/src/fireedge/src/client/containers/Zones/index.js +++ b/src/fireedge/src/client/containers/Zones/index.js @@ -36,12 +36,11 @@ function Zones() { const hasSelectedRows = selectedRows?.length > 0 const moreThanOneSelected = selectedRows?.length > 1 - const gridTemplateRows = hasSelectedRows ? '1fr auto 1fr' : '1fr' return ( - + {({ getGridProps, GutterComponent }) => ( - + {hasSelectedRows && (