+ Ссылка на ваш публичный профиль: +
+Загрузка...
diff --git a/src/pages/PublicProfilePage.tsx b/src/pages/PublicProfilePage.tsx new file mode 100644 index 0000000..2a69f84 --- /dev/null +++ b/src/pages/PublicProfilePage.tsx @@ -0,0 +1,221 @@ +import React, { useEffect, useState } from "react"; +import { useParams, useNavigate } from "react-router-dom"; +import { Icon } from "@iconify/react"; +import { userApi } from "../api/userApi"; +import { notesApi } from "../api/notesApi"; +import { Note } from "../types/note"; +import { PublicNoteItem } from "../components/notes/PublicNoteItem"; +import { ImageModal } from "../components/common/ImageModal"; +import { ThemeToggle } from "../components/common/ThemeToggle"; +import { useNotification } from "../hooks/useNotification"; +import { useTheme } from "../hooks/useTheme"; + +const PublicProfilePage: React.FC = () => { + const { username } = useParams<{ username: string }>(); + const navigate = useNavigate(); + const { showNotification } = useNotification(); + const { theme } = useTheme(); + + const [profile, setProfile] = useState<{ username: string; avatar?: string } | null>(null); + const [notes, setNotes] = useStateЗагрузка...
+{error}
+ ++ {notes.length} {notes.length === 1 ? "заметка" : notes.length < 5 ? "заметки" : "заметок"} +
+У пользователя пока нет публичных заметок
+${langLabel}${highlightedCode}`;
- },
+ };
+
+ return renderer;
};
-// Настройка marked
+// Настройка marked (базовая конфигурация)
marked.use({
extensions: [spoilerExtension],
gfm: true,
breaks: true,
- renderer,
});
-export const parseMarkdown = (text: string): string => {
- return marked.parse(text) as string;
+export const parseMarkdown = (text: string, isReadOnly: boolean = false): string => {
+ const renderer = createRenderer(isReadOnly);
+ // Используем marked.parse с renderer
+ const result = marked.parse(text, { renderer });
+ return result as string;
};
// Функция для извлечения тегов из текста