diff --git a/index.html b/index.html index cec5d6ca6e..9dac9d0087 100644 --- a/index.html +++ b/index.html @@ -1,8 +1,8 @@ - + - + Greenbone Security Assistant @@ -11,5 +11,24 @@
+ diff --git a/package-lock.json b/package-lock.json index 9c6b1d0e3d..a7494c84f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "23.3.1-dev1", "license": "AGPL-3.0+", "dependencies": { - "@greenbone/opensight-ui-components": "^0.4.0", + "@greenbone/opensight-ui-components": "^0.4.1-alpha6", "@mantine/core": "^6.0.0", "@reduxjs/toolkit": "^2.2.7", "@sentry/react": "^8.28.0", @@ -2105,9 +2105,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", - "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2782,21 +2782,21 @@ "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, "node_modules/@greenbone/opensight-ui-components": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@greenbone/opensight-ui-components/-/opensight-ui-components-0.4.0.tgz", - "integrity": "sha512-PQBw0uflyF1xMjerJOr3eOmYP9ebAKoq68JMY2hVD5C2iZI7XmGTXYhu3ykFHQNxSvFJOYRrxnTrmuxBtTH39w==", + "version": "0.4.1-alpha6", + "resolved": "https://registry.npmjs.org/@greenbone/opensight-ui-components/-/opensight-ui-components-0.4.1-alpha6.tgz", + "integrity": "sha512-/uHRSHUkHdJ4fJBkGc4bo7EhVbouXtKDNe6bCjWysWMoIpNjLYWvBY+rRbDuRzkSzgnVHIdKm6GE+HH9nGchMg==", "dependencies": { "@mantine/core": "^6.x.x", "@mantine/dates": "^6.x.x", "@mantine/hooks": "^6.x.x", "@mantine/notifications": "^6.x.x", - "lucide-react": "^0.427.0", + "lucide-react": "^0.446.0", "luxon": "^3.5.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-hook-form": "^7", - "react-i18next": "^14.1.2", - "react-select": "^5.8.0", + "react-i18next": "^15.0.2", + "react-select": "^5.8.1", "tiny-invariant": "^1.3.3", "urlcat": "^3", "webfontloader": "^1.6.28", @@ -2818,13 +2818,34 @@ } }, "node_modules/@greenbone/opensight-ui-components/node_modules/lucide-react": { - "version": "0.427.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.427.0.tgz", - "integrity": "sha512-lv9s6c5BDF/ccuA0EgTdskTxIe11qpwBDmzRZHJAKtp8LTewAvDvOM+pTES9IpbBuTqkjiMhOmGpJ/CB+mKjFw==", + "version": "0.446.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.446.0.tgz", + "integrity": "sha512-BU7gy8MfBMqvEdDPH79VhOXSEgyG8TSPOKWaExWGCQVqnGH7wGgDngPbofu+KdtVjPQBWbEmnfMTq90CTiiDRg==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" } }, + "node_modules/@greenbone/opensight-ui-components/node_modules/react-i18next": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.2.tgz", + "integrity": "sha512-z0W3/RES9Idv3MmJUcf0mDNeeMOUXe+xoL0kPfQPbDoZHmni/XsIoq5zgT2MCFUiau283GuBUK578uD/mkAbLQ==", + "dependencies": { + "@babel/runtime": "^7.25.0", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -10079,9 +10100,9 @@ } }, "node_modules/react-select": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz", - "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.1.tgz", + "integrity": "sha512-RT1CJmuc+ejqm5MPgzyZujqDskdvB9a9ZqrdnVLsvAHjJ3Tj0hELnLeVPQlmYdVKCdCpxanepl6z7R5KhXhWzg==", "dependencies": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", diff --git a/package.json b/package.json index 88938b8c1f..fd2e2d5592 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "node": ">=18.0" }, "dependencies": { - "@greenbone/opensight-ui-components": "^0.4.0", + "@greenbone/opensight-ui-components": "^0.4.1-alpha6", "@mantine/core": "^6.0.0", "@reduxjs/toolkit": "^2.2.7", "@sentry/react": "^8.28.0", diff --git a/src/web/components/icon/GreenboneApplianceLogo.jsx b/src/web/components/icon/GreenboneApplianceLogo.jsx new file mode 100644 index 0000000000..80895ff8b1 --- /dev/null +++ b/src/web/components/icon/GreenboneApplianceLogo.jsx @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: 2024 Greenbone AG + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import SvgIconWrapper from './SvgIconWrapper'; +import Enterprise150Svg from 'web/components/icon/svg/Enterprise_150.svg'; +import Enterprise400Svg from 'web/components/icon/svg/Enterprise_400.svg'; +import Enterprise450Svg from 'web/components/icon/svg/Enterprise_450.svg'; +import Enterprise600Svg from 'web/components/icon/svg/Enterprise_600.svg'; +import Enterprise650Svg from 'web/components/icon/svg/Enterprise_650.svg'; +import Enterprise5400Svg from 'web/components/icon/svg/Enterprise_5400.svg'; +import Enterprise6500Svg from 'web/components/icon/svg/Enterprise_6500.svg'; +import EnterpriseCenoSvg from 'web/components/icon/svg/Enterprise_CENO.svg'; +import EnterpriseDecaSvg from 'web/components/icon/svg/Enterprise_DECA.svg'; +import EnterpriseExaSvg from 'web/components/icon/svg/Enterprise_EXA.svg'; +import EnterprisePetaSvg from 'web/components/icon/svg/Enterprise_PETA.svg'; +import EnterpriseTeraSvg from 'web/components/icon/svg/Enterprise_TERA.svg'; + +const createEnterpriseComponent = Component => () => ( + +); + +export const Enterprise150 = createEnterpriseComponent(Enterprise150Svg); +export const Enterprise400 = createEnterpriseComponent(Enterprise400Svg); +export const Enterprise450 = createEnterpriseComponent(Enterprise450Svg); +export const Enterprise600 = createEnterpriseComponent(Enterprise600Svg); +export const Enterprise650 = createEnterpriseComponent(Enterprise650Svg); +export const Enterprise5400 = createEnterpriseComponent(Enterprise5400Svg); +export const Enterprise6500 = createEnterpriseComponent(Enterprise6500Svg); +export const EnterpriseCeno = createEnterpriseComponent(EnterpriseCenoSvg); +export const EnterpriseDeca = createEnterpriseComponent(EnterpriseDecaSvg); +export const EnterpriseExa = createEnterpriseComponent(EnterpriseExaSvg); +export const EnterprisePeta = createEnterpriseComponent(EnterprisePetaSvg); +export const EnterpriseTera = createEnterpriseComponent(EnterpriseTeraSvg); diff --git a/src/web/components/icon/SvgIconWrapper.jsx b/src/web/components/icon/SvgIconWrapper.jsx new file mode 100644 index 0000000000..c767643923 --- /dev/null +++ b/src/web/components/icon/SvgIconWrapper.jsx @@ -0,0 +1,23 @@ +/* SPDX-FileCopyrightText: 2024 Greenbone AG + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import PropTypes from 'web/utils/proptypes'; +import SvgIcon from './svgicon'; + +const SvgIconWrapper = ({component: Component, size, ...props}) => ( + + {svgProps => } + +); + +SvgIconWrapper.propTypes = { + component: PropTypes.node.isRequired, + size: PropTypes.oneOfType([ + PropTypes.oneOf(['tiny', 'small', 'medium', 'large']), + PropTypes.string, + ]), +}; + +export default SvgIconWrapper; diff --git a/src/web/components/icon/svg/Enterprise_150.svg b/src/web/components/icon/svg/Enterprise_150.svg new file mode 100644 index 0000000000..fb3c5db66f --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_150.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_400.svg b/src/web/components/icon/svg/Enterprise_400.svg new file mode 100644 index 0000000000..151eca4004 --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_400.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_450.svg b/src/web/components/icon/svg/Enterprise_450.svg new file mode 100644 index 0000000000..b7e5567708 --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_450.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_5400.svg b/src/web/components/icon/svg/Enterprise_5400.svg new file mode 100644 index 0000000000..f8af1c1cbc --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_5400.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_600.svg b/src/web/components/icon/svg/Enterprise_600.svg new file mode 100644 index 0000000000..c67be5aa09 --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_600.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_650.svg b/src/web/components/icon/svg/Enterprise_650.svg new file mode 100644 index 0000000000..881c769a70 --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_650.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_6500.svg b/src/web/components/icon/svg/Enterprise_6500.svg new file mode 100644 index 0000000000..9085d67010 --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_6500.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_CENO.svg b/src/web/components/icon/svg/Enterprise_CENO.svg new file mode 100644 index 0000000000..3e6c69e1a4 --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_CENO.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_DECA.svg b/src/web/components/icon/svg/Enterprise_DECA.svg new file mode 100644 index 0000000000..b794a4d51e --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_DECA.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_EXA.svg b/src/web/components/icon/svg/Enterprise_EXA.svg new file mode 100644 index 0000000000..e85f83463f --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_EXA.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_PETA.svg b/src/web/components/icon/svg/Enterprise_PETA.svg new file mode 100644 index 0000000000..c76016a808 --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_PETA.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/icon/svg/Enterprise_TERA.svg b/src/web/components/icon/svg/Enterprise_TERA.svg new file mode 100644 index 0000000000..884b841306 --- /dev/null +++ b/src/web/components/icon/svg/Enterprise_TERA.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/web/components/layout/__tests__/__snapshots__/pagetitle.jsx.snap b/src/web/components/layout/__tests__/__snapshots__/pagetitle.jsx.snap deleted file mode 100644 index 2805c1d908..0000000000 --- a/src/web/components/layout/__tests__/__snapshots__/pagetitle.jsx.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`PageTitle tests > should render 1`] = `null`; diff --git a/src/web/components/layout/__tests__/pagetitle.jsx b/src/web/components/layout/__tests__/pagetitle.jsx index 3c9fc0419d..997fcc3449 100644 --- a/src/web/components/layout/__tests__/pagetitle.jsx +++ b/src/web/components/layout/__tests__/pagetitle.jsx @@ -3,20 +3,22 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ - import {describe, test, expect} from '@gsa/testing'; import PageTitle from 'web/components/layout/pagetitle'; -import {render} from 'web/utils/testing'; +import {rendererWith} from 'web/utils/testing'; -describe('PageTitle tests', () => { - test('should render', () => { - const {element} = render(); - expect(element).toMatchSnapshot(); - }); +const gmp = { + settings: { + vendorLabel: 'someVendorLabel', + }, +}; +describe('PageTitle tests', () => { test('Should render default title', () => { + const {render} = rendererWith({gmp}); + const defaultTitle = 'Greenbone Security Assistant'; render(); @@ -24,6 +26,8 @@ describe('PageTitle tests', () => { }); test('Should render custom title', () => { + const {render} = rendererWith({gmp}); + const title = 'foo'; const defaultTitle = 'Greenbone Security Assistant'; render(); @@ -32,6 +36,8 @@ describe('PageTitle tests', () => { }); test('should update value', () => { + const {render} = rendererWith({gmp}); + const title1 = 'foo'; const title2 = 'bar'; const defaultTitle = 'Greenbone Security Assistant'; @@ -43,4 +49,16 @@ describe('PageTitle tests', () => { expect(global.window.document.title).toBe(defaultTitle + ' - ' + title2); }); + test('should render appliance model title', () => { + const {render} = rendererWith({ + gmp: { + settings: { + vendorLabel: 'gsm-150_label.svg', + }, + }, + }); + render(); + + expect(global.window.document.title).toBe('Greenbone - 150'); + }); }); diff --git a/src/web/components/layout/pagetitle.jsx b/src/web/components/layout/pagetitle.jsx index b1382eacd0..a66ad27012 100644 --- a/src/web/components/layout/pagetitle.jsx +++ b/src/web/components/layout/pagetitle.jsx @@ -6,10 +6,15 @@ import {useEffect} from 'react'; import {isDefined} from 'gmp/utils/identity'; import PropTypes from 'web/utils/proptypes'; - -const defaultTitle = 'Greenbone Security Assistant'; +import useGmp from 'web/hooks/useGmp'; +import {applianceTitle} from 'web/utils/applianceData'; const PageTitle = ({title}) => { + const gmp = useGmp(); + const vendorLabel = gmp?.settings?.vendorLabel || 'defaultVendorLabel'; + const defaultTitle = + applianceTitle[vendorLabel] || 'Greenbone Security Assistant'; + useEffect(() => { if (isDefined(title)) { document.title = defaultTitle + ' - ' + title; @@ -20,7 +25,8 @@ const PageTitle = ({title}) => { return () => { document.title = defaultTitle; }; - }, [title]); + }, [defaultTitle, title]); + return null; }; diff --git a/src/web/components/structure/__tests__/getLogo.jsx b/src/web/components/structure/__tests__/getLogo.jsx new file mode 100644 index 0000000000..ea13984c79 --- /dev/null +++ b/src/web/components/structure/__tests__/getLogo.jsx @@ -0,0 +1,39 @@ +/* SPDX-FileCopyrightText: 2024 Greenbone AG + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import {describe, test, expect} from '@gsa/testing'; +import {render} from 'web/utils/testing'; +import getLogo from 'web/components/structure/getLogo'; + +describe('getLogo', () => { + const testCases = [ + ['gsm-150_label.svg', 'Enterprise150'], + ['gsm-400_label.svg', 'Enterprise400'], + ['gsm-400r2_label.svg', 'Enterprise400'], + ['gsm-450_label.svg', 'Enterprise450'], + ['gsm-450r2_label.svg', 'Enterprise450'], + ['gsm-600_label.svg', 'Enterprise600'], + ['gsm-600r2_label.svg', 'Enterprise600'], + ['gsm-650_label.svg', 'Enterprise650'], + ['gsm-650r2_label.svg', 'Enterprise650'], + ['gsm-5400_label.svg', 'Enterprise5400'], + ['gsm-6500_label.svg', 'Enterprise6500'], + ['gsm-ceno_label.svg', 'EnterpriseCeno'], + ['gsm-deca_label.svg', 'EnterpriseDeca'], + ['gsm-exa_label.svg', 'EnterpriseExa'], + ['gsm-peta_label.svg', 'EnterprisePeta'], + ['gsm-tera_label.svg', 'EnterpriseTera'], + ]; + + test.each(testCases)('returns %s for %s', (model, expectedTestId) => { + const {getByTestId} = render(getLogo(model)); + expect(getByTestId(expectedTestId)).toBeInTheDocument(); + }); + + test('returns undefined for unknown model', () => { + const result = getLogo('unknown_model.svg'); + expect(result).toBeUndefined(); + }); +}); diff --git a/src/web/components/structure/getLogo.jsx b/src/web/components/structure/getLogo.jsx new file mode 100644 index 0000000000..2910361220 --- /dev/null +++ b/src/web/components/structure/getLogo.jsx @@ -0,0 +1,36 @@ +/* SPDX-FileCopyrightText: 2024 Greenbone AG + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import PropTypes from 'web/utils/proptypes'; + +import {applianceComponent} from 'web/utils/applianceData'; + +const getLogo = model => { + const Component = applianceComponent[model]; + return Component ? : undefined; +}; + +getLogo.propTypes = { + model: PropTypes.oneOf([ + 'gsm-150_label.svg', + 'gsm-400_label.svg', + 'gsm-400r2_label.svg', + 'gsm-450_label.svg', + 'gsm-450r2_label.svg', + 'gsm-600_label.svg', + 'gsm-600r2_label.svg', + 'gsm-650_label.svg', + 'gsm-650r2_label.svg', + 'gsm-5400_label.svg', + 'gsm-6500_label.svg', + 'gsm-ceno_label.svg', + 'gsm-deca_label.svg', + 'gsm-exa_label.svg', + 'gsm-peta_label.svg', + 'gsm-tera_label.svg', + ]), +}; + +export default getLogo; diff --git a/src/web/components/structure/header.jsx b/src/web/components/structure/header.jsx index bc43312aa9..034c480bbe 100644 --- a/src/web/components/structure/header.jsx +++ b/src/web/components/structure/header.jsx @@ -16,6 +16,7 @@ import useUserName from 'web/hooks/useUserName'; import useGmp from 'web/hooks/useGmp'; import LogoutIcon from 'web/components/icon/logouticon'; +import getLogo from 'web/components/structure/getLogo'; import MySettingsIcon from 'web/components/icon/mysettingsicon'; import LanguageSwitch from './languageswitch'; import SessionTimer from '../sessionTimer/SessionTimer'; @@ -25,6 +26,7 @@ const Header = () => { const username = useUserName(); const loggedIn = useUserIsLoggedIn(); const navigate = useNavigate(); + const logoComponent = getLogo(gmp.settings.vendorLabel); const handleSettingsClick = useCallback( event => { @@ -57,14 +59,17 @@ const Header = () => { icon: , }, ]; + return ( } menuPoints={menuPoints} isLoggedIn={loggedIn} sessionTimer={} username={username} - logoLink="/" + logoLink="/dashboards" + isThemeSwitchVisible={false} /> ); }; diff --git a/src/web/routes.jsx b/src/web/routes.jsx index b12ae1e86e..3287604d2e 100644 --- a/src/web/routes.jsx +++ b/src/web/routes.jsx @@ -244,7 +244,7 @@ const LoggedInRoutes = () => { /> } /> - } /> + } /> } /> diff --git a/src/web/utils/applianceData.js b/src/web/utils/applianceData.js new file mode 100644 index 0000000000..9b6270756d --- /dev/null +++ b/src/web/utils/applianceData.js @@ -0,0 +1,100 @@ +/* SPDX-FileCopyrightText: 2024 Greenbone AG + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { + Enterprise150, + Enterprise400, + Enterprise450, + Enterprise600, + Enterprise650, + Enterprise5400, + Enterprise6500, + EnterpriseCeno, + EnterpriseDeca, + EnterpriseExa, + EnterprisePeta, + EnterpriseTera, +} from 'web/components/icon/GreenboneApplianceLogo'; + +const APPLIANCE_DATA = { + 'gsm-150_label.svg': { + title: 'Greenbone - 150', + component: Enterprise150, + }, + 'gsm-400_label.svg': { + title: 'Greenbone - 400', + component: Enterprise400, + }, + 'gsm-400r2_label.svg': { + title: 'Greenbone - 400', + component: Enterprise400, + }, + 'gsm-450_label.svg': { + title: 'Greenbone - 450', + component: Enterprise450, + }, + 'gsm-450r2_label.svg': { + title: 'Greenbone - 450', + component: Enterprise450, + }, + 'gsm-600_label.svg': { + title: 'Greenbone - 600', + component: Enterprise600, + }, + 'gsm-600r2_label.svg': { + title: 'Greenbone - 600', + component: Enterprise600, + }, + 'gsm-650_label.svg': { + title: 'Greenbone - 650', + component: Enterprise650, + }, + 'gsm-650r2_label.svg': { + title: 'Greenbone - 650', + component: Enterprise650, + }, + 'gsm-5400_label.svg': { + title: 'Greenbone - 5400', + component: Enterprise5400, + }, + 'gsm-6500_label.svg': { + title: 'Greenbone - 6500', + component: Enterprise6500, + }, + 'gsm-ceno_label.svg': { + title: 'Greenbone - CENO', + component: EnterpriseCeno, + }, + 'gsm-deca_label.svg': { + title: 'Greenbone - DECA', + component: EnterpriseDeca, + }, + 'gsm-exa_label.svg': { + title: 'Greenbone - EXA', + component: EnterpriseExa, + }, + 'gsm-peta_label.svg': { + title: 'Greenbone - PETA', + component: EnterprisePeta, + }, + 'gsm-tera_label.svg': { + title: 'Greenbone - TERA', + component: EnterpriseTera, + }, +}; + +export const applianceTitle = Object.fromEntries( + Object.entries(APPLIANCE_DATA).map(([vendorLabel, {title}]) => [ + vendorLabel, + title, + ]), +); + +export const applianceComponent = Object.fromEntries( + Object.entries(APPLIANCE_DATA).map(([vendorLabel, {component}]) => [ + vendorLabel, + component, + ]), +);