import React, { useState } from 'react'; import useSWR from 'swr'; import ReactMarkdown from 'react-markdown'; import LoadingSpinner from '../../../Common/LoadingSpinner'; import Alert from '../../../Common/Alert'; import Badge from '../../../Common/Badge'; import Button from '../../../Common/Button'; import Modal from '../../../Common/Modal'; import Transition from '../../../Transition'; import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl'; import globalMessages from '../../../../i18n/globalMessages'; const messages = defineMessages({ releases: 'Releases', releasedataMissing: 'Release data unavailable. Is GitHub down?', versionChangelog: 'Version Changelog', viewongithub: 'View on GitHub', latestversion: 'Latest Version', currentversion: 'Current Version', viewchangelog: 'View Changelog', runningDevelop: 'You are running a develop version of Overseerr!', runningDevelopMessage: 'The changes in your version will not be available below. Please see the GitHub repository for latest updates.', }); const REPO_RELEASE_API = 'https://api.github.com/repos/sct/overseerr/releases?per_page=20'; interface GitHubRelease { url: string; assets_url: string; upload_url: string; html_url: string; id: number; node_id: string; tag_name: string; target_commitish: string; name: string; draft: boolean; prerelease: boolean; created_at: string; published_at: string; tarball_url: string; zipball_url: string; body: string; } interface ReleaseProps { release: GitHubRelease; isLatest: boolean; currentVersion: string; } const Release: React.FC = ({ currentVersion, release, isLatest, }) => { const intl = useIntl(); const [isModalOpen, setModalOpen] = useState(false); return (
setModalOpen(false)} iconSvg={ } title={intl.formatMessage(messages.versionChangelog)} cancelText={intl.formatMessage(globalMessages.close)} okText={intl.formatMessage(messages.viewongithub)} onOk={() => { window.open(release.html_url, '_blank'); }} >
{release.body}
{release.name} {isLatest && ( {intl.formatMessage(messages.latestversion)} )} {release.name.includes(currentVersion) && ( {intl.formatMessage(messages.currentversion)} )}
); }; interface ReleasesProps { currentVersion: string; } const Releases: React.FC = ({ currentVersion }) => { const intl = useIntl(); const { data, error } = useSWR(REPO_RELEASE_API); if (!data && !error) { return ; } if (!data) { return (
{intl.formatMessage(messages.releasedataMissing)}
); } return (

{intl.formatMessage(messages.releases)}

{currentVersion.startsWith('develop-') && ( {intl.formatMessage(messages.runningDevelopMessage, { GithubLink: function GithubLink(msg) { return ( {msg} ); }, })} )} {data?.map((release, index) => { return (
); })}
); }; export default Releases;