From eb27507e9a4c67e9add380244e19ddd64f04012b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20D?= <15271+edas@users.noreply.github.com> Date: Mon, 27 Jan 2020 11:48:57 +0100 Subject: [PATCH 1/2] feat: Allows to turn the editor read-only --- src/components/notes/editor-view.jsx | 37 ++++- src/components/notes/editor-view.spec.jsx | 154 +++++++++++++++++++ src/components/notes/editor.jsx | 172 +++++++++++----------- src/hooks/useCollabProvider.js | 29 ++-- src/lib/collab/provider.js | 52 ++++++- src/lib/collab/provider.spec.js | 89 +++++++++++ 6 files changed, 420 insertions(+), 113 deletions(-) create mode 100644 src/components/notes/editor-view.spec.jsx diff --git a/src/components/notes/editor-view.jsx b/src/components/notes/editor-view.jsx index 8f5e1950..bc01504e 100644 --- a/src/components/notes/editor-view.jsx +++ b/src/components/notes/editor-view.jsx @@ -1,10 +1,10 @@ -import React, { useCallback, useRef, useEffect } from 'react' +import React, { useCallback, useRef, useEffect, useMemo } from 'react' import { Editor, WithEditorActions } from '@atlaskit/editor-core' import { MainTitle } from 'cozy-ui/react/Text' import Textarea from 'cozy-ui/react/Textarea' -import { translate } from 'cozy-ui/react/I18n' +import { useI18n } from 'cozy-ui/react/I18n' import useEventListener from 'cozy-ui/react/hooks/useEventListener' import editorConfig from 'components/notes/editor_config' @@ -12,7 +12,7 @@ import HeaderMenu from 'components/header_menu' import styles from 'components/notes/editor-view.styl' function updateTextareaHeight(target) { - target.style.height = `${target.scrollHeight}px` + if (target) target.style.height = `${target.scrollHeight}px` } const nullCallback = () => {} @@ -28,8 +28,9 @@ function EditorView(props) { leftComponent, rightComponent, onContentChange, - t + readOnly } = props + const { t } = useI18n() const titleEl = useRef(null) @@ -42,6 +43,24 @@ function EditorView(props) { [onTitleChange] ) + // put the provider in readonly mode if requested and react to changes of values + useMemo(() => collabProvider && collabProvider.setReadOnly(!!readOnly), [ + readOnly, + collabProvider + ]) + + const collabEdit = useMemo( + () => + collabProvider && { + useNativePlugin: true, + provider: Promise.resolve(collabProvider), + inviteToEditHandler: () => undefined, + isInviteToEditButtonSelected: false, + userId: collabProvider.serviceClient.getSessionId() + }, + [collabProvider] + ) + useEffect(() => updateTextareaHeight(titleEl.current), []) useEventListener(titleEl.current, 'blur', onTitleBlur) @@ -56,13 +75,14 @@ function EditorView(props) { />
( @@ -70,9 +90,10 @@ function EditorView(props) {