remaining fixes

This commit is contained in:
Spynder 2025-05-07 00:02:24 +03:00
parent fba2fb0f5c
commit 177653d84a
4 changed files with 94 additions and 52 deletions

View File

@ -18,6 +18,8 @@ import {
ALLOWED_IMAGE_TYPES, ALLOWED_IMAGE_TYPES,
ALLOWED_VIDEO_TYPES, ALLOWED_VIDEO_TYPES,
} from "../components/media/MediaFormUtils"; } from "../components/media/MediaFormUtils";
import { LinkedItems } from "./LinkedItems";
import { mediaFields, MediaItem } from "../pages/article/types";
const MemoizedSimpleMDE = React.memo(MarkdownEditor); const MemoizedSimpleMDE = React.memo(MarkdownEditor);

View File

@ -69,6 +69,8 @@ type LinkedItemsProps<T> = {
extraField?: ExtraFieldConfig; extraField?: ExtraFieldConfig;
dragAllowed?: boolean; dragAllowed?: boolean;
onSave?: (items: T[]) => void; onSave?: (items: T[]) => void;
onUpdate?: () => void;
dontRecurse?: boolean;
}; };
const reorder = (list: any[], startIndex: number, endIndex: number) => { const reorder = (list: any[], startIndex: number, endIndex: number) => {
@ -88,6 +90,8 @@ export const LinkedItems = <T extends { id: number; [key: string]: any }>({
dragAllowed = false, dragAllowed = false,
type, type,
onSave, onSave,
onUpdate,
dontRecurse = false,
}: LinkedItemsProps<T>) => { }: LinkedItemsProps<T>) => {
const { language } = languageStore; const { language } = languageStore;
const { setArticleModalOpenAction, setArticleIdAction } = articleStore; const { setArticleModalOpenAction, setArticleIdAction } = articleStore;
@ -130,6 +134,16 @@ export const LinkedItems = <T extends { id: number; [key: string]: any }>({
setLinkedItems(reorderedItems); setLinkedItems(reorderedItems);
if(parentResource === "sight" && childResource === "article") {
axiosInstance.post(
`${import.meta.env.VITE_KRBL_API}/sight/${parentId}/article/order`,
{
articles: reorderedItems.map((item) => ({
id: item.id,
})),
}
);
} else {
axiosInstance.post( axiosInstance.post(
`${import.meta.env.VITE_KRBL_API}/route/${parentId}/station`, `${import.meta.env.VITE_KRBL_API}/route/${parentId}/station`,
{ {
@ -138,6 +152,7 @@ export const LinkedItems = <T extends { id: number; [key: string]: any }>({
})), })),
} }
); );
}
}; };
useEffect(() => { useEffect(() => {
@ -227,6 +242,7 @@ export const LinkedItems = <T extends { id: number; [key: string]: any }>({
if (childResource === "article") { if (childResource === "article") {
setPageNum(pageNum + 1); setPageNum(pageNum + 1);
} }
onUpdate?.();
}); });
}) })
.catch((error) => { .catch((error) => {
@ -247,6 +263,7 @@ export const LinkedItems = <T extends { id: number; [key: string]: any }>({
) )
.then(() => { .then(() => {
setLinkedItems((prev) => prev.filter((item) => item.id !== itemId)); setLinkedItems((prev) => prev.filter((item) => item.id !== itemId));
onUpdate?.();
}) })
.catch((error) => { .catch((error) => {
console.error("Error unlinking item:", error); console.error("Error unlinking item:", error);
@ -495,8 +512,12 @@ export const LinkedItems = <T extends { id: number; [key: string]: any }>({
</Stack> </Stack>
</AccordionDetails> </AccordionDetails>
</Accordion> </Accordion>
{!dontRecurse &&
<>
<ArticleEditModal /> <ArticleEditModal />
<StationEditModal /> <StationEditModal />
</> </>
}
</>
); );
}; };

View File

@ -18,6 +18,8 @@ import {
} from "../../media/MediaFormUtils"; } from "../../media/MediaFormUtils";
import { axiosInstance } from "../../../providers/data"; import { axiosInstance } from "../../../providers/data";
import { TOKEN_KEY } from "../../../authProvider"; import { TOKEN_KEY } from "../../../authProvider";
import { LinkedItems } from "../../../components/LinkedItems";
import { mediaFields, MediaItem } from "../../../pages/article/types";
const MemoizedSimpleMDE = memo(MarkdownEditor); const MemoizedSimpleMDE = memo(MarkdownEditor);
@ -29,15 +31,17 @@ type MediaFile = {
}; };
const style = { const style = {
position: "absolute", marginLeft: "auto",
top: "50%", marginRight: "auto",
left: "50%", //position: "absolute",
transform: "translate(-50%, -50%)", //top: "50%",
//left: "50%",
//transform: "translate(-50%, -50%)",
width: "60%", width: "60%",
bgcolor: "background.paper", bgcolor: "background.paper",
border: "2px solid #000", border: "2px solid #000",
boxShadow: 24, boxShadow: 24,
p: 4, p: 4
}; };
export const ArticleEditModal = observer(() => { export const ArticleEditModal = observer(() => {
@ -68,8 +72,8 @@ export const ArticleEditModal = observer(() => {
}, []); }, []);
// Load existing media files when editing an article // Load existing media files when editing an article
useEffect(() => {
const loadExistingMedia = async () => { const loadExistingMedia = async () => {
console.log("Called loadExistingMedia")
if (selectedArticleId) { if (selectedArticleId) {
try { try {
const response = await axiosInstance.get( const response = await axiosInstance.get(
@ -108,6 +112,7 @@ export const ArticleEditModal = observer(() => {
} }
}; };
useEffect(() => {
loadExistingMedia(); loadExistingMedia();
}, [selectedArticleId]); }, [selectedArticleId]);
@ -264,6 +269,7 @@ export const ArticleEditModal = observer(() => {
onClose={() => setArticleModalOpenAction(false)} onClose={() => setArticleModalOpenAction(false)}
aria-labelledby="modal-modal-title" aria-labelledby="modal-modal-title"
aria-describedby="modal-modal-description" aria-describedby="modal-modal-description"
sx={{overflow: "auto"}}
> >
<Box sx={style}> <Box sx={style}>
<Edit <Edit
@ -309,6 +315,19 @@ export const ArticleEditModal = observer(() => {
/> />
)} )}
/> />
{selectedArticleId && (
<LinkedItems<MediaItem>
type="edit"
parentId={selectedArticleId}
parentResource="article"
childResource="media"
fields={mediaFields}
title="медиа"
dontRecurse
onUpdate={loadExistingMedia}
/>
)}
</Box> </Box>
{/* Dropzone для медиа файлов */} {/* Dropzone для медиа файлов */}

View File

@ -978,14 +978,14 @@ export const SightEdit = observer(() => {
</Paper> </Paper>
</Box> </Box>
</Edit> </Edit>
{!leftArticleId && ( {/* {!leftArticleId && (
<CreateSightArticle <CreateSightArticle
parentId={sightId!} parentId={sightId!}
parentResource="sight" parentResource="sight"
childResource="article" childResource="article"
title="левую статью" title="левую статью"
/> />
)} )} */}
{leftArticleId && ( {leftArticleId && (
<Button <Button
variant="outlined" variant="outlined"