// @widgets/LeftWidgetTab.tsx import { Box, Button, TextField, Paper, Typography } from "@mui/material"; import { BackButton, TabPanel, languageStore, SelectMediaDialog, editSightStore, SelectArticleModal, UploadMediaDialog, } from "@shared"; import { LanguageSwitcher, ReactMarkdownComponent, ReactMarkdownEditor, MediaArea, MediaViewer, } from "@widgets"; import { Trash2, ImagePlus } from "lucide-react"; import { useState, useCallback } from "react"; import { observer } from "mobx-react-lite"; import { toast } from "react-toastify"; export const LeftWidgetTab = observer( ({ value, index }: { value: number; index: number }) => { const { sight, updateSightInfo, unlinkLeftArticle, updateSight, deleteLeftArticle, createLeftArticle, deleteMedia, uploadMediaOpen, setUploadMediaOpen, setFileToUpload, createLinkWithArticle, } = editSightStore; const { language } = languageStore; const data = sight[language]; const [isSelectMediaDialogOpen, setIsSelectMediaDialogOpen] = useState(false); const [isSelectArticleDialogOpen, setIsSelectArticleDialogOpen] = useState(false); const handleMediaSelected = useCallback( async (media: { id: string; filename: string; media_name?: string; media_type: number; }) => { await createLinkWithArticle(media); setIsSelectMediaDialogOpen(false); }, [createLinkWithArticle] ); const handleCloseMediaDialog = useCallback(() => { setIsSelectMediaDialogOpen(false); }, []); const handleCloseArticleDialog = useCallback(() => { setIsSelectArticleDialogOpen(false); }, []); const handleSelectArticle = useCallback( ( articleId: number, heading: string, body: string, media: { id: string; media_type: number; filename: string }[] ) => { setIsSelectArticleDialogOpen(false); updateSightInfo(languageStore.language, { left: { heading, body, media, }, }); updateSightInfo( languageStore.language, { left_article: articleId, }, true ); }, [] ); return ( <> Левая статья {sight.common.left_article ? ( <> ) : ( <> )} {sight.common.left_article > 0 && ( updateSightInfo(languageStore.language, { left: { heading: e.target.value, body: sight[languageStore.language].left.body, media: data.left.media, }, }) } variant="outlined" fullWidth /> updateSightInfo(languageStore.language, { left: { heading: sight[languageStore.language].left.heading, body: value, media: data.left.media, }, }) } /> { setFileToUpload(files[0]); setUploadMediaOpen(true); }} /> {data.left.media.length > 0 ? ( ) : ( )} {data?.left?.heading || "Название информации"} {data?.left?.body && ( )} )} setUploadMediaOpen(false)} afterUpload={async (media) => { setUploadMediaOpen(false); setFileToUpload(null); await createLinkWithArticle(media); }} /> ); } );