diff --git a/web/package-lock.json b/web/package-lock.json
index e2b95d6f..724c075b 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",
@@ -62,7 +61,6 @@
"@types/lodash-es": "^4.17.12",
"@types/node": "^17.0.21",
"@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": "^5.15.0",
@@ -3213,16 +3211,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-measure": {
"version": "2.0.12",
"resolved": "https://registry.npmjs.org/@types/react-measure/-/react-measure-2.0.12.tgz",
@@ -12401,21 +12389,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.54.2",
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.54.2.tgz",
@@ -12692,15 +12665,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 3990956d..3c2e3988 100644
--- a/web/package.json
+++ b/web/package.json
@@ -64,7 +64,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",
@@ -79,7 +78,6 @@
"@types/lodash-es": "^4.17.12",
"@types/node": "^17.0.21",
"@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": "^5.15.0",
diff --git a/web/src/components/Incidents/IncidentsPage.jsx b/web/src/components/Incidents/IncidentsPage.jsx
index 84256e0b..72fec2ec 100644
--- a/web/src/components/Incidents/IncidentsPage.jsx
+++ b/web/src/components/Incidents/IncidentsPage.jsx
@@ -16,12 +16,11 @@ import {
ToolbarItem,
MenuToggle,
Badge,
- Title,
PageSection,
Stack,
StackItem,
} from '@patternfly/react-core';
-import { Helmet } from 'react-helmet';
+import { DocumentTitle } from '@openshift-console/dynamic-plugin-sdk';
import { IncidentsTable } from './IncidentsTable';
import {
getIncidentsTimeRanges,
@@ -277,9 +276,7 @@ const IncidentsPage = () => {
return (
<>
-
- {title}
-
+ {title}
{alertsAreLoading && incidentsAreLoading ? (
diff --git a/web/src/components/MetricsPage.tsx b/web/src/components/MetricsPage.tsx
index e0def425..1348268f 100644
--- a/web/src/components/MetricsPage.tsx
+++ b/web/src/components/MetricsPage.tsx
@@ -1,4 +1,6 @@
import {
+ DocumentTitle,
+ ListPageHeader,
PrometheusData,
PrometheusEndpoint,
PrometheusLabels,
@@ -57,7 +59,6 @@ import {
} from '@patternfly/react-table';
import * as _ from 'lodash-es';
import * as React from 'react';
-import { Helmet } from 'react-helmet';
import { useTranslation } from 'react-i18next';
import { useDispatch, useSelector } from 'react-redux';
@@ -1230,17 +1231,9 @@ const MetricsPage_: React.FC = () => {
return (
<>
-
- {t('Metrics')}
-
-
+ {t('Metrics')}
+
- {perspective !== 'dev' && (
-
- {t('Metrics')}
-
- )}
-
@@ -1248,7 +1241,7 @@ const MetricsPage_: React.FC = () => {
-
+
diff --git a/web/src/components/alerting/AlertRulesDetailsPage.tsx b/web/src/components/alerting/AlertRulesDetailsPage.tsx
index ec685351..0ddbf9eb 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 * as React 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';
@@ -179,9 +179,9 @@ const AlertRulesDetailsPage_: React.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 77c93669..3d76e542 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,
@@ -14,7 +15,6 @@ import {
import { sortable, Td } from '@patternfly/react-table';
import * as _ from 'lodash-es';
import * as React 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';
@@ -214,9 +214,7 @@ const AlertRulesPage_: React.FC = () => {
return (
<>
-
- Alerting
-
+ {t('Alerting')}
import(/* webpackChunkName: "AlertsPage" */ '../alerting/AlertsPage'),
@@ -49,10 +52,8 @@ const AlertingPage: React.FC = () => {
return (
<>
-
- {t('Alerting')}
-
-
+
+
>
);
};
diff --git a/web/src/components/alerting/AlertsDetailsPage.tsx b/web/src/components/alerting/AlertsDetailsPage.tsx
index 0b7d66ba..50c2a28d 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,
@@ -56,7 +57,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';
@@ -150,9 +150,9 @@ const AlertsDetailsPage_: React.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 270f8512..fd3844b0 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 {
@@ -72,9 +72,9 @@ const SilencesDetailsPage_: React.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 b2bfadb3..e49676fc 100644
--- a/web/src/components/dashboards/legacy/dashboard-skeleton-legacy.tsx
+++ b/web/src/components/dashboards/legacy/dashboard-skeleton-legacy.tsx
@@ -1,17 +1,8 @@
import * as _ from 'lodash-es';
import * as React 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 { DocumentTitle, ListPageHeader } from '@openshift-console/dynamic-plugin-sdk';
+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';
@@ -22,21 +13,16 @@ const HeaderTop: React.FC = React.memo(() => {
const { t } = useTranslation(process.env.I18N_NAMESPACE);
return (
-
-
- {t('Dashboards')}
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
);
});
@@ -61,13 +47,9 @@ export const DashboardSkeletonLegacy: React.FC
- {perspective !== 'dev' && (
-
- {t('Metrics dashboards')}
-
- )}
+ {perspective !== 'dev' && {t('Metrics dashboards')}}
+ {perspective !== 'dev' && }
- {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 f25af784..cd570914 100644
--- a/web/src/components/dashboards/perses/dashboard-skeleton.tsx
+++ b/web/src/components/dashboards/perses/dashboard-skeleton.tsx
@@ -1,17 +1,8 @@
import * as _ from 'lodash-es';
import * as React 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 { DocumentTitle, ListPageHeader } from '@openshift-console/dynamic-plugin-sdk';
+import { Divider, PageSection, Split, SplitItem, Stack, StackItem } from '@patternfly/react-core';
import {
DashboardStickyToolbar,
useDashboardActions,
@@ -26,18 +17,13 @@ const HeaderTop: React.FC = React.memo(() => {
const { t } = useTranslation(process.env.I18N_NAMESPACE);
return (
-
-
- {t('Dashboards')}
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
);
});
@@ -78,13 +64,9 @@ export const DashboardSkeleton: React.FC = React.
return (
<>
- {perspective !== 'dev' && (
-
- {t('Metrics dashboards')}
-
- )}
+ {perspective !== 'dev' && {t('Metrics dashboards')}}
+ {perspective !== 'dev' && }
- {perspective !== 'dev' && }
{!_.isEmpty(boardItems) && (
diff --git a/web/src/components/targets-page.tsx b/web/src/components/targets-page.tsx
index 0705f1a6..944cb97b 100644
--- a/web/src/components/targets-page.tsx
+++ b/web/src/components/targets-page.tsx
@@ -1,4 +1,5 @@
import {
+ DocumentTitle,
GreenCheckCircleIcon,
K8sModel,
K8sResourceKind,
@@ -37,7 +38,6 @@ import {
import { sortable, Td } from '@patternfly/react-table';
import { find, includes, isEmpty } from 'lodash-es';
import * as React 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';
@@ -254,9 +254,7 @@ const Details: React.FC = ({ loaded, loadError, targets }) => {
return (
<>
-
- {t('Target details')}
-
+ {t('Target details')}
@@ -518,9 +516,7 @@ const ListPage: React.FC = ({ loaded, loadError, targets }) => {
return (
<>
-
- {title}
-
+ {title}
{loadError && (