synctex-toasts.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { GlobalToastGeneratorEntry } from '@/features/ide-react/components/global-toasts'
  2. import { useTranslation } from 'react-i18next'
  3. import OLButton from '@/shared/components/ol/ol-button'
  4. export const SynctexFileErrorToast = () => {
  5. const { t } = useTranslation()
  6. return (
  7. <div className="synctex-error-toast-content">
  8. <span>{t('synctex_failed')}</span>
  9. <OLButton
  10. href="/learn/how-to/SyncTeX_Errors"
  11. target="_blank"
  12. variant="secondary"
  13. size="sm"
  14. >
  15. {t('more_info')}
  16. </OLButton>
  17. </div>
  18. )
  19. }
  20. export const SynctexRequestErrorToast = () => {
  21. const { t } = useTranslation()
  22. return <span>{t('synctex_error_recompile_and_try_again')}</span>
  23. }
  24. const generators: GlobalToastGeneratorEntry[] = [
  25. {
  26. key: 'synctex:file-error',
  27. generator: () => ({
  28. content: <SynctexFileErrorToast />,
  29. type: 'warning',
  30. autoHide: true,
  31. delay: 4000,
  32. isDismissible: true,
  33. }),
  34. },
  35. {
  36. key: 'synctex:request-error',
  37. generator: () => ({
  38. content: <SynctexRequestErrorToast />,
  39. type: 'warning',
  40. autoHide: true,
  41. delay: 4000,
  42. isDismissible: true,
  43. }),
  44. },
  45. ]
  46. export default generators
  47. export const showFileErrorToast = () => {
  48. window.dispatchEvent(
  49. new CustomEvent('ide:show-toast', {
  50. detail: {
  51. key: 'synctex:file-error',
  52. },
  53. })
  54. )
  55. }
  56. export const showSynctexRequestErrorToast = () => {
  57. window.dispatchEvent(
  58. new CustomEvent('ide:show-toast', {
  59. detail: {
  60. key: 'synctex:request-error',
  61. },
  62. })
  63. )
  64. }