amocrm-client
Version:
JS Library for AmoCRM
65 lines • 2.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const class_transformer_1 = require("class-transformer");
const ResourceEntity_1 = tslib_1.__importDefault(require("./ResourceEntity"));
const EventEmitter_1 = require("../common/EventEmitter");
/**
* Основной класс фабрики сущностей. Класс-фабрика служит для создания
* новых сущностей. Например, {@link LeadFactory} отвечает за {@link Lead}
* */
class ResourceFactory extends EventEmitter_1.EventEmitter {
constructor(request) {
super();
this.request = request;
}
getEmbedded(data) {
const key = this.getEmbeddedKey();
const { _embedded = {} } = data;
return _embedded[key] || [];
}
/**
* @returns новый экземпляр сущности. Например, {@link LeadFactory} вернёт {@link Lead}
* */
createEntity(attributes) {
const className = this.getEntityClass();
return new className(this, attributes);
}
/**
* Возвращает ссылку на объект запроса
* */
getRequest() {
return this.request;
}
/**
* Форматирует адрес на основе baseUrl фабрики
* */
getUrl(path = '') {
return this.getBaseUrl() + path;
}
/**
* Создаёт сущность и заполняет её атрибутами, которые
* будут синхронизироваться с порталом AmoCRM
* */
from(attributes) {
if (!attributes || Object.keys(attributes).length === 0)
return this.createEntity();
return (0, class_transformer_1.plainToClassFromExist)(this.createEntity(attributes), attributes);
}
/**
* Приводит все переданные объекты-сущности в массиве
* criteriaData к их объекту-атрибутов (ключ-значение)
* @param criteriaData массив plain JavaScript-объектов или сущностей
* @returns массив plain JavaScript-объектов
* */
getEntityCriteria(criteriaData) {
return criteriaData.map(criteria => {
if (criteria instanceof ResourceEntity_1.default) {
return (0, class_transformer_1.instanceToPlain)(criteria);
}
return criteria;
});
}
}
exports.default = ResourceFactory;
//# sourceMappingURL=ResourceFactory.js.map