preview-validation-issue.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import { useTranslation } from 'react-i18next'
  4. import PreviewLogsPaneEntry from './preview-logs-pane-entry'
  5. function PreviewValidationIssue({ name, details }) {
  6. const { t } = useTranslation()
  7. let validationTitle
  8. let validationContent
  9. if (name === 'sizeCheck') {
  10. validationTitle = t('project_too_large')
  11. validationContent = (
  12. <>
  13. <div>{t('project_too_large_please_reduce')}</div>
  14. <ul className="list-no-margin-bottom">
  15. {details.resources.map((resource, index) => (
  16. <li key={index}>
  17. {resource.path} &mdash; {resource.kbSize}
  18. kb
  19. </li>
  20. ))}
  21. </ul>
  22. </>
  23. )
  24. } else if (name === 'conflictedPaths') {
  25. validationTitle = t('conflicting_paths_found')
  26. validationContent = (
  27. <>
  28. <div>{t('following_paths_conflict')}</div>
  29. <ul className="list-no-margin-bottom">
  30. {details.map((detail, index) => (
  31. <li key={index}>/{detail.path}</li>
  32. ))}
  33. </ul>
  34. </>
  35. )
  36. } else if (name === 'mainFile') {
  37. validationTitle = t('main_file_not_found')
  38. validationContent = <>{t('please_set_main_file')}</>
  39. }
  40. return validationTitle ? (
  41. <PreviewLogsPaneEntry
  42. headerTitle={validationTitle}
  43. formattedContent={validationContent}
  44. entryAriaLabel={t('validation_issue_entry_description')}
  45. level="error"
  46. />
  47. ) : null
  48. }
  49. PreviewValidationIssue.propTypes = {
  50. name: PropTypes.string.isRequired,
  51. details: PropTypes.oneOfType([
  52. PropTypes.object,
  53. PropTypes.array,
  54. PropTypes.bool,
  55. ]),
  56. }
  57. export default PreviewValidationIssue