pdf-hybrid-logs-button.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { memo, useCallback } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { Button, Label, OverlayTrigger, Tooltip } from 'react-bootstrap'
  4. import { sendMBOnce } from '../../../infrastructure/event-tracking'
  5. import Icon from '../../../shared/components/icon'
  6. import { useCompileContext } from '../../../shared/context/compile-context'
  7. function PdfHybridLogsButton() {
  8. const { error, logEntries, setShowLogs, showLogs } = useCompileContext()
  9. const { t } = useTranslation()
  10. const handleClick = useCallback(() => {
  11. setShowLogs(value => {
  12. if (!value) {
  13. sendMBOnce('ide-open-logs-once')
  14. }
  15. return !value
  16. })
  17. }, [setShowLogs])
  18. const errorCount = Number(logEntries?.errors?.length)
  19. const warningCount = Number(logEntries?.warnings?.length)
  20. const totalCount = errorCount + warningCount
  21. return (
  22. <OverlayTrigger
  23. placement="bottom"
  24. overlay={
  25. <Tooltip id="tooltip-logs-toggle">{t('logs_and_output_files')}</Tooltip>
  26. }
  27. >
  28. <Button
  29. bsStyle="link"
  30. disabled={Boolean(error)}
  31. active={showLogs}
  32. className="toolbar-item log-btn"
  33. onClick={handleClick}
  34. style={{ position: 'relative' }}
  35. aria-label={showLogs ? t('view_pdf') : t('view_logs')}
  36. >
  37. <Icon type="file-text-o" modifier="fw" />
  38. {!showLogs && totalCount > 0 && (
  39. <Label bsStyle={errorCount === 0 ? 'warning' : 'danger'}>
  40. {totalCount}
  41. </Label>
  42. )}
  43. </Button>
  44. </OverlayTrigger>
  45. )
  46. }
  47. export default memo(PdfHybridLogsButton)