Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 49x 49x 49x 49x 46x 49x 1x 48x 2x 46x 24x 22x 2x 20x 49x | /*
* Copyright 2021 Harness Inc. All rights reserved.
* Use of this source code is governed by the PolyForm Shield 1.0.0 license
* that can be found in the licenses directory at the root of this repository, also available at
* https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
*/
import React, { useMemo } from 'react'
import cx from 'classnames'
import { Container, Icon, StackTraceList, Text, PageError, NoDataCard } from '@wings-software/uicore'
import { isEmpty } from 'lodash-es'
import { Color } from '@harness/design-system'
import { useStrings } from 'framework/strings'
import { getErrorMessage } from '@cv/utils/CommonUtils'
import { transformSampleData } from './utils'
import type { RecordsProps } from './types'
import css from './Records.module.scss'
export function Records(props: RecordsProps): JSX.Element {
const {
data,
loading,
error,
fetchRecords,
isQueryExecuted,
query,
queryNotExecutedMessage,
recordsClassName,
fetchEntityName
} = props
const { getString } = useStrings()
let content: JSX.Element = <></>
const { records } = useMemo(() => {
return transformSampleData(data)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [data])
if (error) {
content = (
<PageError
message={getErrorMessage(error)}
disabled={isEmpty(query)}
onClick={() => {
fetchRecords()
}}
/>
)
} else if (loading) {
content = <Icon name="steps-spinner" size={32} color={Color.GREY_600} className={css.centerElement} />
} else if (!isQueryExecuted) {
content = (
<Text
icon="timeline-line-chart"
className={cx(css.noQueryChart, css.centerElement)}
iconProps={{ size: 50, intent: 'success' }}
>
{queryNotExecutedMessage || getString('cv.monitoringSources.gcoLogs.submitQueryToSeeRecords')}
</Text>
)
} else if (!records?.length) {
content = (
<Container className={css.noRecords}>
<NoDataCard
icon="warning-sign"
message={getString('cv.monitoringSources.gcoLogs.noRecordsForQuery')}
onClick={() => {
fetchRecords()
}}
buttonText={getString('retry')}
buttonDisabled={isEmpty(query)}
/>
</Container>
)
} else {
content = <StackTraceList stackTraceList={records} className={css.recordContainer} />
}
return (
<Container className={css.queryAndRecords}>
<Text className={css.labelText}>{fetchEntityName ?? getString('cv.monitoringSources.gcoLogs.records')}</Text>
<Container className={cx(css.chartContainer, recordsClassName)}>{content}</Container>
</Container>
)
}
|