import Ember from 'ember'; import Service from '@ember/service'; import $ from 'jquery' import { Promise } from 'rsvp'; import { dasherize } from '@ember/string'; import { run } from '@ember/runloop'; import { typeOf } from '@ember/utils'; export default Service.extend({ list(modelName, start, limit, params) { var p = { start: start, limit: limit }; if ($.type(params) === 'string') { p.search = params; } else { $.extend(true, p, params); } return this.ajaxGet(this._pathForType(modelName, '/list'), p); }, find(modelName, params) { return this.ajaxGet(this._pathForType(modelName, '/find'), params); }, count(modelName) { return this.ajaxGet(this._pathForType(modelName, '/count')); }, create(modelName, model) { return this.ajaxPost(this._pathForType(modelName, '/create'), model); }, update(modelName, model) { return this.ajaxPost(this._pathForType(modelName, '/update'), model); }, del(modelName, model) { return this.ajaxPost(this._pathForType(modelName, '/delete'), model); }, modelAjaxGet: function(modelName, path, params) { return this.ajaxGet(this._pathForType(modelName, path), params); }, modelAjaxPost(modelName, path, params) { return this.ajaxPost(this._pathForType(modelName, path), params); }, ajaxGet(url, params) { return this._ajax_request('doGet', url, params); }, ajaxPost(url, params) { return this._ajax_request('doPost', url, params); }, _ajax_request(method, url, params) { let me = this; return new Promise((resolve, reject) => { const paramsType = typeOf(params); me.ajax[method ? method : 'doGet'](url, paramsType === 'string' || paramsType === 'number' ? {id: params} : params, (data) => { run(null, resolve, data); }, (msg, r) => { reject(msg); me.dialog.error(msg || 'Ajax request erorr caused'); }); }, 'Ambition: Store#ajax request [' + url + ']'); }, _pathForType(modelName, path) { return (/^[a-zA-Z_][a-zA-Z0-9_]+$/.test(modelName) ? dasherize(modelName) : modelName) + (/^\//.test(path) ? path : '/' + path); } });