/** * @prettier * @flow */ import React, { Component } from 'react'; import Grid from '@material-ui/core/Grid/index'; import Loading from '../../components/Loading'; import DetailContainer from '../../components/DetailContainer'; import DetailSidebar from '../../components/DetailSidebar'; import { callDetailPage } from '../../utils/calls'; import { getRouterPackageName } from '../../utils/package'; import NotFound from '../../components/NotFound'; export const DetailContext = React.createContext(); export const DetailContextProvider = DetailContext.Provider; export const DetailContextConsumer = DetailContext.Consumer; class VersionPage extends Component { constructor(props: any) { super(props); this.state = { readMe: '', packageName: getRouterPackageName(props.match), packageMeta: null, isLoading: true, notFound: false, }; } async componentDidMount() { await this.loadPackageInfo(); } /* eslint no-unused-vars: 0 */ async componentDidUpdate(nextProps: any, prevState: any) { const { packageName } = this.state; if (packageName !== prevState.packageName) { const { readMe, packageMeta } = await callDetailPage(packageName); this.setState({ readMe, packageMeta, packageName, notFound: false, isLoading: false, }); } } static getDerivedStateFromProps(nextProps: any, prevState: any) { const { match } = nextProps; const packageName = getRouterPackageName(match); if (packageName !== prevState.packageName) { try { return { packageName, isLoading: false, }; } catch (err) { return { notFound: true, isLoading: false, }; } } else { return null; } } async loadPackageInfo() { const { packageName } = this.state; // FIXME: use utility document.title = `Verdaccio - ${packageName}`; this.setState({ readMe: '', }); try { const { readMe, packageMeta } = await callDetailPage(packageName); this.setState({ readMe, packageMeta, packageName, notFound: false, isLoading: false, }); } catch (err) { this.setState({ notFound: true, packageName, isLoading: false, }); } } enableLoading = () => { this.setState({ isLoading: true, }); }; render() { const { isLoading, packageMeta, readMe, packageName } = this.state; if (isLoading) { return ; } else if (!packageMeta) { return ; } else { return ( {this.renderDetail()} {this.renderSidebar()} ); } } renderDetail() { return ; } renderSidebar() { return ; } } export default VersionPage;