From f305105c52376a6dc9b6fef52515071cfc48968d Mon Sep 17 00:00:00 2001 From: John Duprey Date: Wed, 24 Apr 2024 15:44:08 -0400 Subject: [PATCH] Recent job details --- src/components/layout/AppHeader.jsx | 1 + .../utilities/CippActionsOffcanvas.jsx | 96 +++++++++++++------ src/components/utilities/CippCodeBlock.jsx | 37 ++++--- .../utilities/CippTableOffcanvas.jsx | 42 +++++++- 4 files changed, 130 insertions(+), 46 deletions(-) diff --git a/src/components/layout/AppHeader.jsx b/src/components/layout/AppHeader.jsx index 9661c89e7eba..620a2c9332c7 100644 --- a/src/components/layout/AppHeader.jsx +++ b/src/components/layout/AppHeader.jsx @@ -117,6 +117,7 @@ const AppHeader = () => { timestamp: job.Timestamp, percent: job.PercentComplete, progressText: `${job.PercentComplete}%`, + detailsObject: job.Tasks, })), ) } else { diff --git a/src/components/utilities/CippActionsOffcanvas.jsx b/src/components/utilities/CippActionsOffcanvas.jsx index f67e3d11ed88..7a78192aba10 100644 --- a/src/components/utilities/CippActionsOffcanvas.jsx +++ b/src/components/utilities/CippActionsOffcanvas.jsx @@ -21,7 +21,12 @@ import { CRow, CSpinner, } from '@coreui/react' -import { CippCodeBlock, CippOffcanvas, ModalService } from 'src/components/utilities' +import { + CippCodeBlock, + CippOffcanvas, + CippTableOffcanvas, + ModalService, +} from 'src/components/utilities' import { CippOffcanvasPropTypes } from 'src/components/utilities/CippOffcanvas' import { CippOffcanvasTable } from 'src/components/tables' import { useLazyGenericGetRequestQuery, useLazyGenericPostRequestQuery } from 'src/store/api/app' @@ -31,6 +36,65 @@ import ReactTimeAgo from 'react-time-ago' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faGlobe } from '@fortawesome/free-solid-svg-icons' +const CippOffcanvasCard = ({ action, key }) => { + const [offcanvasVisible, setOffcanvasVisible] = useState(false) + return ( + <> + + + Report Name: {action.label} + + + + {action.value && ( + <> + {action?.link ? ( + Status: {action.value} + ) : ( + Status: {action.value} + )} + + )} + + {Array.isArray(action?.detailsObject) && ( + setOffcanvasVisible(true)}> + Details + + )} + {Array.isArray(action?.detailsObject) && ( + setOffcanvasVisible(false)} + /> + )} + + + + {action?.percent > 0 && ( + +
+ + {action?.progressText} + +
+
+ )} + + {action.timestamp && } + +
+
+
+ + ) +} +CippOffcanvasCard.propTypes = { + action: PropTypes.object, + key: PropTypes.object, +} + export default function CippActionsOffcanvas(props) { const inputRef = useRef('') const [genericGetRequest, getResults] = useLazyGenericGetRequestQuery() @@ -219,34 +283,7 @@ export default function CippActionsOffcanvas(props) { let cardContent try { cardContent = props.cards.map((action, index) => ( - <> - - - Report Name: {action.label} - - - - {action.value && Status: {action.value}} - - - - - {action?.percent > 0 && ( - -
- - {action?.progressText} - -
-
- )} - - {action.timestamp && } - -
-
-
- + )) } catch (error) { // swallow error @@ -343,6 +380,7 @@ export default function CippActionsOffcanvas(props) { diff --git a/src/components/utilities/CippCodeBlock.jsx b/src/components/utilities/CippCodeBlock.jsx index 00ccd3c54f7c..dbfc80d210e4 100644 --- a/src/components/utilities/CippCodeBlock.jsx +++ b/src/components/utilities/CippCodeBlock.jsx @@ -1,11 +1,12 @@ import React, { useState } from 'react' import PropTypes from 'prop-types' import { CopyToClipboard } from 'react-copy-to-clipboard' -import { CButton, CCallout } from '@coreui/react' +import { CButton } from '@coreui/react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faCopy, faClipboard } from '@fortawesome/free-regular-svg-icons' import SyntaxHighlighter from 'react-syntax-highlighter' import { atomOneDark } from 'react-syntax-highlighter/dist/esm/styles/hljs' +import { CippCallout } from '../layout' function CippCodeBlock({ code, @@ -16,7 +17,7 @@ function CippCodeBlock({ callout = false, calloutColour = 'info', calloutCopyValue = false, - dismissable = false, + calloutDismissible = false, }) { const [codeCopied, setCodeCopied] = useState(false) @@ -27,20 +28,26 @@ function CippCodeBlock({ return (
- onCodeCopied()}> - - {codeCopied ? : } - - + {!calloutDismissible && ( + onCodeCopied()}> + + {codeCopied ? ( + + ) : ( + + )} + + + )} {callout && ( - + {code} - + )} {!callout && ( { + return { + Key: key, + Value: data[key], + } + }) + } else { + if (Array.isArray(data) && typeof data[0] !== 'object') { + data = data.map((row) => { + return { + Value: row, + } + }) + } + } + columns = [] + Object.keys(data[0]).map((key) => { + columns.push({ + name: key, + selector: (row) => row[key], + sortable: true, + exportSelector: key, + cell: cellGenericFormatter(), + }) + }) + } + return ( <> - + <> + {data !== null && data !== undefined ? ( + + ) : ( + + )} + ) @@ -35,6 +72,7 @@ CippTableOffcanvas.propTypes = { params: PropTypes.object, columns: PropTypes.object, tableProps: PropTypes.object, + data: PropTypes.object, } export default CippTableOffcanvas