Manual Reference Source Test

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;