From 2afdb1e143b7c8bec2dfe2e69004101038ee62ff Mon Sep 17 00:00:00 2001 From: fisenko Date: Fri, 31 Oct 2025 14:06:23 +0300 Subject: [PATCH] feat: Update `article modal` and `left widget naming` --- src/shared/lib/gltfCacheManager.ts | 2 - .../ArticleSelectOrCreateDialog/index.tsx | 85 +++++++++++-------- src/shared/store/CreateSightStore/index.tsx | 50 ++++++----- src/shared/store/EditSightStore/index.tsx | 28 +++++- src/widgets/ImageUploadCard/index.tsx | 14 +-- src/widgets/MediaViewer/index.tsx | 2 +- tsconfig.tsbuildinfo | 2 +- 7 files changed, 107 insertions(+), 76 deletions(-) diff --git a/src/shared/lib/gltfCacheManager.ts b/src/shared/lib/gltfCacheManager.ts index b02acd7..6550252 100644 --- a/src/shared/lib/gltfCacheManager.ts +++ b/src/shared/lib/gltfCacheManager.ts @@ -71,10 +71,8 @@ export const clearBlobAndGLTFCache = async (url: string) => { */ export const clearMediaTransitionCache = async ( previousMediaId: string | number | null, - newMediaId: string | number | null, newMediaType?: number ) => { - console.log(newMediaId, newMediaType); // Если переключаемся с/на 3D модель, очищаем весь кеш if (newMediaType === 6 || previousMediaId) { await clearAllGLTFCache(); diff --git a/src/shared/modals/ArticleSelectOrCreateDialog/index.tsx b/src/shared/modals/ArticleSelectOrCreateDialog/index.tsx index 6331544..b100909 100644 --- a/src/shared/modals/ArticleSelectOrCreateDialog/index.tsx +++ b/src/shared/modals/ArticleSelectOrCreateDialog/index.tsx @@ -523,42 +523,60 @@ export const ArticleSelectOrCreateDialog = observer( article?.service_name?.toLowerCase().includes(searchQuery.toLowerCase()) ); - const [hoveredArticleId, setHoveredArticleId] = useState( - null - ); - const hoverTimerRef = (typeof window !== "undefined" + // Preview-by-click logic with request serialization to avoid concurrent requests + const [isPreviewLoading, setIsPreviewLoading] = useState(false); + const [queuedPreviewId, setQueuedPreviewId] = useState(null); + const clickTimerRef = (typeof window !== "undefined" ? (window as any) : {}) as { current?: any; } as React.MutableRefObject; - if (hoverTimerRef.current === undefined) { - (hoverTimerRef as any).current = null; + if (clickTimerRef.current === undefined) { + (clickTimerRef as any).current = null; } - useEffect(() => { - if ( - hoveredArticleId && - tabValue === 0 && - !selectedArticleId && - !tempArticleId - ) { - if (hoverTimerRef.current) clearTimeout(hoverTimerRef.current); - hoverTimerRef.current = setTimeout(() => { - getArticle(Number(hoveredArticleId), modalLanguage); - getArticleMedia(Number(hoveredArticleId)); - }, 200); + + const runPreviewFetch = async (articleId: number) => { + if (isPreviewLoading) { + setQueuedPreviewId(articleId); + return; } - return () => { - if (hoverTimerRef.current) clearTimeout(hoverTimerRef.current); - }; - }, [ - hoveredArticleId, - tabValue, - selectedArticleId, - tempArticleId, - modalLanguage, - getArticle, - getArticleMedia, - ]); + setIsPreviewLoading(true); + try { + await Promise.all([ + getArticle(articleId, modalLanguage), + getArticleMedia(articleId), + ]); + } finally { + setIsPreviewLoading(false); + if (queuedPreviewId && queuedPreviewId !== articleId) { + const nextId = queuedPreviewId; + setQueuedPreviewId(null); + // Run the next queued preview + runPreviewFetch(nextId); + } else { + setQueuedPreviewId(null); + } + } + }; + + const handleListItemClick = (articleId: number) => { + // Delay to allow double-click to cancel preview + if (clickTimerRef.current) clearTimeout(clickTimerRef.current); + clickTimerRef.current = setTimeout(() => { + if (tabValue === 0 && !selectedArticleId && !tempArticleId) { + runPreviewFetch(articleId); + } + }, 200); + }; + + const handleListItemDoubleClick = (articleId: number) => { + // Cancel pending single-click preview and proceed to select + if (clickTimerRef.current) { + clearTimeout(clickTimerRef.current); + (clickTimerRef as any).current = null; + } + handleArticleSelect(articleId); + }; const previewData = { heading: currentArticleData[modalLanguage].heading || "", @@ -656,11 +674,10 @@ export const ArticleSelectOrCreateDialog = observer( filteredArticles.map((article) => ( handleArticleSelect(article.id)} - onMouseEnter={() => - setHoveredArticleId(article.id.toString()) + onClick={() => handleListItemClick(article.id)} + onDoubleClick={() => + handleListItemDoubleClick(article.id) } - onMouseLeave={() => setHoveredArticleId(null)} sx={{ borderRadius: 1, mb: 0.5, diff --git a/src/shared/store/CreateSightStore/index.tsx b/src/shared/store/CreateSightStore/index.tsx index 9b67b6a..9b74aad 100644 --- a/src/shared/store/CreateSightStore/index.tsx +++ b/src/shared/store/CreateSightStore/index.tsx @@ -340,55 +340,63 @@ class CreateSightStore { createLeftArticle = async () => { /* ... your existing logic to create a new left article (placeholder or DB) ... */ + const ruName = (this.sight.ru.name || "").trim(); + const enName = (this.sight.en.name || "").trim(); + const zhName = (this.sight.zh.name || "").trim(); + + // If all names are empty, skip defaulting and use empty headings + const hasAnyName = !!(ruName || enName || zhName); + const response = await languageInstance("ru").post("/article", { - heading: "Новая левая статья", - body: "Заполните контентом", + heading: hasAnyName ? ruName : "", + body: "", }); const newLeftArticleId = response.data.id; + await languageInstance("en").patch(`/article/${newLeftArticleId}`, { - heading: "New Left Article", - body: "Fill with content", + heading: hasAnyName ? enName : "", + body: "", }); await languageInstance("zh").patch(`/article/${newLeftArticleId}`, { - heading: "新的左侧文章", - body: "填写内容", + heading: hasAnyName ? zhName : "", + body: "", }); runInAction(() => { this.sight.left_article = newLeftArticleId; // Store the actual ID this.sight.ru.left = { - heading: "Новая левая статья", - body: "Заполните контентом", + heading: hasAnyName ? ruName : "", + body: "", media: [], }; this.sight.en.left = { - heading: "New Left Article", - body: "Fill with content", + heading: hasAnyName ? enName : "", + body: "", media: [], }; this.sight.zh.left = { - heading: "新的左侧文章", - body: "填写内容", + heading: hasAnyName ? zhName : "", + body: "", media: [], }; articlesStore.articles.ru.push({ id: newLeftArticleId, - heading: "Новая левая статья", - body: "Заполните контентом", - service_name: "Новая левая статья", + heading: hasAnyName ? ruName : "", + body: "", + service_name: hasAnyName ? ruName : "", }); articlesStore.articles.en.push({ id: newLeftArticleId, - heading: "New Left Article", - body: "Fill with content", - service_name: "New Left Article", + heading: hasAnyName ? enName : "", + body: "", + service_name: hasAnyName ? enName : "", }); articlesStore.articles.zh.push({ id: newLeftArticleId, - heading: "新的左侧文章", - body: "填写内容", - service_name: "新的左侧文章", + heading: hasAnyName ? zhName : "", + body: "", + service_name: hasAnyName ? zhName : "", }); }); return newLeftArticleId; diff --git a/src/shared/store/EditSightStore/index.tsx b/src/shared/store/EditSightStore/index.tsx index 2fbfe1b..6a1a6eb 100644 --- a/src/shared/store/EditSightStore/index.tsx +++ b/src/shared/store/EditSightStore/index.tsx @@ -400,16 +400,36 @@ class EditSightStore { }; createLeftArticle = async () => { + const ruName = (this.sight.ru.name || "").trim(); + const enName = (this.sight.en.name || "").trim(); + const zhName = (this.sight.zh.name || "").trim(); + const hasAnyName = !!(ruName || enName || zhName); + const response = await languageInstance("ru").post(`/article`, { - heading: "", + heading: hasAnyName ? ruName : "", body: "", }); this.sight.common.left_article = response.data.id; - this.sight.ru.left.heading = ""; - this.sight.en.left.heading = ""; - this.sight.zh.left.heading = ""; + await languageInstance("en").patch( + `/article/${this.sight.common.left_article}`, + { + heading: hasAnyName ? enName : "", + body: "", + } + ); + await languageInstance("zh").patch( + `/article/${this.sight.common.left_article}`, + { + heading: hasAnyName ? zhName : "", + body: "", + } + ); + + this.sight.ru.left.heading = hasAnyName ? ruName : ""; + this.sight.en.left.heading = hasAnyName ? enName : ""; + this.sight.zh.left.heading = hasAnyName ? zhName : ""; this.sight.ru.left.body = ""; this.sight.en.left.body = ""; this.sight.zh.left.body = ""; diff --git a/src/widgets/ImageUploadCard/index.tsx b/src/widgets/ImageUploadCard/index.tsx index c4bea80..6cc00c7 100644 --- a/src/widgets/ImageUploadCard/index.tsx +++ b/src/widgets/ImageUploadCard/index.tsx @@ -1,4 +1,4 @@ -import React, { useRef, useState, DragEvent, useEffect } from "react"; +import React, { useRef, DragEvent } from "react"; import { Paper, Box, Typography, Button, Tooltip } from "@mui/material"; import { X, Info, Plus } from "lucide-react"; // Assuming lucide-react for icons import { editSightStore } from "@shared"; @@ -27,18 +27,9 @@ export const ImageUploadCard: React.FC = ({ tooltipText, }) => { const fileInputRef = useRef(null); - const [isDragOver, setIsDragOver] = useState(false); const { setFileToUpload } = editSightStore; - useEffect(() => { - if (isDragOver) { - console.log("isDragOver"); - } - }, [isDragOver]); - - // --- Click to select file --- const handleZoneClick = () => { - // Trigger the hidden file input click fileInputRef.current?.click(); }; @@ -68,19 +59,16 @@ export const ImageUploadCard: React.FC = ({ const handleDragOver = (event: DragEvent) => { event.preventDefault(); // Crucial to allow a drop event.stopPropagation(); - setIsDragOver(true); }; const handleDragLeave = (event: DragEvent) => { event.preventDefault(); event.stopPropagation(); - setIsDragOver(false); }; const handleDrop = async (event: DragEvent) => { event.preventDefault(); // Crucial to allow a drop event.stopPropagation(); - setIsDragOver(false); const files = event.dataTransfer.files; if (files && files.length > 0) { diff --git a/src/widgets/MediaViewer/index.tsx b/src/widgets/MediaViewer/index.tsx index 16b695f..65557dc 100644 --- a/src/widgets/MediaViewer/index.tsx +++ b/src/widgets/MediaViewer/index.tsx @@ -38,7 +38,7 @@ export function MediaViewer({ // Используем новый cache manager для очистки кеша clearMediaTransitionCache( previousMediaId, - media?.id || null, + media?.media_type ); diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index 6b1027c..7d57f8d 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/main.tsx","./src/vite-env.d.ts","./src/app/globalerrorboundary.tsx","./src/app/index.tsx","./src/app/router/index.tsx","./src/entities/index.ts","./src/entities/navigation/index.ts","./src/entities/navigation/model/index.ts","./src/entities/navigation/ui/index.tsx","./src/features/index.ts","./src/features/navigation/index.ts","./src/features/navigation/ui/index.tsx","./src/pages/index.ts","./src/pages/article/index.ts","./src/pages/article/articlecreatepage/index.tsx","./src/pages/article/articleeditpage/index.tsx","./src/pages/article/articlelistpage/index.tsx","./src/pages/article/articlepreviewpage/previewleftwidget.tsx","./src/pages/article/articlepreviewpage/previewrightwidget.tsx","./src/pages/article/articlepreviewpage/index.tsx","./src/pages/carrier/index.ts","./src/pages/carrier/carriercreatepage/index.tsx","./src/pages/carrier/carriereditpage/index.tsx","./src/pages/carrier/carrierlistpage/index.tsx","./src/pages/city/index.ts","./src/pages/city/citycreatepage/index.tsx","./src/pages/city/cityeditpage/index.tsx","./src/pages/city/citylistpage/index.tsx","./src/pages/city/citypreviewpage/index.tsx","./src/pages/country/index.ts","./src/pages/country/countryaddpage/index.tsx","./src/pages/country/countrycreatepage/index.tsx","./src/pages/country/countryeditpage/index.tsx","./src/pages/country/countrylistpage/index.tsx","./src/pages/country/countrypreviewpage/index.tsx","./src/pages/createsightpage/index.tsx","./src/pages/devicespage/index.tsx","./src/pages/editsightpage/index.tsx","./src/pages/loginpage/index.tsx","./src/pages/mainpage/index.tsx","./src/pages/mappage/index.tsx","./src/pages/mappage/mapstore.ts","./src/pages/media/index.ts","./src/pages/media/mediacreatepage/index.tsx","./src/pages/media/mediaeditpage/index.tsx","./src/pages/media/medialistpage/index.tsx","./src/pages/media/mediapreviewpage/index.tsx","./src/pages/route/linekedstations.tsx","./src/pages/route/index.ts","./src/pages/route/routecreatepage/index.tsx","./src/pages/route/routeeditpage/index.tsx","./src/pages/route/routelistpage/index.tsx","./src/pages/route/route-preview/constants.ts","./src/pages/route/route-preview/infinitecanvas.tsx","./src/pages/route/route-preview/leftsidebar.tsx","./src/pages/route/route-preview/mapdatacontext.tsx","./src/pages/route/route-preview/rightsidebar.tsx","./src/pages/route/route-preview/sight.tsx","./src/pages/route/route-preview/sightinfowidget.tsx","./src/pages/route/route-preview/station.tsx","./src/pages/route/route-preview/transformcontext.tsx","./src/pages/route/route-preview/travelpath.tsx","./src/pages/route/route-preview/widgets.tsx","./src/pages/route/route-preview/index.tsx","./src/pages/route/route-preview/types.ts","./src/pages/route/route-preview/utils.ts","./src/pages/sight/index.ts","./src/pages/sight/sightlistpage/index.tsx","./src/pages/sightpage/index.tsx","./src/pages/snapshot/index.ts","./src/pages/snapshot/snapshotcreatepage/index.tsx","./src/pages/snapshot/snapshotlistpage/index.tsx","./src/pages/station/linkedsights.tsx","./src/pages/station/index.ts","./src/pages/station/stationcreatepage/index.tsx","./src/pages/station/stationeditpage/index.tsx","./src/pages/station/stationlistpage/index.tsx","./src/pages/station/stationpreviewpage/index.tsx","./src/pages/user/index.ts","./src/pages/user/usercreatepage/index.tsx","./src/pages/user/usereditpage/index.tsx","./src/pages/user/userlistpage/index.tsx","./src/pages/vehicle/index.ts","./src/pages/vehicle/vehiclecreatepage/index.tsx","./src/pages/vehicle/vehicleeditpage/index.tsx","./src/pages/vehicle/vehiclelistpage/index.tsx","./src/pages/vehicle/vehiclepreviewpage/index.tsx","./src/shared/index.tsx","./src/shared/api/index.tsx","./src/shared/config/constants.tsx","./src/shared/config/index.ts","./src/shared/const/index.ts","./src/shared/const/mediatypes.ts","./src/shared/hooks/index.ts","./src/shared/hooks/useselectedcity.ts","./src/shared/lib/gltfcachemanager.ts","./src/shared/lib/index.ts","./src/shared/lib/decodejwt/index.ts","./src/shared/lib/mui/theme.ts","./src/shared/modals/index.ts","./src/shared/modals/articleselectorcreatedialog/index.tsx","./src/shared/modals/previewmediadialog/index.tsx","./src/shared/modals/selectarticledialog/index.tsx","./src/shared/modals/selectmediadialog/index.tsx","./src/shared/modals/uploadmediadialog/index.tsx","./src/shared/store/index.ts","./src/shared/store/articlesstore/index.tsx","./src/shared/store/authstore/index.tsx","./src/shared/store/carrierstore/index.tsx","./src/shared/store/citystore/index.ts","./src/shared/store/countrystore/index.ts","./src/shared/store/createsightstore/index.tsx","./src/shared/store/devicesstore/index.tsx","./src/shared/store/editsightstore/index.tsx","./src/shared/store/languagestore/index.tsx","./src/shared/store/mediastore/index.tsx","./src/shared/store/menustore/index.ts","./src/shared/store/modelloadingstore/index.ts","./src/shared/store/routestore/index.ts","./src/shared/store/selectedcitystore/index.ts","./src/shared/store/sightsstore/index.tsx","./src/shared/store/snapshotstore/index.ts","./src/shared/store/stationsstore/index.ts","./src/shared/store/userstore/index.ts","./src/shared/store/vehiclestore/index.ts","./src/shared/ui/index.ts","./src/shared/ui/backbutton/index.tsx","./src/shared/ui/coordinatesinput/index.tsx","./src/shared/ui/input/index.tsx","./src/shared/ui/loadingspinner/index.tsx","./src/shared/ui/modal/index.tsx","./src/shared/ui/modelloadingindicator/index.tsx","./src/shared/ui/tabpanel/index.tsx","./src/widgets/index.ts","./src/widgets/cityselector/index.tsx","./src/widgets/createbutton/index.tsx","./src/widgets/deletemodal/index.tsx","./src/widgets/devicestable/index.tsx","./src/widgets/imageuploadcard/index.tsx","./src/widgets/languageswitcher/index.tsx","./src/widgets/layout/index.tsx","./src/widgets/layout/ui/appbar.tsx","./src/widgets/layout/ui/drawer.tsx","./src/widgets/layout/ui/drawerheader.tsx","./src/widgets/leaveagree/index.tsx","./src/widgets/mediaarea/index.tsx","./src/widgets/mediaareaforsight/index.tsx","./src/widgets/mediaviewer/threeview.tsx","./src/widgets/mediaviewer/threeviewerrorboundary.tsx","./src/widgets/mediaviewer/index.tsx","./src/widgets/modelviewer3d/index.tsx","./src/widgets/reactmarkdown/index.tsx","./src/widgets/reactmarkdowneditor/index.tsx","./src/widgets/savewithoutcityagree/index.tsx","./src/widgets/sightedit/index.tsx","./src/widgets/sightheader/index.ts","./src/widgets/sightheader/ui/index.tsx","./src/widgets/sighttabs/index.ts","./src/widgets/sighttabs/createinformationtab/mediauploadbox.tsx","./src/widgets/sighttabs/createinformationtab/index.tsx","./src/widgets/sighttabs/createlefttab/index.tsx","./src/widgets/sighttabs/createrighttab/index.tsx","./src/widgets/sighttabs/informationtab/index.tsx","./src/widgets/sighttabs/leftwidgettab/index.tsx","./src/widgets/sighttabs/rightwidgettab/index.tsx","./src/widgets/sightstable/index.tsx","./src/widgets/snapshotrestore/index.tsx","./src/widgets/videopreviewcard/index.tsx","./src/widgets/modals/editstationmodal.tsx","./src/widgets/modals/index.ts","./src/widgets/modals/selectarticledialog/index.tsx"],"version":"5.8.3"} \ No newline at end of file +{"root":["./src/main.tsx","./src/vite-env.d.ts","./src/app/globalerrorboundary.tsx","./src/app/index.tsx","./src/app/router/index.tsx","./src/entities/index.ts","./src/entities/navigation/index.ts","./src/entities/navigation/model/index.ts","./src/entities/navigation/ui/index.tsx","./src/features/index.ts","./src/features/navigation/index.ts","./src/features/navigation/ui/index.tsx","./src/pages/index.ts","./src/pages/article/index.ts","./src/pages/article/articlecreatepage/index.tsx","./src/pages/article/articleeditpage/index.tsx","./src/pages/article/articlelistpage/index.tsx","./src/pages/article/articlepreviewpage/previewleftwidget.tsx","./src/pages/article/articlepreviewpage/previewrightwidget.tsx","./src/pages/article/articlepreviewpage/index.tsx","./src/pages/carrier/index.ts","./src/pages/carrier/carriercreatepage/index.tsx","./src/pages/carrier/carriereditpage/index.tsx","./src/pages/carrier/carrierlistpage/index.tsx","./src/pages/city/index.ts","./src/pages/city/citycreatepage/index.tsx","./src/pages/city/cityeditpage/index.tsx","./src/pages/city/citylistpage/index.tsx","./src/pages/city/citypreviewpage/index.tsx","./src/pages/country/index.ts","./src/pages/country/countryaddpage/index.tsx","./src/pages/country/countrycreatepage/index.tsx","./src/pages/country/countryeditpage/index.tsx","./src/pages/country/countrylistpage/index.tsx","./src/pages/country/countrypreviewpage/index.tsx","./src/pages/createsightpage/index.tsx","./src/pages/devicespage/index.tsx","./src/pages/editsightpage/index.tsx","./src/pages/loginpage/index.tsx","./src/pages/mainpage/index.tsx","./src/pages/mappage/index.tsx","./src/pages/mappage/mapstore.ts","./src/pages/media/index.ts","./src/pages/media/mediacreatepage/index.tsx","./src/pages/media/mediaeditpage/index.tsx","./src/pages/media/medialistpage/index.tsx","./src/pages/media/mediapreviewpage/index.tsx","./src/pages/route/linekedstations.tsx","./src/pages/route/index.ts","./src/pages/route/routecreatepage/index.tsx","./src/pages/route/routeeditpage/index.tsx","./src/pages/route/routelistpage/index.tsx","./src/pages/route/route-preview/constants.ts","./src/pages/route/route-preview/infinitecanvas.tsx","./src/pages/route/route-preview/leftsidebar.tsx","./src/pages/route/route-preview/mapdatacontext.tsx","./src/pages/route/route-preview/rightsidebar.tsx","./src/pages/route/route-preview/sight.tsx","./src/pages/route/route-preview/sightinfowidget.tsx","./src/pages/route/route-preview/station.tsx","./src/pages/route/route-preview/transformcontext.tsx","./src/pages/route/route-preview/travelpath.tsx","./src/pages/route/route-preview/widgets.tsx","./src/pages/route/route-preview/index.tsx","./src/pages/route/route-preview/types.ts","./src/pages/route/route-preview/utils.ts","./src/pages/sight/index.ts","./src/pages/sight/sightlistpage/index.tsx","./src/pages/sightpage/index.tsx","./src/pages/snapshot/index.ts","./src/pages/snapshot/snapshotcreatepage/index.tsx","./src/pages/snapshot/snapshotlistpage/index.tsx","./src/pages/station/linkedsights.tsx","./src/pages/station/index.ts","./src/pages/station/stationcreatepage/index.tsx","./src/pages/station/stationeditpage/index.tsx","./src/pages/station/stationlistpage/index.tsx","./src/pages/station/stationpreviewpage/index.tsx","./src/pages/user/index.ts","./src/pages/user/usercreatepage/index.tsx","./src/pages/user/usereditpage/index.tsx","./src/pages/user/userlistpage/index.tsx","./src/pages/vehicle/index.ts","./src/pages/vehicle/vehiclecreatepage/index.tsx","./src/pages/vehicle/vehicleeditpage/index.tsx","./src/pages/vehicle/vehiclelistpage/index.tsx","./src/pages/vehicle/vehiclepreviewpage/index.tsx","./src/shared/index.tsx","./src/shared/api/index.tsx","./src/shared/config/constants.tsx","./src/shared/config/index.ts","./src/shared/const/index.ts","./src/shared/const/mediatypes.ts","./src/shared/hooks/index.ts","./src/shared/hooks/useselectedcity.ts","./src/shared/lib/gltfcachemanager.ts","./src/shared/lib/index.ts","./src/shared/lib/decodejwt/index.ts","./src/shared/lib/mui/theme.ts","./src/shared/modals/index.ts","./src/shared/modals/articleselectorcreatedialog/index.tsx","./src/shared/modals/previewmediadialog/index.tsx","./src/shared/modals/selectarticledialog/index.tsx","./src/shared/modals/selectmediadialog/index.tsx","./src/shared/modals/uploadmediadialog/index.tsx","./src/shared/store/index.ts","./src/shared/store/articlesstore/index.tsx","./src/shared/store/authstore/index.tsx","./src/shared/store/carrierstore/index.tsx","./src/shared/store/citystore/index.ts","./src/shared/store/countrystore/index.ts","./src/shared/store/createsightstore/index.tsx","./src/shared/store/devicesstore/index.tsx","./src/shared/store/editsightstore/index.tsx","./src/shared/store/languagestore/index.tsx","./src/shared/store/mediastore/index.tsx","./src/shared/store/menustore/index.ts","./src/shared/store/modelloadingstore/index.ts","./src/shared/store/routestore/index.ts","./src/shared/store/selectedcitystore/index.ts","./src/shared/store/sightsstore/index.tsx","./src/shared/store/snapshotstore/index.ts","./src/shared/store/stationsstore/index.ts","./src/shared/store/userstore/index.ts","./src/shared/store/vehiclestore/index.ts","./src/shared/ui/index.ts","./src/shared/ui/backbutton/index.tsx","./src/shared/ui/coordinatesinput/index.tsx","./src/shared/ui/input/index.tsx","./src/shared/ui/loadingspinner/index.tsx","./src/shared/ui/modal/index.tsx","./src/shared/ui/modelloadingindicator/index.tsx","./src/shared/ui/tabpanel/index.tsx","./src/widgets/index.ts","./src/widgets/cityselector/index.tsx","./src/widgets/createbutton/index.tsx","./src/widgets/deletemodal/index.tsx","./src/widgets/devicestable/index.tsx","./src/widgets/imageuploadcard/index.tsx","./src/widgets/languageswitcher/index.tsx","./src/widgets/layout/index.tsx","./src/widgets/layout/ui/appbar.tsx","./src/widgets/layout/ui/drawer.tsx","./src/widgets/layout/ui/drawerheader.tsx","./src/widgets/leaveagree/index.tsx","./src/widgets/mediaarea/index.tsx","./src/widgets/mediaareaforsight/index.tsx","./src/widgets/mediaviewer/threeview.tsx","./src/widgets/mediaviewer/threeviewerrorboundary.tsx","./src/widgets/mediaviewer/index.tsx","./src/widgets/modelviewer3d/index.tsx","./src/widgets/reactmarkdown/index.tsx","./src/widgets/reactmarkdowneditor/index.tsx","./src/widgets/savewithoutcityagree/index.tsx","./src/widgets/sightedit/index.tsx","./src/widgets/sightheader/index.ts","./src/widgets/sightheader/ui/index.tsx","./src/widgets/sighttabs/index.ts","./src/widgets/sighttabs/createinformationtab/mediauploadbox.tsx","./src/widgets/sighttabs/createinformationtab/index.tsx","./src/widgets/sighttabs/createlefttab/index.tsx","./src/widgets/sighttabs/createrighttab/index.tsx","./src/widgets/sighttabs/informationtab/index.tsx","./src/widgets/sighttabs/leftwidgettab/index.tsx","./src/widgets/sighttabs/rightwidgettab/index.tsx","./src/widgets/sightstable/index.tsx","./src/widgets/snapshotrestore/index.tsx","./src/widgets/videopreviewcard/index.tsx","./src/widgets/modals/editstationmodal.tsx","./src/widgets/modals/index.ts","./src/widgets/modals/selectarticledialog/index.tsx"],"errors":true,"version":"5.8.3"} \ No newline at end of file