import { createSignal, onMount, Show } from 'solid-js' import { useLocalize } from '../../context/localize' import { clsx } from 'clsx' import styles from './Edit.module.scss' import { Title } from '@solidjs/meta' import { createStore } from 'solid-js/store' import type { Shout, Topic } from '../../graphql/types.gen' import { apiClient } from '../../utils/apiClient' import { TopicSelect } from '../Editor/TopicSelect/TopicSelect' import { router, useRouter } from '../../stores/router' import { getPagePath, openPage } from '@nanostores/router' import { translit } from '../../utils/ru2en' import { Editor } from '../Editor/Editor' import { Button } from '../_shared/Button' import { Icon } from '../_shared/Icon' type ShoutForm = { slug: string title: string subtitle: string selectedTopics: Topic[] mainTopic: string body: string coverImageUrl: string } type EditViewProps = { shout: Shout } export const EditView = (props: EditViewProps) => { const { t } = useLocalize() const [topics, setTopics] = createSignal(null) const { page } = useRouter() const [isSlugChanged, setIsSlugChanged] = createSignal(false) const [isEditorPanelOPened, setIsEditorPanelOPened] = createSignal(false) const [form, setForm] = createStore({ slug: props.shout.slug, title: props.shout.title, subtitle: props.shout.subtitle, selectedTopics: props.shout.topics, mainTopic: props.shout.mainTopic, body: props.shout.body, coverImageUrl: props.shout.cover }) onMount(async () => { const allTopics = await apiClient.getAllTopics() setTopics(allTopics) }) const handleFormSubmit = async (e) => { e.preventDefault() const article = await apiClient.updateArticle({ article: { slug: props.shout.slug, visibility: 'community' } }) openPage(router, 'article', { slug: article.slug }) } const handleTitleInputChange = (e) => { const title = e.currentTarget.value setForm('title', title) if (!isSlugChanged()) { const slug = translit(title).replaceAll(' ', '-') setForm('slug', slug) } } const handleSlugInputChange = (e) => { const slug = e.currentTarget.value if (slug !== form.slug) { setIsSlugChanged(true) } setForm('slug', slug) } const toggleEditorPanel = () => { setIsEditorPanelOPened(!isEditorPanelOPened()) } const handleSaveButtonClick = async (e) => { e.preventDefault() await apiClient.updateArticle({ slug: props.shout.slug, article: { slug: form.slug, title: form.title, subtitle: form.subtitle, body: form.body, topics: form.selectedTopics.map((topic) => topic.slug), mainTopic: form.selectedTopics[0].slug } }) openPage(router, 'drafts') } return ( <>
{t('Write an article')}
setForm('subtitle', e.currentTarget.value)} /> setForm('body', body)} />
{/**/} Настройки

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

Slug

{/*

Лид

*/} {/*
*/} {/* */} {/* */} {/*
*/} {/*

Выбор сообщества

*/} {/*

Сообщества можно перечислить через запятую

*/} {/*
*/} {/* */} {/*
*/}

Темы

{/*

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

*/}
setForm('selectedTopics', newSelectedTopics)} selectedTopics={form.selectedTopics} /> {/**/}
{/*

Соавторы

*/} {/*

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

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

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

Выберите заглавное изображение для статьи, тут сразу можно увидеть как карточка будет выглядеть на главной странице

Проверьте ещё раз введённые данные, если всё верно, вы можете сохранить или опубликовать ваш текст

Назад
) } export default EditView