gumga-controller-ng
Version:
Gumga Controller
728 lines (671 loc) • 28.7 kB
JavaScript
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/dist/";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 1);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var QueryObject = exports.QueryObject = function () {
/**
* @param _service Objeto GumgaRest para podermos fazer chamadas a API.
* @param _controller Objeto gumgaController para podermos salvar estados de buscas e atualizar dados do $scope.
*/
function QueryObject(_service, _controller) {
_classCallCheck(this, QueryObject);
this.service = _service;
this.controller = _controller;
//LOAD DEFAULTS VALUES
this.queryObject = {
start: this.service.start,
pageSize: this.service.pageSize
};
}
/**
* @method page Responsável por especificar a página que você deseja.
* @param _page página na qual será buscado os registros. DEFAULT: 1;
*/
_createClass(QueryObject, [{
key: "page",
value: function page(_page) {
if (!_page) _page = 1;
this._page = _page;
this.queryObject.start = (_page - 1) * this.queryObject.pageSize;
this.controller.handlingStorage(this._page, this.queryObject.pageSize);
this.controller.setPageInContainer(this._page);
this.controller.page = _page;
return this;
}
/**
* @method pageSize Responsável por especificar a quantidade de registros.
* @param _pageSize quantidade de registros que será mostrado por página. DEFAULT 10;
*/
}, {
key: "pageSize",
value: function pageSize(_pageSize) {
if (!_pageSize) _pageSize = 10;
this.queryObject.pageSize = _pageSize;
//When you modify the size you have to recalculate the start
if (this._page) this.page(this._page);
this.controller.handlingStorage(this._page, this.queryObject.pageSize);
return this;
}
/**
* @method aq Adiciona um comando HQL na chamada, para que seja adicionado na cláusula WHERE.
* @param _advancedValue HQL que será enviado para possibilitar filtrar dados com mais de uma condição.
*/
}, {
key: "aq",
value: function aq(_advancedValue) {
if (!_advancedValue) console.error("Ao chamar o método um aq é obrigatório informar seu hql.");
this.queryObject.aq = _advancedValue;
return this;
}
/**
* @method q Adiciona uma busca simples a chamada, pesquise um valor em um ou vários atributos.
* @param _fields Nomes dos atributos que será feita a busca separador por virgula. ex: nome,apelido.
* @param _value Valor que será filtrado com base as campos especificados no atributo _fields.
*/
}, {
key: "q",
value: function q(_fields, _value) {
var _this = this;
if (!_fields) console.error("Ao chamar o método um q é obrigatório informar os atributos que serão utilizados na busca.");
this.queryObject.searchFields = this.queryObject.searchFields || [];
_fields.trim().split(',').forEach(function (_field) {
return _this.queryObject.searchFields.push(_field.trim());
});
this.queryObject.q = _value;
return this;
}
/**
* @method sort Adiciona criterios de ordenação
* @param _field Nome do atributo que será feito a ordenação
* @param _dir Direção da ordenação no campo especificado no atributo _field.
*/
}, {
key: "sort",
value: function sort(_field, _dir) {
if (!_field) {
_field = this.controller.storage.get('field');
_dir = this.controller.storage.get('way');
}
if (!_dir) {
_dir = 'asc';
}
if (_field == null || _dir == null || _field == 'null' || _dir == 'null') {
return this;
}
this.queryObject.sortField = (this.queryObject.sortField || '').concat(',').concat(_field);
if (this.queryObject.sortField.substring(0, 1) == ',') this.queryObject.sortField = this.queryObject.sortField.substring(1, this.queryObject.sortField.length);
this.queryObject.sortDir = (this.queryObject.sortDir || '').concat(',').concat(_dir);
if (this.queryObject.sortDir.substring(0, 1) == ',') this.queryObject.sortDir = this.queryObject.sortDir.substring(1, this.queryObject.sortDir.length);
return this;
}
/**
* @method gQuery Adiciona o metodo de pesquisa GQuery a sua chamada.
* @param _gQuery Atributo responsável por filtrar os dados, a documentação do seu uso está em https://gumga.github.io/gumga-gquery-ng
*/
}, {
key: "gQuery",
value: function gQuery(_gQuery) {
this.queryObject.gQuery = _gQuery;
return this;
}
/**
* @method send Metodo responsavel por realizar a chamada para a API.
*/
}, {
key: "send",
value: function send() {
var _this2 = this;
if (!this.service.sendQueryObject) {
console.error("Precisamos que você atualize a versão do componente gumga-rest-ng, acesse: https://github.com/GUMGA/gumga-rest-ng/releases");
}
this.queryObject.searchCount = this.controller.page <= 1;
return this.service.sendQueryObject(this.queryObject).then(function (resp) {
_this2.controller.data = resp.data.values;
_this2.controller.pageSize = resp.data.pageSize;
if (resp.data.count > 0 && _this2.controller.page <= 1) {
_this2.controller.count = resp.data.count;
}
return resp;
});
}
}]);
return QueryObject;
}();
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _queryObject = __webpack_require__(0);
(function () {
'use strict';
function GumgaController(Service, identifierOrConfiguration, container, pageModel) {
var self = this;
this.and = this;
this.data = [];
this.page = 1;
this.pageSize = 10;
this.count = 0;
this.records = [];
this.pageModel = pageModel;
this.container = container;
this.identifierOrConfiguration = identifierOrConfiguration;
this.storage = {
set: function set(key, value) {
sessionStorage.setItem(identifierOrConfiguration + '-' + key, value);
},
get: function get(key) {
return sessionStorage.getItem(identifierOrConfiguration + '-' + key);
}
};
this.setPageInContainer = function () {
if (!self.container[pageModel]) {
var _page = parseInt(self.storage.get('page') || self.page);
self.container[pageModel] = _page;
}
};
this.handlingStorage = function (page, pageSize, field, way, param) {
if (!page) {
page = parseInt(self.storage.get('page') || self.page);
}
if (!pageSize) {
pageSize = parseInt(self.storage.get('pageSize') || self.pageSize);
}
if (!field) {
field = self.storage.get('field');
}
if (!way) {
way = self.storage.get('way');
}
if (!param) {
param = "";
}
self.storage.set('page', page || self.page);
self.storage.set('pageSize', pageSize || self.pageSize);
self.storage.set('field', field);
self.storage.set('way', way);
self.storage.set('param', param);
return {
page: page,
pageSize: pageSize,
field: field,
way: way,
param: param
};
};
this.methods = {
getLatestOperation: function getLatestOperation() {
self.setPageInContainer();
var operation = self.storage.get('last-operation');
if (!operation) {
self.methods.get(self.storage.get('page'), self.storage.get('pageSize'));
}
if (!self.count) {
self.count = Number(self.storage.get('count'));
}
switch (operation) {
case 'get':
self.methods.get(self.storage.get('page'), self.storage.get('pageSize'));
break;
case 'sort':
self.methods.sort(self.storage.get('field'), self.storage.get('way'), self.storage.get('pageSize'));
break;
case 'search':
self.methods.search(self.storage.get('field'), self.storage.get('param'), self.storage.get('pageSize'), self.storage.get('page'));
break;
case 'asyncSearch':
self.methods.asyncSearch(self.storage.get('field'), self.storage.get('param'));
break;
case 'advancedSearch':
self.methods.advancedSearch(JSON.parse(self.storage.get('param')), self.storage.get('pageSize'), self.storage.get('page'));
break;
case 'searchWithGQuery':
try {
self.methods.searchWithGQuery(JSON.parse(self.storage.get('gQuery')), self.storage.get('page'), self.storage.get('pageSize'));
} catch (e) {
self.methods.searchWithGQuery(undefined, self.storage.get('page'), self.storage.get('pageSize'));
}
break;
case 'asyncSearchWithGQuery':
try {
self.methods.asyncSearchWithGQuery(JSON.parse(self.storage.get('gQuery')), self.storage.get('page'), self.storage.get('pageSize'));
} catch (e) {
self.methods.asyncSearchWithGQuery(undefined, self.storage.get('page'), self.storage.get('pageSize'));
}
break;
default:
self.methods.get(self.storage.get('page'), self.storage.get('pageSize'));
}
},
getRecords: function getRecords() {
return self.records;
},
asyncSearch: function asyncSearch(field, param) {
var storage = self.handlingStorage(undefined, undefined, field, undefined, param);
self.storage.set('last-operation', 'asyncSearch');
return Service.getSearch(field, param).then(function (data) {
self.storage.set('pageSize', data.data.pageSize);
return data.data.values;
});
},
asyncPost: function asyncPost(value, param) {
self.emit('asyncPostStart');
return Service.save(value);
},
get: function get(page, pageSize) {
if (!pageSize) pageSize = self.pageSize;
if (!page) page = self.page;
var storage = self.handlingStorage(page, pageSize);
self.storage.set('last-operation', 'get');
if (self.count > 0) self.storage.set('count', self.count);
self.emit('getStart');
Service.get(page, pageSize).then(function (data) {
self.emit('getSuccess', data.data);
self.data = data.data.values;
self.pageSize = data.data.pageSize;
if (data.data.count > 0) self.storage.set('count', data.data.count);
if (data.data.count > 0 && page <= 1) self.count = data.data.count;
if (!data.data.count) data.data.count = Number(self.storage.get('count'));
self.storage.set('pageSize', data.data.pageSize);
self.data.map(function (record) {
return self.records.push(record.id);
});
}, function (err) {
self.emit('getError', err);
});
return self;
},
getId: function getId() {
var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
self.emit('getIdStart');
Service.getById(id).then(function (data) {
self.emit('getIdSuccess', data.data);
self.data = data.data;
if (self.pageSize) delete self.pageSize;
if (self.count) delete self.count;
}, function (err) {
self.emit('getIdError', err);
});
return self;
},
getNew: function getNew() {
self.emit('getNewStart');
Service.getNew().then(function (data) {
self.emit('getNewSuccess', data.data);
self.data = data.data;
if (self.pageSize) delete self.pageSize;
if (self.count) delete self.count;
}, function (err) {
self.emit('getNewError', err);
});
return self;
},
put: function put(value) {
self.emit('putStart');
Service.update(value).then(function (data) {
self.emit('putSuccess', data);
}, function (err) {
self.emit('putError', err);
});
return self;
},
post: function post(value) {
self.emit('postStart');
Service.save(value).then(function (data) {
self.emit('postSuccess', data);
}, function (err) {
self.emit('postError', err);
});
return self;
},
delete: function _delete(array) {
self.emit('deleteStart');
Service.deleteCollection(array).then(function (data) {
self.emit('deleteSuccess', data);
}, function (err) {
self.emit('deleteError', err);
});
return self;
},
sort: function sort(field, way, pageSize) {
if (!pageSize) pageSize = self.pageSize;
var storage = self.handlingStorage(undefined, pageSize, field, way);
var page = storage.page;
self.storage.set('last-operation', 'sort');
if (self.count > 0) self.storage.set('count', self.count);
self.emit('sortStart');
Service.sort(field, way, pageSize, page).then(function (data) {
self.emit('sortSuccess', data.data);
self.data = data.data.values;
self.pageSize = data.data.pageSize;
if (data.data.count > 0) self.storage.set('count', data.data.count);
if (data.data.count > 0 && page <= 1) self.count = data.data.count;
if (!data.data.count) data.data.count = Number(self.storage.get('count'));
self.storage.set('pageSize', data.data.pageSize);
}, function (err) {
self.emit('sortError', err);
});
return self;
},
searchWithPagination: function searchWithPagination(field, param, pageSize, page) {
if (!pageSize) pageSize = self.pageSize;
if (!page) page = self.page;
var storage = self.handlingStorage(page, pageSize, field, undefined, param);
if (self.count > 0) self.storage.set('count', self.count);
self.emit('searchWithPaginationStart');
return Service.getSearch(field, param, pageSize, page).then(function (data) {
self.emit('searchWithPaginationSuccess', data.data);
self.data = data.data.values;
self.pageSize = data.data.pageSize;
if (data.data.count > 0) self.storage.set('count', data.data.count);
if (data.data.count > 0 && page <= 1) self.count = data.data.count;
if (!data.data.count) data.data.count = Number(self.storage.get('count'));
self.storage.set('pageSize', data.data.pageSize);
return data;
}, function (err) {
self.emit('searchWithPaginationError', err);
});
return self;
},
search: function search(field, param, pageSize, page) {
if (!pageSize) pageSize = self.pageSize;
if (!page) page = self.page;
var storage = self.handlingStorage(page, pageSize, field, undefined, param);
self.storage.set('last-operation', 'search');
if (self.count > 0) self.storage.set('count', self.count);
self.emit('searchStart');
Service.getSearch(field, param, pageSize, page).then(function (data) {
self.emit('searchSuccess', data.data);
self.data = data.data.values;
self.pageSize = data.data.pageSize;
if (data.data.count > 0) self.storage.set('count', data.data.count);
if (data.data.count > 0 && page <= 1) self.count = data.data.count;
if (!data.data.count) data.data.count = Number(self.storage.get('count'));
self.storage.set('pageSize', data.data.pageSize);
return data;
}, function (err) {
self.emit('searchError', err);
});
return self;
},
advancedSearch: function advancedSearch(param, pageSize, page) {
if (!pageSize) pageSize = self.pageSize;
if (!page) page = self.page;
var storage = self.handlingStorage(page, pageSize, undefined, undefined, JSON.stringify(param));
self.storage.set('last-operation', 'advancedSearch');
if (self.count > 0) self.storage.set('count', self.count);
self.emit('advancedSearchStart');
Service.getAdvancedSearch(param, pageSize, page).then(function (data) {
self.emit('advancedSearchSuccess', data.data);
self.data = data.data.values;
self.pageSize = data.data.pageSize;
if (data.data.count > 0) self.storage.set('count', data.data.count);
if (data.data.count > 0 && page <= 1) self.count = data.data.count;
if (!data.data.count) data.data.count = Number(self.storage.get('count'));
self.storage.set('pageSize', data.data.pageSize);
}, function (err) {
self.emit('advancedSearchError', err);
});
return self;
},
searchWithGQuery: function searchWithGQuery(gQuery, page, pageSize) {
if (!pageSize) pageSize = self.pageSize;
if (!page) page = self.page;
self.storage.set('pageSize', pageSize);
self.storage.set('page', page);
if (self.count > 0) self.storage.set('count', self.count);
if (gQuery) self.storage.set('gQuery', JSON.stringify(gQuery));
self.storage.set('last-operation', 'searchWithGQuery');
self.lastGQuery = gQuery;
self.emit('searchWithGQueryStart');
return Service.searchWithGQuery(gQuery, page, pageSize).then(function (data) {
self.emit('searchWithGQuerySuccess', data.data);
self.data = data.data.values;
self.pageSize = data.data.pageSize;
if (data.data.count > 0) self.storage.set('count', data.data.count);
if (data.data.count > 0 && page <= 1) self.count = data.data.count;
if (!data.data.count) data.data.count = Number(self.storage.get('count'));
}, function (err) {
self.emit('searchWithGQueryError', err);
});
},
asyncSearchWithGQuery: function asyncSearchWithGQuery(gQuery, page, pageSize) {
if (!pageSize) pageSize = self.pageSize;
if (!page) page = self.page;
self.lastGQuery = gQuery;
if (self.count > 0) self.storage.set('count', self.count);
self.storage.set('pageSize', pageSize);
self.storage.set('page', page);
if (gQuery) self.storage.set('gQuery', JSON.stringify(gQuery));
self.storage.set('last-operation', 'asyncSearchWithGQuery');
self.emit('asyncSearchWithGQuery');
return Service.searchWithGQuery(gQuery, page, pageSize).then(function (data) {
self.emit('asyncSearchWithGQuery', data.data);
self.pageSize = data.data.pageSize;
if (data.data.count > 0) self.storage.set('count', data.data.count);
if (data.data.count > 0 && page <= 1) self.count = data.data.count;
if (!data.data.count) data.data.count = Number(self.storage.get('count'));
return data.data.values;
}, function (err) {
self.emit('asyncSearchWithGQuery', err);
});
},
redoSearch: function redoSearch() {
self.emit('redoSearchStart');
Service.redoSearch().then(function (data) {
self.emit('redoSearchSuccess', data.data);
self.data = data.data.values;
self.pageSize = data.data.pageSize;
if (data.data.count > 0 && page <= 1) self.count = data.data.count;
}, function (err) {
self.emit('redoSearchError', err);
});
return self;
},
postQuery: function postQuery(query, name) {
self.emit('postQueryStart');
Service.saveQuery({ query: query, name: name }).then(function (data) {
self.emit('postQuerySuccess');
}, function (err) {
self.emit('postQueryError', err);
});
return self;
},
getQuery: function getQuery(page) {
if (!page) page = self.page;
self.emit('getQueryStart');
return Service.getQuery(page).then(function (data) {
self.emit('getQuerySuccess', data.data);
return data.data.values;
}, function (err) {
self.emit('getQueryError', err);
});
},
postImage: function postImage(attribute, model) {
self.emit('postImageStart');
return Service.saveImage(attribute, model).then(function (data) {
self.emit('postImageSuccess');
return data;
}, function (err) {
self.emit('postImageError', err);
});
},
deleteImage: function deleteImage(attribute, model) {
self.emit('deleteImageStart');
Service.deleteImage(attribute, model).then(function (data) {
self.emit('deleteImageSuccess');
}, function (err) {
self.emit('deleteImageError', err);
});
return self;
},
reset: function reset() {
self.emit('resetStart');
Service.resetDefaultState();
return self;
},
getAvailableTags: function getAvailableTags() {
self.emit('getAvailableTagsStart');
return Service.getAvailableTags();
},
getSelectedTags: function getSelectedTags(id) {
self.emit('getSelectedTagsStart');
return Service.getSelectedTags(id);
},
postTags: function postTags(id, values) {
self.emit('postTagStart', values);
Service.postTags(id, values).then(function (data) {
self.emit('postTagSuccess', values);
}, function (err) {
self.emit('postTagError', values);
});
},
getDocumentationURL: function getDocumentationURL() {
self.emit('getDocumentationURLStart');
return Service.getDocumentationURL();
},
createQuery: function createQuery() {
return new _queryObject.QueryObject(Service, self);
}
};
}
GumgaController.prototype.callbacks = {};
GumgaController.prototype.and = this;
GumgaController.prototype.emit = function (ev, data) {
if (this.callbacks[ev]) {
this.callbacks[ev].forEach(function (cb) {
cb(data);
});
}
return this;
};
GumgaController.prototype.on = function (ev, cb) {
if (!this.callbacks[ev]) {
this.callbacks[ev] = [];
}
this.callbacks[ev].push(cb);
return this;
};
GumgaController.prototype.execute = function () {
var nameOfTheFunction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (nameOfTheFunction.constructor !== String) throw 'O primeiro parâmetro deve ser uma string!';
if (this.methods[nameOfTheFunction]) {
var _methods;
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
(_methods = this.methods)[nameOfTheFunction].apply(_methods, args);
return this;
}
throw 'O nome do método está errado! Por favor coloque um método que está no GumgaController';
};
// -------------------------------------------------------- Componente
GumgaCtrl.$inject = [];
function GumgaCtrl() {
function createRestMethods(container, service, identifierOrConfiguration) {
var pageModel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'page';
var idConstructor = identifierOrConfiguration.constructor;
if (!container) throw 'É necessário passar um objeto no primeiro parâmetro';
if (!service) throw 'É necessário passar um objeto no segundo parâmetro';
if (idConstructor !== Object && idConstructor !== String) throw 'É necessário passar um objeto ou uma string no terceiro parâmetro';
var options = this._createOptions(identifierOrConfiguration);
if (!!options.noScope) return new GumgaController(service, identifierOrConfiguration, container, pageModel);
container[options.identifier] = new GumgaController(service, identifierOrConfiguration, container, pageModel);
return;
}
function _createOptions() {
var identifier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (identifier.constructor === String) {
return {
identifier: identifier,
noScope: false
};
}
var object = angular.extend({}, identifier);
object.noScope = !!object.noScope;
if (!object.identifier) {
throw 'Você precisa passar um identificador para o objeto de configuração do createRestMethods!';
}
return object;
}
return {
createRestMethods: createRestMethods,
_createOptions: _createOptions
};
}
angular.module('gumga.controller', []).factory('gumgaController', GumgaCtrl);
})();
/***/ })
/******/ ]);