import { Box, Button, TextField, Paper, Typography } from "@mui/material"; import { BackButton, TabPanel, languageStore, SelectMediaDialog, editSightStore, createSightStore, SelectArticleModal, UploadMediaDialog, Language, } from "@shared"; import { LanguageSwitcher, MediaArea, ReactMarkdownComponent, ReactMarkdownEditor, MediaViewer, DeleteModal, } from "@widgets"; import { Trash2, ImagePlus, Unlink, Plus, Save, Search } from "lucide-react"; import { useState, useCallback } from "react"; import { useNavigate } from "react-router-dom"; import { observer } from "mobx-react-lite"; import { toast } from "react-toastify"; export const CreateLeftTab = observer( ({ value, index }: { value: number; index: number }) => { const { sight, updateSightInfo, updateLeftArticle, createSight, deleteLeftArticle, createLeftArticle, unlinkLeftArticle, createLinkWithLeftArticle, } = createSightStore; const { deleteMedia, setFileToUpload, uploadMediaOpen, setUploadMediaOpen, } = editSightStore; const navigate = useNavigate(); const { language } = languageStore; const token = localStorage.getItem("token"); const [isSelectArticleDialogOpen, setIsSelectArticleDialogOpen] = useState(false); const [isSelectMediaDialogOpen, setIsSelectMediaDialogOpen] = useState(false); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const handleCloseArticleDialog = useCallback(() => { setIsSelectArticleDialogOpen(false); }, []); const handleCloseMediaDialog = useCallback(() => { setIsSelectMediaDialogOpen(false); }, []); const handleMediaSelected = useCallback( async (media: { id: string; filename: string; media_name?: string; media_type: number; }) => { await createLinkWithLeftArticle(media); setIsSelectMediaDialogOpen(false); }, [createLinkWithLeftArticle] ); const handleArticleSelect = useCallback( (articleId: number) => { updateLeftArticle(articleId); }, [updateLeftArticle] ); return (

{sight[language].name.replace(/\n/g, " ")}

Левая статья {sight.left_article ? ( <> ) : ( <> )} {sight.left_article > 0 && ( <> {/* Левая колонка: Редактирование */} updateSightInfo( { left: { heading: e.target.value, body: sight[language].left.body, media: sight[language].left.media, }, }, language ) } variant="outlined" fullWidth /> updateSightInfo( { left: { heading: sight[language].left.heading, body: value, media: sight[language].left.media, }, }, language ) } /> { setFileToUpload(files[0]); setUploadMediaOpen(true); }} /> {/* Блок МЕДИА для статьи */} {/* МЕДИА {data.left.media ? ( Selected media ) : ( Нет медиа )} {data.left.media && ( )} */} {/* Правая колонка: Предпросмотр */} {sight[language].left.media.length > 0 ? ( <> {sight.watermark_lu && ( preview )} {sight.watermark_rd && ( preview )} ) : ( )} {sight[language].left.heading || "Название информации"} {sight[language as Language].address} {sight[language].left.body && ( )} )}
{/* */} setUploadMediaOpen(false)} contextObjectName={sight[language].name} contextType="sight" isArticle={true} articleName={sight[language].left.heading || "Левая статья"} afterUpload={async (media) => { setUploadMediaOpen(false); setFileToUpload(null); await createLinkWithLeftArticle(media); }} /> { deleteLeftArticle(sight.left_article); setIsDeleteModalOpen(false); toast.success("Статья откреплена"); }} onCancel={() => setIsDeleteModalOpen(false)} />
); } );