fix: Fixed issue where multiple trashed items on mobile could not be deleted permanently

This commit is contained in:
Aman Harwara
2023-11-27 21:34:10 +05:30
parent bf6f8a8b62
commit 5660df577d
4 changed files with 20 additions and 5 deletions

View File

@@ -382,7 +382,7 @@ const ContentListView = forwardRef<HTMLDivElement, Props>(
)
) : null}
{isMobileScreen && itemListController.isMultipleSelectionMode && (
<MobileMultiSelectionToolbar notesController={notesController} />
<MobileMultiSelectionToolbar notesController={notesController} navigationController={navigationController} />
)}
<div className="absolute bottom-0 h-safe-bottom w-full" />
{children}

View File

@@ -1,12 +1,17 @@
import { NotesController } from '@/Controllers/NotesController/NotesController'
import Icon from '../Icon/Icon'
import { NavigationController } from '@/Controllers/Navigation/NavigationController'
import { observer } from 'mobx-react-lite'
import { SystemViewId, isSmartView } from '@standardnotes/snjs'
type Props = {
notesController: NotesController
navigationController: NavigationController
}
const MobileMultiSelectionToolbar = ({ notesController }: Props) => {
const MobileMultiSelectionToolbar = ({ notesController, navigationController }: Props) => {
const { selectedNotes } = notesController
const { selected } = navigationController
const archived = selectedNotes.some((note) => note.archived)
@@ -26,7 +31,16 @@ const MobileMultiSelectionToolbar = ({ notesController }: Props) => {
</button>
<button
className="flex-grow px-2 py-3 active:bg-passive-3"
onClick={() => notesController.setTrashSelectedNotes(true).catch(console.error)}
onClick={() => {
const isInTrashView = selected && isSmartView(selected) && selected.uuid === SystemViewId.TrashedNotes
const allSelectedNotesAreTrashed = selectedNotes.every((note) => note.trashed)
const shouldDeletePermanently = isInTrashView || allSelectedNotesAreTrashed
if (shouldDeletePermanently) {
notesController.deleteNotesPermanently().catch(console.error)
} else {
notesController.setTrashSelectedNotes(true).catch(console.error)
}
}}
>
<Icon type="trash" className="mx-auto text-info" size="large" />
</button>
@@ -40,4 +54,4 @@ const MobileMultiSelectionToolbar = ({ notesController }: Props) => {
)
}
export default MobileMultiSelectionToolbar
export default observer(MobileMultiSelectionToolbar)

View File

@@ -109,6 +109,7 @@ export const Strings = {
protectingNoteWithoutProtectionSources:
'Access to this note will not be restricted until you set up a passcode or account.',
trashItemsTitle: 'Move to Trash',
deleteItemsPermanentlyTitle: 'Delete Permanently',
trashNotesText: 'Are you sure you want to move these notes to the trash?',
trashFilesText: 'Are you sure you want to move these files to the trash?',
enterPasscode: 'Please enter a passcode.',

View File

@@ -213,7 +213,7 @@ export class NotesController
return false
}
const title = Strings.trashItemsTitle
const title = permanently ? Strings.deleteItemsPermanentlyTitle : Strings.trashItemsTitle
let noteTitle = undefined
if (this.selectedNotesCount === 1) {
const selectedNote = this.getSelectedNotesList()[0]