import { DocumentTextIcon } from '@heroicons/react/outline'; import React, { useState } from 'react'; import { defineMessages, FormattedRelativeTime, useIntl } from 'react-intl'; import ReactMarkdown from 'react-markdown'; import useSWR from 'swr'; import globalMessages from '../../../../i18n/globalMessages'; import Alert from '../../../Common/Alert'; import Badge from '../../../Common/Badge'; import Button from '../../../Common/Button'; import LoadingSpinner from '../../../Common/LoadingSpinner'; import Modal from '../../../Common/Modal'; import Transition from '../../../Transition'; const messages = defineMessages({ releases: 'Releases', releasedataMissing: 'Release data unavailable. Is GitHub down?', versionChangelog: 'Version Changelog', viewongithub: 'View on GitHub', latestversion: 'Latest', currentversion: 'Current Version', viewchangelog: 'View Changelog', runningDevelopMessage: 'The latest changes to the develop branch of Overseerr are not shown below. Please see the commit history for this branch on GitHub for details.', }); 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-') && ( {msg}; }, GithubLink: function GithubLink(msg) { return ( {msg} ); }, })} /> )} {data?.map((release, index) => { return (
); })}
); }; export default Releases;