Manual Reference Source Test

src/helpers/agreement/PaperTemplate.js

import PaperTemplateModel from '../../models/agreement/PaperTemplate';
import Helper from '../Helper';
import { aggregate } from '../../utilities/ClassUtility';
import { serviceFactory } from '../../utilities/factories/ServiceFactory';

/**
 * Helper class representing PaperTemplate.
 *
 * @extends {PaperTemplateModel}
 * @extends {Helper}
 */

// class PaperTemplate extends PaperTemplateModel {}
class PaperTemplate extends aggregate(PaperTemplateModel, Helper) {
  /**
   * Constructor for helper class representing an Paper Template
   *
   * @param {Object} json - json api response from server
   */
  constructor(json = {}) {
    super(json);
    this.deserializeRelationshipStubs(json);
    this.syncRelationships(json);
  }

  /** @type {ConsentFormVersion} */
  get consentFormVersions() {
    return this._relationships.consent_form_versions;
  }

  /** @type {ConsentFormVersion} */
  set consentFormVersions(consentFormVersions) {
    /** @type {Object} */
    this._relationships.consent_form_versions = consentFormVersions;
  }

  /** @type {String}  - The type */
  static get type() {
    return 'agreement__paper_templates';
  }

  /**
   * Saves an agreement template (insert if id doesn't exist, update if it does)
   * @return {Promise<PaperTemplate>} - Returns a promise via ajax call.
   *
   * @example
   * import { PaperTemplate, clinical6 } from 'clinical6';
   *
   * // Insert is different from other inserts.
   * const PaperTemplate = new PaperTemplate({
   *   "template_name": "name",
   *   "permanent_link": "link",
   *   "description": "description",
   *
   * });
   * PaperTemplate.save();
   *
   *
   * // Updates existing PaperTemplate (has existing id)
   * clinical6.get(PaperTemplate).then(templates => templates[0].save());
   */
  save() {
    const service = serviceFactory.get(this.type);
    return (this.id) ? service.update(this) : service.insert(this);
  }
}

export default PaperTemplate;