TrashedNoteItems, PinItem and ArchiveItem (EditorChrome.kt) are the rows that the editor's overflow and the board's long-press menu each built: a trashed note's restore and delete-forever, and the pin and archive toggles. Each menu keeps its own order and its owner-only rows. Checked with ktlint in the CI image. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -287,13 +287,9 @@ private fun OverflowMenu(
|
|||||||
}
|
}
|
||||||
DropdownMenu(expanded = open, onDismissRequest = close) {
|
DropdownMenu(expanded = open, onDismissRequest = close) {
|
||||||
if (note.trashed) {
|
if (note.trashed) {
|
||||||
MenuItem(R.string.editor_restore, close) { onAction(EditorAction.Restore) }
|
TrashedNoteItems(close, onAction, onConfirmDelete)
|
||||||
MenuItem(R.string.editor_delete_forever, close, onConfirmDelete)
|
|
||||||
} else {
|
} else {
|
||||||
MenuItem(
|
PinItem(note, close, onAction)
|
||||||
if (note.pinned) R.string.editor_unpin else R.string.editor_pin,
|
|
||||||
close,
|
|
||||||
) { onAction(EditorAction.SetPinned(!note.pinned)) }
|
|
||||||
if (owner) {
|
if (owner) {
|
||||||
MenuItem(R.string.editor_labels, close) { onPicker(Picker.LABELS) }
|
MenuItem(R.string.editor_labels, close) { onPicker(Picker.LABELS) }
|
||||||
}
|
}
|
||||||
@@ -301,10 +297,7 @@ private fun OverflowMenu(
|
|||||||
if (owner && note.id != DRAFT_ID) {
|
if (owner && note.id != DRAFT_ID) {
|
||||||
MenuItem(R.string.editor_share, close, onShare)
|
MenuItem(R.string.editor_share, close, onShare)
|
||||||
}
|
}
|
||||||
MenuItem(
|
ArchiveItem(note, close, onAction)
|
||||||
if (note.archived) R.string.editor_unarchive else R.string.editor_archive,
|
|
||||||
close,
|
|
||||||
) { onAction(EditorAction.SetArchived(!note.archived)) }
|
|
||||||
if (owner) {
|
if (owner) {
|
||||||
MenuItem(R.string.editor_trash, close) { onAction(EditorAction.Trash) }
|
MenuItem(R.string.editor_trash, close) { onAction(EditorAction.Trash) }
|
||||||
}
|
}
|
||||||
@@ -313,6 +306,44 @@ private fun OverflowMenu(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The rows a note's menu shares between the editor's overflow and the board's
|
||||||
|
// long-press menu: two ways to the same acts, worded the same way.
|
||||||
|
|
||||||
|
/** A trashed note's two ways out: back, or gone for good (which asks first). */
|
||||||
|
@Composable
|
||||||
|
internal fun TrashedNoteItems(
|
||||||
|
close: () -> Unit,
|
||||||
|
onAction: (EditorAction) -> Unit,
|
||||||
|
onConfirmDelete: () -> Unit,
|
||||||
|
) {
|
||||||
|
MenuItem(R.string.editor_restore, close) { onAction(EditorAction.Restore) }
|
||||||
|
MenuItem(R.string.editor_delete_forever, close, onConfirmDelete)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
internal fun PinItem(
|
||||||
|
note: Note,
|
||||||
|
close: () -> Unit,
|
||||||
|
onAction: (EditorAction) -> Unit,
|
||||||
|
) {
|
||||||
|
MenuItem(
|
||||||
|
if (note.pinned) R.string.editor_unpin else R.string.editor_pin,
|
||||||
|
close,
|
||||||
|
) { onAction(EditorAction.SetPinned(!note.pinned)) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
internal fun ArchiveItem(
|
||||||
|
note: Note,
|
||||||
|
close: () -> Unit,
|
||||||
|
onAction: (EditorAction) -> Unit,
|
||||||
|
) {
|
||||||
|
MenuItem(
|
||||||
|
if (note.archived) R.string.editor_unarchive else R.string.editor_archive,
|
||||||
|
close,
|
||||||
|
) { onAction(EditorAction.SetArchived(!note.archived)) }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The note's labels, each removable.
|
* The note's labels, each removable.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -224,17 +224,10 @@ private fun NoteMenu(
|
|||||||
val owner = note.access == NoteAccess.OWNER
|
val owner = note.access == NoteAccess.OWNER
|
||||||
DropdownMenu(expanded = expanded && (owner || !note.trashed), onDismissRequest = onDismiss) {
|
DropdownMenu(expanded = expanded && (owner || !note.trashed), onDismissRequest = onDismiss) {
|
||||||
if (note.trashed) {
|
if (note.trashed) {
|
||||||
MenuItem(R.string.editor_restore, onDismiss) { onAction(EditorAction.Restore) }
|
TrashedNoteItems(onDismiss, onAction, onConfirmDelete)
|
||||||
MenuItem(R.string.editor_delete_forever, onDismiss, onConfirmDelete)
|
|
||||||
} else {
|
} else {
|
||||||
MenuItem(
|
PinItem(note, onDismiss, onAction)
|
||||||
if (note.pinned) R.string.editor_unpin else R.string.editor_pin,
|
ArchiveItem(note, onDismiss, onAction)
|
||||||
onDismiss,
|
|
||||||
) { onAction(EditorAction.SetPinned(!note.pinned)) }
|
|
||||||
MenuItem(
|
|
||||||
if (note.archived) R.string.editor_unarchive else R.string.editor_archive,
|
|
||||||
onDismiss,
|
|
||||||
) { onAction(EditorAction.SetArchived(!note.archived)) }
|
|
||||||
if (owner) {
|
if (owner) {
|
||||||
MenuItem(R.string.editor_trash, onDismiss) { onAction(EditorAction.Trash) }
|
MenuItem(R.string.editor_trash, onDismiss) { onAction(EditorAction.Trash) }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user