/* * SonarQube * Copyright (C) 2009-2023 SonarSource SA * mailto:info AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import * as React from 'react'; import { isSuccessStatus } from '../../../helpers/request'; import './MetaData.css'; import MetaDataVersions from './MetaDataVersions'; import { MetaDataInformation } from './update-center-metadata'; interface Props { updateCenterKey?: string; } interface State { data?: MetaDataInformation; } export default class MetaData extends React.Component { mounted = false; state: State = {}; componentDidMount() { this.mounted = true; this.fetchData(); } componentDidUpdate(prevProps: Props) { if (prevProps.updateCenterKey !== this.props.updateCenterKey) { this.fetchData(); } } componentWillUnmount() { this.mounted = false; } fetchData() { const { updateCenterKey } = this.props; if (updateCenterKey) { window .fetch(`https://update.sonarsource.org/${updateCenterKey}.json`) .then((response: Response) => { if (isSuccessStatus(response.status)) { return response.json(); } return Promise.reject(response); }) .then((data) => { if (this.mounted) { this.setState({ data }); } }) .catch(() => { if (this.mounted) { this.setState({ data: undefined }); } }); } else { this.setState({ data: undefined }); } } render() { const { data } = this.state; if (!data) { return null; } const { isSonarSourceCommercial, issueTrackerURL, license, organization, versions } = data; let vendor; if (organization) { vendor = organization.name; if (organization.url) { vendor = ( {vendor} ); } } return (
{vendor && By {vendor}} {license && {license}} {issueTrackerURL && ( Issue Tracker )} {isSonarSourceCommercial && ( Supported by SonarSource )}
{versions && versions.length > 0 && }
); } }