Skip to content
Snippets Groups Projects
Commit 99262fc6 authored by chris's avatar chris
Browse files

disable tools in readonly

parent 668d9976
No related branches found
No related tags found
1 merge request!231Connect funcionality
...@@ -14,6 +14,10 @@ const Button = ({ view = {}, item }) => { ...@@ -14,6 +14,10 @@ const Button = ({ view = {}, item }) => {
if (onlyOnMain) view = main; if (onlyOnMain) view = main;
const isEditable = main.props.editable(editable => {
return editable;
});
const { dispatch, state } = view; const { dispatch, state } = view;
const handleMouseDown = (e, editorState, editorDispatch) => { const handleMouseDown = (e, editorState, editorDispatch) => {
...@@ -25,7 +29,8 @@ const Button = ({ view = {}, item }) => { ...@@ -25,7 +29,8 @@ const Button = ({ view = {}, item }) => {
active(state, activeViewId) && select(state, activeViewId) active(state, activeViewId) && select(state, activeViewId)
); );
const isDisabled = !select(state, activeViewId, activeView); let isDisabled = !select(state, activeViewId, activeView);
if (!isEditable) isDisabled = true;
const MenuButtonComponent = useMemo( const MenuButtonComponent = useMemo(
() => ( () => (
......
...@@ -12,12 +12,20 @@ const Wrapper = styled.div` ...@@ -12,12 +12,20 @@ const Wrapper = styled.div`
`; `;
const ImageUpload = ({ item, fileUpload, view }) => { const ImageUpload = ({ item, fileUpload, view }) => {
const { activeViewId } = useContext(WaxContext); const {
activeViewId,
view: { main },
} = useContext(WaxContext);
const inputRef = useRef(null); const inputRef = useRef(null);
const handleMouseDown = () => inputRef.current.click(); const handleMouseDown = () => inputRef.current.click();
const isDisabled = !item.select(view.state, activeViewId); let isDisabled = !item.select(view.state, activeViewId);
const isEditable = main.props.editable(editable => {
return editable;
});
if (!isEditable) isDisabled = true;
const ImageUploadComponent = useMemo( const ImageUploadComponent = useMemo(
() => ( () => (
......
...@@ -40,7 +40,12 @@ const TitleButton = ({ view = {}, item }) => { ...@@ -40,7 +40,12 @@ const TitleButton = ({ view = {}, item }) => {
}, [JSON.stringify(titleNode[0])]); }, [JSON.stringify(titleNode[0])]);
const isActive = !!active(state, activeViewId); const isActive = !!active(state, activeViewId);
const isDisabled = !select(state, activeViewId, activeView); let isDisabled = !select(state, activeViewId, activeView);
const isEditable = main.props.editable(editable => {
return editable;
});
if (!isEditable) isDisabled = true;
const TitleButtonComponent = useMemo( const TitleButtonComponent = useMemo(
() => ( () => (
......
import React, { useRef, useMemo, useState, useLayoutEffect } from 'react'; import React, {
useContext,
useRef,
useMemo,
useState,
useLayoutEffect,
} from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { grid } from '@pubsweet/ui-toolkit'; import { grid } from '@pubsweet/ui-toolkit';
import { WaxContext } from 'wax-prosemirror-core';
import MenuButton from '../../ui/buttons/MenuButton'; import MenuButton from '../../ui/buttons/MenuButton';
import FindAndReplaceComponent from './FindAndReplaceComponent'; import FindAndReplaceComponent from './FindAndReplaceComponent';
...@@ -13,13 +20,17 @@ const Wrapper = styled.div` ...@@ -13,13 +20,17 @@ const Wrapper = styled.div`
`; `;
const DropWrapper = styled.div` const DropWrapper = styled.div`
background: white;
margin-top: ${grid(1)}; margin-top: ${grid(1)};
position: absolute; position: absolute;
background: white;
top: 32px; top: 32px;
`; `;
const FindAndReplaceTool = ({ view = {}, item }) => { const FindAndReplaceTool = ({ view = {}, item }) => {
const {
view: { main },
} = useContext(WaxContext);
const { icon, title } = item; const { icon, title } = item;
const dropElement = useRef(); const dropElement = useRef();
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
...@@ -27,6 +38,12 @@ const FindAndReplaceTool = ({ view = {}, item }) => { ...@@ -27,6 +38,12 @@ const FindAndReplaceTool = ({ view = {}, item }) => {
let styles = { right: '-205px' }; let styles = { right: '-205px' };
const [style, setStyle] = useState(styles); const [style, setStyle] = useState(styles);
let isDisabled = false;
const isEditable = main.props.editable(editable => {
return editable;
});
if (!isEditable) isDisabled = true;
useLayoutEffect(() => { useLayoutEffect(() => {
setStyle(styles); setStyle(styles);
if (!dropElement.current) return; if (!dropElement.current) return;
...@@ -43,7 +60,7 @@ const FindAndReplaceTool = ({ view = {}, item }) => { ...@@ -43,7 +60,7 @@ const FindAndReplaceTool = ({ view = {}, item }) => {
<Wrapper> <Wrapper>
<MenuButton <MenuButton
active={isOpen} active={isOpen}
disabled={false} disabled={isDisabled}
iconName={icon} iconName={icon}
onMouseDown={() => { onMouseDown={() => {
setIsOpen(!isOpen); setIsOpen(!isOpen);
......
import React, { useMemo, useState, useRef } from 'react'; import React, { useContext, useMemo, useState, useRef } from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { grid } from '@pubsweet/ui-toolkit'; import { grid } from '@pubsweet/ui-toolkit';
import { WaxContext } from 'wax-prosemirror-core';
import MenuButton from '../../ui/buttons/MenuButton'; import MenuButton from '../../ui/buttons/MenuButton';
import SpecialCharactersComponent from './SpecialCharactersComponent'; import SpecialCharactersComponent from './SpecialCharactersComponent';
...@@ -14,25 +15,35 @@ const Wrapper = styled.div` ...@@ -14,25 +15,35 @@ const Wrapper = styled.div`
`; `;
const DropWrapper = styled.div` const DropWrapper = styled.div`
background: white;
margin-top: ${grid(1)}; margin-top: ${grid(1)};
position: absolute; position: absolute;
background: white;
top: 32px; top: 32px;
`; `;
const SpecialCharactersTool = ({ view = {}, item }) => { const SpecialCharactersTool = ({ view = {}, item }) => {
const {
view: { main },
} = useContext(WaxContext);
const { icon, title } = item; const { icon, title } = item;
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
const ref = useRef(); const ref = useRef();
useOnClickOutside(ref, () => setIsOpen(false)); useOnClickOutside(ref, () => setIsOpen(false));
let isDisabled = false;
const isEditable = main.props.editable(editable => {
return editable;
});
if (!isEditable) isDisabled = true;
const MemorizedDropdown = useMemo( const MemorizedDropdown = useMemo(
() => ( () => (
<Wrapper ref={ref}> <Wrapper ref={ref}>
<MenuButton <MenuButton
active={isOpen} active={isOpen}
disabled={false} disabled={isDisabled}
iconName={icon} iconName={icon}
onMouseDown={() => { onMouseDown={() => {
setIsOpen(!isOpen); setIsOpen(!isOpen);
......
...@@ -16,9 +16,9 @@ const Wrapper = styled.div` ...@@ -16,9 +16,9 @@ const Wrapper = styled.div`
`; `;
const DropWrapper = styled.div` const DropWrapper = styled.div`
background: white;
margin-top: ${grid(1)}; margin-top: ${grid(1)};
position: absolute; position: absolute;
background: white;
`; `;
const CreateTable = ({ view = {}, item }) => { const CreateTable = ({ view = {}, item }) => {
...@@ -46,7 +46,12 @@ const CreateTable = ({ view = {}, item }) => { ...@@ -46,7 +46,12 @@ const CreateTable = ({ view = {}, item }) => {
setIsOpen(!isOpen); setIsOpen(!isOpen);
}; };
const isDisabled = !select(state, activeViewId); let isDisabled = !select(state, activeViewId);
const isEditable = main.props.editable(editable => {
return editable;
});
if (!isEditable) isDisabled = true;
useOnClickOutside(ref, () => setIsOpen(false)); useOnClickOutside(ref, () => setIsOpen(false));
......
...@@ -18,12 +18,17 @@ export default ({ node, view }) => { ...@@ -18,12 +18,17 @@ export default ({ node, view }) => {
const context = useContext(WaxContext); const context = useContext(WaxContext);
const noteId = node.attrs.id; const noteId = node.attrs.id;
let noteView; let noteView;
let updateMainView = true;
// eslint-disable-next-line react/destructuring-assignment
const isEditable = context.view.main.props.editable(editable => {
return editable;
});
useEffect(() => { useEffect(() => {
noteView = new EditorView( noteView = new EditorView(
{ mount: editorRef.current }, { mount: editorRef.current },
{ {
editable: () => isEditable,
state: EditorState.create({ state: EditorState.create({
doc: node, doc: node,
plugins: [keymap(createKeyBindings()), ...context.app.getPlugins()], plugins: [keymap(createKeyBindings()), ...context.app.getPlugins()],
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment