Manual Reference Source Test

src/helpers/CustomClass.js

import CustomClassModel from '../models/CustomClass';
import Helper from './Helper';
import { aggregate } from '../utilities/ClassUtility';
import { serviceFactory } from '../utilities/factories/ServiceFactory';

/**
 * Helper class representing Custom Class.
 *
 * @extends {CustomClassModel}
 * @extends {Helper}
 *
 * @example
 * import { CustomClass, HelperFactory, ServiceFactory } from 'clinical6';
 * class Kitten extends CustomClass {
 *   static get type() { return 'kittens'; }
 * }
 *
 * HelperFactory.map.kittens = Kitten;
 * ServiceFactory.options.kittens = { title: 'KittenService' };
 *
 * // Then you can call
 * const kittens = await clinical6.get(Kitten);
 */
class CustomClass extends aggregate(CustomClassModel, Helper) {
  /**
   * Constructor for helper class representing an Agreement Template Field
   *
   * @param {Object} json - json api response from server
   */
  constructor(json = {}) {
    super(json);
    this.deserializeRelationshipStubs(json);
    this.syncRelationships(json);
  }

  /**
   * Deletes an custom class field
   * @return {Promise} - Returns a promise via ajax call.
   */
  delete() {
    const service = serviceFactory.get(this.type);
    return service.delete(this);
  }

  /**
   * Saves an custom class field (insert if id doesn't exist, update if it does)
   * @return {Promise<CustomClass>} - Returns a promise via ajax call.
   */
  save() {
    const service = serviceFactory.get(this.type);
    return (this.id) ? service.update(this) : service.insert(this);
  }
}

export default CustomClass;