editor-switch.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { memo, useCallback, useMemo } from 'react'
  2. import useScopeValue from '../../../shared/hooks/use-scope-value'
  3. import BetaBadge from '../../../shared/components/beta-badge'
  4. function EditorSwitch() {
  5. const [newSourceEditor, setNewSourceEditor] = useScopeValue(
  6. 'editor.newSourceEditor'
  7. )
  8. const [richText, setRichText] = useScopeValue('editor.showRichText')
  9. const handleChange = useCallback(
  10. event => {
  11. const choice = event.target.value
  12. switch (choice) {
  13. case 'ace':
  14. setRichText(false)
  15. setNewSourceEditor(false)
  16. break
  17. case 'cm6':
  18. setRichText(false)
  19. setNewSourceEditor(true)
  20. break
  21. case 'rich-text':
  22. setRichText(true)
  23. break
  24. }
  25. },
  26. [setRichText, setNewSourceEditor]
  27. )
  28. const tooltip = useMemo(() => {
  29. return {
  30. id: 'editor-switch-tooltip',
  31. placement: 'bottom',
  32. className: 'tooltip-wide',
  33. text: (
  34. <>
  35. We are upgrading the source editor. Please test it by selecting
  36. "Source (Beta)".
  37. <br />
  38. <br />
  39. Click to learn more and give feedback
  40. </>
  41. ),
  42. }
  43. }, [])
  44. return (
  45. <div className="editor-toggle-switch">
  46. <BetaBadge tooltip={tooltip} url="https://forms.gle/GmSs6odZRKRp3VX98" />
  47. <fieldset className="toggle-switch">
  48. <legend className="sr-only">Editor mode.</legend>
  49. <input
  50. type="radio"
  51. name="editor"
  52. value="cm6"
  53. id="editor-switch-cm6"
  54. className="toggle-switch-input"
  55. checked={!richText && !!newSourceEditor}
  56. onChange={handleChange}
  57. />
  58. <label htmlFor="editor-switch-cm6" className="toggle-switch-label">
  59. <span>Source (Beta)</span>
  60. </label>
  61. <input
  62. type="radio"
  63. name="editor"
  64. value="ace"
  65. id="editor-switch-ace"
  66. className="toggle-switch-input"
  67. checked={!richText && !newSourceEditor}
  68. onChange={handleChange}
  69. />
  70. <label htmlFor="editor-switch-ace" className="toggle-switch-label">
  71. <span>Source</span>
  72. </label>
  73. <input
  74. type="radio"
  75. name="editor"
  76. value="rich-text"
  77. id="editor-switch-rich-text"
  78. className="toggle-switch-input"
  79. checked={!!richText}
  80. onChange={handleChange}
  81. />
  82. <label
  83. htmlFor="editor-switch-rich-text"
  84. className="toggle-switch-label"
  85. >
  86. <span>Rich Text</span>
  87. </label>
  88. </fieldset>
  89. </div>
  90. )
  91. }
  92. export default memo(EditorSwitch)