diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json
index 637bc0e0..5d9b89ff 100644
--- a/public/locales/en/translation.json
+++ b/public/locales/en/translation.json
@@ -271,5 +271,6 @@
"topics": "topics",
"user already exist": "user already exists",
"view": "view",
- "zine": "zine"
+ "zine": "zine",
+ "Required": "Required"
}
diff --git a/public/locales/ru/translation.json b/public/locales/ru/translation.json
index 8ea0c002..0d00d8eb 100644
--- a/public/locales/ru/translation.json
+++ b/public/locales/ru/translation.json
@@ -292,5 +292,6 @@
"topics": "темы",
"user already exist": "пользователь уже существует",
"view": "просмотр",
- "zine": "журнал"
+ "zine": "журнал",
+ "Required": "Поле обязательно для заполнения"
}
diff --git a/src/components/App.tsx b/src/components/App.tsx
index 11c1356d..06aa4241 100644
--- a/src/components/App.tsx
+++ b/src/components/App.tsx
@@ -96,13 +96,13 @@ export const App = (props: PageProps) => {
return (
-
-
-
+
+
+
-
-
-
+
+
+
)
}
diff --git a/src/components/Editor/Editor.tsx b/src/components/Editor/Editor.tsx
index f4faeb6f..18f59bb1 100644
--- a/src/components/Editor/Editor.tsx
+++ b/src/components/Editor/Editor.tsx
@@ -26,7 +26,6 @@ import { CustomImage } from './extensions/CustomImage'
import { Figure } from './extensions/Figure'
import { Paragraph } from '@tiptap/extension-paragraph'
import Focus from '@tiptap/extension-focus'
-import { TrailingNode } from './extensions/TrailingNode'
import * as Y from 'yjs'
import { CollaborationCursor } from '@tiptap/extension-collaboration-cursor'
import { Collaboration } from '@tiptap/extension-collaboration'
@@ -41,6 +40,7 @@ import { ImageBubbleMenu } from './ImageBubbleMenu'
import { EditorFloatingMenu } from './EditorFloatingMenu'
import { useEditorContext } from '../../context/editor'
import { isTextSelection } from '@tiptap/core'
+import type { Doc } from 'yjs/dist/src/utils/Doc'
import './Prosemirror.scss'
type EditorProps = {
@@ -49,7 +49,7 @@ type EditorProps = {
onChange: (text: string) => void
}
-const yDoc = new Y.Doc()
+const yDocs: Record = {}
const persisters: Record = {}
const providers: Record = {}
@@ -59,17 +59,20 @@ export const Editor = (props: EditorProps) => {
const docName = `shout-${props.shoutId}`
+ if (!yDocs[docName]) {
+ yDocs[docName] = new Y.Doc()
+ }
+
if (!providers[docName]) {
providers[docName] = new HocuspocusProvider({
url: 'wss://hocuspocus.discours.io',
- // url: 'ws://localhost:4242',
name: docName,
- document: yDoc
+ document: yDocs[docName]
})
}
if (!persisters[docName]) {
- persisters[docName] = new IndexeddbPersistence(docName, yDoc)
+ persisters[docName] = new IndexeddbPersistence(docName, yDocs[docName])
}
const editorElRef: {
@@ -123,7 +126,7 @@ export const Editor = (props: EditorProps) => {
OrderedList,
ListItem,
Collaboration.configure({
- document: yDoc
+ document: yDocs[docName]
}),
CollaborationCursor.configure({
provider: providers[docName],
@@ -145,7 +148,6 @@ export const Editor = (props: EditorProps) => {
}
}),
Figure,
- TrailingNode,
Embed,
CharacterCount,
BubbleMenu.configure({
diff --git a/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.module.scss b/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.module.scss
index 0e677cbb..30f4f763 100644
--- a/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.module.scss
+++ b/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.module.scss
@@ -15,9 +15,9 @@
.menuHolder {
background: #fff;
- left: 40px;
+ left: 24px;
position: absolute;
- top: -0.4rem;
+ top: -2px;
min-width: 64vw;
}
}
diff --git a/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx b/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx
index 43ea8501..d74c637d 100644
--- a/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx
+++ b/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx
@@ -10,6 +10,7 @@ import { Menu } from './Menu'
import type { MenuItem } from './Menu/Menu'
import { showModal } from '../../../stores/ui'
import { UploadModalContent } from '../UploadModal'
+import { useOutsideClickHandler } from '../../../utils/useOutsideClickHandler'
type FloatingMenuProps = {
editor: Editor
@@ -57,6 +58,17 @@ export const EditorFloatingMenu = (props: FloatingMenuProps) => {
setMenuOpen(false)
}
+ const menuRef: { current: HTMLDivElement } = { current: null }
+
+ useOutsideClickHandler({
+ containerRef: menuRef,
+ handler: () => {
+ if (menuOpen()) {
+ setMenuOpen(false)
+ }
+ }
+ })
+
return (
<>