diff --git a/web/package-lock.json b/web/package-lock.json index 880d3784..35c16e51 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -47,7 +47,6 @@ "murmurhash-js": "1.0.x", "react": "^17.0.1", "react-dom": "^17.0.1", - "react-helmet": "^6.1.0", "react-i18next": "^11.8.11", "react-linkify": "^0.2.2", "react-modal": "^3.12.1", @@ -64,7 +63,6 @@ "@types/lodash-es": "^4.17.12", "@types/node": "^22.17.2", "@types/react": "17.0.83", - "@types/react-helmet": "^6.1.11", "@types/react-router-dom": "^5.3.2", "@types/webpack-dev-server": "^4.7.2", "@typescript-eslint/eslint-plugin": "^8.39.1", @@ -4895,16 +4893,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-helmet": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.11.tgz", - "integrity": "sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, "node_modules/@types/react-redux": { "version": "7.1.34", "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz", @@ -15297,21 +15285,6 @@ "react-dom": ">= 16.3.0" } }, - "node_modules/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - }, - "peerDependencies": { - "react": ">=16.3.0" - } - }, "node_modules/react-hook-form": { "version": "7.62.0", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz", @@ -15572,15 +15545,6 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, - "node_modules/react-side-effect": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", - "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", - "license": "MIT", - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", diff --git a/web/package.json b/web/package.json index 949dc91f..861b8567 100644 --- a/web/package.json +++ b/web/package.json @@ -70,7 +70,6 @@ "murmurhash-js": "1.0.x", "react": "^17.0.1", "react-dom": "^17.0.1", - "react-helmet": "^6.1.0", "react-i18next": "^11.8.11", "react-linkify": "^0.2.2", "react-modal": "^3.12.1", @@ -87,7 +86,6 @@ "@types/lodash-es": "^4.17.12", "@types/node": "^22.17.2", "@types/react": "17.0.83", - "@types/react-helmet": "^6.1.11", "@types/react-router-dom": "^5.3.2", "@types/webpack-dev-server": "^4.7.2", "@typescript-eslint/eslint-plugin": "^8.39.1", diff --git a/web/src/components/Incidents/IncidentsPage.tsx b/web/src/components/Incidents/IncidentsPage.tsx index 04efc90a..10b60546 100644 --- a/web/src/components/Incidents/IncidentsPage.tsx +++ b/web/src/components/Incidents/IncidentsPage.tsx @@ -20,7 +20,6 @@ import { Stack, StackItem, } from '@patternfly/react-core'; -import { Helmet } from 'react-helmet'; import { IncidentsTable } from './IncidentsTable'; import { getIncidentsTimeRanges, @@ -59,7 +58,7 @@ import { usePatternFlyTheme } from '../hooks/usePatternflyTheme'; import { MonitoringState } from 'src/reducers/observe'; import { Incident } from './model'; import { useAlertsPoller } from '../hooks/useAlertsPoller'; -import { Rule } from '@openshift-console/dynamic-plugin-sdk'; +import { DocumentTitle, Rule } from '@openshift-console/dynamic-plugin-sdk'; const IncidentsPage = () => { const { t } = useTranslation(process.env.I18N_NAMESPACE); @@ -296,9 +295,7 @@ const IncidentsPage = () => { return ( <> - - {title} - + {title} {alertsAreLoading && incidentsAreLoading ? ( diff --git a/web/src/components/MetricsPage.tsx b/web/src/components/MetricsPage.tsx index e6c22b17..60154351 100644 --- a/web/src/components/MetricsPage.tsx +++ b/web/src/components/MetricsPage.tsx @@ -1,4 +1,6 @@ import { + DocumentTitle, + ListPageHeader, PrometheusData, PrometheusEndpoint, PrometheusLabels, @@ -60,7 +62,6 @@ import { import * as _ from 'lodash-es'; import type { FC, Ref } from 'react'; import { useMemo, useCallback, useEffect, useState } from 'react'; -import { Helmet } from 'react-helmet'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; @@ -1391,17 +1392,9 @@ const MetricsPage_: FC = () => { return ( <> - - {t('Metrics')} - - + {t('Metrics')} + - {perspective !== 'dev' && ( - - {t('Metrics')} - - )} - {t('This dropdown only formats results.')}}> @@ -1414,7 +1407,7 @@ const MetricsPage_: FC = () => { - + diff --git a/web/src/components/alerting/AlertRulesDetailsPage.tsx b/web/src/components/alerting/AlertRulesDetailsPage.tsx index 2a32950b..166824fa 100644 --- a/web/src/components/alerting/AlertRulesDetailsPage.tsx +++ b/web/src/components/alerting/AlertRulesDetailsPage.tsx @@ -1,6 +1,7 @@ import { AlertingRuleChartExtension, AlertStates, + DocumentTitle, isAlertingRuleChart, PrometheusAlert, ResourceIcon, @@ -38,7 +39,6 @@ import { import { Table, TableVariant, Tbody, Td, Th, Thead, Tr } from '@patternfly/react-table'; import * as _ from 'lodash-es'; import type { FC } from 'react'; -import { Helmet } from 'react-helmet'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { Link, useNavigate, useParams } from 'react-router-dom-v5-compat'; @@ -184,9 +184,9 @@ const AlertRulesDetailsPage_: FC = () => { return ( <> - - {t('{{name}} details', { name: rule?.name || RuleResource.label })} - + + {t('{{name}} details', { name: rule?.name || RuleResource.label })} + diff --git a/web/src/components/alerting/AlertRulesPage.tsx b/web/src/components/alerting/AlertRulesPage.tsx index 625a9280..88d2ecff 100644 --- a/web/src/components/alerting/AlertRulesPage.tsx +++ b/web/src/components/alerting/AlertRulesPage.tsx @@ -1,5 +1,6 @@ import { AlertStates, + DocumentTitle, ListPageFilter, PrometheusAlert, ResourceIcon, @@ -15,7 +16,6 @@ import { sortable, Td } from '@patternfly/react-table'; import * as _ from 'lodash-es'; import type { FC } from 'react'; import { useMemo } from 'react'; -import { Helmet } from 'react-helmet'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { Link } from 'react-router-dom-v5-compat'; @@ -219,9 +219,7 @@ const AlertRulesPage_: FC = () => { return ( <> - - Alerting - + {t('Alerting')} import(/* webpackChunkName: "AlertsPage" */ '../alerting/AlertsPage'), @@ -50,10 +53,8 @@ const AlertingPage: FC = () => { return ( <> - - {t('Alerting')} - - + + ); }; diff --git a/web/src/components/alerting/AlertsDetailsPage.tsx b/web/src/components/alerting/AlertsDetailsPage.tsx index 7b026495..a473eebd 100644 --- a/web/src/components/alerting/AlertsDetailsPage.tsx +++ b/web/src/components/alerting/AlertsDetailsPage.tsx @@ -3,6 +3,7 @@ import { Alert, AlertingRuleChartExtension, AlertStates, + DocumentTitle, isAlertingRuleChart, PrometheusLabels, ResourceIcon, @@ -57,7 +58,6 @@ import { ToolbarGroup, ToolbarItem, } from '@patternfly/react-core'; -import { Helmet } from 'react-helmet'; import { MonitoringState } from '../../reducers/observe'; import withFallback from '../console/console-shared/error/fallbacks/withFallback'; import { StatusBox } from '../console/console-shared/src/components/status/StatusBox'; @@ -153,9 +153,9 @@ const AlertsDetailsPage_: FC = () => { return ( <> - - {t('{{name}} details', { name: labels?.alertname || AlertResource.label })} - + + {t('{{name}} details', { name: labels?.alertname || AlertResource.label })} + { return ( <> - - Alerting - + {t('Alerting')} = ({ defaults, Info, title }) => { return ( <> - - {title} - + {title} {title} diff --git a/web/src/components/alerting/SilencesDetailsPage.tsx b/web/src/components/alerting/SilencesDetailsPage.tsx index 04961a64..c5058222 100644 --- a/web/src/components/alerting/SilencesDetailsPage.tsx +++ b/web/src/components/alerting/SilencesDetailsPage.tsx @@ -4,6 +4,7 @@ import { useSelector } from 'react-redux'; import { Alert, + DocumentTitle, ResourceIcon, Timestamp, useActiveNamespace, @@ -28,7 +29,6 @@ import { SplitItem, Title, } from '@patternfly/react-core'; -import { Helmet } from 'react-helmet'; import { useTranslation } from 'react-i18next'; import { MonitoringState } from 'src/reducers/observe'; import { @@ -73,9 +73,9 @@ const SilencesDetailsPage_: FC = () => { return ( <> - - {t('{{name}} details', { name: silence?.name || SilenceResource.label })} - + + {t('{{name}} details', { name: silence?.name || SilenceResource.label })} + { return ( <> - {perspective === 'dev' ? Silences : Alerting} + {perspective === 'dev' ? t('Silences') : t('Alerting')} diff --git a/web/src/components/dashboards/legacy/dashboard-skeleton-legacy.tsx b/web/src/components/dashboards/legacy/dashboard-skeleton-legacy.tsx index 89400364..6d975e36 100644 --- a/web/src/components/dashboards/legacy/dashboard-skeleton-legacy.tsx +++ b/web/src/components/dashboards/legacy/dashboard-skeleton-legacy.tsx @@ -1,43 +1,30 @@ import * as _ from 'lodash-es'; import type { FC, PropsWithChildren } from 'react'; import { memo, useCallback } from 'react'; -import { Helmet } from 'react-helmet'; import { useTranslation } from 'react-i18next'; -import { - Divider, - PageSection, - Split, - SplitItem, - Stack, - StackItem, - Title, -} from '@patternfly/react-core'; +import { Divider, PageSection, Split, SplitItem, Stack, StackItem } from '@patternfly/react-core'; import { usePerspective } from '../../hooks/usePerspective'; import { CombinedDashboardMetadata } from '../perses/hooks/useDashboardsData'; import { DashboardDropdown } from '../shared/dashboard-dropdown'; import { PollIntervalDropdown, TimespanDropdown } from './time-dropdowns'; import { LegacyDashboardsAllVariableDropdowns } from './legacy-variable-dropdowns'; +import { DocumentTitle, ListPageHeader } from '@openshift-console/dynamic-plugin-sdk'; const HeaderTop: FC = memo(() => { const { t } = useTranslation(process.env.I18N_NAMESPACE); return ( - - - {t('Dashboards')} - - - - - - - - - - - - + + + + + + + + + + ); }); @@ -63,12 +50,12 @@ export const DashboardSkeletonLegacy: FC = return ( <> {perspective !== 'dev' && ( - - {t('Metrics dashboards')} - + <> + {t('Metrics dashboards')} + + )} - {perspective !== 'dev' && } {!_.isEmpty(boardItems) && ( diff --git a/web/src/components/dashboards/perses/dashboard-skeleton.tsx b/web/src/components/dashboards/perses/dashboard-skeleton.tsx index 26fd5f77..c3f039b7 100644 --- a/web/src/components/dashboards/perses/dashboard-skeleton.tsx +++ b/web/src/components/dashboards/perses/dashboard-skeleton.tsx @@ -1,18 +1,8 @@ import * as _ from 'lodash-es'; import type { FC, PropsWithChildren } from 'react'; import { memo, useCallback, useEffect } from 'react'; -import { Helmet } from 'react-helmet'; import { useTranslation } from 'react-i18next'; - -import { - Divider, - PageSection, - Split, - SplitItem, - Stack, - StackItem, - Title, -} from '@patternfly/react-core'; +import { Divider, PageSection, Split, SplitItem, Stack, StackItem } from '@patternfly/react-core'; import { DashboardStickyToolbar, useDashboardActions, @@ -22,23 +12,19 @@ import { TimeRangeControls } from '@perses-dev/plugin-system'; import { usePerspective } from '../../hooks/usePerspective'; import { DashboardDropdown } from '../shared/dashboard-dropdown'; import { CombinedDashboardMetadata } from './hooks/useDashboardsData'; +import { DocumentTitle, ListPageHeader } from '@openshift-console/dynamic-plugin-sdk'; const HeaderTop: FC = memo(() => { const { t } = useTranslation(process.env.I18N_NAMESPACE); return ( - - - {t('Dashboards')} - - - - - - - - - + + + + + + + ); }); @@ -80,12 +66,12 @@ export const DashboardSkeleton: FC = memo( return ( <> {perspective !== 'dev' && ( - - {t('Metrics dashboards')} - + <> + {t('Metrics dashboards')} + + )} - {perspective !== 'dev' && } {!_.isEmpty(boardItems) && ( diff --git a/web/src/components/targets-page.tsx b/web/src/components/targets-page.tsx index 3c3d68ea..b92e79c0 100644 --- a/web/src/components/targets-page.tsx +++ b/web/src/components/targets-page.tsx @@ -1,4 +1,5 @@ import { + DocumentTitle, GreenCheckCircleIcon, K8sModel, K8sResourceKind, @@ -38,7 +39,6 @@ import { sortable, Td } from '@patternfly/react-table'; import { find, includes, isEmpty } from 'lodash-es'; import type { FC } from 'react'; import { createContext, useContext, memo, useMemo, useState, useCallback } from 'react'; -import { Helmet } from 'react-helmet'; import { useTranslation } from 'react-i18next'; import { Link, useParams } from 'react-router-dom-v5-compat'; import { EmptyBox } from './console/console-shared/src/components/empty-state/EmptyBox'; @@ -253,9 +253,7 @@ const Details: FC = ({ loaded, loadError, targets }) => { return ( <> - - {t('Target details')} - + {t('Target details')} @@ -517,9 +515,7 @@ const ListPage: FC = ({ loaded, loadError, targets }) => { return ( <> - - {title} - + {title} {loadError && (