Valentin D. Pinkman
7 years ago
committed by
GitHub
3 changed files with 130 additions and 127 deletions
@ -1,127 +0,0 @@ |
|||
// @flow
|
|||
import React, { PureComponent } from 'react' |
|||
import { translate } from 'react-i18next' |
|||
import styled from 'styled-components' |
|||
import network from 'api/network' |
|||
|
|||
import { MODAL_RELEASES_NOTES } from 'config/constants' |
|||
import Modal, { ModalBody, ModalTitle, ModalContent, ModalFooter } from 'components/base/Modal' |
|||
|
|||
import Button from 'components/base/Button' |
|||
import Box from 'components/base/Box' |
|||
import GrowScroll from 'components/base/GrowScroll' |
|||
import Text from 'components/base/Text' |
|||
import Spinner from 'components/base/Spinner' |
|||
import GradientBox from 'components/GradientBox' |
|||
import TrackPage from 'analytics/TrackPage' |
|||
import Markdow, { Notes } from 'components/base/Markdown' |
|||
|
|||
import type { T } from 'types/common' |
|||
|
|||
type Props = { |
|||
t: T, |
|||
} |
|||
|
|||
type State = { |
|||
markdown: ?string, |
|||
} |
|||
|
|||
const Title = styled(Text).attrs({ |
|||
ff: 'Museo Sans', |
|||
fontSize: 5, |
|||
color: 'dark', |
|||
})`` |
|||
|
|||
class ReleaseNotes extends PureComponent<Props, State> { |
|||
state = { |
|||
markdown: null, |
|||
} |
|||
|
|||
loading = false |
|||
|
|||
fetchNotes = version => { |
|||
if (!this.loading) { |
|||
this.loading = true |
|||
|
|||
network({ |
|||
method: 'GET', |
|||
url: `https://api.github.com/repos/LedgerHQ/ledger-live-desktop/releases/tags/v${version}`, |
|||
}) |
|||
.then(response => { |
|||
const { body } = response.data |
|||
|
|||
this.setState( |
|||
{ |
|||
markdown: body, |
|||
}, |
|||
() => { |
|||
this.loading = false |
|||
}, |
|||
) |
|||
}) |
|||
.catch(() => { |
|||
this.setState( |
|||
{ |
|||
markdown: this.props.t('app:common.error.load'), |
|||
}, |
|||
() => { |
|||
this.loading = false |
|||
}, |
|||
) |
|||
}) |
|||
} |
|||
} |
|||
|
|||
render() { |
|||
const { t } = this.props |
|||
const renderBody = ({ data, onClose }) => { |
|||
const version = data |
|||
const { markdown } = this.state |
|||
let content |
|||
|
|||
if (markdown === null) { |
|||
this.fetchNotes(version) |
|||
|
|||
content = ( |
|||
<Box horizontal alignItems="center"> |
|||
<Spinner |
|||
size={32} |
|||
style={{ |
|||
margin: 'auto', |
|||
}} |
|||
/> |
|||
</Box> |
|||
) |
|||
} else { |
|||
content = ( |
|||
<Notes> |
|||
<Title>{t('app:releaseNotes.version', { versionNb: version })}</Title> |
|||
<Markdow>{markdown}</Markdow> |
|||
</Notes> |
|||
) |
|||
} |
|||
|
|||
return ( |
|||
<ModalBody onClose={onClose}> |
|||
<TrackPage category="Modal" name="ReleaseNotes" /> |
|||
<ModalTitle>{t('app:releaseNotes.title')}</ModalTitle> |
|||
<ModalContent relative style={{ height: 500 }} px={0} pb={0}> |
|||
<GrowScroll px={5} pb={8}> |
|||
{content} |
|||
</GrowScroll> |
|||
<GradientBox /> |
|||
</ModalContent> |
|||
<ModalFooter horizontal justifyContent="flex-end"> |
|||
<Button onClick={onClose} primary> |
|||
{t('app:common.continue')} |
|||
</Button> |
|||
</ModalFooter> |
|||
</ModalBody> |
|||
) |
|||
} |
|||
|
|||
return <Modal name={MODAL_RELEASES_NOTES} render={renderBody} /> |
|||
} |
|||
} |
|||
|
|||
export default translate()(ReleaseNotes) |
@ -0,0 +1,114 @@ |
|||
// @flow
|
|||
import React, { PureComponent } from 'react' |
|||
import { translate } from 'react-i18next' |
|||
import styled from 'styled-components' |
|||
|
|||
import network from 'api/network' |
|||
|
|||
import Button from 'components/base/Button' |
|||
import Box from 'components/base/Box' |
|||
import GrowScroll from 'components/base/GrowScroll' |
|||
import Text from 'components/base/Text' |
|||
import Spinner from 'components/base/Spinner' |
|||
import GradientBox from 'components/GradientBox' |
|||
import TrackPage from 'analytics/TrackPage' |
|||
import Markdow, { Notes } from 'components/base/Markdown' |
|||
import { ModalBody, ModalTitle, ModalContent, ModalFooter } from 'components/base/Modal' |
|||
|
|||
import type { T } from 'types/common' |
|||
|
|||
type Props = { |
|||
version: string, |
|||
onClose: () => void, |
|||
t: T, |
|||
} |
|||
|
|||
type State = { |
|||
markdown: ?string, |
|||
} |
|||
|
|||
const Title = styled(Text).attrs({ |
|||
ff: 'Museo Sans', |
|||
fontSize: 5, |
|||
color: 'dark', |
|||
})`` |
|||
|
|||
class ReleaseNotesBody extends PureComponent<Props, State> { |
|||
state = { |
|||
markdown: null, |
|||
} |
|||
|
|||
componentDidMount() { |
|||
const { version } = this.props |
|||
this.fetchNotes(version) |
|||
} |
|||
|
|||
fetchNotes = async (version: string) => { |
|||
try { |
|||
const { |
|||
data: { body }, |
|||
} = await network({ |
|||
method: 'GET', |
|||
url: `https://api.github.com/repos/LedgerHQ/ledger-live-desktop/releases/tags/v${version}`, |
|||
}) |
|||
if (body) { |
|||
this.setState({ markdown: body }) |
|||
} else { |
|||
this.setState({ markdown: this.props.t('app:common.error.load') }) |
|||
} |
|||
} catch (error) { |
|||
this.setState({ markdown: this.props.t('app:common.error.load') }) |
|||
} |
|||
} |
|||
|
|||
renderContent = () => { |
|||
const { markdown } = this.state |
|||
const { t } = this.props |
|||
|
|||
const { version } = this.props |
|||
|
|||
if (markdown) { |
|||
return ( |
|||
<Notes> |
|||
<Title>{t('app:releaseNotes.version', { versionNb: version })}</Title> |
|||
<Markdow>{markdown}</Markdow> |
|||
</Notes> |
|||
) |
|||
} |
|||
|
|||
return ( |
|||
<Box horizontal alignItems="center"> |
|||
<Spinner |
|||
size={32} |
|||
style={{ |
|||
margin: 'auto', |
|||
}} |
|||
/> |
|||
</Box> |
|||
) |
|||
} |
|||
|
|||
render() { |
|||
const { onClose, t } = this.props |
|||
|
|||
return ( |
|||
<ModalBody onClose={onClose}> |
|||
<TrackPage category="Modal" name="ReleaseNotes" /> |
|||
<ModalTitle>{t('app:releaseNotes.title')}</ModalTitle> |
|||
<ModalContent relative style={{ height: 500 }} px={0} pb={0}> |
|||
<GrowScroll px={5} pb={8}> |
|||
{this.renderContent()} |
|||
</GrowScroll> |
|||
<GradientBox /> |
|||
</ModalContent> |
|||
<ModalFooter horizontal justifyContent="flex-end"> |
|||
<Button onClick={onClose} primary> |
|||
{t('app:common.continue')} |
|||
</Button> |
|||
</ModalFooter> |
|||
</ModalBody> |
|||
) |
|||
} |
|||
} |
|||
|
|||
export default translate()(ReleaseNotesBody) |
@ -0,0 +1,16 @@ |
|||
// @flow
|
|||
import React from 'react' |
|||
|
|||
import { MODAL_RELEASES_NOTES } from 'config/constants' |
|||
import Modal from 'components/base/Modal' |
|||
|
|||
import ReleaseNotesBody from './ReleaseNotesBody' |
|||
|
|||
const ReleaseNotesModal = () => ( |
|||
<Modal |
|||
name={MODAL_RELEASES_NOTES} |
|||
render={({ data, onClose }) => <ReleaseNotesBody version={data} onClose={onClose} />} |
|||
/> |
|||
) |
|||
|
|||
export default ReleaseNotesModal |
Loading…
Reference in new issue