preview-validation-issue.js 1.6 KB

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