mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-27 01:02:14 +08:00
Editor: Add 'Discard Changes' button
It got removed while merging the editor/viewer
This commit is contained in:
@ -9,13 +9,14 @@ abstract class Editor {
|
||||
NoteCallback get exitEditorSelected;
|
||||
NoteCallback get renameNoteSelected;
|
||||
NoteCallback get moveNoteToFolderSelected;
|
||||
NoteCallback get discardChangesSelected;
|
||||
}
|
||||
|
||||
abstract class EditorState {
|
||||
Note getNote();
|
||||
}
|
||||
|
||||
enum DropDownChoices { Rename, MoveToFolder }
|
||||
enum DropDownChoices { Rename, MoveToFolder, DiscardChanges }
|
||||
|
||||
AppBar buildEditorAppBar(
|
||||
Editor editor,
|
||||
@ -58,6 +59,11 @@ AppBar buildEditorAppBar(
|
||||
var note = editorState.getNote();
|
||||
editor.moveNoteToFolderSelected(note);
|
||||
return;
|
||||
|
||||
case DropDownChoices.DiscardChanges:
|
||||
var note = editorState.getNote();
|
||||
editor.discardChangesSelected(note);
|
||||
return;
|
||||
}
|
||||
},
|
||||
itemBuilder: (BuildContext context) =>
|
||||
@ -70,6 +76,10 @@ AppBar buildEditorAppBar(
|
||||
value: DropDownChoices.MoveToFolder,
|
||||
child: Text('Move to Folder'),
|
||||
),
|
||||
const PopupMenuItem<DropDownChoices>(
|
||||
value: DropDownChoices.DiscardChanges,
|
||||
child: Text('Discard Changes'),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
|
@ -17,6 +17,8 @@ class MarkdownEditor extends StatefulWidget implements Editor {
|
||||
final NoteCallback renameNoteSelected;
|
||||
@override
|
||||
final NoteCallback moveNoteToFolderSelected;
|
||||
@override
|
||||
final NoteCallback discardChangesSelected;
|
||||
|
||||
final bool autofocusOnEditor;
|
||||
|
||||
@ -28,6 +30,7 @@ class MarkdownEditor extends StatefulWidget implements Editor {
|
||||
@required this.exitEditorSelected,
|
||||
@required this.renameNoteSelected,
|
||||
@required this.moveNoteToFolderSelected,
|
||||
@required this.discardChangesSelected,
|
||||
this.autofocusOnEditor = false,
|
||||
}) : super(key: key);
|
||||
|
||||
|
@ -17,6 +17,8 @@ class RawEditor extends StatefulWidget implements Editor {
|
||||
final NoteCallback renameNoteSelected;
|
||||
@override
|
||||
final NoteCallback moveNoteToFolderSelected;
|
||||
@override
|
||||
final NoteCallback discardChangesSelected;
|
||||
|
||||
RawEditor({
|
||||
Key key,
|
||||
@ -26,6 +28,7 @@ class RawEditor extends StatefulWidget implements Editor {
|
||||
@required this.exitEditorSelected,
|
||||
@required this.renameNoteSelected,
|
||||
@required this.moveNoteToFolderSelected,
|
||||
@required this.discardChangesSelected,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
|
@ -16,6 +16,8 @@ class TodoEditor extends StatefulWidget implements Editor {
|
||||
final NoteCallback renameNoteSelected;
|
||||
@override
|
||||
final NoteCallback moveNoteToFolderSelected;
|
||||
@override
|
||||
final NoteCallback discardChangesSelected;
|
||||
|
||||
TodoEditor({
|
||||
Key key,
|
||||
@ -25,6 +27,7 @@ class TodoEditor extends StatefulWidget implements Editor {
|
||||
@required this.exitEditorSelected,
|
||||
@required this.renameNoteSelected,
|
||||
@required this.moveNoteToFolderSelected,
|
||||
@required this.discardChangesSelected,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
|
@ -12,7 +12,7 @@ import 'package:gitjournal/utils.dart';
|
||||
import 'package:gitjournal/widgets/folder_selection_dialog.dart';
|
||||
import 'package:gitjournal/widgets/rename_dialog.dart';
|
||||
|
||||
final todoEditorEnabled = false;
|
||||
final todoEditorEnabled = true;
|
||||
|
||||
class NoteEditor extends StatefulWidget {
|
||||
final Note note;
|
||||
@ -77,6 +77,7 @@ class NoteEditorState extends State<NoteEditor> {
|
||||
exitEditorSelected: _exitEditorSelected,
|
||||
renameNoteSelected: _renameNoteSelected,
|
||||
moveNoteToFolderSelected: _moveNoteToFolderSelected,
|
||||
discardChangesSelected: _discardChangesSelected,
|
||||
autofocusOnEditor: _isNewNote,
|
||||
);
|
||||
case EditorType.Raw:
|
||||
@ -88,6 +89,7 @@ class NoteEditorState extends State<NoteEditor> {
|
||||
exitEditorSelected: _exitEditorSelected,
|
||||
renameNoteSelected: _renameNoteSelected,
|
||||
moveNoteToFolderSelected: _moveNoteToFolderSelected,
|
||||
discardChangesSelected: _discardChangesSelected,
|
||||
);
|
||||
case EditorType.Todo:
|
||||
return TodoEditor(
|
||||
@ -98,6 +100,7 @@ class NoteEditorState extends State<NoteEditor> {
|
||||
exitEditorSelected: _exitEditorSelected,
|
||||
renameNoteSelected: _renameNoteSelected,
|
||||
moveNoteToFolderSelected: _moveNoteToFolderSelected,
|
||||
discardChangesSelected: _discardChangesSelected,
|
||||
);
|
||||
}
|
||||
return null;
|
||||
@ -262,4 +265,42 @@ class NoteEditorState extends State<NoteEditor> {
|
||||
stateContainer.moveNote(note, destFolder);
|
||||
}
|
||||
}
|
||||
|
||||
void _discardChangesSelected(Note note) {
|
||||
if (_noteModified(note)) {
|
||||
showDialog(context: context, builder: _buildDiscardChangesAlertDialog);
|
||||
} else {
|
||||
Navigator.pop(context);
|
||||
}
|
||||
}
|
||||
|
||||
Widget _buildDiscardChangesAlertDialog(BuildContext context) {
|
||||
var title = _isNewNote
|
||||
? "Do you want to discard this?"
|
||||
: "Do you want to ignore the changes?";
|
||||
|
||||
var editText = _isNewNote ? "Keep Writing" : "Keep Editing";
|
||||
var discardText = _isNewNote ? "Discard" : "Discard Changes";
|
||||
|
||||
return AlertDialog(
|
||||
title: Text(title),
|
||||
actions: <Widget>[
|
||||
FlatButton(
|
||||
onPressed: () => Navigator.of(context).pop(false),
|
||||
child: Text(editText),
|
||||
),
|
||||
FlatButton(
|
||||
onPressed: () {
|
||||
// FIXME: This shouldn't be required. Why is the original note modified?
|
||||
var serializer = MarkdownYAMLSerializer();
|
||||
note.data = serializer.decode(noteSerialized);
|
||||
|
||||
Navigator.pop(context); // Alert box
|
||||
Navigator.pop(context); // Note Editor
|
||||
},
|
||||
child: Text(discardText),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user