src/helpers/agreement/AgreementTemplate.js
import AgreementTemplateModel from '../../models/agreement/AgreementTemplate';
import Helper from '../Helper';
import { aggregate } from '../../utilities/ClassUtility';
import { serviceFactory } from '../../utilities/factories/ServiceFactory';
/**
* Helper class representing AgreementTemplate.
*
* @extends {AgreementTemplateModel}
* @extends {Helper}
*/
// class AgreementTemplate extends AgreementTemplateModel {}
class AgreementTemplate extends aggregate(AgreementTemplateModel, Helper) {
/**
* Constructor for helper class representing an Agreement Template
*
* @param {Object} json - json api response from server
*/
constructor(json = {}) {
super(json);
this.deserializeRelationshipStubs(json);
this.syncRelationships(json);
}
/** @type {Object} */
get approvers() {
return this._relationships.approvers;
}
/** @type {Object} */
set approvers(approvers) {
/** @type {Object} */
this._relationships.approvers = approvers;
}
/** @type {ConsentFormVersion} */
get consentFormVersions() {
return this._relationships.consent_form_versions;
}
/** @type {ConsentFormVersion} */
set consentFormVersions(consentFormVersions) {
/** @type {Object} */
this._relationships.consent_form_versions = consentFormVersions;
}
/** @type {String} - The type */
static get type() {
return 'agreement__templates';
}
/**
* Saves an agreement template (insert if id doesn't exist, update if it does)
* @return {Promise<AgreementTemplate>} - Returns a promise via ajax call.
*
* @example
* import { AgreementTemplate, clinical6 } from 'clinical6';
*
* // Insert is different from other inserts.
* const agreementTemplate = new AgreementTemplate({
* "template_name": "name",
* "permanent_link": "link",
* "description": "description",
*
* });
* agreementTemplate.save();
*
*
* // Updates existing agreementTemplate (has existing id)
* clinical6.get(AgreementTemplate).then(templates => templates[0].save());
*/
save() {
const service = serviceFactory.get(this.type);
return (this.id) ? service.update(this) : service.insert(this);
}
}
export default AgreementTemplate;