blob: 4aa862c8b650b4d491296795b0adfeda16928379 [file] [log] [blame]
Matteo Scandolo828d1e82017-01-17 14:49:38 -08001import {IXosAppConfig} from '../../../index';
Matteo Scandolof2c3ed62016-12-15 14:32:50 -08002export interface IXosResourceService {
3 getResource(url: string): ng.resource.IResourceClass<any>;
4}
5
6export class ModelRest implements IXosResourceService {
Matteo Scandolo828d1e82017-01-17 14:49:38 -08007 static $inject = ['$resource', 'AppConfig'];
Matteo Scandolof2c3ed62016-12-15 14:32:50 -08008
9 /** @ngInject */
10 constructor(
Matteo Scandolo828d1e82017-01-17 14:49:38 -080011 private $resource: ng.resource.IResourceService,
12 private AppConfig: IXosAppConfig
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080013 ) {
14
15 }
16
17 public getResource(url: string): ng.resource.IResourceClass<ng.resource.IResource<any>> {
Matteo Scandolo828d1e82017-01-17 14:49:38 -080018 const resource: angular.resource.IResourceClass<any> = this.$resource(`${this.AppConfig.apiEndpoint}${url}/:id/`, {id: '@id'}, {
Matteo Scandolo1aee1982017-02-17 08:33:23 -080019 update: { method: 'PUT' },
20 query: {
21 method: 'GET',
22 isArray: true,
23 transformResponse: (res) => {
24 // FIXME chameleon return everything inside "items"
25 return res.items ? res.items : res;
26 }
27 }
Matteo Scandolo0a8b02e2017-01-06 14:43:36 -080028 });
29
30 resource.prototype.$save = function() {
31 if (this.id) {
32 return this.$update();
33 } else {
34 return resource.save(this).$promise;
35 }
36 };
37
38 return resource;
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080039 }
40}