2021-10-12 04:47:46 -04:00
|
|
|
import { memo, useCallback } from 'react'
|
|
|
|
import { useTranslation } from 'react-i18next'
|
|
|
|
import { Button, Label, OverlayTrigger, Tooltip } from 'react-bootstrap'
|
|
|
|
import { sendMBOnce } from '../../../infrastructure/event-tracking'
|
|
|
|
import Icon from '../../../shared/components/icon'
|
2021-10-15 05:39:56 -04:00
|
|
|
import { useCompileContext } from '../../../shared/context/compile-context'
|
2021-10-12 04:47:46 -04:00
|
|
|
|
|
|
|
function PdfHybridLogsButton() {
|
2021-10-15 05:39:56 -04:00
|
|
|
const { error, logEntries, setShowLogs, showLogs } = useCompileContext()
|
2021-10-12 04:47:46 -04:00
|
|
|
|
|
|
|
const { t } = useTranslation()
|
|
|
|
|
|
|
|
const handleClick = useCallback(() => {
|
|
|
|
setShowLogs(value => {
|
|
|
|
if (!value) {
|
|
|
|
sendMBOnce('ide-open-logs-once')
|
|
|
|
}
|
|
|
|
|
|
|
|
return !value
|
|
|
|
})
|
|
|
|
}, [setShowLogs])
|
|
|
|
|
|
|
|
const errorCount = Number(logEntries?.errors?.length)
|
|
|
|
const warningCount = Number(logEntries?.warnings?.length)
|
|
|
|
const totalCount = errorCount + warningCount
|
|
|
|
|
|
|
|
return (
|
|
|
|
<OverlayTrigger
|
|
|
|
placement="bottom"
|
|
|
|
overlay={
|
|
|
|
<Tooltip id="tooltip-logs-toggle">{t('logs_and_output_files')}</Tooltip>
|
|
|
|
}
|
|
|
|
>
|
|
|
|
<Button
|
|
|
|
bsStyle="link"
|
|
|
|
disabled={Boolean(error)}
|
|
|
|
active={showLogs}
|
|
|
|
className="toolbar-item log-btn"
|
|
|
|
onClick={handleClick}
|
|
|
|
style={{ position: 'relative' }}
|
|
|
|
aria-label={showLogs ? t('view_pdf') : t('view_logs')}
|
|
|
|
>
|
2022-01-19 06:56:57 -05:00
|
|
|
<Icon type="file-text-o" fw />
|
2021-10-12 04:47:46 -04:00
|
|
|
|
|
|
|
{!showLogs && totalCount > 0 && (
|
|
|
|
<Label bsStyle={errorCount === 0 ? 'warning' : 'danger'}>
|
|
|
|
{totalCount}
|
|
|
|
</Label>
|
|
|
|
)}
|
|
|
|
</Button>
|
|
|
|
</OverlayTrigger>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
export default memo(PdfHybridLogsButton)
|