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;