define('application/models/halo/editorial', [
'rofl/models/api/abstract',
'rofl/lib/utils',
'application/components/uibuilder',
'application/models/halo/editorialblock'
], function (
Abstract,
Utils,
UIBuilder,
EditorialBlock
) {
'use strict';
var endpoint = '/api/generalcontent/instance/search';
return Abstract.extend({
/**
* Resolves the endpoint.
*
* @param {Object} params - The endpoint params.
* @returns {string} - The endpoint.
*/
resolveEndpoint: function (params) {
return Utils.formatTemplate(endpoint, params);
},
/**
* Transform data from API to Application for a Create method.
*
* @param {*} data - The data to be transformed.
* @returns {Object} Transformed data.
*/
transformFromCreate: function (data) {
var values = Utils.getNested(data, 'items', '0', 'values'),
editorialBlocks = [];
// Transform editorial blocks.
Utils.each(values.editorial_blocks, function (editorialBlock) {
editorialBlocks.push(new EditorialBlock(editorialBlock));
});
this._item = {
editorialBlocks: editorialBlocks
};
return this;
},
/**
* Returns the type of widget this model to be used with.
*
* @returns {string} - The type of widget.
*/
getWidgetType: function () {
return UIBuilder.WIDGET_TYPES.EDITORIAL_BLOCK;
},
/**
* Returns the module item.
*
* @returns {Object} - The module content.
*/
getItem: function () {
return this._item;
},
/**
* Returns the item.
*
* @param {Object} options - Options to retrieve editorial blocks.
* @param {Object} options.hasContent - True returns blocks with content, false returns blocks with or without content.
* @returns {Object} - The actual hero item.
*/
getEditorialBlocks: function (options) {
var hasContent = options && options.hasContent,
itemEditorialBlocks = this._item.editorialBlocks,
editorialBlocks;
if (hasContent) {
// Filter out items with no content.
editorialBlocks = Utils.filter(itemEditorialBlocks, function (block) {
return !!block.getWatchAll().getItems().length;
});
} else {
editorialBlocks = itemEditorialBlocks;
}
return editorialBlocks;
}
});
});