import { Component, createEffect, createSignal } from 'solid-js' import formStyles from '../styles/Form.module.css' import styles from '../styles/Modal.module.css' import Button from '../ui/Button' import Modal from '../ui/Modal' interface Topic { id: number slug: string title: string body?: string pic?: string community: number parent_ids?: number[] } interface TopicEditModalProps { isOpen: boolean topic: Topic | null onClose: () => void onSave: (topic: Topic) => void } /** * Модальное окно для редактирования топиков */ const TopicEditModal: Component = (props) => { const [formData, setFormData] = createSignal({ id: 0, slug: '', title: '', body: '', pic: '', community: 0, parent_ids: [] }) const [parentIdsText, setParentIdsText] = createSignal('') let bodyRef: HTMLDivElement | undefined // Синхронизация с props.topic createEffect(() => { if (props.topic) { setFormData({ ...props.topic }) setParentIdsText(props.topic.parent_ids?.join(', ') || '') // Устанавливаем содержимое в contenteditable div if (bodyRef) { bodyRef.innerHTML = props.topic.body || '' } } }) const handleSave = () => { // Парсим parent_ids из строки const parentIds = parentIdsText() .split(',') .map((id) => Number.parseInt(id.trim())) .filter((id) => !Number.isNaN(id)) const updatedTopic = { ...formData(), parent_ids: parentIds.length > 0 ? parentIds : undefined } props.onSave(updatedTopic) } const handleBodyInput = (e: Event) => { const target = e.target as HTMLDivElement setFormData((prev) => ({ ...prev, body: target.innerHTML })) } return (
setFormData((prev) => ({ ...prev, slug: e.target.value }))} class={formStyles.input} required />
setFormData((prev) => ({ ...prev, title: e.target.value }))} class={formStyles.input} />
setFormData((prev) => ({ ...prev, pic: e.target.value }))} class={formStyles.input} placeholder="https://example.com/image.jpg" />
setFormData((prev) => ({ ...prev, community: Number.parseInt(e.target.value) || 0 })) } class={formStyles.input} min="0" />
setParentIdsText(e.target.value)} class={formStyles.input} placeholder="1, 5, 12" />
) } export default TopicEditModal