diff --git a/rest-on-couch/Roc.js b/rest-on-couch/Roc.js index b3928df5..c35ed7a9 100644 --- a/rest-on-couch/Roc.js +++ b/rest-on-couch/Roc.js @@ -12,6 +12,7 @@ define([ 'src/util/IDBKeyValue', 'eventEmitter', './UserViewPrefs', + './UserPrefs', './UserAnalysisResults' ], function ( Datas, @@ -27,6 +28,7 @@ define([ IDB, EventEmitter, UserViewPrefs, + UserViewPrefs, UserAnalysisResults ) { const DataObject = Datas.DataObject; @@ -198,6 +200,7 @@ define([ this.__ready = Promise.resolve(); this.UserViewPrefs = new UserViewPrefs(this); + this.UserPrefs = new UserPrefs(this); this.UserAnalysisResults = new UserAnalysisResults(this); } diff --git a/rest-on-couch/UserPrefs.js b/rest-on-couch/UserPrefs.js new file mode 100644 index 00000000..92ac8425 --- /dev/null +++ b/rest-on-couch/UserPrefs.js @@ -0,0 +1,42 @@ +define(function () { + class UserPrefs { + constructor(roc) { + this.roc = roc; + } + /** + * Retrieves user preferences related to the current view + * @return {object} preferences + */ + async get() { + let record = await this.getRecord(); + if (record && record.$content) return record.$content; + return undefined; + } + + async getRecord() { + var user = await this.roc.getUser(); + if (!user || !user.username) return undefined; + var firstEntry = ( + await this.roc.view('entryByOwnerAndId', { + key: [user.username, 'userPrefs'], + }) + )[0]; + return firstEntry; + } + + async set(value) { + let record = await this.getRecord(); + if (record) { + record.$content = value; + return this.roc.update(record); + } else { + return this.roc.create({ + $id: ['userPrefs'], + $content: value, + $kind: 'userPrefs', + }); + } + } + } + return UserPrefs; +});