src/helpers/agreement/AgreementTemplateField.js
import AgreementTemplateFieldModel from '../../models/agreement/AgreementTemplateField';
import Helper from '../Helper';
import { aggregate } from '../../utilities/ClassUtility';
import { serviceFactory } from '../../utilities/factories/ServiceFactory';
/**
* Helper class representing AgreementTemplateField.
*
* @extends {AgreementTemplateFieldModel}
* @extends {Helper}
*/
class AgreementTemplateField extends aggregate(AgreementTemplateFieldModel, Helper) {
/**
* Constructor for helper class representing an Agreement Template Field
*
* @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 'agreement__template_fields';
}
/** @type {AgreementTemplate} */
get agreementTemplate() {
return this._relationships.agreement_template;
}
/** @type {AgreementTemplate} */
set agreementTemplate(agreementTemplate) {
/** @type {AgreementTemplate} */
this._relationships.agreement_template = agreementTemplate;
}
/**
* Deletes an agreement template field
* @return {Promise} - Returns a promise via ajax call.
*
* @example
* import { AgreementTemplateField, Client } from 'clinical6';
*
* // Removes an agreement template field from server and local storage
* const field = new AgreementTemplateField({...});
* field.delete();
*
* // No longer in storage
* Client.instance.storageUtility.has('agreement__template_fields', { id: 1 });
*/
delete() {
const service = serviceFactory.get(this.type);
return service.delete(this);
}
/**
* Saves an agreement template field (insert if id doesn't exist, update if it does)
* @return {Promise<AgreementTemplateField>} - Returns a promise via ajax call.
*
* @example
* import { AgreementTemplateField, clinical6 } from 'clinical6';
*
* // Insert is different from other inserts.
* const agreementTemplateField = new AgreementTemplateField({
* "label": "Label for field 1",
* "field_name": "template_field_1",
* "required": false,
* "default_value": "DEFAULT_VALUE",
* "attribute_name": "template_field_1_attribute",
* "signer_index": 1,
* "source_type": "mobile_user",
* "relationships": {
* "agreement_template": {
* "data": {
* "type": "agreement__template",
* "id": 1
* }
* }
* }
* });
* agreementTemplate.save();
*
*
* // Updates existing agreementTemplateField (has existing id)
* clinical6.get(AgreementTemplateField).then(templateFields => templateFields[0].save());
*/
save() {
const service = serviceFactory.get(this.type);
return (this.id) ? service.update(this) : service.insert(this);
}
}
export default AgreementTemplateField;