| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | 
							- // `UnsavedEdits` is a global key-value store used to save drafts of user
 
- // inputs. We used to have the notion of a `cachedValue` that was local to a
 
- // component but the global store has multiple advantages:
 
- // 1. When the component is unmounted (ie, destroyed) the draft isn't lost
 
- // 2. The drafts are synced across multiple computers
 
- // 3. The drafts are synced across multiple browser tabs
 
- //    XXX This currently doesn't work in purely offline mode since the sync is
 
- //    handled with the DDP connection to the server. To solve this, we could use
 
- //    something like GroundDB that syncs using localstorage.
 
- //
 
- // The key is a dictionary composed of two fields:
 
- // * a `fieldName` which identifies the particular field. Since this is a global
 
- //   identifier a good practice would be to compose it with the collection name
 
- //   and the document field, eg. `boardTitle`, `cardDescription`.
 
- // * a `docId` which identifies the appropriate document. In general we use
 
- //   MongoDB `_id` field.
 
- //
 
- // The value is a string containing the draft.
 
- UnsavedEdits = {
 
-   // XXX Wanted to have the collection has an instance variable, but
 
-   // unfortunately the collection isn't defined yet at this point. We need ES6
 
-   // modules to solve the file order issue!
 
-   //
 
-   // _collection: UnsavedEditCollection,
 
-   get({ fieldName, docId }, defaultTo = '') {
 
-     const unsavedValue = this._getCollectionDocument(fieldName, docId);
 
-     if (unsavedValue) {
 
-       return unsavedValue.value;
 
-     } else {
 
-       return defaultTo;
 
-     }
 
-   },
 
-   has({ fieldName, docId }) {
 
-     return Boolean(this.get({fieldName, docId}));
 
-   },
 
-   set({ fieldName, docId }, value) {
 
-     const currentDoc = this._getCollectionDocument(fieldName, docId);
 
-     if (currentDoc) {
 
-       UnsavedEditCollection.update(currentDoc._id, { $set: { value }});
 
-     } else {
 
-       UnsavedEditCollection.insert({
 
-         fieldName,
 
-         docId,
 
-         value,
 
-       });
 
-     }
 
-   },
 
-   reset({ fieldName, docId }) {
 
-     const currentDoc = this._getCollectionDocument(fieldName, docId);
 
-     if (currentDoc) {
 
-       UnsavedEditCollection.remove(currentDoc._id);
 
-     }
 
-   },
 
-   _getCollectionDocument(fieldName, docId) {
 
-     return UnsavedEditCollection.findOne({fieldName, docId});
 
-   },
 
- };
 
- Blaze.registerHelper('getUnsavedValue', (fieldName, docId, defaultTo) => {
 
-   // Workaround some blaze feature that pass a list of keywords arguments as the
 
-   // last parameter (even if the caller didn't specify any).
 
-   if (!_.isString(defaultTo)) {
 
-     defaultTo = '';
 
-   }
 
-   return UnsavedEdits.get({ fieldName, docId }, defaultTo);
 
- });
 
- Blaze.registerHelper('hasUnsavedValue', (fieldName, docId) => {
 
-   return UnsavedEdits.has({ fieldName, docId });
 
- });
 
 
  |