Manual Reference Source Test

src/helpers/agreement/AgreementTemplateField.js

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

/**
 * Helper class representing AgreementTemplateField.
 *
 * @extends {AgreementTemplateFieldModel}
 * @extends {Helper}
 */
class AgreementTemplateField extends aggregate(AgreementTemplateFieldModel, 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);
  }

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

  /** @type {AgreementTemplate} */
  get agreementTemplate() {
    return this._relationships.agreement_template;
  }

  /** @type {AgreementTemplate} */
  set agreementTemplate(agreementTemplate) {
    /** @type {AgreementTemplate} */
    this._relationships.agreement_template = agreementTemplate;
  }

  /**
   * Deletes an agreement template field
   * @return {Promise} - Returns a promise via ajax call.
   *
   * @example
   * import { AgreementTemplateField, Client } from 'clinical6';
   *
   * // Removes an agreement template field from server and local storage
   * const field = new AgreementTemplateField({...});
   * field.delete();
   *
   * // No longer in storage
   * Client.instance.storageUtility.has('agreement__template_fields', { id: 1 });
   */
  delete() {
    const service = serviceFactory.get(this.type);
    return service.delete(this);
  }

  /**
   * Saves an agreement template field (insert if id doesn't exist, update if it does)
   * @return {Promise<AgreementTemplateField>} - Returns a promise via ajax call.
   *
   * @example
   * import { AgreementTemplateField, clinical6 } from 'clinical6';
   *
   * // Insert is different from other inserts.
   * const agreementTemplateField = new AgreementTemplateField({
   *   "label": "Label for field 1",
   *   "field_name": "template_field_1",
   *   "required": false,
   *   "default_value": "DEFAULT_VALUE",
   *   "attribute_name": "template_field_1_attribute",
   *   "signer_index": 1,
   *   "source_type": "mobile_user",
   *   "relationships": {
   *    "agreement_template": {
   *       "data": {
   *         "type": "agreement__template",
   *         "id": 1
   *       }
   *     }
   *   }
   * });
   * agreementTemplate.save();
   *
   *
   * // Updates existing agreementTemplateField (has existing id)
   * clinical6.get(AgreementTemplateField).then(templateFields => templateFields[0].save());
   */
  save() {
    const service = serviceFactory.get(this.type);
    return (this.id) ? service.update(this) : service.insert(this);
  }
}

export default AgreementTemplateField;