Manual Reference Source Test

src/helpers/trial/SiteMember.js

import SiteMemberModel from '../../models/trial/SiteMember';
import { serviceFactory } from '../../utilities/factories/ServiceFactory';
import Helper from '../Helper';
import { aggregate } from '../../utilities/ClassUtility';

/**
 * Helper class representing an siteMember.
 *
 * @extends {SiteMemberModel}
 * @extends {Helper}
 *
 * @example
 * import { SiteMember, clinical6 } from 'clinical6';
 *
 * // Typically use SiteService.get()
 * clinical6.get(SiteMember).then(siteMembers => console.log(siteMembers));
 *
 * const siteMember = new SiteMember({
 *   data: {
 *     id: 23,
 *     type: 'trials__site_members',
 *     attributes: {
 *       member_type: 'patient'
 *     },
 *     relationships: {
 *       mobile_user: {
 *         data: {
 *           type: 'mobile_users',
 *           id: 73
 *         }
 *       },
 *       site: {
 *         data: {
 *           type: 'trials__sites',
 *           id: 35
 *         }
 *       }
 *     }
 *   }
 * });
 */
class SiteMember extends aggregate(SiteMemberModel, Helper) {
  /**
   * Constructor for helper class representing an SiteMember
   *
   * @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 'trials__site_members';
  }

  /** @type {Object} */
  get accessible() {
    return this._relationships.accessible;
  }

  /** @type {Object} */
  set accessible(accessible) {
    /** @type {Object} */
    this._relationships.accessible = accessible;
  }

  /** @type {Object} */
  get brand() {
    return this._relationships.brand;
  }

  /** @type {Object} */
  set brand(brand) {
    /** @type {Object} */
    this._relationships.brand = brand;
  }

  /** @type {ConsentStrategy} */
  get consentStrategy() {
    return this._relationships.consent_strategy;
  }

  /** @type {ConsentStrategy} */
  set consentStrategy(strategy) {
    /* @type {ConsentStrategy} */
    this._relationships.consent_strategy = strategy;
  }

  /** @type {Object} */
  get callback() {
    return this._relationships.callback;
  }

  /** @type {Object} */
  set callback(callback) {
    /** @type {Object} */
    this._relationships.callback = callback;
  }

  /** @type {Object} */
  get pointsRecords() {
    return this._relationships.points_records;
  }

  /** @type {Object} */
  set pointsRecords(pointsRecords) {
    /** @type {Object} */
    this._relationships.points_records = pointsRecords;
  }

  /** @type {Object} */
  get rewardEarnings() {
    return this._relationships.reward_earnings;
  }

  /** @type {Object} */
  set rewardEarnings(rewardEarnings) {
    /** @type {Object} */
    this._relationships.reward_earnings = rewardEarnings;
  }

  /** @type {Object} */
  get segmentations() {
    return this._relationships.segmentations;
  }

  /** @type {Object} */
  set segmentations(segmentations) {
    /** @type {Object} */
    this._relationships.segmentations = segmentations;
  }

  /** @type {Object} */
  get schedules() {
    return this._relationships.schedules;
  }

  /** @type {Object} */
  set schedules(schedules) {
    /** @type {Object} */
    this._relationships.schedules = schedules;
  }

  /** @type {Object} */
  get tag() {
    return this._relationships.tag;
  }

  /** @type {Object} */
  set tag(tag) {
    /** @type {Object} */
    this._relationships.tag = tag;
  }

  /** @type {Object} */
  get taggings() {
    return this._relationships.taggings;
  }

  /** @type {Object} */
  set taggings(taggings) {
    /** @type {Object} */
    this._relationships.taggings = taggings;
  }

  /** @type {Profile} */
  get mobileUser() {
    return this._relationships.mobile_user;
  }

  /** @type {Profile} */
  set mobileUser(mobileUser) {
    /** @type {Profile} */
    this._relationships.mobile_user = mobileUser;
  }

  /** @type {Site} */
  get site() {
    return this._relationships.site;
  }

  /** @type {Site} */
  set site(site) {
    /** @type {Site} */
    this._relationships.site = site;
  }

  /**
   * Saves a siteMember (insert if id doesn't exist, update if it does)
   * @return {Promise} - Returns a promise via ajax call.
   *
   * @example
   * import { SiteMember, Client } from 'clinical6';
   *
   * // Removes siteMember from server and local storage
   * const siteMember = new SiteMember({...});
   * siteMember.delete();
   *
   * // No longer in storage
   * Client.instance.storageUtility.has('siteMembers', { id: 1 });
   */
  delete() {
    const service = serviceFactory.get(this.type);
    return service.delete(this);
  }

  /**
   * Saves a siteMember (insert if id doesn't exist, update if it does)
   * @return {Promise<SiteMember>} - Returns a promise via ajax call.
   *
   * @example
   * import { SiteMember, clinical6 } from 'clinical6';
   *
   * // Insert is different from other inserts.  Uses mobile application key
   * const siteMember = new SiteMember({
   *   "title": "You are a winner"
   * });
   * siteMember.save();
   *
   * // After you have the authtoken and then you've logged in
   *
   * // Updates existing siteMember (has existing id)
   * clinical6.get(SiteMember).then(siteMembers => siteMembers[0].save());
   */
  save() {
    const service = serviceFactory.get(this.type);
    return (this.id) ? service.update(this) : service.insert(this);
  }
}

export default SiteMember;