diff --git a/src/components/ChangelogModal.tsx b/src/components/ChangelogModal.tsx index 892bb404..b53a3d76 100644 --- a/src/components/ChangelogModal.tsx +++ b/src/components/ChangelogModal.tsx @@ -5,6 +5,7 @@ import { Sparkles } from 'lucide-react'; import { version } from '../../package.json'; import changelogRaw from '../../CHANGELOG.md?raw'; import { useAuthStore } from '../store/authStore'; +import { findChangelogReleaseEntry } from '../utils/changelogReleaseMatch'; function renderInline(text: string): React.ReactNode[] { const parts = text.split(/(\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`)/g); @@ -29,15 +30,7 @@ export default function ChangelogModal({ onClose }: Props) { const setShowChangelogOnUpdate = useAuthStore(s => s.setShowChangelogOnUpdate); const setLastSeenChangelogVersion = useAuthStore(s => s.setLastSeenChangelogVersion); - const currentVersionData = useMemo(() => { - const blocks = changelogRaw.split(/\n(?=## \[)/).filter((b: string) => b.startsWith('## [')); - const block = blocks.find((b: string) => b.startsWith(`## [${version}]`)); - if (!block) return null; - const lines = block.split('\n'); - const match = lines[0].match(/## \[([^\]]+)\](?:\s*-\s*(.+))?/); - const body = lines.slice(1).join('\n').trim(); - return { version: match?.[1] ?? version, date: match?.[2] ?? '', body }; - }, []); + const currentVersionData = useMemo(() => findChangelogReleaseEntry(changelogRaw, version), []); const handleClose = () => { if (dontShow) setShowChangelogOnUpdate(false); diff --git a/src/pages/WhatsNew.tsx b/src/pages/WhatsNew.tsx index 33204e2d..9bdda429 100644 --- a/src/pages/WhatsNew.tsx +++ b/src/pages/WhatsNew.tsx @@ -4,6 +4,7 @@ import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { version } from '../../package.json'; import changelogRaw from '../../CHANGELOG.md?raw'; +import { findChangelogReleaseEntry } from '../utils/changelogReleaseMatch'; import { renderChangelogBody } from '../utils/changelogMarkdown'; export default function WhatsNew() { @@ -15,15 +16,7 @@ export default function WhatsNew() { else navigate('/'); }; - const entry = useMemo(() => { - const blocks = changelogRaw.split(/\n(?=## \[)/).filter((b: string) => b.startsWith('## [')); - const block = blocks.find((b: string) => b.startsWith(`## [${version}]`)); - if (!block) return null; - const lines = block.split('\n'); - const match = lines[0].match(/## \[([^\]]+)\](?:\s*-\s*(.+))?/); - const body = lines.slice(1).join('\n').trim(); - return { version: match?.[1] ?? version, date: match?.[2] ?? '', body }; - }, []); + const entry = useMemo(() => findChangelogReleaseEntry(changelogRaw, version), []); return (