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;