diff --git a/src/fireedge/src/client/components/Tables/Images/detail.js b/src/fireedge/src/client/components/Tables/Images/detail.js new file mode 100644 index 0000000000..333cfaaf6a --- /dev/null +++ b/src/fireedge/src/client/components/Tables/Images/detail.js @@ -0,0 +1,79 @@ +import React, { useEffect } from 'react' +import { LinearProgress } from '@material-ui/core' + +import Tabs from 'client/components/Tabs' +import { StatusBadge } from 'client/components/Status' + +import { useFetch, useSocket } from 'client/hooks' +import { useImageApi } from 'client/features/One' + +import { prettyBytes } from 'client/utils' +import * as ImageModel from 'client/models/Image' +import * as Helper from 'client/models/Helper' + +const ImageDetail = ({ id }) => { + const { getImage } = useImageApi() + + const { getHooksSocket } = useSocket() + const socket = getHooksSocket({ resource: 'image', id }) + + const { data, fetchRequest, loading, error } = useFetch(getImage, socket) + const isLoading = (!data && !error) || loading + + useEffect(() => { + fetchRequest(id) + }, [id]) + + if (isLoading) { + return + } + + if (error) { + return
{error}
+ } + + const { ID, NAME, UNAME, GNAME, REGTIME, SIZE, PERSISTENT, LOCK, DATASTORE, VMS, RUNNING_VMS } = data + + const { name: stateName, color: stateColor } = ImageModel.getState(data) + const type = ImageModel.getType(data) + const size = +SIZE ? prettyBytes(+SIZE, 'MB') : '-' + + const usedByVms = [VMS?.ID ?? []].flat().length || 0 + + const tabs = [ + { + name: 'info', + renderContent: ( +
+
+ + + {`#${ID} - ${NAME}`} + +
+
+

Owner: {UNAME}

+

Group: {GNAME}

+

Datastore: {DATASTORE}

+

Persistent: {type}

+

Size: {size}

+

Register time: {Helper.timeToString(REGTIME)}

+

Locked: {Helper.levelLockToString(LOCK?.LOCKED)}

+

Persistent: {Helper.booleanToString(PERSISTENT)}

+

Running VMS: {` ${RUNNING_VMS} / ${usedByVms}`}

+
+
+ ) + } + ] + + return ( + + ) +} + +export default ImageDetail diff --git a/src/fireedge/src/client/components/Tables/Images/index.js b/src/fireedge/src/client/components/Tables/Images/index.js index 5b1d13139c..841fac853a 100644 --- a/src/fireedge/src/client/components/Tables/Images/index.js +++ b/src/fireedge/src/client/components/Tables/Images/index.js @@ -7,6 +7,7 @@ import { useImage, useImageApi } from 'client/features/One' import { EnhancedTable } from 'client/components/Tables' import ImageColumns from 'client/components/Tables/Images/columns' import ImageRow from 'client/components/Tables/Images/row' +import ImageDetail from 'client/components/Tables/Images/detail' const ImagesTable = () => { const columns = React.useMemo(() => ImageColumns, []) @@ -25,6 +26,7 @@ const ImagesTable = () => { data={images} isLoading={loading || reloading} getRowId={row => String(row.ID)} + renderDetail={row => } RowComponent={ImageRow} /> )