diff --git a/packages/app/components/auth/AuthTitle.tsx b/packages/app/components/auth/AuthTitle.tsx
index 2b3a9a4..769e400 100644
--- a/packages/app/components/auth/AuthTitle.tsx
+++ b/packages/app/components/auth/AuthTitle.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import { FormattedMessage as Message, MessageDescriptor } from 'react-intl';
export default function AuthTitle({ title }: { title: MessageDescriptor }) {
diff --git a/packages/app/components/auth/finish/Finish.tsx b/packages/app/components/auth/finish/Finish.tsx
index 5ba01e2..b52fba7 100644
--- a/packages/app/components/auth/finish/Finish.tsx
+++ b/packages/app/components/auth/finish/Finish.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { connect } from 'react-redux';
import { FormattedMessage as Message } from 'react-intl';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import { Button } from 'app/components/ui/form';
import copy from 'app/services/copy';
import { RootState } from 'app/reducers';
diff --git a/packages/app/components/dev/apps/ApplicationsIndex.tsx b/packages/app/components/dev/apps/ApplicationsIndex.tsx
index 3b3ebbf..d0b304a 100644
--- a/packages/app/components/dev/apps/ApplicationsIndex.tsx
+++ b/packages/app/components/dev/apps/ApplicationsIndex.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import clsx from 'clsx';
import { FormattedMessage as Message } from 'react-intl';
-import { Helmet } from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import { LinkButton } from 'app/components/ui/form';
import { COLOR_GREEN, COLOR_BLUE } from 'app/components/ui';
import { ContactLink } from 'app/components/contact';
diff --git a/packages/app/components/dev/apps/applicationForm/ApplicationForm.tsx b/packages/app/components/dev/apps/applicationForm/ApplicationForm.tsx
index 14a7a93..863e13d 100644
--- a/packages/app/components/dev/apps/applicationForm/ApplicationForm.tsx
+++ b/packages/app/components/dev/apps/applicationForm/ApplicationForm.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import { FormattedMessage as Message } from 'react-intl';
-import { Helmet } from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import { MessageDescriptor } from 'react-intl';
import { OauthAppResponse } from 'app/services/api/oauth';
import { ApplicationType } from 'app/components/dev/apps';
diff --git a/packages/app/components/profile/Profile.tsx b/packages/app/components/profile/Profile.tsx
index d2bbabe..b8202e9 100644
--- a/packages/app/components/profile/Profile.tsx
+++ b/packages/app/components/profile/Profile.tsx
@@ -2,7 +2,7 @@ import React from 'react';
import { connect } from 'react-redux';
import { FormattedMessage as Message } from 'react-intl';
import { Link } from 'react-router-dom';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import { ChangeLanguageLink } from 'app/components/languageSwitcher';
import { RelativeTime } from 'app/components/ui';
import { User } from 'app/components/user';
diff --git a/packages/app/components/profile/changeEmail/ChangeEmail.tsx b/packages/app/components/profile/changeEmail/ChangeEmail.tsx
index cbb2bfa..3000ba9 100644
--- a/packages/app/components/profile/changeEmail/ChangeEmail.tsx
+++ b/packages/app/components/profile/changeEmail/ChangeEmail.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import { FormattedMessage as Message } from 'react-intl';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import { SlideMotion } from 'app/components/ui/motion';
import { ScrollIntoView } from 'app/components/ui/scroll';
import {
diff --git a/packages/app/components/profile/changePassword/ChangePassword.js b/packages/app/components/profile/changePassword/ChangePassword.js
index 98fb716..fed03fd 100644
--- a/packages/app/components/profile/changePassword/ChangePassword.js
+++ b/packages/app/components/profile/changePassword/ChangePassword.js
@@ -1,7 +1,7 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { FormattedMessage as Message } from 'react-intl';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import {
Input,
Button,
diff --git a/packages/app/components/profile/changeUsername/ChangeUsername.js b/packages/app/components/profile/changeUsername/ChangeUsername.js
index c2d7e97..cfd1903 100644
--- a/packages/app/components/profile/changeUsername/ChangeUsername.js
+++ b/packages/app/components/profile/changeUsername/ChangeUsername.js
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { FormattedMessage as Message } from 'react-intl';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import { Input, Button, Form, FormModel } from 'app/components/ui/form';
import { BackButton } from 'app/components/profile/ProfileForm';
diff --git a/packages/app/components/profile/multiFactorAuth/MultiFactorAuth.tsx b/packages/app/components/profile/multiFactorAuth/MultiFactorAuth.tsx
index 248620c..ed91e90 100644
--- a/packages/app/components/profile/multiFactorAuth/MultiFactorAuth.tsx
+++ b/packages/app/components/profile/multiFactorAuth/MultiFactorAuth.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import { FormattedMessage as Message } from 'react-intl';
import styles from 'app/components/profile/profileForm.scss';
import { BackButton } from 'app/components/profile/ProfileForm';
diff --git a/packages/app/package.json b/packages/app/package.json
index c28b0b4..d5810fc 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -19,7 +19,7 @@
"raven-js": "^3.27.0",
"react": "^16.12.0",
"react-dom": "^16.12.0",
- "react-helmet": "^5.0.0",
+ "react-helmet-async": "^1.0.4",
"react-hot-loader": "^4.12.18",
"react-intl": "^3.9.3",
"react-motion": "^0.5.0",
diff --git a/packages/app/pages/404/PageNotFound.js b/packages/app/pages/404/PageNotFound.js
index 9e1f839..7197416 100644
--- a/packages/app/pages/404/PageNotFound.js
+++ b/packages/app/pages/404/PageNotFound.js
@@ -4,7 +4,7 @@ import { FooterMenu } from 'app/components/footerMenu';
import { Link } from 'react-router-dom';
import { FormattedMessage as Message } from 'react-intl';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import styles from './404.scss';
import messages from './PageNotFound.intl.json';
diff --git a/packages/app/pages/auth/SuccessOauthPage.tsx b/packages/app/pages/auth/SuccessOauthPage.tsx
index f482fc1..ce36e64 100644
--- a/packages/app/pages/auth/SuccessOauthPage.tsx
+++ b/packages/app/pages/auth/SuccessOauthPage.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { Link } from 'react-router-dom';
import { FormattedMessage as Message } from 'react-intl';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import loader from 'app/services/loader';
import { Query } from 'app/services/request';
diff --git a/packages/app/pages/root/RootPage.tsx b/packages/app/pages/root/RootPage.tsx
index dd02234..f2e1027 100644
--- a/packages/app/pages/root/RootPage.tsx
+++ b/packages/app/pages/root/RootPage.tsx
@@ -4,7 +4,7 @@ import { resetAuth } from 'app/components/auth/actions';
import { withRouter } from 'react-router-dom';
import { FormattedMessage as Message } from 'react-intl';
import { Route, Link, Switch } from 'react-router-dom';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import clsx from 'clsx';
import AuthPage from 'app/pages/auth/AuthPage';
import ProfilePage from 'app/pages/profile/ProfilePage';
diff --git a/packages/app/pages/rules/RulesPage.tsx b/packages/app/pages/rules/RulesPage.tsx
index 60b1844..2dd1652 100644
--- a/packages/app/pages/rules/RulesPage.tsx
+++ b/packages/app/pages/rules/RulesPage.tsx
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import { FormattedMessage as Message } from 'react-intl';
-import Helmet from 'react-helmet';
+import { Helmet } from 'react-helmet-async';
import { FooterMenu } from 'app/components/footerMenu';
import appInfo from 'app/components/auth/appInfo/AppInfo.intl.json';
diff --git a/packages/app/shell/ContextProvider.tsx b/packages/app/shell/ContextProvider.tsx
index a4c62de..e9809fc 100644
--- a/packages/app/shell/ContextProvider.tsx
+++ b/packages/app/shell/ContextProvider.tsx
@@ -1,6 +1,7 @@
import React from 'react';
import { Provider as ReduxProvider } from 'react-redux';
import { Router } from 'react-router-dom';
+import { HelmetProvider } from 'react-helmet-async';
import { IntlProvider } from 'app/components/i18n';
import { Store } from 'app/reducers';
@@ -14,11 +15,13 @@ function ContextProvider({
history: any;
}) {
return (
-
-
- {children}
-
-
+
+
+
+ {children}
+
+
+
);
}
diff --git a/yarn.lock b/yarn.lock
index 4cdd941..7b3bdc3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10905,7 +10905,7 @@ prop-types-exact@^1.2.0:
object.assign "^4.1.0"
reflect.ownkeys "^0.2.0"
-prop-types@^15.5.4, 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.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -11194,7 +11194,7 @@ react-error-overlay@^6.0.3:
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.4.tgz#0d165d6d27488e660bc08e57bdabaad741366f7a"
integrity sha512-ueZzLmHltszTshDMwyfELDq8zOA803wQ1ZuzCccXa1m57k1PxSHfflPD5W9YIiTXLs0JTLzoj6o1LuM5N6zzNA==
-react-fast-compare@^2.0.2, react-fast-compare@^2.0.4:
+react-fast-compare@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
@@ -11209,7 +11209,7 @@ react-focus-lock@^1.18.3:
prop-types "^15.6.2"
react-clientside-effect "^1.2.0"
-react-helmet-async@^1.0.2:
+react-helmet-async@^1.0.2, react-helmet-async@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.4.tgz#079ef10b7fefcaee6240fefd150711e62463cc97"
integrity sha512-KTGHE9sz8N7+fCkZ2a3vzXH9eIkiTNhL2NhKR7XzzQl3WsGlCHh76arauJUIiGdfhjeMp7DY7PkASAmYFXeJYg==
@@ -11220,16 +11220,6 @@ react-helmet-async@^1.0.2:
react-fast-compare "^2.0.4"
shallowequal "^1.1.0"
-react-helmet@^5.0.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.2.1.tgz#16a7192fdd09951f8e0fe22ffccbf9bb3e591ffa"
- integrity sha512-CnwD822LU8NDBnjCpZ4ySh8L6HYyngViTZLfBBb3NjtrpN8m49clH8hidHouq20I51Y6TpCTISCBbqiY5GamwA==
- dependencies:
- object-assign "^4.1.1"
- prop-types "^15.5.4"
- react-fast-compare "^2.0.2"
- react-side-effect "^1.1.0"
-
react-hot-loader@^4.12.18:
version "4.12.18"
resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.18.tgz#a9029e34af2690d76208f9a35189d73c2dfea6a7"
@@ -11360,13 +11350,6 @@ react-router@5.1.2:
tiny-invariant "^1.0.2"
tiny-warning "^1.0.0"
-react-side-effect@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.2.0.tgz#0e940c78faba0c73b9b0eba9cd3dda8dfb7e7dae"
- integrity sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w==
- dependencies:
- shallowequal "^1.0.1"
-
react-sizeme@^2.6.7:
version "2.6.10"
resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.10.tgz#9993dcb5e67fab94a8e5d078a0d3820609010f17"
@@ -12300,7 +12283,7 @@ shallow-equal@^1.1.0, shallow-equal@^1.2.1:
resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==
-shallowequal@^1.0.1, shallowequal@^1.1.0:
+shallowequal@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==