Skip to content

Commit c824c2d

Browse files
committed
Implement MetaService
1 parent 271eb0b commit c824c2d

2 files changed

Lines changed: 143 additions & 147 deletions

File tree

client/app/modules/browser/config/browser.routes.js

Lines changed: 36 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,12 @@ app.config(function ($stateProvider) {
1010
url: '',
1111
templateUrl: 'modules/browser/views/models.html',
1212
controllerAs: 'ctrl',
13-
controller: ['Meta', 'models',
14-
function (Meta, models) {
15-
this.models = models;
16-
}
17-
],
13+
controller: ['models', function (models) {
14+
this.models = models;
15+
}],
1816
resolve: {
19-
models: ['Meta', function (Meta) {
20-
return Meta.getModels().$promise.then(function (res) {
21-
return res;
22-
});
17+
models: ['MetaService', function (MetaService) {
18+
return MetaService.find();
2319
}]
2420
}
2521
}).state('app.browser.models.info', {
@@ -30,10 +26,8 @@ app.config(function ($stateProvider) {
3026
this.model = model;
3127
}],
3228
resolve: {
33-
model: ['$stateParams', 'Meta', function ($stateParams, Meta) {
34-
return Meta.getModelById({
35-
name: $stateParams.modelName
36-
}).$promise;
29+
model: ['$stateParams', 'MetaService', function ($stateParams, MetaService) {
30+
return MetaService.findById($stateParams.modelName);
3731
}]
3832
}
3933
}).state('app.browser.models.items', {
@@ -49,18 +43,11 @@ app.config(function ($stateProvider) {
4943
}
5044
}],
5145
resolve: {
52-
model: ['$stateParams', 'Meta', function ($stateParams, Meta) {
53-
return Meta.getModelById({
54-
name: $stateParams.modelName
55-
}).$promise;
46+
model: ['$stateParams', 'MetaService', function ($stateParams, MetaService) {
47+
return MetaService.findById($stateParams.modelName);
5648
}],
57-
items: ['$stateParams', '$injector', 'Meta', function ($stateParams, $injector) {
58-
var Model = $injector.get($stateParams.modelName);
59-
if (typeof Model.find !== 'function') {
60-
return false;
61-
} else {
62-
return Model.find().$promise;
63-
}
49+
items: ['$stateParams', 'MetaService', function ($stateParams, MetaService) {
50+
return MetaService.getModelItems($stateParams.modelName);
6451
}]
6552
}
6653
}).state('app.browser.models.items.view', {
@@ -72,158 +59,60 @@ app.config(function ($stateProvider) {
7259
this.itemKeys = Object.keys(this.item);
7360
}],
7461
resolve: {
75-
item: ['$stateParams', '$injector', function ($stateParams, $injector) {
76-
var Model = $injector.get($stateParams.modelName);
77-
if (typeof Model.find !== 'function') {
78-
return false;
79-
} else {
80-
return Model.findOne({
81-
filter: {
82-
where: {
83-
id: $stateParams.modelId
84-
}
85-
}
86-
}).$promise;
87-
}
62+
item: ['$stateParams', 'MetaService', function ($stateParams, MetaService) {
63+
return MetaService.getModelItem($stateParams.modelName, $stateParams.modelId);
8864
}]
8965
}
9066
}).state('app.browser.models.items.edit', {
9167
url: '/:modelId/edit',
9268
templateUrl: 'modules/browser/views/models.items.edit.html',
9369
controllerAs: 'edit',
94-
controller: ['$state', 'SweetAlert', 'Model', 'model', 'item', 'itemFields',
95-
function ($state, SweetAlert, Model, model, item, itemFields) {
70+
controller: ['$state', 'MetaService', 'model', 'item', 'itemFields',
71+
function ($state, MetaService, model, item, itemFields) {
9672
this.item = item;
9773
this.itemFields = itemFields;
9874
this.submit = function () {
99-
Model.upsert(this.item).$promise.then(function (res) {
100-
SweetAlert.swal('Saved!', 'The item is saved.', 'success');
101-
$state.go('app.browser.models.items.view', {modelName: model.name, modelId: res.id}, {reload: true});
75+
MetaService.upsert(model.name, this.item).then(function () {
76+
$state.go('app.browser.models.items', {modelName: model.name}, {reload: true});
10277
});
10378
};
10479
}],
10580
resolve: {
106-
Model: ['$stateParams', '$injector',
107-
function ($stateParams, $injector) {
108-
return $injector.get($stateParams.modelName);
109-
}],
110-
item: ['$stateParams', 'Model',
111-
function ($stateParams, Model) {
112-
if (typeof Model.find !== 'function') {
113-
return false;
114-
} else {
115-
return Model.findOne({
116-
filter: {
117-
where: {
118-
id: $stateParams.modelId
119-
}
120-
}
121-
}).$promise;
122-
}
123-
}],
124-
itemFields: ['model',
125-
function (model) {
126-
var result = [];
127-
angular.forEach(model.properties, function (value, property) {
128-
if (property !== 'id') {
129-
var itemField = {
130-
key: property,
131-
type: 'input',
132-
templateOptions: {
133-
label: property
134-
}
135-
};
136-
result.push(itemField);
137-
}
138-
});
139-
return result;
140-
}]
81+
item: ['$stateParams', 'MetaService', function ($stateParams, MetaService) {
82+
return MetaService.getModelItem($stateParams.modelName, $stateParams.modelId);
83+
}],
84+
itemFields: ['$stateParams', 'MetaService', 'model', function ($stateParams, MetaService, model) {
85+
return MetaService.getModelFields(model);
86+
}]
14187
}
14288
}).state('app.browser.models.items.add', {
14389
url: '/add',
14490
templateUrl: 'modules/browser/views/models.items.add.html',
14591
controllerAs: 'add',
146-
controller: ['$state', 'SweetAlert', 'Model', 'model', 'itemFields',
147-
function ($state, SweetAlert, Model, model, itemFields) {
92+
controller: ['$state', 'MetaService', 'model', 'itemFields',
93+
function ($state, MetaService, model, itemFields) {
14894
this.item = {};
14995
this.itemFields = itemFields;
15096
this.submit = function () {
151-
Model.upsert(this.item).$promise.then(function (res) {
152-
SweetAlert.swal('Saved!', 'The item is saved.', 'success');
153-
$state.go('app.browser.models.items.view', {modelName: model.name, modelId: res.id}, {reload: true});
97+
MetaService.upsert(model.name, this.item).then(function () {
98+
$state.go('app.browser.models.items', {modelName: model.name}, {reload: true});
15499
});
155100
};
156101
}],
157102
resolve: {
158-
Model: ['$stateParams', '$injector',
159-
function ($stateParams, $injector) {
160-
return $injector.get($stateParams.modelName);
161-
}],
162-
itemFields: ['model', function (model) {
163-
var result = [];
164-
angular.forEach(model.properties, function (value, property) {
165-
if (property !== 'id') {
166-
var itemField = {
167-
key: property,
168-
type: 'input',
169-
templateOptions: {
170-
label: property
171-
}
172-
};
173-
result.push(itemField);
174-
}
175-
});
176-
return result;
103+
itemFields: ['$stateParams', 'MetaService', 'model', function ($stateParams, MetaService, model) {
104+
return MetaService.getModelFields(model);
177105
}]
178106
}
179107
}).state('app.browser.models.items.delete', {
180108
url: '/:modelId/delete',
181109
template: '',
182-
controller: ['$state', 'SweetAlert', 'Model', 'model', 'item',
183-
function ($state, SweetAlert, Model, model, item) {
184-
SweetAlert.swal({
185-
title: 'Are you sure?',
186-
text: 'Your will not be able to recover this item!',
187-
type: 'warning',
188-
showCancelButton: true,
189-
confirmButtonColor: '#DD6B55', confirmButtonText: 'Yes',
190-
cancelButtonText: 'No',
191-
closeOnConfirm: false,
192-
closeOnCancel: true
193-
},
194-
function (isConfirm) {
195-
if (isConfirm) {
196-
Model.deleteById({id: item.id}).$promise.then(function () {
197-
SweetAlert.swal('Deleted!', 'The item is deleted.', 'success');
198-
$state.go('app.browser.models.items', {modelName: model.name}, {reload: true});
199-
});
200-
} else {
201-
$state.go('app.browser.models.items.view', {modelName: model.name, modelId: item.id}, {reload: true});
202-
}
203-
}
204-
);
205-
}
206-
],
207-
resolve: {
208-
Model: ['$stateParams', '$injector',
209-
function ($stateParams, $injector) {
210-
return $injector.get($stateParams.modelName);
211-
}],
212-
item: ['$stateParams', 'Model',
213-
function ($stateParams, Model) {
214-
if (typeof Model.find !== 'function') {
215-
return false;
216-
} else {
217-
return Model.findOne({
218-
filter: {
219-
where: {
220-
id: $stateParams.modelId
221-
}
222-
}
223-
}).$promise;
224-
}
225-
}
226-
]
227-
}
110+
controller: ['$state', '$stateParams', 'MetaService', 'model', function ($state, $stateParams, MetaService, model) {
111+
MetaService.delete(model.name, $stateParams.modelId, function () {
112+
$state.go('app.browser.models.items', {modelName: model.name}, {reload: true});
113+
}, function () {
114+
$state.go('app.browser.models.items', {modelName: model.name}, {reload: true});
115+
});
116+
}]
228117
});
229118
});
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
'use strict';
2+
var app = angular.module('com.module.core');
3+
4+
app.service('MetaService', ['$injector', 'CoreService', 'Meta', 'gettextCatalog', function ($injector, CoreService, Meta, gettextCatalog) {
5+
6+
this.find = function () {
7+
return Meta.getModels().$promise;
8+
};
9+
10+
this.findById = function (modelName) {
11+
return Meta.getModelById({
12+
name: modelName
13+
}).$promise;
14+
};
15+
16+
this.getModelInstance = function (modelName) {
17+
return $injector.get(modelName);
18+
};
19+
20+
this.getModelItems = function (modelName) {
21+
var Model = this.getModelInstance(modelName);
22+
if (typeof Model.find !== 'function') {
23+
return false;
24+
} else {
25+
return Model.find().$promise;
26+
}
27+
};
28+
29+
this.getModelItem = function (modelName, modelId) {
30+
var Model = this.getModelInstance(modelName);
31+
if (typeof Model.find !== 'function') {
32+
return false;
33+
} else {
34+
return Model.findOne({
35+
filter: {
36+
where: {
37+
id: modelId
38+
}
39+
}
40+
}).$promise;
41+
}
42+
};
43+
44+
this.getModelFields = function (model) {
45+
var result = [];
46+
angular.forEach(model.properties, function (value, property) {
47+
if (property !== 'id') {
48+
var itemField = {
49+
key: property,
50+
type: 'input',
51+
templateOptions: {
52+
label: property,
53+
required: value.required !== undefined ? value.required : false,
54+
description: value.description !== undefined ? value.description : false
55+
}
56+
};
57+
console.log(value);
58+
result.push(itemField);
59+
}
60+
});
61+
return result;
62+
};
63+
64+
this.upsert = function (modelName, item) {
65+
var Model = this.getModelInstance(modelName);
66+
return Model.upsert(item).$promise
67+
.then(function () {
68+
CoreService.toastSuccess(
69+
gettextCatalog.getString('Item saved'),
70+
gettextCatalog.getString('Your item is safe with us!')
71+
);
72+
})
73+
.catch(function (err) {
74+
CoreService.toastError(
75+
gettextCatalog.getString('Error saving item '),
76+
gettextCatalog.getString('This item could no be saved: ' + err)
77+
);
78+
}
79+
);
80+
};
81+
82+
this.delete = function (modelName, modelId, successCb, cancelCb) {
83+
var Model = this.getModelInstance(modelName);
84+
85+
CoreService.confirm(
86+
gettextCatalog.getString('Are you sure?'),
87+
gettextCatalog.getString('Deleting this cannot be undone'),
88+
function () {
89+
Model.deleteById({id: modelId}).$promise.then(function () {
90+
CoreService.toastSuccess(
91+
gettextCatalog.getString('Item deleted'),
92+
gettextCatalog.getString('Your item is deleted!'));
93+
successCb();
94+
}).catch(function (err) {
95+
CoreService.toastError(
96+
gettextCatalog.getString('Error deleting item'),
97+
gettextCatalog.getString('Your item is not deleted! ') + err);
98+
cancelCb();
99+
});
100+
},
101+
function () {
102+
cancelCb();
103+
}
104+
);
105+
};
106+
107+
}]);

0 commit comments

Comments
 (0)