]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-15297 Remove dependency on sonar-ui-common for sonar-docs
authorWouter Admiraal <wouter.admiraal@sonarsource.com>
Thu, 19 Aug 2021 06:58:22 +0000 (08:58 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 20 Aug 2021 20:03:09 +0000 (20:03 +0000)
18 files changed:
server/sonar-docs/build.gradle
server/sonar-docs/package.json
server/sonar-docs/src/components/MetaData.css [new file with mode: 0644]
server/sonar-docs/src/components/MetaData.tsx [new file with mode: 0644]
server/sonar-docs/src/components/MetaDataVersion.tsx [new file with mode: 0644]
server/sonar-docs/src/components/MetaDataVersions.tsx [new file with mode: 0644]
server/sonar-docs/src/components/__tests__/MetaData-test.tsx [new file with mode: 0644]
server/sonar-docs/src/components/__tests__/MetaDataVersion-test.tsx [new file with mode: 0644]
server/sonar-docs/src/components/__tests__/MetaDataVersions-test.tsx [new file with mode: 0644]
server/sonar-docs/src/components/__tests__/VersionSelect-test.tsx
server/sonar-docs/src/components/__tests__/__snapshots__/MetaData-test.tsx.snap [new file with mode: 0644]
server/sonar-docs/src/components/__tests__/__snapshots__/MetaDataVersion-test.tsx.snap [new file with mode: 0644]
server/sonar-docs/src/components/__tests__/__snapshots__/MetaDataVersions-test.tsx.snap [new file with mode: 0644]
server/sonar-docs/src/components/mocks/update-center-metadata.ts [new file with mode: 0644]
server/sonar-docs/src/components/update-center-metadata.ts [new file with mode: 0644]
server/sonar-docs/src/templates/page.tsx
server/sonar-docs/src/utils/testUtils.ts [new file with mode: 0644]
server/sonar-docs/yarn.lock

index b620475a4c3eef761ebb52d1f24b77058766d924..d0fc7a471b9d69fcfb725f007a0c6e3c05ca4537 100644 (file)
@@ -55,10 +55,6 @@ task extractAnalyzerDocFiles {
   }
 }
 
-yarn.configure {
-  dependsOn tasks.getByPath(':server:sonar-ui-common:yarn_run')
-}
-
 yarn_run {
   def docsVersion = version.split("[.-]").take(2).join('.')
   environment = [ GATSBY_DOCS_VERSION: docsVersion ]
index 64eb7a6a4179d77217e28b160f27bc4b2e57ada4..2c1afc4adcaafa853bf2286f1ddd3357ffca5019 100644 (file)
@@ -23,7 +23,6 @@
     "react-helmet": "5.2.1",
     "react-typography": "0.16.19",
     "rehype-react": "6.1.0",
-    "sonar-ui-common": "../sonar-ui-common/build/dist",
     "typography": "0.16.19"
   },
   "devDependencies": {
     "classNameTemplate": "{classname}",
     "titleTemplate": "{title}"
   }
-}
+}
\ No newline at end of file
diff --git a/server/sonar-docs/src/components/MetaData.css b/server/sonar-docs/src/components/MetaData.css
new file mode 100644 (file)
index 0000000..6bc5a63
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2021 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.
+ */
+.update-center-meta-data {
+  margin: 16px 0;
+  padding: 16px 16px 8px 16px;
+  background: #f9f9fb;
+  border: 1px solid #e6e6e6;
+  border-radius: 3px;
+}
+
+.update-center-meta-data a svg {
+  margin-right: 8px;
+}
+
+.update-center-meta-data-header {
+  border-bottom: 1px solid #cfd3d7;
+  padding-bottom: 16px;
+}
+
+.update-center-meta-data-header,
+.update-center-meta-data-version-release-info,
+.update-center-meta-data-version-links {
+  display: flex;
+}
+
+.update-center-meta-data-header > * + *,
+.update-center-meta-data-version-release-info > * + * {
+  margin-left: 16px;
+}
+
+.update-center-meta-data-header > * + * {
+  padding-left: 16px;
+  border-left: 1px solid #cfd3d7;
+}
+
+.update-center-meta-data-versions {
+  margin-top: 16px;
+}
+
+.update-center-meta-data-versions-show-more {
+  font-size: 14px;
+  float: right;
+  color: #51575a;
+  border-color: #7b8184;
+  border-width: 0 0 1px 0;
+  padding-left: 0;
+  padding-right: 0;
+  background: transparent;
+  cursor: pointer;
+}
+
+.update-center-meta-data-versions-show-more:hover {
+  color: #2d3032;
+  border-color: #2d3032;
+}
+
+.update-center-meta-data-version {
+  margin-bottom: 16px;
+}
+
+.update-center-meta-data-version + .update-center-meta-data-version {
+  padding-top: 8px;
+  border-top: 1px dashed #cfd3d7;
+}
+
+.update-center-meta-data-version-version {
+  font-weight: bold;
+  font-size: 18px;
+}
+
+.update-center-meta-data-version-release-info {
+  margin-top: 8px;
+  font-style: italic;
+}
+
+.update-center-meta-data-version-release-description {
+  margin-top: 8px;
+}
+
+.update-center-meta-data-version-download > a,
+.update-center-meta-data-version-release-notes > a {
+  display: inline-block;
+  margin: 8px 16px 0 0;
+}
diff --git a/server/sonar-docs/src/components/MetaData.tsx b/server/sonar-docs/src/components/MetaData.tsx
new file mode 100644 (file)
index 0000000..1b18765
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2021 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 './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<Props, State> {
+  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;
+  }
+
+  isSuccessStatus = (status: number) => {
+    return status >= 200 && status < 300;
+  };
+
+  fetchData() {
+    const { updateCenterKey } = this.props;
+
+    if (updateCenterKey) {
+      window
+        .fetch(`https://update.sonarsource.org/${updateCenterKey}.json`)
+        .then((response: Response) => {
+          if (this.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 = (
+          <a href={organization.url} rel="noopener noreferrer" target="_blank">
+            {vendor}
+          </a>
+        );
+      }
+    }
+
+    return (
+      <div className="update-center-meta-data">
+        <div className="update-center-meta-data-header">
+          {vendor && <span className="update-center-meta-data-vendor">By {vendor}</span>}
+          {license && <span className="update-center-meta-data-license">{license}</span>}
+          {issueTrackerURL && (
+            <span className="update-center-meta-data-issue-tracker">
+              <a href={issueTrackerURL} rel="noopener noreferrer" target="_blank">
+                Issue Tracker
+              </a>
+            </span>
+          )}
+          {isSonarSourceCommercial && (
+            <span className="update-center-meta-data-supported">Supported by SonarSource</span>
+          )}
+        </div>
+        {versions && versions.length > 0 && <MetaDataVersions versions={versions} />}
+      </div>
+    );
+  }
+}
diff --git a/server/sonar-docs/src/components/MetaDataVersion.tsx b/server/sonar-docs/src/components/MetaDataVersion.tsx
new file mode 100644 (file)
index 0000000..b8c3bbe
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2021 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 classNames from 'classnames';
+import * as React from 'react';
+import { AdvancedDownloadUrl, MetaDataVersionInformation } from './update-center-metadata';
+
+export interface MetaDataVersionProps {
+  versionInformation: MetaDataVersionInformation;
+}
+
+export default function MetaDataVersion(props: MetaDataVersionProps) {
+  const {
+    versionInformation: {
+      archived,
+      changeLogUrl,
+      compatibility,
+      date,
+      description,
+      downloadURL,
+      version
+    }
+  } = props;
+
+  const fallbackLabel = 'Download';
+
+  const advancedDownloadUrls = isAdvancedDownloadUrlArray(downloadURL)
+    ? downloadURL.map(url => ({ ...url, label: url.label || fallbackLabel }))
+    : [{ label: fallbackLabel, url: downloadURL }];
+
+  return (
+    <div
+      className={classNames('update-center-meta-data-version', {
+        'update-center-meta-data-version-archived': archived
+      })}>
+      <div className="update-center-meta-data-version-version">{version}</div>
+
+      <div className="update-center-meta-data-version-release-info">
+        {date && <time className="update-center-meta-data-version-release-date">{date}</time>}
+
+        {compatibility && (
+          <span className="update-center-meta-data-version-compatibility">{compatibility}</span>
+        )}
+      </div>
+
+      {description && (
+        <div className="update-center-meta-data-version-release-description">{description}</div>
+      )}
+
+      {(advancedDownloadUrls.length > 0 || changeLogUrl) && (
+        <div className="update-center-meta-data-version-release-links">
+          {advancedDownloadUrls.length > 0 &&
+            advancedDownloadUrls.map(
+              (advancedDownloadUrl, i) =>
+                advancedDownloadUrl.url && (
+                  // eslint-disable-next-line react/no-array-index-key
+                  <span className="update-center-meta-data-version-download" key={i}>
+                    <a href={advancedDownloadUrl.url} rel="noopener noreferrer" target="_blank">
+                      {advancedDownloadUrl.label}
+                    </a>
+                  </span>
+                )
+            )}
+
+          {changeLogUrl && (
+            <span className="update-center-meta-data-version-release-notes">
+              <a href={changeLogUrl} rel="noopener noreferrer" target="_blank">
+                Release notes
+              </a>
+            </span>
+          )}
+        </div>
+      )}
+    </div>
+  );
+}
+
+function isAdvancedDownloadUrlArray(
+  downloadUrl: string | AdvancedDownloadUrl[] | undefined
+): downloadUrl is AdvancedDownloadUrl[] {
+  return !!downloadUrl && typeof downloadUrl !== 'string';
+}
diff --git a/server/sonar-docs/src/components/MetaDataVersions.tsx b/server/sonar-docs/src/components/MetaDataVersions.tsx
new file mode 100644 (file)
index 0000000..b92f9ef
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2021 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 MetaDataVersion from './MetaDataVersion';
+import { MetaDataVersionInformation } from './update-center-metadata';
+
+interface Props {
+  versions: MetaDataVersionInformation[];
+}
+
+interface State {
+  collapsed: boolean;
+}
+
+export default class MetaDataVersions extends React.Component<Props, State> {
+  state: State = {
+    collapsed: true
+  };
+
+  componentDidUpdate(prevProps: Props) {
+    if (prevProps.versions !== this.props.versions) {
+      this.setState({ collapsed: true });
+    }
+  }
+
+  handleClick = (event: React.SyntheticEvent<HTMLButtonElement>) => {
+    event.preventDefault();
+    event.currentTarget.blur();
+    this.setState(({ collapsed }) => ({ collapsed: !collapsed }));
+  };
+
+  render() {
+    const { versions } = this.props;
+    const { collapsed } = this.state;
+
+    const archivedVersions = versions.filter(version => version.archived);
+    const currentVersions = versions.filter(version => !version.archived);
+
+    return (
+      <div className="update-center-meta-data-versions">
+        {archivedVersions.length > 0 && (
+          <button
+            className="update-center-meta-data-versions-show-more"
+            onClick={this.handleClick}
+            type="button">
+            {collapsed ? 'Show more versions' : 'Show fewer versions'}
+          </button>
+        )}
+
+        {currentVersions.map(versionInformation => (
+          <MetaDataVersion
+            key={versionInformation.version}
+            versionInformation={versionInformation}
+          />
+        ))}
+
+        {!collapsed &&
+          archivedVersions.map(archivedVersionInformation => (
+            <MetaDataVersion
+              key={archivedVersionInformation.version}
+              versionInformation={archivedVersionInformation}
+            />
+          ))}
+      </div>
+    );
+  }
+}
diff --git a/server/sonar-docs/src/components/__tests__/MetaData-test.tsx b/server/sonar-docs/src/components/__tests__/MetaData-test.tsx
new file mode 100644 (file)
index 0000000..4048d26
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2021 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 { shallow } from 'enzyme';
+import * as React from 'react';
+import { waitAndUpdate } from '../../utils/testUtils';
+import MetaData from '../MetaData';
+import { mockMetaDataInformation } from '../mocks/update-center-metadata';
+import { MetaDataInformation } from '../update-center-metadata';
+
+beforeAll(() => {
+  window.fetch = jest.fn();
+});
+
+beforeEach(() => {
+  jest.resetAllMocks();
+});
+
+it('should render correctly', async () => {
+  const metaDataInfo = mockMetaDataInformation();
+  mockFetchReturnValue(metaDataInfo);
+
+  const wrapper = shallowRender();
+  await waitAndUpdate(wrapper);
+  expect(wrapper).toMatchSnapshot();
+});
+
+it('should render correctly with organization', async () => {
+  const metaDataInfo = mockMetaDataInformation({
+    organization: { name: 'test-org', url: 'test-org-url' }
+  });
+  mockFetchReturnValue(metaDataInfo);
+
+  const wrapper = shallowRender();
+  await waitAndUpdate(wrapper);
+  expect(wrapper).toMatchSnapshot();
+});
+
+it('should not render anything if call for metadata fails', async () => {
+  const metaDataInfo = mockMetaDataInformation();
+  mockFetchReturnValue(metaDataInfo, '404');
+
+  const wrapper = shallowRender();
+  await waitAndUpdate(wrapper);
+  expect(wrapper.type()).toBeNull();
+});
+
+it('should fetch metadata again if the update center key if modified', async () => {
+  const metaDataInfo = mockMetaDataInformation();
+  mockFetchReturnValue(metaDataInfo);
+
+  const wrapper = shallowRender();
+  await waitAndUpdate(wrapper);
+
+  expect(window.fetch).toHaveBeenCalledTimes(1);
+
+  mockFetchReturnValue(metaDataInfo);
+  wrapper.setProps({ updateCenterKey: 'abap' });
+
+  expect(window.fetch).toHaveBeenCalledTimes(2);
+});
+
+function shallowRender(props?: Partial<MetaData['props']>) {
+  return shallow<MetaData>(<MetaData updateCenterKey="apex" {...props} />);
+}
+
+function mockFetchReturnValue(metaDataInfo: MetaDataInformation, status = '200') {
+  (window.fetch as jest.Mock).mockResolvedValueOnce({ status, json: () => metaDataInfo });
+}
diff --git a/server/sonar-docs/src/components/__tests__/MetaDataVersion-test.tsx b/server/sonar-docs/src/components/__tests__/MetaDataVersion-test.tsx
new file mode 100644 (file)
index 0000000..285a0f8
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2021 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 { shallow } from 'enzyme';
+import * as React from 'react';
+import MetaDataVersion, { MetaDataVersionProps } from '../MetaDataVersion';
+import { mockMetaDataVersionInformation } from '../mocks/update-center-metadata';
+
+it('should render correctly', () => {
+  expect(shallowRender()).toMatchSnapshot();
+  expect(
+    shallowRender({
+      versionInformation: mockMetaDataVersionInformation({
+        downloadURL: [{ label: 'macos 64 bits', url: '' }]
+      })
+    })
+  ).toMatchSnapshot('with advanced downloadUrl');
+  expect(
+    shallowRender({
+      versionInformation: { version: '2.0' }
+    })
+  ).toMatchSnapshot('with very few info');
+});
+
+function shallowRender(props?: Partial<MetaDataVersionProps>) {
+  return shallow(
+    <MetaDataVersion versionInformation={mockMetaDataVersionInformation()} {...props} />
+  );
+}
diff --git a/server/sonar-docs/src/components/__tests__/MetaDataVersions-test.tsx b/server/sonar-docs/src/components/__tests__/MetaDataVersions-test.tsx
new file mode 100644 (file)
index 0000000..9fdd2ea
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2021 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 { shallow } from 'enzyme';
+import * as React from 'react';
+import { click } from '../../utils/testUtils';
+import MetaDataVersion from '../MetaDataVersion';
+import MetaDataVersions from '../MetaDataVersions';
+import { mockMetaDataVersionInformation } from '../mocks/update-center-metadata';
+
+it('should render correctly', () => {
+  const wrapper = shallowRender();
+  expect(wrapper).toMatchSnapshot();
+});
+
+it('should properly handle show more / show less', () => {
+  const wrapper = shallowRender();
+  expect(wrapper.find(MetaDataVersion).length).toBe(1);
+
+  click(wrapper.find('.update-center-meta-data-versions-show-more'));
+  expect(wrapper.find(MetaDataVersion).length).toBe(3);
+});
+
+function shallowRender(props?: Partial<MetaDataVersions['props']>) {
+  return shallow<MetaDataVersions>(
+    <MetaDataVersions
+      versions={[
+        mockMetaDataVersionInformation({ version: '3.0' }),
+        mockMetaDataVersionInformation({ version: '2.0', archived: true }),
+        mockMetaDataVersionInformation({ version: '1.0', archived: true })
+      ]}
+      {...props}
+    />
+  );
+}
index aae6aa408c475780d009a5b7596d75b26dceea6d..31902607bc68ab53d7b7154876a9f902bd03d24e 100644 (file)
@@ -19,7 +19,7 @@
  */
 import { shallow } from 'enzyme';
 import * as React from 'react';
-import { click } from 'sonar-ui-common/helpers/testUtils';
+import { click } from '../../utils/testUtils';
 import OutsideClickHandler from '../OutsideClickHandler';
 import VersionSelect from '../VersionSelect';
 
diff --git a/server/sonar-docs/src/components/__tests__/__snapshots__/MetaData-test.tsx.snap b/server/sonar-docs/src/components/__tests__/__snapshots__/MetaData-test.tsx.snap
new file mode 100644 (file)
index 0000000..89e8d74
--- /dev/null
@@ -0,0 +1,133 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should render correctly 1`] = `
+<div
+  className="update-center-meta-data"
+>
+  <div
+    className="update-center-meta-data-header"
+  >
+    <span
+      className="update-center-meta-data-vendor"
+    >
+      By 
+      <a
+        href="http://www.sonarsource.com/"
+        rel="noopener noreferrer"
+        target="_blank"
+      >
+        SonarSource
+      </a>
+    </span>
+    <span
+      className="update-center-meta-data-license"
+    >
+      SonarSource
+    </span>
+    <span
+      className="update-center-meta-data-issue-tracker"
+    >
+      <a
+        href="https://jira.sonarsource.com/browse/SONARJAVA"
+        rel="noopener noreferrer"
+        target="_blank"
+      >
+        Issue Tracker
+      </a>
+    </span>
+    <span
+      className="update-center-meta-data-supported"
+    >
+      Supported by SonarSource
+    </span>
+  </div>
+  <MetaDataVersions
+    versions={
+      Array [
+        Object {
+          "archived": false,
+          "changeLogUrl": "https://example.com/sonar-java-plugin/release",
+          "compatibility": "6.7",
+          "date": "2019-05-31",
+          "downloadURL": "https://example.com/sonar-java-plugin-5.13.0.18197.jar",
+          "version": "2.0",
+        },
+        Object {
+          "archived": true,
+          "changeLogUrl": "https://example.com/sonar-java-plugin/release",
+          "compatibility": "6.7",
+          "date": "2019-05-31",
+          "downloadURL": "https://example.com/sonar-java-plugin-5.13.0.18197.jar",
+          "version": "1.0",
+        },
+      ]
+    }
+  />
+</div>
+`;
+
+exports[`should render correctly with organization 1`] = `
+<div
+  className="update-center-meta-data"
+>
+  <div
+    className="update-center-meta-data-header"
+  >
+    <span
+      className="update-center-meta-data-vendor"
+    >
+      By 
+      <a
+        href="test-org-url"
+        rel="noopener noreferrer"
+        target="_blank"
+      >
+        test-org
+      </a>
+    </span>
+    <span
+      className="update-center-meta-data-license"
+    >
+      SonarSource
+    </span>
+    <span
+      className="update-center-meta-data-issue-tracker"
+    >
+      <a
+        href="https://jira.sonarsource.com/browse/SONARJAVA"
+        rel="noopener noreferrer"
+        target="_blank"
+      >
+        Issue Tracker
+      </a>
+    </span>
+    <span
+      className="update-center-meta-data-supported"
+    >
+      Supported by SonarSource
+    </span>
+  </div>
+  <MetaDataVersions
+    versions={
+      Array [
+        Object {
+          "archived": false,
+          "changeLogUrl": "https://example.com/sonar-java-plugin/release",
+          "compatibility": "6.7",
+          "date": "2019-05-31",
+          "downloadURL": "https://example.com/sonar-java-plugin-5.13.0.18197.jar",
+          "version": "2.0",
+        },
+        Object {
+          "archived": true,
+          "changeLogUrl": "https://example.com/sonar-java-plugin/release",
+          "compatibility": "6.7",
+          "date": "2019-05-31",
+          "downloadURL": "https://example.com/sonar-java-plugin-5.13.0.18197.jar",
+          "version": "1.0",
+        },
+      ]
+    }
+  />
+</div>
+`;
diff --git a/server/sonar-docs/src/components/__tests__/__snapshots__/MetaDataVersion-test.tsx.snap b/server/sonar-docs/src/components/__tests__/__snapshots__/MetaDataVersion-test.tsx.snap
new file mode 100644 (file)
index 0000000..7fd964f
--- /dev/null
@@ -0,0 +1,113 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should render correctly 1`] = `
+<div
+  className="update-center-meta-data-version"
+>
+  <div
+    className="update-center-meta-data-version-version"
+  >
+    5.13
+  </div>
+  <div
+    className="update-center-meta-data-version-release-info"
+  >
+    <time
+      className="update-center-meta-data-version-release-date"
+    >
+      2019-05-31
+    </time>
+    <span
+      className="update-center-meta-data-version-compatibility"
+    >
+      6.7
+    </span>
+  </div>
+  <div
+    className="update-center-meta-data-version-release-links"
+  >
+    <span
+      className="update-center-meta-data-version-download"
+      key="0"
+    >
+      <a
+        href="https://example.com/sonar-java-plugin-5.13.0.18197.jar"
+        rel="noopener noreferrer"
+        target="_blank"
+      >
+        Download
+      </a>
+    </span>
+    <span
+      className="update-center-meta-data-version-release-notes"
+    >
+      <a
+        href="https://example.com/sonar-java-plugin/release"
+        rel="noopener noreferrer"
+        target="_blank"
+      >
+        Release notes
+      </a>
+    </span>
+  </div>
+</div>
+`;
+
+exports[`should render correctly: with advanced downloadUrl 1`] = `
+<div
+  className="update-center-meta-data-version"
+>
+  <div
+    className="update-center-meta-data-version-version"
+  >
+    5.13
+  </div>
+  <div
+    className="update-center-meta-data-version-release-info"
+  >
+    <time
+      className="update-center-meta-data-version-release-date"
+    >
+      2019-05-31
+    </time>
+    <span
+      className="update-center-meta-data-version-compatibility"
+    >
+      6.7
+    </span>
+  </div>
+  <div
+    className="update-center-meta-data-version-release-links"
+  >
+    <span
+      className="update-center-meta-data-version-release-notes"
+    >
+      <a
+        href="https://example.com/sonar-java-plugin/release"
+        rel="noopener noreferrer"
+        target="_blank"
+      >
+        Release notes
+      </a>
+    </span>
+  </div>
+</div>
+`;
+
+exports[`should render correctly: with very few info 1`] = `
+<div
+  className="update-center-meta-data-version"
+>
+  <div
+    className="update-center-meta-data-version-version"
+  >
+    2.0
+  </div>
+  <div
+    className="update-center-meta-data-version-release-info"
+  />
+  <div
+    className="update-center-meta-data-version-release-links"
+  />
+</div>
+`;
diff --git a/server/sonar-docs/src/components/__tests__/__snapshots__/MetaDataVersions-test.tsx.snap b/server/sonar-docs/src/components/__tests__/__snapshots__/MetaDataVersions-test.tsx.snap
new file mode 100644 (file)
index 0000000..109fe96
--- /dev/null
@@ -0,0 +1,28 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should render correctly 1`] = `
+<div
+  className="update-center-meta-data-versions"
+>
+  <button
+    className="update-center-meta-data-versions-show-more"
+    onClick={[Function]}
+    type="button"
+  >
+    Show more versions
+  </button>
+  <MetaDataVersion
+    key="3.0"
+    versionInformation={
+      Object {
+        "archived": false,
+        "changeLogUrl": "https://example.com/sonar-java-plugin/release",
+        "compatibility": "6.7",
+        "date": "2019-05-31",
+        "downloadURL": "https://example.com/sonar-java-plugin-5.13.0.18197.jar",
+        "version": "3.0",
+      }
+    }
+  />
+</div>
+`;
diff --git a/server/sonar-docs/src/components/mocks/update-center-metadata.ts b/server/sonar-docs/src/components/mocks/update-center-metadata.ts
new file mode 100644 (file)
index 0000000..e4d3895
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2021 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 { MetaDataInformation, MetaDataVersionInformation } from '../update-center-metadata';
+
+export function mockMetaDataVersionInformation(
+  overrides?: Partial<MetaDataVersionInformation>
+): MetaDataVersionInformation {
+  return {
+    version: '5.13',
+    date: '2019-05-31',
+    compatibility: '6.7',
+    archived: false,
+    downloadURL: 'https://example.com/sonar-java-plugin-5.13.0.18197.jar',
+    changeLogUrl: 'https://example.com/sonar-java-plugin/release',
+    ...overrides
+  };
+}
+
+export function mockMetaDataInformation(
+  overrides?: Partial<MetaDataInformation>
+): MetaDataInformation {
+  return {
+    name: 'SonarJava',
+    key: 'java',
+    isSonarSourceCommercial: true,
+    organization: {
+      name: 'SonarSource',
+      url: 'http://www.sonarsource.com/'
+    },
+    category: 'Languages',
+    license: 'SonarSource',
+    issueTrackerURL: 'https://jira.sonarsource.com/browse/SONARJAVA',
+    sourcesURL: 'https://github.com/SonarSource/sonar-java',
+    versions: [
+      mockMetaDataVersionInformation({ version: '2.0' }),
+      mockMetaDataVersionInformation({ version: '1.0', archived: true })
+    ],
+    ...overrides
+  };
+}
diff --git a/server/sonar-docs/src/components/update-center-metadata.ts b/server/sonar-docs/src/components/update-center-metadata.ts
new file mode 100644 (file)
index 0000000..a88b385
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2021 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.
+ */
+export interface MetaDataInformation {
+  category?: string;
+  isSonarSourceCommercial?: boolean;
+  issueTrackerURL?: string;
+  key?: string;
+  license?: string;
+  name: string;
+  organization?: {
+    name: string;
+    url?: string;
+  };
+  sourcesURL?: string;
+  versions?: MetaDataVersionInformation[];
+}
+
+export interface MetaDataVersionInformation {
+  archived?: boolean;
+  changeLogUrl?: string;
+  compatibility?: string;
+  date?: string;
+  description?: string;
+  downloadURL?: string | AdvancedDownloadUrl[];
+  version: string;
+}
+
+export interface AdvancedDownloadUrl {
+  label?: string;
+  url: string;
+}
index 375e3e3a4050d2c1af9b8c1e5f21ab145a1a488e..3e4739163a2fc576c4905100ed3e41a588a2115f 100644 (file)
@@ -22,9 +22,9 @@ import { selectAll } from 'hast-util-select';
 import * as React from 'react';
 import Helmet from 'react-helmet';
 import rehypeReact from 'rehype-react';
-import MetaData from 'sonar-ui-common/components/ui/update-center/MetaData';
 import { MarkdownHeading, MarkdownRemark, MarkdownRemarkConnection } from '../@types/graphql-types';
 import HeaderList from '../components/HeaderList';
+import MetaData from '../components/MetaData';
 import { HtmlAST, HtmlASTNode } from '../types/hast';
 
 interface Props {
diff --git a/server/sonar-docs/src/utils/testUtils.ts b/server/sonar-docs/src/utils/testUtils.ts
new file mode 100644 (file)
index 0000000..2f1ab92
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2021 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 { ReactWrapper, ShallowWrapper } from 'enzyme';
+
+export function click(element: ShallowWrapper | ReactWrapper, event = {}): void {
+  // `type()` returns a component constructor for a composite element and string for DOM nodes
+  if (typeof element.type() === 'function') {
+    element.prop<Function>('onClick')();
+    // TODO find out if `root` is a public api
+    // https://github.com/airbnb/enzyme/blob/master/packages/enzyme/src/ReactWrapper.js#L109
+    (element as any).root().update();
+  } else {
+    element.simulate('click', mockEvent(event));
+  }
+}
+
+export function mockEvent(overrides = {}) {
+  return {
+    target: { blur() {} },
+    currentTarget: { blur() {} },
+    preventDefault() {},
+    stopPropagation() {},
+    ...overrides
+  } as any;
+}
+
+export async function waitAndUpdate(wrapper: ShallowWrapper<any, any> | ReactWrapper<any, any>) {
+  await new Promise(setImmediate);
+  wrapper.update();
+}
index 5d71ab30bab4c5d4d09e6bf7cf1481e42c60c1bd..cda10669f5fbb647f63b192c082ec6798e686a95 100644 (file)
   dependencies:
     "@types/react" "*"
 
-"@types/react-select@1.2.6":
-  version "1.2.6"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/react-select/-/react-select-1.2.6.tgz#8a9579705e04b2c15ce529379402980d80e9d243"
-  integrity sha1-ipV5cF4EssFc5Sk3lAKYDYDp0kM=
-  dependencies:
-    "@types/react" "*"
-
 "@types/react@*", "@types/react@16.8.23":
   version "16.8.23"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/react/-/react-16.8.23.tgz#ec6be3ceed6353a20948169b6cb4c97b65b97ad2"
@@ -2646,11 +2639,6 @@ arrify@^2.0.1:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
   integrity sha1-yWVekzHgq81YjSp8rX6ZVvZnAfo=
 
-asap@~2.0.3:
-  version "2.0.6"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
-  integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
-
 asn1.js@^4.0.0:
   version "4.10.1"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
@@ -3679,7 +3667,7 @@ class-utils@^0.3.5:
     isobject "^3.0.0"
     static-extend "^0.1.1"
 
-classnames@2.2.6, classnames@^2.2.3, classnames@^2.2.4, classnames@^2.2.5:
+classnames@2.2.6:
   version "2.2.6"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
   integrity sha1-Q5Nb/90pHzJtrQogUwmzjQD2UM4=
@@ -3736,15 +3724,6 @@ cli-width@^2.0.0:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
   integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
 
-clipboard@2.0.6:
-  version "2.0.6"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376"
-  integrity sha1-UpISlu7A/fd+rRdJQhshyWhkc3Y=
-  dependencies:
-    good-listener "^1.2.2"
-    select "^1.1.2"
-    tiny-emitter "^2.0.0"
-
 clipboardy@^2.2.0:
   version "2.3.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290"
@@ -4140,11 +4119,6 @@ core-js-pure@^3.0.0:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a"
   integrity sha1-S/G6hm4lgU8UnU6aqgjDYXNQbjo=
 
-core-js@^1.0.0:
-  version "1.2.7"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
-  integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
-
 core-js@^2.4.0, core-js@^2.6.5:
   version "2.6.9"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
@@ -4220,15 +4194,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
     safe-buffer "^5.0.1"
     sha.js "^2.4.8"
 
-create-react-class@^15.5.1:
-  version "15.6.3"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
-  integrity sha1-LXMjf7P5cK5uvgEanmb0bbyoADY=
-  dependencies:
-    fbjs "^0.8.9"
-    loose-envify "^1.3.1"
-    object-assign "^4.1.1"
-
 create-react-context@0.3.0:
   version "0.3.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c"
@@ -4237,14 +4202,6 @@ create-react-context@0.3.0:
     gud "^1.0.0"
     warning "^4.0.3"
 
-create-react-context@^0.2.2:
-  version "0.2.3"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3"
-  integrity sha1-nsFAppFKIu8EuLCbd3HeiVZ8tvM=
-  dependencies:
-    fbjs "^0.8.0"
-    gud "^1.0.0"
-
 cross-fetch@2.2.2:
   version "2.2.2"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/cross-fetch/-/cross-fetch-2.2.2.tgz#a47ff4f7fc712daba8f6a695a11c948440d45723"
@@ -4556,131 +4513,6 @@ cyclist@~0.2.2:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
   integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=
 
-"d3-array@1.2.0 - 2", d3-array@2.4.0:
-  version "2.4.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-array/-/d3-array-2.4.0.tgz#87f8b9ad11088769c82b5ea846bcb1cc9393f242"
-  integrity sha1-h/i5rREIh2nIK16oRryxzJOT8kI=
-
-d3-color@1:
-  version "1.4.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-color/-/d3-color-1.4.0.tgz#89c45a995ed773b13314f06460df26d60ba0ecaf"
-  integrity sha1-icRamV7Xc7EzFPBkYN8m1gug7K8=
-
-d3-dispatch@1:
-  version "1.0.5"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-dispatch/-/d3-dispatch-1.0.5.tgz#e25c10a186517cd6c82dd19ea018f07e01e39015"
-  integrity sha1-4lwQoYZRfNbILdGeoBjwfgHjkBU=
-
-d3-drag@1:
-  version "1.2.4"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-drag/-/d3-drag-1.2.4.tgz#ba9331d68158ad14cf0b4b28a8afa9e78c7d99ad"
-  integrity sha1-upMx1oFYrRTPC0soqK+p54x9ma0=
-  dependencies:
-    d3-dispatch "1"
-    d3-selection "1"
-
-d3-ease@1:
-  version "1.0.5"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-ease/-/d3-ease-1.0.5.tgz#8ce59276d81241b1b72042d6af2d40e76d936ffb"
-  integrity sha1-jOWSdtgSQbG3IELWry1A522Tb/s=
-
-d3-format@1:
-  version "1.4.1"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-format/-/d3-format-1.4.1.tgz#c45f74b17c5a290c072a4ba7039dd19662cd5ce6"
-  integrity sha1-xF90sXxaKQwHKkunA53RlmLNXOY=
-
-d3-hierarchy@1.1.9:
-  version "1.1.9"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83"
-  integrity sha1-L2vuJMqupD+Nw3VF+gFihVlkeoM=
-
-d3-interpolate@1:
-  version "1.3.2"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68"
-  integrity sha1-QX0+vetLxO/Mj9Q2HFXkBAIR/Wg=
-  dependencies:
-    d3-color "1"
-
-d3-interpolate@^1.2.0:
-  version "1.4.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987"
-  integrity sha1-Um554tgNqjg/ngwcHH3MDwWD6Yc=
-  dependencies:
-    d3-color "1"
-
-d3-path@1:
-  version "1.0.8"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-path/-/d3-path-1.0.8.tgz#4a0606a794d104513ec4a8af43525f374b278719"
-  integrity sha1-SgYGp5TRBFE+xKivQ1JfN0snhxk=
-
-d3-scale@3.2.1:
-  version "3.2.1"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-scale/-/d3-scale-3.2.1.tgz#da1684adce7261b4bc7a76fe193d887f0e909e69"
-  integrity sha1-2haErc5yYbS8enb+GT2Ifw6Qnmk=
-  dependencies:
-    d3-array "1.2.0 - 2"
-    d3-format "1"
-    d3-interpolate "^1.2.0"
-    d3-time "1"
-    d3-time-format "2"
-
-d3-selection@1, d3-selection@^1.1.0:
-  version "1.4.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-selection/-/d3-selection-1.4.0.tgz#ab9ac1e664cf967ebf1b479cc07e28ce9908c474"
-  integrity sha1-q5rB5mTPln6/G0ecwH4ozpkIxHQ=
-
-d3-selection@1.4.1:
-  version "1.4.1"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-selection/-/d3-selection-1.4.1.tgz#98eedbbe085fbda5bafa2f9e3f3a2f4d7d622a98"
-  integrity sha1-mO7bvghfvaW6+i+ePzovTX1iKpg=
-
-d3-shape@1.3.7:
-  version "1.3.7"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7"
-  integrity sha1-32OAG+B7yYa8VPY3ibT+UCmStdc=
-  dependencies:
-    d3-path "1"
-
-d3-time-format@2:
-  version "2.1.3"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-time-format/-/d3-time-format-2.1.3.tgz#ae06f8e0126a9d60d6364eac5b1533ae1bac826b"
-  integrity sha1-rgb44BJqnWDWNk6sWxUzrhusgms=
-  dependencies:
-    d3-time "1"
-
-d3-time@1:
-  version "1.1.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1"
-  integrity sha1-seGdMH2unJALflsl/8XcwkmooPE=
-
-d3-timer@1:
-  version "1.0.9"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-timer/-/d3-timer-1.0.9.tgz#f7bb8c0d597d792ff7131e1c24a36dd471a471ba"
-  integrity sha1-97uMDVl9eS/3Ex4cJKNt1HGkcbo=
-
-d3-transition@1:
-  version "1.2.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-transition/-/d3-transition-1.2.0.tgz#f538c0e21b2aa1f05f3e965f8567e81284b3b2b8"
-  integrity sha1-9TjA4hsqofBfPpZfhWfoEoSzsrg=
-  dependencies:
-    d3-color "1"
-    d3-dispatch "1"
-    d3-ease "1"
-    d3-interpolate "1"
-    d3-selection "^1.1.0"
-    d3-timer "1"
-
-d3-zoom@1.8.3:
-  version "1.8.3"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/d3-zoom/-/d3-zoom-1.8.3.tgz#b6a3dbe738c7763121cd05b8a7795ffe17f4fc0a"
-  integrity sha1-tqPb5zjHdjEhzQW4p3lf/hf0/Ao=
-  dependencies:
-    d3-dispatch "1"
-    d3-drag "1"
-    d3-interpolate "1"
-    d3-selection "1"
-    d3-transition "1"
-
 damerau-levenshtein@^1.0.4:
   version "1.0.5"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414"
@@ -4707,11 +4539,6 @@ data-urls@^1.1.0:
     whatwg-mimetype "^2.2.0"
     whatwg-url "^7.0.0"
 
-date-fns@1.30.1:
-  version "1.30.1"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
-  integrity sha1-LnG/CxGRU9u0zE6I2epaz7UNwFw=
-
 date-fns@^2.11.0:
   version "2.11.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/date-fns/-/date-fns-2.11.0.tgz#ec2b44977465b9dcb370021d5e6c019b19f36d06"
@@ -4794,11 +4621,6 @@ deep-is@^0.1.3, deep-is@~0.1.3:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
   integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
 
-deepmerge@^2.1.1:
-  version "2.2.1"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
-  integrity sha1-XT/yKgHAD2RUBaL7wX0HeKGAEXA=
-
 default-gateway@^4.2.0:
   version "4.2.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
@@ -4873,11 +4695,6 @@ delayed-stream@~1.0.0:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
   integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
 
-delegate@^3.1.2:
-  version "3.2.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
-  integrity sha1-tmtxwxWFIuirV0T3INjKDCr1kWY=
-
 delegates@^1.0.0:
   version "1.0.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
@@ -5069,7 +4886,7 @@ dom-converter@^0.2:
   dependencies:
     utila "~0.4"
 
-"dom-helpers@^2.4.0 || ^3.0.0", dom-helpers@^3.4.0:
+dom-helpers@^3.4.0:
   version "3.4.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
   integrity sha1-6bNpcA+Vn2Ls3lprq95LzNkWmvg=
@@ -5273,13 +5090,6 @@ encodeurl@~1.0.2:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
   integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
 
-encoding@^0.1.11:
-  version "0.1.12"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
-  integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
-  dependencies:
-    iconv-lite "~0.4.13"
-
 end-of-stream@^1.0.0, end-of-stream@^1.1.0:
   version "1.4.1"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
@@ -6059,7 +5869,7 @@ execa@^3.2.0, execa@^3.4.0:
     signal-exit "^3.0.2"
     strip-final-newline "^2.0.0"
 
-exenv@^1.2.0, exenv@^1.2.1:
+exenv@^1.2.1:
   version "1.2.2"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d"
   integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=
@@ -6298,19 +6108,6 @@ fb-watchman@^2.0.0:
   dependencies:
     bser "^2.0.0"
 
-fbjs@^0.8.0, fbjs@^0.8.9:
-  version "0.8.17"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
-  integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
-  dependencies:
-    core-js "^1.0.0"
-    isomorphic-fetch "^2.1.1"
-    loose-envify "^1.0.0"
-    object-assign "^4.1.0"
-    promise "^7.1.1"
-    setimmediate "^1.0.5"
-    ua-parser-js "^0.7.18"
-
 figgy-pudding@^3.5.1:
   version "3.5.1"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
@@ -6534,21 +6331,6 @@ form-data@~2.3.2:
     combined-stream "^1.0.6"
     mime-types "^2.1.12"
 
-formik@1.2.0:
-  version "1.2.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/formik/-/formik-1.2.0.tgz#a0daf8512ce2ec18d88ff59a5bb172b0167e85d1"
-  integrity sha1-oNr4USzi7BjYj/WaW7FysBZ+hdE=
-  dependencies:
-    create-react-context "^0.2.2"
-    deepmerge "^2.1.1"
-    hoist-non-react-statics "^2.5.5"
-    lodash.clonedeep "^4.5.0"
-    lodash.topath "4.5.2"
-    prop-types "^15.6.1"
-    react-fast-compare "^1.0.0"
-    tslib "^1.9.3"
-    warning "^3.0.0"
-
 forwarded@~0.1.2:
   version "0.1.2"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
@@ -7280,13 +7062,6 @@ globby@^6.1.0:
     pify "^2.0.0"
     pinkie-promise "^2.0.0"
 
-good-listener@^1.2.2:
-  version "1.2.2"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
-  integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=
-  dependencies:
-    delegate "^3.1.2"
-
 got@8.3.2, got@^8.3.2:
   version "8.3.2"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937"
@@ -7753,16 +7528,6 @@ hex-color-regex@^1.1.0:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
   integrity sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=
 
-history@3.3.0, history@^3.0.0:
-  version "3.3.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/history/-/history-3.3.0.tgz#fcedcce8f12975371545d735461033579a6dae9c"
-  integrity sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw=
-  dependencies:
-    invariant "^2.2.1"
-    loose-envify "^1.2.0"
-    query-string "^4.2.2"
-    warning "^3.0.0"
-
 hmac-drbg@^1.0.0:
   version "1.0.1"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -7772,11 +7537,6 @@ hmac-drbg@^1.0.0:
     minimalistic-assert "^1.0.0"
     minimalistic-crypto-utils "^1.0.1"
 
-hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.5:
-  version "2.5.5"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
-  integrity sha1-xZA89AnA39kI84jmGdhrnBF0y0c=
-
 hoist-non-react-statics@^3.3.0:
   version "3.3.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b"
@@ -7969,7 +7729,7 @@ human-signals@^1.1.1:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
   integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M=
 
-iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
+iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
   version "0.4.24"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
   integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=
@@ -8262,30 +8022,6 @@ internal-slot@^1.0.2:
     has "^1.0.3"
     side-channel "^1.0.2"
 
-intl-format-cache@^2.0.5:
-  version "2.2.9"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/intl-format-cache/-/intl-format-cache-2.2.9.tgz#fb560de20c549cda20b569cf1ffb6dc62b5b93b4"
-  integrity sha1-+1YN4gxUnNogtWnPH/ttxitbk7Q=
-
-intl-messageformat-parser@1.4.0:
-  version "1.4.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075"
-  integrity sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=
-
-intl-messageformat@^2.0.0, intl-messageformat@^2.1.0:
-  version "2.2.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/intl-messageformat/-/intl-messageformat-2.2.0.tgz#345bcd46de630b7683330c2e52177ff5eab484fc"
-  integrity sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=
-  dependencies:
-    intl-messageformat-parser "1.4.0"
-
-intl-relativeformat@^2.1.0:
-  version "2.2.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz#6aca95d019ec8d30b6c5653b6629f9983ea5b6c5"
-  integrity sha1-asqV0BnsjTC2xWU7Zin5mD6ltsU=
-  dependencies:
-    intl-messageformat "^2.0.0"
-
 into-stream@^3.1.0:
   version "3.1.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6"
@@ -8294,7 +8030,7 @@ into-stream@^3.1.0:
     from2 "^2.1.1"
     p-is-promise "^1.1.0"
 
-invariant@^2.1.1, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4:
+invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4:
   version "2.2.4"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
   integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=
@@ -8759,7 +8495,7 @@ is-ssh@^1.3.0:
   dependencies:
     protocols "^1.1.0"
 
-is-stream@^1.0.1, is-stream@^1.1.0:
+is-stream@^1.1.0:
   version "1.1.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
   integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@@ -8874,14 +8610,6 @@ isobject@^3.0.0, isobject@^3.0.1:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
   integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
 
-isomorphic-fetch@^2.1.1:
-  version "2.2.1"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
-  integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
-  dependencies:
-    node-fetch "^1.0.1"
-    whatwg-fetch ">=0.10.0"
-
 isstream@~0.1.2:
   version "0.1.2"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
@@ -9760,11 +9488,6 @@ lodash.toarray@^4.4.0:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
   integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE=
 
-lodash.topath@4.5.2:
-  version "4.5.2"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009"
-  integrity sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=
-
 lodash.uniq@^4.5.0:
   version "4.5.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
@@ -9806,7 +9529,7 @@ longest-streak@^2.0.1:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105"
   integrity sha1-Peej9H7hjpB03thXW1wJH10KQQU=
 
-loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
   version "1.4.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
   integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=
@@ -10452,14 +10175,6 @@ node-fetch@2.6.0, node-fetch@^2.6.0:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
   integrity sha1-5jNFY4bUqlWGP2dqerDaqP3ssP0=
 
-node-fetch@^1.0.1:
-  version "1.7.3"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
-  integrity sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=
-  dependencies:
-    encoding "^0.1.11"
-    is-stream "^1.0.1"
-
 node-forge@0.9.0:
   version "0.9.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
@@ -11963,13 +11678,6 @@ promise-polyfill@^7.1.1:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/promise-polyfill/-/promise-polyfill-7.1.2.tgz#ab05301d8c28536301622d69227632269a70ca3b"
   integrity sha1-qwUwHYwoU2MBYi1pInYyJppwyjs=
 
-promise@^7.1.1:
-  version "7.3.1"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
-  integrity sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=
-  dependencies:
-    asap "~2.0.3"
-
 prompts@^2.0.1:
   version "2.1.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/prompts/-/prompts-2.1.0.tgz#bf90bc71f6065d255ea2bdc0fe6520485c1b45db"
@@ -11995,7 +11703,7 @@ prop-types-exact@^1.2.0:
     object.assign "^4.1.0"
     reflect.ownkeys "^0.2.0"
 
-prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
   version "15.7.2"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
   integrity sha1-UsQedbjIfnK52TYOAga5ncv/psU=
@@ -12113,7 +11821,7 @@ qs@~6.5.2:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
   integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=
 
-query-string@^4.1.0, query-string@^4.2.2:
+query-string@^4.1.0:
   version "4.3.4"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
   integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
@@ -12285,14 +11993,6 @@ react-dom@16.13.0:
     prop-types "^15.6.2"
     scheduler "^0.19.0"
 
-react-draggable@4.2.0:
-  version "4.2.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/react-draggable/-/react-draggable-4.2.0.tgz#40cc5209082ca7d613104bf6daf31372cc0e1114"
-  integrity sha1-QMxSCQgsp9YTEEv22vMTcswOERQ=
-  dependencies:
-    classnames "^2.2.5"
-    prop-types "^15.6.0"
-
 react-error-overlay@^3.0.0:
   version "3.0.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react-error-overlay/-/react-error-overlay-3.0.0.tgz#c2bc8f4d91f1375b3dad6d75265d51cd5eeaf655"
@@ -12303,11 +12003,6 @@ react-error-overlay@^6.0.3:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react-error-overlay/-/react-error-overlay-6.0.6.tgz#ac4d9dc4c1b5c536c2c312bf66aa2b09bfa384e2"
   integrity sha1-rE2dxMG1xTbCwxK/ZqorCb+jhOI=
 
-react-fast-compare@^1.0.0:
-  version "1.0.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/react-fast-compare/-/react-fast-compare-1.0.0.tgz#813a039155e49b43ceffe99528fe5e9d97a6c938"
-  integrity sha1-gToDkVXkm0PO/+mVKP5enZemyTg=
-
 react-fast-compare@^2.0.2:
   version "2.0.4"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
@@ -12337,24 +12032,6 @@ react-hot-loader@^4.12.20:
     shallowequal "^1.1.0"
     source-map "^0.7.3"
 
-react-input-autosize@^2.1.2:
-  version "2.2.2"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2"
-  integrity sha1-/KpwIFaOwga8BL429Oto5kfE2MI=
-  dependencies:
-    prop-types "^15.5.8"
-
-react-intl@2.8.0:
-  version "2.8.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/react-intl/-/react-intl-2.8.0.tgz#20b0c1f01d1292427768aa8ec9e51ab7e36503ba"
-  integrity sha1-ILDB8B0SkkJ3aKqOyeUat+NlA7o=
-  dependencies:
-    hoist-non-react-statics "^2.5.5"
-    intl-format-cache "^2.0.5"
-    intl-messageformat "^2.1.0"
-    intl-relativeformat "^2.1.0"
-    invariant "^2.1.1"
-
 react-is@^16.12.0, react-is@^16.9.0:
   version "16.13.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react-is/-/react-is-16.13.0.tgz#0f37c3613c34fe6b37cd7f763a0d6293ab15c527"
@@ -12365,21 +12042,11 @@ react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.5, react-is@^16.8.6:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
   integrity sha1-W7weLSkUHJ+9/tRWND/ivEMKahY=
 
-react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4:
+react-lifecycles-compat@^3.0.4:
   version "3.0.4"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
   integrity sha1-TxonOv38jzSIqMUWv9p4+HI1I2I=
 
-react-modal@3.8.2:
-  version "3.8.2"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/react-modal/-/react-modal-3.8.2.tgz#c47397a8602beb7aae0059a3b404f20416241d03"
-  integrity sha1-xHOXqGAr63quAFmjtATyBBYkHQM=
-  dependencies:
-    exenv "^1.2.0"
-    prop-types "^15.5.10"
-    react-lifecycles-compat "^3.0.0"
-    warning "^4.0.3"
-
 react-reconciler@^0.24.0:
   version "0.24.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react-reconciler/-/react-reconciler-0.24.0.tgz#5a396b2c2f5efe8554134a5935f49f546723f2dd"
@@ -12395,28 +12062,6 @@ react-refresh@^0.7.0:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react-refresh/-/react-refresh-0.7.2.tgz#f30978d21eb8cac6e2f2fde056a7d04f6844dd50"
   integrity sha1-8wl40h64ysbi8v3gVqfQT2hE3VA=
 
-react-router@3.2.1:
-  version "3.2.1"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/react-router/-/react-router-3.2.1.tgz#b9a3279962bdfbe684c8bd0482b81ef288f0f244"
-  integrity sha1-uaMnmWK9++aEyL0Egrge8ojw8kQ=
-  dependencies:
-    create-react-class "^15.5.1"
-    history "^3.0.0"
-    hoist-non-react-statics "^2.3.1"
-    invariant "^2.2.1"
-    loose-envify "^1.2.0"
-    prop-types "^15.5.6"
-    warning "^3.0.0"
-
-react-select@1.2.1:
-  version "1.2.1"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/react-select/-/react-select-1.2.1.tgz#a2fe58a569eb14dcaa6543816260b97e538120d1"
-  integrity sha1-ov5YpWnrFNyqZUOBYmC5flOBINE=
-  dependencies:
-    classnames "^2.2.4"
-    prop-types "^15.5.8"
-    react-input-autosize "^2.1.2"
-
 react-side-effect@^1.1.0:
   version "1.1.5"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react-side-effect/-/react-side-effect-1.1.5.tgz#f26059e50ed9c626d91d661b9f3c8bb38cd0ff2d"
@@ -12450,18 +12095,6 @@ react-typography@0.16.19:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react-typography/-/react-typography-0.16.19.tgz#5736b47961dcf6b9605b6fa38d41980db2588e28"
   integrity sha1-Vza0eWHc9rlgW2+jjUGYDbJYjig=
 
-react-virtualized@9.21.0:
-  version "9.21.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/react-virtualized/-/react-virtualized-9.21.0.tgz#8267c40ffb48db35b242a36dea85edcf280a6506"
-  integrity sha1-gmfED/tI2zWyQqNt6oXtzygKZQY=
-  dependencies:
-    babel-runtime "^6.26.0"
-    classnames "^2.2.3"
-    dom-helpers "^2.4.0 || ^3.0.0"
-    loose-envify "^1.3.0"
-    prop-types "^15.6.0"
-    react-lifecycles-compat "^3.0.4"
-
 react@16.13.0, react@^16.8.0:
   version "16.13.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/react/-/react-16.13.0.tgz#d046eabcdf64e457bbeed1e792e235e1b9934cf7"
@@ -13302,11 +12935,6 @@ select-hose@^2.0.0:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
   integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
 
-select@^1.1.2:
-  version "1.1.2"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
-  integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
-
 selfsigned@^1.10.7:
   version "1.10.7"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"
@@ -13420,7 +13048,7 @@ set-value@^2.0.0, set-value@^2.0.1:
     is-plain-object "^2.0.3"
     split-string "^3.0.1"
 
-setimmediate@^1.0.4, setimmediate@^1.0.5:
+setimmediate@^1.0.4:
   version "1.0.5"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
   integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
@@ -13691,29 +13319,6 @@ sockjs@0.3.19:
     faye-websocket "^0.10.0"
     uuid "^3.0.1"
 
-sonar-ui-common@../sonar-ui-common/build/dist:
-  version "1.0.33"
-  dependencies:
-    "@types/react-select" "1.2.6"
-    classnames "2.2.6"
-    clipboard "2.0.6"
-    d3-array "2.4.0"
-    d3-hierarchy "1.1.9"
-    d3-scale "3.2.1"
-    d3-selection "1.4.1"
-    d3-shape "1.3.7"
-    d3-zoom "1.8.3"
-    date-fns "1.30.1"
-    formik "1.2.0"
-    history "3.3.0"
-    prop-types "15.7.2"
-    react-draggable "4.2.0"
-    react-intl "2.8.0"
-    react-modal "3.8.2"
-    react-router "3.2.1"
-    react-select "1.2.1"
-    react-virtualized "9.21.0"
-
 sort-keys@^1.0.0:
   version "1.1.2"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
@@ -14419,11 +14024,6 @@ timsort@^0.3.0:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
   integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
 
-tiny-emitter@^2.0.0:
-  version "2.1.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
-  integrity sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM=
-
 tmp@^0.0.33:
   version "0.0.33"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -14591,7 +14191,7 @@ tslib@^1.10.0, tslib@^1.8.1:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
   integrity sha1-6xXRKIJ/vuKEFUnhcfRe0zisfjU=
 
-tslib@^1.9.0, tslib@^1.9.3:
+tslib@^1.9.0:
   version "1.10.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
   integrity sha1-w8GflZc/sKYpc/sJ2Q2WHuQ+XIo=
@@ -14702,11 +14302,6 @@ typography@0.16.19:
     object-assign "^4.1.0"
     typography-normalize "^0.16.19"
 
-ua-parser-js@^0.7.18:
-  version "0.7.28"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31"
-  integrity sha1-i6BOZT81ziECOcZGYWhb+RId7DE=
-
 uglify-js@^3.1.4:
   version "3.6.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5"
@@ -15444,11 +15039,6 @@ whatwg-fetch@2.0.4:
   resolved "https://repox.jfrog.io/repox/api/npm/npm/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
   integrity sha1-3eal3zFfnTmZGqF2IYU9cguFVm8=
 
-whatwg-fetch@>=0.10.0:
-  version "3.0.0"
-  resolved "https://repox.jfrog.io/repox/api/npm/npm/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
-  integrity sha1-/IBORYzEYACbGiuWa8iBfSV4rvs=
-
 whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:
   version "2.3.0"
   resolved "https://repox.jfrog.io/repox/api/npm/npm/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"