fix: don't render editor view on mobile if editor pane not selected (#1790)
This commit is contained in:
@@ -2,19 +2,21 @@ import { FileItem, FileViewController, NoteViewController } from '@standardnotes
|
|||||||
import { PureComponent } from '@/Components/Abstract/PureComponent'
|
import { PureComponent } from '@/Components/Abstract/PureComponent'
|
||||||
import { WebApplication } from '@/Application/Application'
|
import { WebApplication } from '@/Application/Application'
|
||||||
import MultipleSelectedNotes from '@/Components/MultipleSelectedNotes/MultipleSelectedNotes'
|
import MultipleSelectedNotes from '@/Components/MultipleSelectedNotes/MultipleSelectedNotes'
|
||||||
import NoteView from '@/Components/NoteView/NoteView'
|
|
||||||
import MultipleSelectedFiles from '../MultipleSelectedFiles/MultipleSelectedFiles'
|
import MultipleSelectedFiles from '../MultipleSelectedFiles/MultipleSelectedFiles'
|
||||||
import { ElementIds } from '@/Constants/ElementIDs'
|
import { ElementIds } from '@/Constants/ElementIDs'
|
||||||
import FileView from '@/Components/FileView/FileView'
|
|
||||||
import { FileDnDContext } from '@/Components/FileDragNDropProvider/FileDragNDropProvider'
|
import { FileDnDContext } from '@/Components/FileDragNDropProvider/FileDragNDropProvider'
|
||||||
import { AppPaneId } from '../ResponsivePane/AppPaneMetadata'
|
import { AppPaneId } from '../ResponsivePane/AppPaneMetadata'
|
||||||
import ResponsivePaneContent from '../ResponsivePane/ResponsivePaneContent'
|
import ResponsivePaneContent from '../ResponsivePane/ResponsivePaneContent'
|
||||||
|
import FileView from '../FileView/FileView'
|
||||||
|
import NoteView from '../NoteView/NoteView'
|
||||||
|
|
||||||
type State = {
|
type State = {
|
||||||
showMultipleSelectedNotes: boolean
|
showMultipleSelectedNotes: boolean
|
||||||
showMultipleSelectedFiles: boolean
|
showMultipleSelectedFiles: boolean
|
||||||
controllers: (NoteViewController | FileViewController)[]
|
controllers: (NoteViewController | FileViewController)[]
|
||||||
selectedFile: FileItem | undefined
|
selectedFile: FileItem | undefined
|
||||||
|
selectedPane?: AppPaneId
|
||||||
|
isInMobileView?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
@@ -73,6 +75,15 @@ class NoteGroupView extends PureComponent<Props, State> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.autorun(() => {
|
||||||
|
if (this.viewControllerManager && this.viewControllerManager.paneController) {
|
||||||
|
this.setState({
|
||||||
|
selectedPane: this.viewControllerManager.paneController.currentPane,
|
||||||
|
isInMobileView: this.viewControllerManager.paneController.isInMobileView,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override deinit() {
|
override deinit() {
|
||||||
@@ -88,6 +99,10 @@ class NoteGroupView extends PureComponent<Props, State> {
|
|||||||
const shouldNotShowMultipleSelectedItems =
|
const shouldNotShowMultipleSelectedItems =
|
||||||
!this.state.showMultipleSelectedNotes && !this.state.showMultipleSelectedFiles
|
!this.state.showMultipleSelectedNotes && !this.state.showMultipleSelectedFiles
|
||||||
|
|
||||||
|
const hasControllers = this.state.controllers.length > 0
|
||||||
|
|
||||||
|
const canRenderEditorView = this.state.selectedPane === AppPaneId.Editor || !this.state.isInMobileView
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
id={ElementIds.EditorColumn}
|
id={ElementIds.EditorColumn}
|
||||||
@@ -118,7 +133,7 @@ class NoteGroupView extends PureComponent<Props, State> {
|
|||||||
Drop your files to upload them
|
Drop your files to upload them
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{shouldNotShowMultipleSelectedItems && this.state.controllers.length > 0 && (
|
{shouldNotShowMultipleSelectedItems && hasControllers && canRenderEditorView && (
|
||||||
<>
|
<>
|
||||||
{this.state.controllers.map((controller) => {
|
{this.state.controllers.map((controller) => {
|
||||||
return controller instanceof NoteViewController ? (
|
return controller instanceof NoteViewController ? (
|
||||||
|
|||||||
@@ -1,19 +1,39 @@
|
|||||||
import { AppPaneId } from './../Components/ResponsivePane/AppPaneMetadata'
|
import { AppPaneId } from './../Components/ResponsivePane/AppPaneMetadata'
|
||||||
import { isMobileScreen } from '@/Utils'
|
import { isMobileScreen } from '@/Utils'
|
||||||
import { makeObservable, observable, action } from 'mobx'
|
import { makeObservable, observable, action } from 'mobx'
|
||||||
|
import { Disposer } from '@/Types/Disposer'
|
||||||
|
import { MediaQueryBreakpoints } from '@/Hooks/useMediaQuery'
|
||||||
|
|
||||||
export class PaneController {
|
export class PaneController {
|
||||||
currentPane: AppPaneId = isMobileScreen() ? AppPaneId.Items : AppPaneId.Editor
|
currentPane: AppPaneId = isMobileScreen() ? AppPaneId.Items : AppPaneId.Editor
|
||||||
previousPane: AppPaneId = isMobileScreen() ? AppPaneId.Items : AppPaneId.Editor
|
previousPane: AppPaneId = isMobileScreen() ? AppPaneId.Items : AppPaneId.Editor
|
||||||
|
isInMobileView = isMobileScreen()
|
||||||
|
protected disposers: Disposer[] = []
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
makeObservable(this, {
|
makeObservable(this, {
|
||||||
currentPane: observable,
|
currentPane: observable,
|
||||||
previousPane: observable,
|
previousPane: observable,
|
||||||
|
isInMobileView: observable,
|
||||||
|
|
||||||
setCurrentPane: action,
|
setCurrentPane: action,
|
||||||
setPreviousPane: action,
|
setPreviousPane: action,
|
||||||
|
setIsInMobileView: action,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
window.matchMedia(MediaQueryBreakpoints.md).addEventListener('change', this.mediumScreenMQHandler)
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit() {
|
||||||
|
window.matchMedia(MediaQueryBreakpoints.md).removeEventListener('change', this.mediumScreenMQHandler)
|
||||||
|
}
|
||||||
|
|
||||||
|
mediumScreenMQHandler = (event: MediaQueryListEvent) => {
|
||||||
|
if (event.matches) {
|
||||||
|
this.isInMobileView = false
|
||||||
|
} else {
|
||||||
|
this.isInMobileView = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setCurrentPane(pane: AppPaneId): void {
|
setCurrentPane(pane: AppPaneId): void {
|
||||||
@@ -23,4 +43,8 @@ export class PaneController {
|
|||||||
setPreviousPane(pane: AppPaneId): void {
|
setPreviousPane(pane: AppPaneId): void {
|
||||||
this.previousPane = pane
|
this.previousPane = pane
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setIsInMobileView(isInMobileView: boolean) {
|
||||||
|
this.isInMobileView = isInMobileView
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -211,6 +211,8 @@ export class ViewControllerManager {
|
|||||||
|
|
||||||
this.historyModalController.deinit()
|
this.historyModalController.deinit()
|
||||||
;(this.historyModalController as unknown) = undefined
|
;(this.historyModalController as unknown) = undefined
|
||||||
|
|
||||||
|
this.paneController.deinit()
|
||||||
;(this.paneController as unknown) = undefined
|
;(this.paneController as unknown) = undefined
|
||||||
|
|
||||||
destroyAllObjectProperties(this)
|
destroyAllObjectProperties(this)
|
||||||
|
|||||||
Reference in New Issue
Block a user