diff --git a/package-lock.json b/package-lock.json index 4f1f71a0..7ce2e777 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "@solid-primitives/storage": "^1.3.7", "@solid-primitives/upload": "^0.0.109", "@solidjs/meta": "^0.28.2", + "@thisbeyond/solid-select": "^0.13.0", "@tiptap/core": "^2.0.0-beta.220", "@tiptap/extension-blockquote": "^2.0.0-beta.220", "@tiptap/extension-bold": "^2.0.0-beta.220", @@ -5549,6 +5550,15 @@ "solid-js": ">=1.4.0" } }, + "node_modules/@thisbeyond/solid-select": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@thisbeyond/solid-select/-/solid-select-0.13.0.tgz", + "integrity": "sha512-eION+Xf8TGLs1NZrvRo1NRKOl4plYMbY7UswHhh5bEUY8oMltjrBhUWF0hzaFViEc1zZpkCQyafaD89iofG6Tg==", + "dev": true, + "peerDependencies": { + "solid-js": "^1.5" + } + }, "node_modules/@tiptap/core": { "version": "2.0.0-beta.220", "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.220.tgz", @@ -27344,6 +27354,13 @@ "dev": true, "requires": {} }, + "@thisbeyond/solid-select": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@thisbeyond/solid-select/-/solid-select-0.13.0.tgz", + "integrity": "sha512-eION+Xf8TGLs1NZrvRo1NRKOl4plYMbY7UswHhh5bEUY8oMltjrBhUWF0hzaFViEc1zZpkCQyafaD89iofG6Tg==", + "dev": true, + "requires": {} + }, "@tiptap/core": { "version": "2.0.0-beta.220", "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.220.tgz", diff --git a/package.json b/package.json index 10507782..9b532377 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "@solid-primitives/storage": "^1.3.7", "@solid-primitives/upload": "^0.0.109", "@solidjs/meta": "^0.28.2", + "@thisbeyond/solid-select": "^0.13.0", "@tiptap/core": "^2.0.0-beta.220", "@tiptap/extension-blockquote": "^2.0.0-beta.220", "@tiptap/extension-bold": "^2.0.0-beta.220", diff --git a/src/components/App.tsx b/src/components/App.tsx index 080f58c2..3cc6d408 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -34,7 +34,6 @@ import { SessionProvider } from '../context/session' import { ProfileSettingsPage } from '../pages/profile/profileSettings.page' import { ProfileSecurityPage } from '../pages/profile/profileSecurity.page' import { ProfileSubscriptionsPage } from '../pages/profile/profileSubscriptions.page' -import { CreateSettingsPage } from '../pages/createSettings.page' import { SnackbarProvider } from '../context/snackbar' import { LocalizeProvider } from '../context/localize' @@ -46,7 +45,7 @@ const pagesMap: Record> = { expo: LayoutShoutsPage, connect: ConnectPage, create: CreatePage, - createSettings: CreateSettingsPage, + createSettings: CreatePage, home: HomePage, topics: AllTopicsPage, topic: TopicPage, diff --git a/src/components/Editor/Editor.tsx b/src/components/Editor/Editor.tsx index 8db1a628..4532b971 100644 --- a/src/components/Editor/Editor.tsx +++ b/src/components/Editor/Editor.tsx @@ -1,4 +1,4 @@ -import { createTiptapEditor } from 'solid-tiptap' +import { createTiptapEditor, useEditorHTML } from 'solid-tiptap' import { clsx } from 'clsx' import { useLocalize } from '../../context/localize' import { Blockquote } from '@tiptap/extension-blockquote' @@ -35,9 +35,11 @@ import { TrailingNode } from './extensions/TrailingNode' import './Prosemirror.scss' import { EditorBubbleMenu } from './EditorBubbleMenu' import { EditorFloatingMenu } from './EditorFloatingMenu' +import { createEffect } from 'solid-js' type EditorProps = { initialContent?: string + onChange: (text: string) => void } // const ydoc = new Y.Doc() @@ -118,6 +120,12 @@ export const Editor = (props: EditorProps) => { ] })) + const html = useEditorHTML(() => editor()) + + createEffect(() => { + props.onChange(html()) + }) + return ( <>
(editorElRef.current = el)} /> diff --git a/src/components/Editor/TopicSelect/TopicSelect.module.scss b/src/components/Editor/TopicSelect/TopicSelect.module.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/components/Editor/TopicSelect/TopicSelect.tsx b/src/components/Editor/TopicSelect/TopicSelect.tsx new file mode 100644 index 00000000..7c9e2cb7 --- /dev/null +++ b/src/components/Editor/TopicSelect/TopicSelect.tsx @@ -0,0 +1,21 @@ +import type { Topic } from '../../../graphql/types.gen' +import { createOptions, Select } from '@thisbeyond/solid-select' +import { useLocalize } from '../../../context/localize' +import '@thisbeyond/solid-select/style.css' + +type TopicSelectProps = { + topics: Topic[] + onChange: (selectedTopics: Topic[]) => void +} + +export const TopicSelect = (props: TopicSelectProps) => { + const { t } = useLocalize() + + const selectProps = createOptions(props.topics, { key: 'title' }) + + const handleChange = (selectedTopics: Topic[]) => { + props.onChange(selectedTopics) + } + + return setForm('slug', e.currentTarget.value)} + /> + +
+

Заголовок

setForm('title', e.currentTarget.value)} /> - +

Подзаголовок

- - + setForm('subtitle', e.currentTarget.value)} + /> +
- + setForm('body', body)} />

Настройки публикации

{/*

Лид

*/} @@ -58,31 +112,38 @@ export const CreateView = () => { {/**/}

Темы

-

- Добавьте несколько тем, чтобы читатель знал, о чем ваш материал, и мог найти - его на страницах интересных ему тем. Темы можно менять местами, первая тема - становится заглавной -

+ {/*

*/} + {/* Добавьте несколько тем, чтобы читатель знал, о чем ваш материал, и мог найти*/} + {/* его на страницах интересных ему тем. Темы можно менять местами, первая тема*/} + {/* становится заглавной*/} + {/*

*/}
- + + setForm('topicSlugs', selectedTopics)} + selectedTopicSlugs={form.topicSlugs} + /> + + {/**/}
-

Соавторы

-

У каждого соавтора можно добавить роль

-
-
- - -
- -
+ {/*

Соавторы

*/} + {/*

У каждого соавтора можно добавить роль

*/} + {/*
*/} + {/*
*/} + {/* */} + {/* */} + {/*
*/} + {/* */} + {/*
*/} -
-
Михаил Драбкин
-
- -
-
+ {/*
*/} + {/*
Михаил Драбкин
*/} + {/*
*/} + {/* */} + {/*
*/} + {/*
*/}

Карточка материала на главной

@@ -96,8 +157,10 @@ export const CreateView = () => { Проверьте ещё раз введённые данные, если всё верно, вы можете сохранить или опубликовать ваш текст

- - + {/**/} + diff --git a/src/pages/createSettings.page.tsx b/src/pages/createSettings.page.tsx deleted file mode 100644 index d2c87be5..00000000 --- a/src/pages/createSettings.page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { PageLayout } from '../components/_shared/PageLayout' - -export const CreateSettingsPage = () => { - return Настройки публикации -} - -export const Page = CreateSettingsPage