Skip to content

Commit 3a47892

Browse files
Merge pull request #2089 from KelvinTegelaar/dev
Dev to release
2 parents be0ef04 + 5b29332 commit 3a47892

28 files changed

+40522
-26516
lines changed

public/version_latest.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5.0.1
1+
5.1.0

src/_nav.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ const _nav = [
173173
},
174174
{
175175
component: CNavItem,
176-
name: 'Geo IP Lookup',
176+
name: 'IP Database',
177177
to: '/tenant/tools/geoiplookup',
178178
},
179179
{

src/components/tables/CippTable.jsx

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ import PropTypes from 'prop-types'
2525
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
2626
import {
2727
faCheck,
28+
faClipboard,
2829
faColumns,
30+
faCopy,
2931
faFileCsv,
3032
faFilePdf,
3133
faSearch,
@@ -38,6 +40,7 @@ import { useLazyGenericGetRequestQuery, useLazyGenericPostRequestQuery } from 's
3840
import { ConfirmModal } from '../utilities/SharedModal'
3941
import { debounce } from 'lodash-es'
4042
import { useSearchParams } from 'react-router-dom'
43+
import CopyToClipboard from 'react-copy-to-clipboard'
4144

4245
const FilterComponent = ({ filterText, onFilter, onClear, filterlist, onFilterPreset }) => (
4346
<>
@@ -570,6 +573,7 @@ export default function CippTable({
570573
return output
571574
}
572575
filtered = filtered.map((item) => flatten(item))
576+
const dataFlat = data.map((item) => flatten(item))
573577

574578
if (!disablePDFExport) {
575579
if (dynamicColumns === true) {
@@ -675,7 +679,7 @@ export default function CippTable({
675679
<CDropdownItem>
676680
<ExportCsvButton
677681
key="export-csv-action-all"
678-
csvData={data}
682+
csvData={dataFlat}
679683
reportName={reportName}
680684
nameText="Export All Columns"
681685
/>
@@ -748,6 +752,12 @@ export default function CippTable({
748752
filteredItems,
749753
])
750754
const tablePageSize = useSelector((state) => state.app.tablePageSize)
755+
const [codeCopied, setCodeCopied] = useState(false)
756+
757+
const onCodeCopied = () => {
758+
setCodeCopied(true)
759+
setTimeout(() => setCodeCopied(false), 2000)
760+
}
751761

752762
return (
753763
<div className="ms-n3 me-n3 cipp-tablewrapper">
@@ -777,6 +787,20 @@ export default function CippTable({
777787
{message.data?.Metadata?.Heading}
778788
</CAccordionHeader>
779789
<CAccordionBody>
790+
<CopyToClipboard text={results} onCopy={() => onCodeCopied()}>
791+
<CButton
792+
color={codeCopied ? 'success' : 'info'}
793+
className="cipp-code-copy-button"
794+
size="sm"
795+
variant="ghost"
796+
>
797+
{codeCopied ? (
798+
<FontAwesomeIcon icon={faClipboard} />
799+
) : (
800+
<FontAwesomeIcon icon={faCopy} />
801+
)}
802+
</CButton>
803+
</CopyToClipboard>
780804
{results.map((line, i) => {
781805
return <li key={i}>{line}</li>
782806
})}
@@ -790,7 +814,27 @@ export default function CippTable({
790814
massResults.map((message, idx) => {
791815
const results = message.data?.Results
792816
const displayResults = Array.isArray(results) ? results.join(', ') : results
793-
return <li key={`message-${idx}`}>{displayResults}</li>
817+
return (
818+
<>
819+
<li key={`message-${idx}`}>
820+
{displayResults}
821+
<CopyToClipboard text={displayResults} onCopy={() => onCodeCopied()}>
822+
<CButton
823+
color={codeCopied ? 'success' : 'info'}
824+
className="cipp-code-copy-button"
825+
size="sm"
826+
variant="ghost"
827+
>
828+
{codeCopied ? (
829+
<FontAwesomeIcon icon={faClipboard} />
830+
) : (
831+
<FontAwesomeIcon icon={faCopy} />
832+
)}
833+
</CButton>
834+
</CopyToClipboard>
835+
</li>
836+
</>
837+
)
794838
})}
795839
{loopRunning && (
796840
<li>

src/components/utilities/CippActionsOffcanvas.jsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
COffcanvasTitle,
1616
CSpinner,
1717
} from '@coreui/react'
18-
import { CippOffcanvas, ModalService } from 'src/components/utilities'
18+
import { CippCodeBlock, CippOffcanvas, ModalService } from 'src/components/utilities'
1919
import { CippOffcanvasPropTypes } from 'src/components/utilities/CippOffcanvas'
2020
import { CippOffcanvasTable } from 'src/components/tables'
2121
import { useLazyGenericGetRequestQuery, useLazyGenericPostRequestQuery } from 'src/store/api/app'
@@ -304,14 +304,23 @@ export default function CippActionsOffcanvas(props) {
304304
<CSpinner>Loading</CSpinner>
305305
</CCallout>
306306
)}
307-
{postResults.isSuccess && <CCallout color="info">{postResults.data?.Results}</CCallout>}
307+
{postResults.isSuccess && (
308+
<CippCodeBlock
309+
code={postResults.data?.Results}
310+
callout={true}
311+
calloutCopyValue={getResults.data?.Results}
312+
/>
313+
)}
308314
{postResults.isError && (
309315
<CCallout color="danger">Could not connect to API: {postResults.error.message}</CCallout>
310316
)}
311317
{getResults.isSuccess && (
312-
<CCallout color={getResults.data?.colour ? getResults.data?.colour : 'info'}>
313-
{getResults.data?.Results}
314-
</CCallout>
318+
<CippCodeBlock
319+
code={getResults.data?.Results}
320+
callout={true}
321+
calloutColour={getResults.data?.colour ? getResults.data?.colour : 'info'}
322+
calloutCopyValue={getResults.data?.Results}
323+
/>
315324
)}
316325
{getResults.isError && (
317326
<CCallout color="danger">Could not connect to API: {getResults.error.message}</CCallout>

src/components/utilities/CippCodeBlock.jsx

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useState } from 'react'
22
import PropTypes from 'prop-types'
33
import { CopyToClipboard } from 'react-copy-to-clipboard'
4-
import { CButton } from '@coreui/react'
4+
import { CButton, CCallout } from '@coreui/react'
55
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
66
import { faCopy, faClipboard } from '@fortawesome/free-regular-svg-icons'
77
import SyntaxHighlighter from 'react-syntax-highlighter'
@@ -13,6 +13,9 @@ function CippCodeBlock({
1313
showLineNumbers = true,
1414
startingLineNumber,
1515
wrapLongLines = true,
16+
callout = false,
17+
calloutColour = 'info',
18+
calloutCopyValue = false,
1619
}) {
1720
const [codeCopied, setCodeCopied] = useState(false)
1821

@@ -23,7 +26,7 @@ function CippCodeBlock({
2326

2427
return (
2528
<div className="cipp-code">
26-
<CopyToClipboard text={code} onCopy={() => onCodeCopied()}>
29+
<CopyToClipboard text={calloutCopyValue || code} onCopy={() => onCodeCopied()}>
2730
<CButton
2831
color={codeCopied ? 'success' : 'info'}
2932
className="cipp-code-copy-button"
@@ -33,18 +36,20 @@ function CippCodeBlock({
3336
{codeCopied ? <FontAwesomeIcon icon={faClipboard} /> : <FontAwesomeIcon icon={faCopy} />}
3437
</CButton>
3538
</CopyToClipboard>
36-
37-
<SyntaxHighlighter
38-
language={language}
39-
showLineNumbers={showLineNumbers}
40-
startingLineNumber={startingLineNumber}
41-
wrapLongLines={wrapLongLines}
42-
wrapLines={wrapLongLines}
43-
style={atomOneDark}
44-
className="cipp-code-block"
45-
>
46-
{code}
47-
</SyntaxHighlighter>
39+
{callout && <CCallout color={calloutColour}>{code}</CCallout>}
40+
{!callout && (
41+
<SyntaxHighlighter
42+
language={language}
43+
showLineNumbers={showLineNumbers}
44+
startingLineNumber={startingLineNumber}
45+
wrapLongLines={wrapLongLines}
46+
wrapLines={wrapLongLines}
47+
style={atomOneDark}
48+
className="cipp-code-block"
49+
>
50+
{code}
51+
</SyntaxHighlighter>
52+
)}
4853
</div>
4954
)
5055
}

src/components/utilities/CippListOffcanvas.jsx

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
import React from 'react'
22
import PropTypes from 'prop-types'
3-
import { CListGroup, CListGroupItem } from '@coreui/react'
3+
import {
4+
CCard,
5+
CCardBody,
6+
CCardHeader,
7+
CCardTitle,
8+
CListGroup,
9+
CListGroupItem,
10+
} from '@coreui/react'
411
import { CippOffcanvas } from '.'
12+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
13+
import { faGlobe } from '@fortawesome/free-solid-svg-icons'
14+
import { CippOffcanvasTable } from '../tables'
515

616
export default function CippListOffcanvas(props) {
717
return (
@@ -13,7 +23,7 @@ export default function CippListOffcanvas(props) {
1323
hideFunction={props.hideFunction}
1424
>
1525
{props.groups.map((group, key) => (
16-
<OffcanvasListSection title={group.title} items={group.items} key={key} />
26+
<OffcanvasListSection items={group.items} key={key} />
1727
))}
1828
</CippOffcanvas>
1929
)
@@ -29,18 +39,22 @@ CippListOffcanvas.propTypes = {
2939
}
3040

3141
export function OffcanvasListSection({ title, items }) {
42+
console.log(items)
43+
const mappedItems = items.map((item, key) => ({ value: item.content, label: item.heading }))
3244
return (
3345
<>
3446
<h4 className="mt-4">{title}</h4>
3547
{items.length > 0 && (
36-
<CListGroup className="my-3">
37-
{items.map((item, key) => (
38-
<CListGroupItem className="d-flex justify-content-between align-items-center" key={key}>
39-
{item.heading && <h6 className="w-50 mb-0">{item.heading}</h6>}
40-
{item.content}
41-
</CListGroupItem>
42-
))}
43-
</CListGroup>
48+
<CCard className="content-card">
49+
<CCardHeader className="d-flex justify-content-between align-items-center">
50+
<CCardTitle>
51+
<FontAwesomeIcon icon={faGlobe} className="mx-2" /> Extended Information
52+
</CCardTitle>
53+
</CCardHeader>
54+
<CCardBody>
55+
<CippOffcanvasTable rows={mappedItems} />
56+
</CCardBody>
57+
</CCard>
4458
)}
4559
</>
4660
)

0 commit comments

Comments
 (0)