fix: Fixed an issue where deleting a file from the preview modal would not correctly navigate to next item or dismiss the modal
This commit is contained in:
@@ -51,7 +51,7 @@ const FilePreviewModal = observer(({ application, viewControllerManager }: Props
|
|||||||
|
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
|
|
||||||
const currentFileIndex = otherFiles.findIndex((fileFromArray) => fileFromArray.uuid === currentFile.uuid)
|
const currentFileIndex = otherFiles.findIndex((file) => file.uuid === currentFile.uuid)
|
||||||
|
|
||||||
switch (event.key) {
|
switch (event.key) {
|
||||||
case KeyboardKey.Left: {
|
case KeyboardKey.Left: {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { FileItem } from '@standardnotes/snjs'
|
import { WebApplication } from '@/Application/Application'
|
||||||
|
import { ContentType, FileItem } from '@standardnotes/snjs'
|
||||||
import { action, makeObservable, observable } from 'mobx'
|
import { action, makeObservable, observable } from 'mobx'
|
||||||
|
|
||||||
export class FilePreviewModalController {
|
export class FilePreviewModalController {
|
||||||
@@ -6,7 +7,9 @@ export class FilePreviewModalController {
|
|||||||
currentFile: FileItem | undefined = undefined
|
currentFile: FileItem | undefined = undefined
|
||||||
otherFiles: FileItem[] = []
|
otherFiles: FileItem[] = []
|
||||||
|
|
||||||
constructor() {
|
eventObservers: (() => void)[] = []
|
||||||
|
|
||||||
|
constructor(application: WebApplication) {
|
||||||
makeObservable(this, {
|
makeObservable(this, {
|
||||||
isOpen: observable,
|
isOpen: observable,
|
||||||
currentFile: observable,
|
currentFile: observable,
|
||||||
@@ -16,6 +19,35 @@ export class FilePreviewModalController {
|
|||||||
dismiss: action,
|
dismiss: action,
|
||||||
setCurrentFile: action,
|
setCurrentFile: action,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.eventObservers.push(
|
||||||
|
application.streamItems(ContentType.File, ({ changed, removed }) => {
|
||||||
|
if (!this.currentFile) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (changed.includes(this.currentFile)) {
|
||||||
|
this.setCurrentFile(this.currentFile)
|
||||||
|
}
|
||||||
|
if (removed.find((f) => f.uuid === this.currentFile?.uuid)) {
|
||||||
|
if (!this.otherFiles.length) {
|
||||||
|
this.dismiss()
|
||||||
|
this.currentFile = undefined
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const currentFileIndex = this.otherFiles.findIndex((file) => file.uuid === this.currentFile?.uuid)
|
||||||
|
const nextFileIndex = currentFileIndex + 1 < this.otherFiles.length ? currentFileIndex + 1 : 0
|
||||||
|
this.setCurrentFile(this.otherFiles[nextFileIndex])
|
||||||
|
this.otherFiles = this.otherFiles.filter((file) => file.uuid !== this.currentFile?.uuid)
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit = () => {
|
||||||
|
this.eventObservers.forEach((observer) => observer())
|
||||||
|
;(this.currentFile as any) = undefined
|
||||||
|
;(this.otherFiles as any) = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
setCurrentFile = (currentFile: FileItem) => {
|
setCurrentFile = (currentFile: FileItem) => {
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export class ViewControllerManager implements InternalEventHandlerInterface {
|
|||||||
readonly accountMenuController: AccountMenuController
|
readonly accountMenuController: AccountMenuController
|
||||||
readonly actionsMenuController = new ActionsMenuController()
|
readonly actionsMenuController = new ActionsMenuController()
|
||||||
readonly featuresController: FeaturesController
|
readonly featuresController: FeaturesController
|
||||||
readonly filePreviewModalController = new FilePreviewModalController()
|
readonly filePreviewModalController: FilePreviewModalController
|
||||||
readonly filesController: FilesController
|
readonly filesController: FilesController
|
||||||
readonly noAccountWarningController: NoAccountWarningController
|
readonly noAccountWarningController: NoAccountWarningController
|
||||||
readonly notesController: NotesController
|
readonly notesController: NotesController
|
||||||
@@ -88,6 +88,8 @@ export class ViewControllerManager implements InternalEventHandlerInterface {
|
|||||||
|
|
||||||
this.subscriptionManager = application.subscriptions
|
this.subscriptionManager = application.subscriptions
|
||||||
|
|
||||||
|
this.filePreviewModalController = new FilePreviewModalController(application)
|
||||||
|
|
||||||
this.quickSettingsMenuController = new QuickSettingsController(application, this.eventBus)
|
this.quickSettingsMenuController = new QuickSettingsController(application, this.eventBus)
|
||||||
|
|
||||||
this.paneController = new PaneController(application, this.eventBus)
|
this.paneController = new PaneController(application, this.eventBus)
|
||||||
@@ -201,6 +203,7 @@ export class ViewControllerManager implements InternalEventHandlerInterface {
|
|||||||
this.appEventObserverRemovers.forEach((remover) => remover())
|
this.appEventObserverRemovers.forEach((remover) => remover())
|
||||||
this.appEventObserverRemovers.length = 0
|
this.appEventObserverRemovers.length = 0
|
||||||
;(this.device as unknown) = undefined
|
;(this.device as unknown) = undefined
|
||||||
|
this.filePreviewModalController.deinit()
|
||||||
;(this.filePreviewModalController as unknown) = undefined
|
;(this.filePreviewModalController as unknown) = undefined
|
||||||
;(this.preferencesController as unknown) = undefined
|
;(this.preferencesController as unknown) = undefined
|
||||||
;(this.quickSettingsMenuController as unknown) = undefined
|
;(this.quickSettingsMenuController as unknown) = undefined
|
||||||
|
|||||||
Reference in New Issue
Block a user