/* eslint-disable @typescript-eslint/no-unnecessary-condition */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/restrict-plus-operands */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-call */ import Markdown from 'react-markdown' import { Link as RouterLink } from 'react-router-dom' import rehypeRaw from 'rehype-raw' import rehypeSanitize, { defaultSchema } from 'rehype-sanitize' import remarkBreaks from 'remark-breaks' import remarkGfm from 'remark-gfm' import { visit } from 'unist-util-visit' import { RichTextEditor } from '#components/Input/RichTextEditor/RichTextEditor' import { useAddFilterTag } from '#components/Map/hooks/useFilter' import { useTags } from '#components/Map/hooks/useTags' import { decodeTag } from '#utils/FormatTags' import { hashTagRegex } from '#utils/HashTagRegex' import { fixUrls, mailRegex } from '#utils/ReplaceURLs' import type { Item } from '#types/Item' import type { Tag } from '#types/Tag' import type { Root } from 'hast' /** * @category Map */ export const TextView = ({ item, itemId, text, truncate = false, rawText, }: { item?: Item itemId?: string text?: string truncate?: boolean rawText?: string }) => { if (item) { text = item.text itemId = item.id } const tags = useTags() const addFilterTag = useAddFilterTag() const origin = window.location.origin let innerText = '' let replacedText = '' if (rawText) { innerText = replacedText = rawText } else if (text) { innerText = text } if (innerText && truncate) innerText = truncateText(removeMarkdownKeepParagraphs(innerText), 100) if (innerText) replacedText = fixUrls(innerText) if (replacedText) { replacedText = replacedText.replace(mailRegex, (url) => { return `[${url}](mailto:${url})` }) } if (replacedText) { replacedText = replacedText.replace(hashTagRegex, (match) => { return `[${match}](${match})` }) } const HashTag = ({ children, tag, itemId }: { children: string; tag: Tag; itemId?: string }) => { return ( { e.stopPropagation() addFilterTag(tag) }} > {decodeTag(children)} ) } const Link = ({ href, children }: { href: string; children: string }) => { // Youtube if (href.startsWith('https://www.youtube.com/watch?v=')) { const videoId = href?.split('v=')[1].split('&')[0] const youtubeEmbedUrl = `https://www.youtube-nocookie.com/embed/${videoId}` return (