mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
Fixed updating view when note is deleted
This commit is contained in:
parent
30480a8029
commit
8c7cd8de88
@ -21,6 +21,7 @@ const WindowWidget = require('tkwidgets/WindowWidget.js');
|
|||||||
|
|
||||||
const NoteWidget = require('./gui/NoteWidget.js');
|
const NoteWidget = require('./gui/NoteWidget.js');
|
||||||
const FolderListWidget = require('./gui/FolderListWidget.js');
|
const FolderListWidget = require('./gui/FolderListWidget.js');
|
||||||
|
const NoteListWidget = require('./gui/NoteListWidget.js');
|
||||||
|
|
||||||
class AppGui {
|
class AppGui {
|
||||||
|
|
||||||
@ -49,7 +50,7 @@ class AppGui {
|
|||||||
|
|
||||||
this.inputMode_ = AppGui.INPUT_MODE_NORMAL;
|
this.inputMode_ = AppGui.INPUT_MODE_NORMAL;
|
||||||
|
|
||||||
this.currentShortcutKeys_ = '';
|
this.currentShortcutKeys_ = [];
|
||||||
this.lastShortcutKeyTime_ = 0;
|
this.lastShortcutKeyTime_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,15 +76,7 @@ class AppGui {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
const noteList = new ListWidget();
|
const noteList = new NoteListWidget();
|
||||||
noteList.items = [];
|
|
||||||
noteList.itemRenderer = (note) => {
|
|
||||||
let label = note.title;
|
|
||||||
if (note.is_todo) {
|
|
||||||
label = '[' + (note.todo_completed ? 'X' : ' ') + '] ' + label;
|
|
||||||
}
|
|
||||||
return label;
|
|
||||||
};
|
|
||||||
noteList.name = 'noteList';
|
noteList.name = 'noteList';
|
||||||
noteList.vStretch = true;
|
noteList.vStretch = true;
|
||||||
noteList.style = {
|
noteList.style = {
|
||||||
@ -329,6 +322,7 @@ class AppGui {
|
|||||||
this.widget('noteText').text = text;
|
this.widget('noteText').text = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Any key after which a shortcut is not possible.
|
||||||
isSpecialKey(name) {
|
isSpecialKey(name) {
|
||||||
return ['ENTER', 'DOWN', 'UP', 'LEFT', 'RIGHT', 'DELETE', 'BACKSPACE', 'ESCAPE', 'TAB', 'SHIFT_TAB'].indexOf(name) >= 0;
|
return ['ENTER', 'DOWN', 'UP', 'LEFT', 'RIGHT', 'DELETE', 'BACKSPACE', 'ESCAPE', 'TAB', 'SHIFT_TAB'].indexOf(name) >= 0;
|
||||||
}
|
}
|
||||||
@ -353,26 +347,33 @@ class AppGui {
|
|||||||
process.exit();
|
process.exit();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const now = (new Date()).getTime();
|
const now = (new Date()).getTime();
|
||||||
|
|
||||||
if (now - this.lastShortcutKeyTime_ > 1000 || this.isSpecialKey(name)) {
|
if (now - this.lastShortcutKeyTime_ > 800 || this.isSpecialKey(name)) {
|
||||||
this.currentShortcutKeys_ = name;
|
this.currentShortcutKeys_ = [name];
|
||||||
} else {
|
} else {
|
||||||
this.currentShortcutKeys_ += name;
|
// If the previous key was a special key (eg. up, down arrow), this new key
|
||||||
|
// starts a new shortcut.
|
||||||
|
if (this.currentShortcutKeys_.length && this.isSpecialKey(this.currentShortcutKeys_[0])) {
|
||||||
|
this.currentShortcutKeys_ = [name];
|
||||||
|
} else {
|
||||||
|
this.currentShortcutKeys_.push(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.lastShortcutKeyTime_ = now;
|
this.lastShortcutKeyTime_ = now;
|
||||||
|
|
||||||
// Don't process shortcut keys if the console is active, except if the shortcut
|
// Don't process shortcut keys if the console is active, except if the shortcut
|
||||||
// starts with CTRL (eg. CTRL+J CTRL+Z to maximize the console window).
|
// starts with CTRL (eg. CTRL+J CTRL+Z to maximize the console window).
|
||||||
if (!consoleWidget.hasFocus || this.currentShortcutKeys_.indexOf('CTRL') === 0) {
|
if (!consoleWidget.hasFocus || (this.currentShortcutKeys_.length && this.currentShortcutKeys_[0].indexOf('CTRL') === 0)) {
|
||||||
this.logger().debug('Now: ' + name + ', Keys: ' + this.currentShortcutKeys_);
|
this.logger().debug('Now: ' + name + ', Keys: ', this.currentShortcutKeys_);
|
||||||
|
|
||||||
if (this.currentShortcutKeys_ in this.shortcuts_) {
|
const shortcutKey = this.currentShortcutKeys_.join('');
|
||||||
const cmd = this.shortcuts_[this.currentShortcutKeys_].action;
|
if (shortcutKey in this.shortcuts_) {
|
||||||
|
const cmd = this.shortcuts_[shortcutKey].action;
|
||||||
if (!cmd.isDocOnly) {
|
if (!cmd.isDocOnly) {
|
||||||
this.currentShortcutKeys_ = '';
|
this.currentShortcutKeys_ = [];
|
||||||
if (typeof cmd === 'function') {
|
if (typeof cmd === 'function') {
|
||||||
cmd();
|
cmd();
|
||||||
} else {
|
} else {
|
||||||
|
@ -408,7 +408,7 @@ class Application {
|
|||||||
|
|
||||||
generalMiddleware() {
|
generalMiddleware() {
|
||||||
const middleware = store => next => async (action) => {
|
const middleware = store => next => async (action) => {
|
||||||
this.logger().info('Middleware reducer action', action.type);
|
this.logger().info('Reducer action', action.type);
|
||||||
|
|
||||||
const result = next(action);
|
const result = next(action);
|
||||||
const newState = store.getState();
|
const newState = store.getState();
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { _ } from 'lib/locale.js';
|
import { _ } from 'lib/locale.js';
|
||||||
|
import { reg } from 'lib/registry.js';
|
||||||
|
|
||||||
class BaseCommand {
|
class BaseCommand {
|
||||||
|
|
||||||
@ -75,6 +76,10 @@ class BaseCommand {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger() {
|
||||||
|
return reg.logger();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export { BaseCommand };
|
export { BaseCommand };
|
@ -6,20 +6,32 @@ class NoteListWidget extends ListWidget {
|
|||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.selectedNoteId_ = 0;
|
this.selectedNoteId_ = 0;
|
||||||
this.itemRenderer = (item) => {
|
|
||||||
return item.title;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
get selectedNoteId() {
|
this.updateIndexFromSelectedNoteId_ = false;
|
||||||
return this.selectedNoteId_;
|
|
||||||
|
this.itemRenderer = (note) => {
|
||||||
|
let label = note.title + ' ' + note.id;
|
||||||
|
if (note.is_todo) {
|
||||||
|
label = '[' + (note.todo_completed ? 'X' : ' ') + '] ' + label;
|
||||||
|
}
|
||||||
|
return label;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
set selectedNoteId(v) {
|
set selectedNoteId(v) {
|
||||||
if (v === this.selectedNoteId_) return;
|
if (v === this.selectedNoteId_) return;
|
||||||
|
this.updateIndexFromSelectedNoteId_ = true;
|
||||||
this.selectedNoteId_ = v;
|
this.selectedNoteId_ = v;
|
||||||
const index = this.itemIndexByKey('id', this.selectedNoteId_);
|
}
|
||||||
this.currentIndex = index >= 0 ? index : 0;
|
|
||||||
|
render() {
|
||||||
|
if (this.updateIndexFromSelectedNoteId_) {
|
||||||
|
const index = this.itemIndexByKey('id', this.selectedNoteId_);
|
||||||
|
this.currentIndex = index >= 0 ? index : 0;
|
||||||
|
this.updateIndexFromSelectedNoteId_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
super.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -77,6 +77,12 @@ class Folder extends BaseItem {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static batchDelete(ids, options = null) {
|
||||||
|
for (let i = 0; i < ids.length; i++) {
|
||||||
|
this.delete(ids[i], options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static conflictFolderTitle() {
|
static conflictFolderTitle() {
|
||||||
return _('Conflicts');
|
return _('Conflicts');
|
||||||
}
|
}
|
||||||
|
@ -345,6 +345,17 @@ class Note extends BaseItem {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static batchDelete(ids, options = null) {
|
||||||
|
const result = super.batchDelete(ids, options);
|
||||||
|
for (let i = 0; i < ids.length; i++) {
|
||||||
|
this.dispatch({
|
||||||
|
type: 'NOTES_DELETE',
|
||||||
|
noteId: ids[i],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Note.updateGeolocationEnabled_ = true;
|
Note.updateGeolocationEnabled_ = true;
|
||||||
|
@ -191,15 +191,25 @@ const reducer = (state = defaultState, action) => {
|
|||||||
|
|
||||||
case 'NOTES_DELETE':
|
case 'NOTES_DELETE':
|
||||||
|
|
||||||
|
var previousIndex = 0;
|
||||||
var newNotes = [];
|
var newNotes = [];
|
||||||
for (let i = 0; i < state.notes.length; i++) {
|
for (let i = 0; i < state.notes.length; i++) {
|
||||||
let f = state.notes[i];
|
let f = state.notes[i];
|
||||||
if (f.id == action.noteId) continue;
|
if (f.id == action.noteId) {
|
||||||
|
previousIndex = i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
newNotes.push(f);
|
newNotes.push(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
newState = Object.assign({}, state);
|
newState = Object.assign({}, state);
|
||||||
newState.notes = newNotes;
|
newState.notes = newNotes;
|
||||||
|
|
||||||
|
if (previousIndex >= newNotes.length) {
|
||||||
|
previousIndex = newNotes.length - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
newState.selectedNoteId = previousIndex >= 0 ? newNotes[previousIndex].id : null;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'FOLDERS_UPDATE_ALL':
|
case 'FOLDERS_UPDATE_ALL':
|
||||||
|
Loading…
Reference in New Issue
Block a user