From 3bb1ca7825a0381ddd8dbe7f44f7dcf4a788b165 Mon Sep 17 00:00:00 2001 From: André Oliveira <37463445+SpecialAro@users.noreply.github.com> Date: Tue, 19 Jul 2022 12:52:31 +0100 Subject: Feature: Add Release Notes (#491) Co-authored-by: Vijay A Co-authored-by: Ricardo Cino --- src/components/layout/AppLayout.jsx | 226 ++++++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 src/components/layout/AppLayout.jsx (limited to 'src/components/layout/AppLayout.jsx') diff --git a/src/components/layout/AppLayout.jsx b/src/components/layout/AppLayout.jsx new file mode 100644 index 000000000..685839c0a --- /dev/null +++ b/src/components/layout/AppLayout.jsx @@ -0,0 +1,226 @@ +import { Component } from 'react'; +import PropTypes from 'prop-types'; +import { observer } from 'mobx-react'; +import { defineMessages, injectIntl } from 'react-intl'; +import { TitleBar } from 'electron-react-titlebar/renderer'; +import injectSheet from 'react-jss'; +import { ipcRenderer } from 'electron'; + +import { mdiFlash, mdiPowerPlug } from '@mdi/js'; +import { Outlet } from 'react-router-dom'; +import InfoBar from '../ui/InfoBar'; +import { Component as BasicAuth } from '../../features/basicAuth'; +import { Component as QuickSwitch } from '../../features/quickSwitch'; +import { Component as PublishDebugInfo } from '../../features/publishDebugInfo'; +import ErrorBoundary from '../util/ErrorBoundary'; +import { updateVersionParse } from '../../helpers/update-helpers'; + +// import globalMessages from '../../i18n/globalMessages'; + +import { isWindows, isMac } from '../../environment'; +import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator'; +import { workspaceStore } from '../../features/workspaces'; +import AppUpdateInfoBar from '../AppUpdateInfoBar'; +import Todos from '../../features/todos/containers/TodosScreen'; +import Icon from '../ui/icon'; + +import LockedScreen from '../../containers/auth/LockedScreen'; + +const messages = defineMessages({ + servicesUpdated: { + id: 'infobar.servicesUpdated', + defaultMessage: 'Your services have been updated.', + }, + buttonReloadServices: { + id: 'infobar.buttonReloadServices', + defaultMessage: 'Reload services', + }, + requiredRequestsFailed: { + id: 'infobar.requiredRequestsFailed', + defaultMessage: 'Could not load services and user information', + }, + authRequestFailed: { + id: 'infobar.authRequestFailed', + defaultMessage: + 'There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.', + }, +}); + +let transition = 'none'; + +if (window && window.matchMedia('(prefers-reduced-motion: no-preference)')) { + transition = 'transform 0.5s ease'; +} + +const styles = theme => ({ + appContent: { + // width: `calc(100% + ${theme.workspaces.drawer.width}px)`, + width: '100%', + transition, + transform() { + return workspaceStore.isWorkspaceDrawerOpen + ? 'translateX(0)' + : `translateX(-${theme.workspaces.drawer.width}px)`; + }, + }, + titleBar: { + display: 'block', + zIndex: 1, + width: '100%', + height: '10px', + position: 'absolute', + top: 0, + }, +}); + +const toggleFullScreen = () => { + ipcRenderer.send('window.toolbar-double-clicked'); +}; + +class AppLayout extends Component { + static propTypes = { + classes: PropTypes.object.isRequired, + settings: PropTypes.object.isRequired, + isFullScreen: PropTypes.bool.isRequired, + sidebar: PropTypes.element.isRequired, + workspacesDrawer: PropTypes.element.isRequired, + services: PropTypes.element.isRequired, + showServicesUpdatedInfoBar: PropTypes.bool.isRequired, + appUpdateIsDownloaded: PropTypes.bool.isRequired, + authRequestFailed: PropTypes.bool.isRequired, + installAppUpdate: PropTypes.func.isRequired, + showRequiredRequestsError: PropTypes.bool.isRequired, + areRequiredRequestsSuccessful: PropTypes.bool.isRequired, + retryRequiredRequests: PropTypes.func.isRequired, + areRequiredRequestsLoading: PropTypes.bool.isRequired, + }; + + constructor(props) { + super(props); + + this.state = { + shouldShowAppUpdateInfoBar: true, + shouldShowServicesUpdatedInfoBar: true, + }; + } + + render() { + const { + classes, + isFullScreen, + workspacesDrawer, + sidebar, + services, + showServicesUpdatedInfoBar, + appUpdateIsDownloaded, + authRequestFailed, + installAppUpdate, + settings, + showRequiredRequestsError, + areRequiredRequestsSuccessful, + retryRequiredRequests, + areRequiredRequestsLoading, + updateVersion, + } = this.props; + + const { intl } = this.props; + + const { locked, automaticUpdates } = settings.app; + if (locked) { + return ; + } + + return ( + <> + {isMac && !isFullScreen &&
} + +
+ {isWindows && !isFullScreen && ( + + )} + {isMac && !isFullScreen && ( + + )} +
+ {workspacesDrawer} + {sidebar} +
+ + {!areRequiredRequestsSuccessful && showRequiredRequestsError && ( + + + {intl.formatMessage(messages.requiredRequestsFailed)} + + )} + {authRequestFailed && ( + + + {intl.formatMessage(messages.authRequestFailed)} + + )} + {automaticUpdates && + showServicesUpdatedInfoBar && + this.state.shouldShowServicesUpdatedInfoBar && ( + window.location.reload()} + onHide={() => { + this.setState({ + shouldShowServicesUpdatedInfoBar: false, + }); + }} + > + + {intl.formatMessage(messages.servicesUpdated)} + + )} + {automaticUpdates && + appUpdateIsDownloaded && + this.state.shouldShowAppUpdateInfoBar && ( + { + this.setState({ shouldShowAppUpdateInfoBar: false }); + }} + /> + )} + + + + {services} + +
+ +
+
+
+ + ); + } +} + +export default injectIntl( + injectSheet(styles, { injectTheme: true })(observer(AppLayout)), +); -- cgit v1.2.3-54-g00ecf