UISettings.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import { useTranslation } from 'react-i18next';
  2. import { UncontrolledTooltip } from 'reactstrap';
  3. import SidebarDockIcon from '../Icons/SidebarDockIcon';
  4. import SidebarDrawerIcon from '../Icons/SidebarDrawerIcon';
  5. import styles from './UISettings.module.scss';
  6. const IconWithTooltip = ({
  7. id, label, children, additionalClasses,
  8. }: {
  9. id: string,
  10. label: string,
  11. children: JSX.Element,
  12. additionalClasses: string
  13. }) => (
  14. <>
  15. <div id={id} className={`${additionalClasses != null ? additionalClasses : ''}`}>{children}</div>
  16. <UncontrolledTooltip placement="bottom" fade={false} target={id}>{label}</UncontrolledTooltip>
  17. </>
  18. );
  19. const renderSidebarModeSwitch = () => {
  20. return (
  21. <>
  22. <div className="d-flex align-items-start">
  23. <div className="d-flex align-items-center">
  24. <IconWithTooltip
  25. id="iwt-sidebar-drawer"
  26. label="Drawer"
  27. additionalClasses={styles['grw-sidebar-mode-icon']}
  28. >
  29. <SidebarDrawerIcon />
  30. </IconWithTooltip>
  31. <div className="form-check form-switch ms-2">
  32. <input
  33. id="swSidebarMode"
  34. className="form-check-input"
  35. type="checkbox"
  36. />
  37. <label className="form-label form-check-label" htmlFor="swSidebarMode"></label>
  38. </div>
  39. <IconWithTooltip id="iwt-sidebar-dock" label="Dock" additionalClasses={styles['grw-sidebar-mode-icon']}>
  40. <SidebarDockIcon />
  41. </IconWithTooltip>
  42. </div>
  43. <div className="ms-2">
  44. <label className="form-label form-check-label" htmlFor="swSidebarMode">
  45. サイドバーのモードを設定する
  46. </label>
  47. <p className="form-text text-muted small">サイドバーを常時開いた状態にするかどうかを設定できます。</p>
  48. </div>
  49. </div>
  50. </>
  51. );
  52. };
  53. const renderEditSidebarModeSwitch = () => {
  54. return (
  55. <>
  56. <div className="d-flex align-items-start">
  57. <div className="d-flex align-items-center">
  58. <IconWithTooltip
  59. id="iwt-sidebar-editor-drawer"
  60. label="Drawer"
  61. additionalClasses={styles['grw-sidebar-mode-icon']}
  62. >
  63. <SidebarDrawerIcon />
  64. </IconWithTooltip>
  65. <div className="form-check form-switch ms-2">
  66. <input
  67. id="swSidebarModeOnEditor"
  68. className="form-check-input"
  69. type="checkbox"
  70. />
  71. <label className="form-label form-check-label" htmlFor="swSidebarModeOnEditor"></label>
  72. </div>
  73. <IconWithTooltip id="iwt-sidebar-editor-dock" label="Dock" additionalClasses={styles['grw-sidebar-mode-icon']}>
  74. <SidebarDockIcon />
  75. </IconWithTooltip>
  76. </div>
  77. <div className="ms-2">
  78. <label className="form-label form-check-label" htmlFor="swSidebarModeOnEditor">
  79. 編集時のサイドバーのモードを設定する
  80. </label>
  81. <p className="form-text text-muted small">コンテンツ編集時に、サイドバーを常時開いた状態にするかどうかを設定できます。</p>
  82. </div>
  83. </div>
  84. </>
  85. );
  86. };
  87. export const UISettings = (): JSX.Element => {
  88. const { t } = useTranslation();
  89. return (
  90. <>
  91. <h2 className="border-bottom mb-4">UI設定</h2>
  92. <div className="row justify-content-center">
  93. <div className="col-md-6">
  94. { renderSidebarModeSwitch() }
  95. <div className="mt-5">
  96. { renderEditSidebarModeSwitch() }
  97. </div>
  98. <div>
  99. </div>
  100. </div>
  101. </div>
  102. <div className="row my-3">
  103. <div className="offset-4 col-5">
  104. <button data-testid="" type="button" className="btn btn-primary" onClick={() => {}}>
  105. {t('Update')}
  106. </button>
  107. </div>
  108. </div>
  109. </>
  110. );
  111. };