Manual Reference Source Test

src/helpers/trial/SiteLanguage.js

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

/**
 * Helper class representing a supported site language.
 *
 * @extends {SiteLanguageModel}
 * @extends {Helper}
 *
 *
 * @example
 * // To save or insert, you can either use the .save() capability or clinical6
 * mySiteLanguage.save(); // insert if no id, save if id
 * clinical6.insert(new SiteLanguage({...}));
 * clinical6.update(mySiteLanguage);
 *
 * // To delete, use clinical6 or .delete();
 * mySiteLanguage.delete();
 * clinical6.delete(mySiteLanguage);
 */
class SiteLanguage extends aggregate(SiteLanguageModel, Helper) {
  /**
   * Constructor for helper class representing a SiteLanguage
   *
   * @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_supported_languages';
  }

  /** @type {Language} */
  get language() {
    return this._relationships.language;
  }

  /** @type {Language} */
  set language(language) {
    /** @type {Language} */
    this._relationships.language = language;
  }

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

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

  /**
   * Deletes a supported site language
   * @return {Promise<SiteLanguage>} - Returns a promise via ajax call.
   *
   * @example
   * import { SiteLanguage, Client } from 'clinical6';
   *
   * // Removes a supported site langauge from server and local storage
   * const siteLanguage = new SiteLanguage({...});
   * siteLanguage.delete();
   *
   * // No longer in storage
   * Client.instance.storageUtility.has('trials__site_supported_languages', { id: 1 });
   */
  delete() {
    const service = serviceFactory.get(this.type);
    return service.delete(this);
  }

  /**
   * Saves a siteLanguage (insert if id doesn't exist, update if it does)
   * @return {Promise<SiteLanguage>} - Returns a promise via ajax call.
   *
   * @example
   * import { SiteLanguage, clinical6 } from 'clinical6';
   *
   * // Insert a SiteLanguage
   * const siteLanguage = new SiteLanguage({...});
   * siteLanguage.save();
   *
   * // Updates existing siteLanguage (has existing id)
   * clinical6.get(SiteLanguage).then(siteLanguages => siteLanguages[0].save());
   */
  save() {
    const service = serviceFactory.get(this.type);
    return (this.id) ? service.update(this) : service.insert(this);
  }
}

export default SiteLanguage;