Web:Client:Shell: change theme from base to dark

This commit is contained in:
Timofey Boyko 2021-12-15 17:28:30 +08:00
parent 36c692f9da
commit a3e2f13e36

View File

@ -1,28 +1,28 @@
import React, { useEffect } from "react";
import { Router, Switch, Route, Redirect } from "react-router-dom";
import { inject, observer } from "mobx-react";
import NavMenu from "./components/NavMenu";
import Main from "./components/Main";
import PrivateRoute from "@appserver/common/components/PrivateRoute";
import PublicRoute from "@appserver/common/components/PublicRoute";
import ErrorBoundary from "@appserver/common/components/ErrorBoundary";
import Layout from "./components/Layout";
import ScrollToTop from "./components/Layout/ScrollToTop";
import history from "@appserver/common/history";
import toastr from "studio/toastr";
import { combineUrl, updateTempContent } from "@appserver/common/utils";
import { Provider as MobxProvider } from "mobx-react";
import ThemeProvider from "@appserver/components/theme-provider";
import { Base } from "@appserver/components/themes";
import store from "studio/store";
import config from "../package.json";
import { I18nextProvider, useTranslation } from "react-i18next";
import i18n from "./i18n";
import AppLoader from "@appserver/common/components/AppLoader";
import System from "./components/System";
import { AppServerConfig } from "@appserver/common/constants";
import Snackbar from "@appserver/components/snackbar";
import moment from "moment";
import React, { useEffect } from 'react';
import { Router, Switch, Route, Redirect } from 'react-router-dom';
import { inject, observer } from 'mobx-react';
import NavMenu from './components/NavMenu';
import Main from './components/Main';
import PrivateRoute from '@appserver/common/components/PrivateRoute';
import PublicRoute from '@appserver/common/components/PublicRoute';
import ErrorBoundary from '@appserver/common/components/ErrorBoundary';
import Layout from './components/Layout';
import ScrollToTop from './components/Layout/ScrollToTop';
import history from '@appserver/common/history';
import toastr from 'studio/toastr';
import { combineUrl, updateTempContent } from '@appserver/common/utils';
import { Provider as MobxProvider } from 'mobx-react';
import ThemeProvider from '@appserver/components/theme-provider';
import { Base, Dark } from '@appserver/components/themes';
import store from 'studio/store';
import config from '../package.json';
import { I18nextProvider, useTranslation } from 'react-i18next';
import i18n from './i18n';
import AppLoader from '@appserver/common/components/AppLoader';
import System from './components/System';
import { AppServerConfig } from '@appserver/common/constants';
import Snackbar from '@appserver/components/snackbar';
import moment from 'moment';
const { proxyURL } = AppServerConfig;
const homepage = config.homepage;
@ -30,34 +30,34 @@ const homepage = config.homepage;
const PROXY_HOMEPAGE_URL = combineUrl(proxyURL, homepage);
const HOME_URLS = [
combineUrl(PROXY_HOMEPAGE_URL),
combineUrl(PROXY_HOMEPAGE_URL, "/"),
combineUrl(PROXY_HOMEPAGE_URL, "/error=:error"),
combineUrl(PROXY_HOMEPAGE_URL, '/'),
combineUrl(PROXY_HOMEPAGE_URL, '/error=:error'),
];
const WIZARD_URL = combineUrl(PROXY_HOMEPAGE_URL, "/wizard");
const ABOUT_URL = combineUrl(PROXY_HOMEPAGE_URL, "/about");
const WIZARD_URL = combineUrl(PROXY_HOMEPAGE_URL, '/wizard');
const ABOUT_URL = combineUrl(PROXY_HOMEPAGE_URL, '/about');
const LOGIN_URLS = [
combineUrl(PROXY_HOMEPAGE_URL, "/login"),
combineUrl(PROXY_HOMEPAGE_URL, "/login/error=:error"),
combineUrl(PROXY_HOMEPAGE_URL, "/login/confirmed-email=:confirmedEmail"),
combineUrl(PROXY_HOMEPAGE_URL, '/login'),
combineUrl(PROXY_HOMEPAGE_URL, '/login/error=:error'),
combineUrl(PROXY_HOMEPAGE_URL, '/login/confirmed-email=:confirmedEmail'),
];
const CONFIRM_URL = combineUrl(PROXY_HOMEPAGE_URL, "/confirm");
const COMING_SOON_URLS = [combineUrl(PROXY_HOMEPAGE_URL, "/coming-soon")];
const PAYMENTS_URL = combineUrl(PROXY_HOMEPAGE_URL, "/payments");
const SETTINGS_URL = combineUrl(PROXY_HOMEPAGE_URL, "/settings");
const ERROR_401_URL = combineUrl(PROXY_HOMEPAGE_URL, "/error401");
const PROFILE_MY_URL = combineUrl(PROXY_HOMEPAGE_URL, "/my");
const CONFIRM_URL = combineUrl(PROXY_HOMEPAGE_URL, '/confirm');
const COMING_SOON_URLS = [combineUrl(PROXY_HOMEPAGE_URL, '/coming-soon')];
const PAYMENTS_URL = combineUrl(PROXY_HOMEPAGE_URL, '/payments');
const SETTINGS_URL = combineUrl(PROXY_HOMEPAGE_URL, '/settings');
const ERROR_401_URL = combineUrl(PROXY_HOMEPAGE_URL, '/error401');
const PROFILE_MY_URL = combineUrl(PROXY_HOMEPAGE_URL, '/my');
const Payments = React.lazy(() => import("./components/pages/Payments"));
const Error404 = React.lazy(() => import("studio/Error404"));
const Error401 = React.lazy(() => import("studio/Error401"));
const Home = React.lazy(() => import("./components/pages/Home"));
const Payments = React.lazy(() => import('./components/pages/Payments'));
const Error404 = React.lazy(() => import('studio/Error404'));
const Error401 = React.lazy(() => import('studio/Error401'));
const Home = React.lazy(() => import('./components/pages/Home'));
const About = React.lazy(() => import("./components/pages/About"));
const Wizard = React.lazy(() => import("./components/pages/Wizard"));
const Settings = React.lazy(() => import("./components/pages/Settings"));
const ComingSoon = React.lazy(() => import("./components/pages/ComingSoon"));
const Confirm = React.lazy(() => import("./components/pages/Confirm"));
const MyProfile = React.lazy(() => import("people/MyProfile"));
const About = React.lazy(() => import('./components/pages/About'));
const Wizard = React.lazy(() => import('./components/pages/Wizard'));
const Settings = React.lazy(() => import('./components/pages/Settings'));
const ComingSoon = React.lazy(() => import('./components/pages/ComingSoon'));
const Confirm = React.lazy(() => import('./components/pages/Confirm'));
const MyProfile = React.lazy(() => import('people/MyProfile'));
const SettingsRoute = (props) => (
<React.Suspense fallback={<AppLoader />}>
@ -139,16 +139,8 @@ const MyProfileRoute = (props) => (
const RedirectToHome = () => <Redirect to={PROXY_HOMEPAGE_URL} />;
const Shell = ({ items = [], page = "home", ...rest }) => {
const {
isLoaded,
loadBaseInfo,
modules,
isDesktop,
language,
FirebaseHelper,
personal,
} = rest;
const Shell = ({ items = [], page = 'home', ...rest }) => {
const { isLoaded, loadBaseInfo, modules, isDesktop, language, FirebaseHelper, personal } = rest;
useEffect(() => {
try {
@ -175,13 +167,13 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
}
}, []);
const { t } = useTranslation("Common");
const { t } = useTranslation('Common');
let snackTimer = null;
let fbInterval = null;
let lastCampaignStr = null;
const LS_CAMPAIGN_DATE = "maintenance_to_date";
const DATE_FORMAT = "YYYY-MM-DD";
const LS_CAMPAIGN_DATE = 'maintenance_to_date';
const DATE_FORMAT = 'YYYY-MM-DD';
const SNACKBAR_TIMEOUT = 10000;
const setSnackBarTimer = (campaign) => {
@ -200,12 +192,10 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
const { fromDate, toDate, desktop } = campaign;
console.log(
`FB: 'bar/maintenance' desktop=${desktop} fromDate=${fromDate} toDate=${toDate}`
);
console.log(`FB: 'bar/maintenance' desktop=${desktop} fromDate=${fromDate} toDate=${toDate}`);
if (!campaign || !fromDate || !toDate) {
console.log("Skip snackBar by empty campaign params");
console.log('Skip snackBar by empty campaign params');
return;
}
@ -214,7 +204,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
const watchedCampaignDateStr = localStorage.getItem(LS_CAMPAIGN_DATE);
const campaignDateStr = to.format(DATE_FORMAT);
if (campaignDateStr == watchedCampaignDateStr) {
console.log("Skip snackBar by already watched");
console.log('Skip snackBar by already watched');
return;
}
@ -230,46 +220,45 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
}
if (now.isAfter(to)) {
console.log("Skip snackBar by current date", now);
console.log('Skip snackBar by current date', now);
Snackbar.close();
return;
}
if (isDesktop && !desktop) {
console.log("Skip snackBar by desktop", desktop);
console.log('Skip snackBar by desktop', desktop);
Snackbar.close();
return;
}
setSnackBarTimer(campaign);
if (!document.getElementById("main-bar")) return;
if (!document.getElementById('main-bar')) return;
const campaignStr = JSON.stringify(campaign);
let skipRender = lastCampaignStr === campaignStr;
skipRender =
skipRender && document.getElementById("main-bar").hasChildNodes();
skipRender = skipRender && document.getElementById('main-bar').hasChildNodes();
if (skipRender) return;
lastCampaignStr = campaignStr;
const targetDate = to.locale(language).format("LL");
const targetDate = to.locale(language).format('LL');
const barConfig = {
parentElementId: "main-bar",
text: `${t("BarMaintenanceDescription", {
parentElementId: 'main-bar',
text: `${t('BarMaintenanceDescription', {
targetDate: targetDate,
productName: "ONLYOFFICE Personal",
})} ${t("BarMaintenanceDisclaimer")}`,
productName: 'ONLYOFFICE Personal',
})} ${t('BarMaintenanceDisclaimer')}`,
onAction: () => {
Snackbar.close();
localStorage.setItem(LS_CAMPAIGN_DATE, to.format(DATE_FORMAT));
},
opacity: 1,
style: {
marginTop: "10px",
marginTop: '10px',
},
};
@ -282,7 +271,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
FirebaseHelper.checkMaintenance()
.then((campaign) => {
console.log("checkMaintenance", campaign);
console.log('checkMaintenance', campaign);
if (!campaign) {
clearSnackBarTimer();
Snackbar.close();
@ -304,7 +293,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
FirebaseHelper.checkCampaigns()
.then((campaigns) => {
localStorage.setItem("campaigns", campaigns);
localStorage.setItem('campaigns', campaigns);
})
.catch((err) => {
console.error(err);
@ -317,7 +306,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
updateTempContent();
if (!FirebaseHelper.isEnabled) {
localStorage.setItem("campaigns", "");
localStorage.setItem('campaigns', '');
return;
}
@ -334,11 +323,11 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
}, [isLoaded]);
useEffect(() => {
console.log("Current page ", page);
console.log('Current page ', page);
}, [page]);
const pathname = window.location.pathname.toLowerCase();
const isEditor = pathname.indexOf("doceditor") !== -1;
const isEditor = pathname.indexOf('doceditor') !== -1;
if (!window.AppServer.studio) {
window.AppServer.studio = {};
@ -348,16 +337,12 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
const dynamicRoutes = modules.map((m) => {
const appURL = m.link;
const remoteEntryURL = combineUrl(
window.location.origin,
appURL,
`remoteEntry.js`
);
const remoteEntryURL = combineUrl(window.location.origin, appURL, `remoteEntry.js`);
const system = {
url: remoteEntryURL,
scope: m.appName,
module: "./app",
module: './app',
};
window.AppServer.studio.modules[m.appName] = {
@ -369,13 +354,8 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
<PrivateRoute
key={m.id}
path={
m.appName === "files"
? [
"/Products/Files",
"/Products/Files/",
"/Products/Files/?desktop=true",
appURL,
]
m.appName === 'files'
? ['/Products/Files', '/Products/Files/', '/Products/Files/?desktop=true', appURL]
: appURL
}
component={System}
@ -388,9 +368,9 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
if (isLoaded && !personal) {
const loginSystem = {
url: combineUrl(AppServerConfig.proxyURL, "/login/remoteEntry.js"),
scope: "login",
module: "./app",
url: combineUrl(AppServerConfig.proxyURL, '/login/remoteEntry.js'),
scope: 'login',
module: './app',
};
loginRoutes.push(
<PublicRoute
@ -399,7 +379,7 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
path={LOGIN_URLS}
component={System}
system={loginSystem}
/>
/>,
);
}
@ -416,27 +396,13 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
<PrivateRoute path={ABOUT_URL} component={AboutRoute} />
{loginRoutes}
<Route path={CONFIRM_URL} component={ConfirmRoute} />
<PrivateRoute
path={COMING_SOON_URLS}
component={ComingSoonRoute}
/>
<PrivateRoute path={COMING_SOON_URLS} component={ComingSoonRoute} />
<PrivateRoute path={PAYMENTS_URL} component={PaymentsRoute} />
<PrivateRoute
restricted
path={SETTINGS_URL}
component={SettingsRoute}
/>
<PrivateRoute
exact
allowForMe
path={PROFILE_MY_URL}
component={MyProfileRoute}
/>
<PrivateRoute restricted path={SETTINGS_URL} component={SettingsRoute} />
<PrivateRoute exact allowForMe path={PROFILE_MY_URL} component={MyProfileRoute} />
{dynamicRoutes}
<PrivateRoute path={ERROR_401_URL} component={Error401Route} />
<PrivateRoute
component={!personal ? Error404Route : RedirectToHome}
/>
<PrivateRoute component={!personal ? Error404Route : RedirectToHome} />
</Switch>
</Main>
</>
@ -447,21 +413,16 @@ const Shell = ({ items = [], page = "home", ...rest }) => {
const ShellWrapper = inject(({ auth }) => {
const { init, isLoaded, settingsStore, setProductVersion, language } = auth;
const {
personal,
isDesktopClient,
firebaseHelper,
setModuleInfo,
} = settingsStore;
const { personal, isDesktopClient, firebaseHelper, setModuleInfo } = settingsStore;
return {
loadBaseInfo: () => {
init();
setModuleInfo(config.homepage, "home");
setModuleInfo(config.homepage, 'home');
setProductVersion(config.version);
if (isDesktopClient) {
document.body.classList.add("desktop");
document.body.classList.add('desktop');
}
},
language,
@ -474,7 +435,7 @@ const ShellWrapper = inject(({ auth }) => {
})(observer(Shell));
export default () => (
<ThemeProvider theme={Base}>
<ThemeProvider theme={Dark}>
<MobxProvider {...store}>
<I18nextProvider i18n={i18n}>
<ShellWrapper />