mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 15:30:13 +01:00
Replace the component bounded cachedValue by a global UnsavedEdits
This new draft saving system is currently only implemented for the card description and comment. We need better a component inheritance/composition model to support this for all editable fields. Fixes #186
This commit is contained in:
parent
cc88e78483
commit
d644cba38f
13 changed files with 252 additions and 95 deletions
|
|
@ -1,47 +1,83 @@
|
|||
var commentFormIsOpen = new ReactiveVar(false);
|
||||
let commentFormIsOpen = new ReactiveVar(false);
|
||||
|
||||
Template.commentForm.helpers({
|
||||
commentFormIsOpen: function() {
|
||||
BlazeComponent.extendComponent({
|
||||
template() {
|
||||
return 'commentForm';
|
||||
},
|
||||
|
||||
onDestroyed() {
|
||||
commentFormIsOpen.set(false);
|
||||
},
|
||||
|
||||
commentFormIsOpen() {
|
||||
return commentFormIsOpen.get();
|
||||
}
|
||||
});
|
||||
|
||||
Template.commentForm.events({
|
||||
'click .js-new-comment:not(.focus)': function() {
|
||||
commentFormIsOpen.set(true);
|
||||
},
|
||||
'submit .js-new-comment-form': function(evt, tpl) {
|
||||
var input = tpl.$('.js-new-comment-input');
|
||||
if ($.trim(input.val())) {
|
||||
CardComments.insert({
|
||||
boardId: this.boardId,
|
||||
cardId: this._id,
|
||||
text: input.val()
|
||||
});
|
||||
input.val('');
|
||||
input.blur();
|
||||
commentFormIsOpen.set(false);
|
||||
Tracker.flush();
|
||||
autosize.update(input);
|
||||
}
|
||||
evt.preventDefault();
|
||||
},
|
||||
// Pressing Ctrl+Enter should submit the form
|
||||
'keydown form textarea': function(evt, tpl) {
|
||||
if (evt.keyCode === 13 && (evt.metaKey || evt.ctrlKey)) {
|
||||
tpl.find('button[type=submit]').click();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Template.commentForm.onDestroyed(function() {
|
||||
getInput() {
|
||||
return this.$('.js-new-comment-input');
|
||||
},
|
||||
|
||||
events() {
|
||||
return [{
|
||||
'click .js-new-comment:not(.focus)': function() {
|
||||
commentFormIsOpen.set(true);
|
||||
},
|
||||
'submit .js-new-comment-form': function(evt) {
|
||||
let input = this.getInput();
|
||||
if ($.trim(input.val())) {
|
||||
CardComments.insert({
|
||||
boardId: this.boardId,
|
||||
cardId: this._id,
|
||||
text: input.val()
|
||||
});
|
||||
resetCommentInput(input);
|
||||
Tracker.flush();
|
||||
autosize.update(input);
|
||||
}
|
||||
evt.preventDefault();
|
||||
},
|
||||
// Pressing Ctrl+Enter should submit the form
|
||||
'keydown form textarea': function(evt) {
|
||||
if (evt.keyCode === 13 && (evt.metaKey || evt.ctrlKey)) {
|
||||
this.find('button[type=submit]').click();
|
||||
}
|
||||
}
|
||||
}];
|
||||
}
|
||||
}).register('commentForm');
|
||||
|
||||
// XXX This should be a static method of the `commentForm` component
|
||||
function resetCommentInput(input) {
|
||||
input.val('');
|
||||
input.blur();
|
||||
commentFormIsOpen.set(false);
|
||||
});
|
||||
}
|
||||
|
||||
// XXX This should handled a `onUpdated` callback of the `commentForm` component
|
||||
// but since this callback doesn't exists, and `onRendered` is not called if the
|
||||
// data is not destroyed and recreated, we simulate the desired callback using
|
||||
// Tracker.autorun to register the component dependencies, and re-run when these
|
||||
// dependencies are invalidated. A better component API would remove this hack.
|
||||
Tracker.autorun(() => {
|
||||
Session.get('currentCard');
|
||||
Tracker.afterFlush(() => {
|
||||
autosize.update($('.js-new-comment-input'));
|
||||
});
|
||||
})
|
||||
|
||||
EscapeActions.register('inlinedForm',
|
||||
function() {
|
||||
commentFormIsOpen.set(false);
|
||||
$('.js-new-comment-input').blur();
|
||||
const draftKey = {
|
||||
fieldName: 'cardComment',
|
||||
docId: Session.get('currentCard')
|
||||
};
|
||||
let commentInput = $('.js-new-comment-input');
|
||||
if ($.trim(commentInput.val())) {
|
||||
UnsavedEdits.set(draftKey, commentInput.val());
|
||||
} else {
|
||||
UnsavedEdits.reset(draftKey);
|
||||
}
|
||||
resetCommentInput(commentInput);
|
||||
},
|
||||
function() { return commentFormIsOpen.get(); }, {
|
||||
noClickEscapeOn: '.js-new-comment'
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue