84 lines
2.2 KiB
React
84 lines
2.2 KiB
React
|
// @flow
|
||
|
import React, { useState, useEffect } from 'react';
|
||
|
import MarkdownPreview from 'component/common/markdown-preview';
|
||
|
import Button from 'component/button';
|
||
|
import I18nMessage from 'component/i18nMessage';
|
||
|
|
||
|
type Props = {
|
||
|
hideReleaseVersion?: boolean,
|
||
|
};
|
||
|
|
||
|
const LastReleaseChanges = (props: Props) => {
|
||
|
const { hideReleaseVersion } = props;
|
||
|
const [releaseTag, setReleaseTag] = useState('');
|
||
|
const [releaseChanges, setReleaseChanges] = useState('');
|
||
|
const [fetchingReleaseChanges, setFetchingReleaseChanges] = useState(false);
|
||
|
const [fetchReleaseFailed, setFetchReleaseFailed] = useState(false);
|
||
|
|
||
|
const releaseVersionTitle = (
|
||
|
<p>
|
||
|
{!hideReleaseVersion && __('A new version %release_tag% of LBRY is ready for you.', { release_tag: releaseTag })}
|
||
|
</p>
|
||
|
);
|
||
|
const seeReleaseNotes = (
|
||
|
<p className="help">
|
||
|
<I18nMessage
|
||
|
tokens={{
|
||
|
release_notes: (
|
||
|
<Button button="link" label={__('release notes')} href="https://github.com/lbryio/lbry-desktop/releases" />
|
||
|
),
|
||
|
}}
|
||
|
>
|
||
|
Want to know what has changed? See the %release_notes%.
|
||
|
</I18nMessage>
|
||
|
</p>
|
||
|
);
|
||
|
|
||
|
useEffect(() => {
|
||
|
const lastReleaseUrl = 'https://api.github.com/repos/lbryio/lbry-desktop/releases/latest';
|
||
|
const options = {
|
||
|
method: 'GET',
|
||
|
headers: { Accept: 'application/vnd.github.v3+json' },
|
||
|
};
|
||
|
|
||
|
setFetchingReleaseChanges(true);
|
||
|
fetch(lastReleaseUrl, options)
|
||
|
.then((response) => response.json())
|
||
|
.then((response) => {
|
||
|
setReleaseTag(response.tag_name);
|
||
|
setReleaseChanges(response.body);
|
||
|
setFetchingReleaseChanges(false);
|
||
|
setFetchReleaseFailed(false);
|
||
|
})
|
||
|
.catch(() => {
|
||
|
setFetchingReleaseChanges(false);
|
||
|
setFetchReleaseFailed(true);
|
||
|
});
|
||
|
}, []);
|
||
|
|
||
|
if (fetchingReleaseChanges) {
|
||
|
return <p>{__('Loading...')}</p>;
|
||
|
}
|
||
|
|
||
|
if (fetchReleaseFailed) {
|
||
|
return (
|
||
|
<div>
|
||
|
{releaseVersionTitle}
|
||
|
{seeReleaseNotes}
|
||
|
</div>
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return (
|
||
|
<div className="release__notes">
|
||
|
{releaseVersionTitle}
|
||
|
<p>
|
||
|
<MarkdownPreview content={releaseChanges} />
|
||
|
</p>
|
||
|
{seeReleaseNotes}
|
||
|
</div>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export default LastReleaseChanges;
|