summaryrefslogtreecommitdiffstats
path: root/client/components/cards/cardDetails.js
diff options
context:
space:
mode:
authorMaxime Quandalle <maxime@quandalle.com>2015-08-31 15:09:53 +0200
committerMaxime Quandalle <maxime@quandalle.com>2015-08-31 15:52:16 +0200
commitd644cba38ff06369cc43c1ebd08d344fd1d248ea (patch)
treebad4bcef1f549132792301cf134b3c8234ad1d13 /client/components/cards/cardDetails.js
parentcc88e78483d2f39048d3558193f0c82b711c12c8 (diff)
downloadwekan-d644cba38ff06369cc43c1ebd08d344fd1d248ea.tar.gz
wekan-d644cba38ff06369cc43c1ebd08d344fd1d248ea.tar.bz2
wekan-d644cba38ff06369cc43c1ebd08d344fd1d248ea.zip
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
Diffstat (limited to 'client/components/cards/cardDetails.js')
-rw-r--r--client/components/cards/cardDetails.js35
1 files changed, 31 insertions, 4 deletions
diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js
index c0ea6a05..caa5993f 100644
--- a/client/components/cards/cardDetails.js
+++ b/client/components/cards/cardDetails.js
@@ -1,7 +1,3 @@
-// XXX Obviously this shouldn't be a global, but this is currently the only way
-// to share a variable between two files.
-
-
BlazeComponent.extendComponent({
template: function() {
return 'cardDetails';
@@ -80,6 +76,37 @@ BlazeComponent.extendComponent({
}
}).register('cardDetails');
+// We extends the normal InlinedForm component to support UnsavedEdits draft
+// feature.
+(class extends InlinedForm {
+ _getUnsavedEditKey() {
+ return {
+ fieldName: 'cardDescription',
+ docId: Session.get('currentCard'),
+ }
+ }
+
+ close(isReset = false) {
+ if (this.isOpen.get() && ! isReset) {
+ UnsavedEdits.set(this._getUnsavedEditKey(), this.getValue());
+ }
+ super();
+ }
+
+ reset() {
+ UnsavedEdits.reset(this._getUnsavedEditKey());
+ this.close(true);
+ }
+
+ events() {
+ const parentEvents = InlinedForm.prototype.events()[0];
+ return [{
+ ...parentEvents,
+ 'click .js-close-inlined-form': this.reset,
+ }];
+ }
+}).register('inlinedCardDescription');
+
Template.cardDetailsActionsPopup.events({
'click .js-members': Popup.open('cardMembers'),
'click .js-labels': Popup.open('cardLabels'),