src/helpers/Setting.js
import SettingModel from '../models/Setting';
import { serviceFactory } from '../utilities/factories/ServiceFactory';
import Helper from './Helper';
import { aggregate } from '../utilities/ClassUtility';
/**
* Helper class representing an setting.
*
* @extends {SettingModel}
* @extends {Helper}
*
* @example
* import { Setting, settingService } from 'clinical6';
*
* // Typically use settingService.get()
* settingService.get().then(settings => console.log(settings));
* let setting;
*
* setting = new Setting({
* id: 'timeout',
* attributes: {
* value: 30
* }
* });
*
* setting = new Setting('logo', 'logo.png');
*
* setting = new Setting({
* id: 'advertisements',
* attributes: {
* value: {
* display_time: 5,
* transition_time: 1
* }
* }
* });
*/
class Setting extends aggregate(SettingModel, Helper) {
/**
* Constructor for helper class representing an Setting
*
* @param {Object} json - json api response from server
*/
constructor(id = undefined, value = undefined) {
let _json = {};
if (typeof id === 'string') {
_json = { id, value };
} else if (typeof id === 'object') {
_json = id;
}
super(_json);
this.deserializeRelationshipStubs(_json);
this.syncRelationships(_json);
}
/** @type {String} - The type */
static get type() {
return 'settings';
}
/**
* Saves a setting (insert if id doesn't exist, update if it does)
* @return {Promise<Setting>} - Returns a promise via ajax call.
*
* @example
* import { Setting, settingService } from 'clinical6';
*
* // Insert is different from other inserts. Uses mobile application key
* const setting = new Setting({
* "value": "You are a winner"
* });
* setting.save();
*
* // After you have the authtoken and then you've logged in
*
* // Updates existing setting (has existing id)
* settingService.get().then(settings => settings[0].save());
*
* // Can also use get with a string
* settingService.get({ id: 'timeout' }).then(s => s.save());
*/
save() {
const service = serviceFactory.get(this.type);
return service.update(this);
}
}
export default Setting;