/
Create.js
60 lines (53 loc) · 1.47 KB
/
Create.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import Axios from '../orm/axios';
import Action from './Action'
import Context from '../common/context'
export default class Create extends Action {
/**
* Call $create method
* @param {object} store
* @param {object} params
*/
static async call ({ state, commit }, params = {}) {
if(!params.data || typeof params !== 'object') {
throw new TypeError("You must include a data object in the params to send a POST request", params)
}
const context = Context.getInstance();
const model = context.getModelFromState(state);
const endpoint = Action.transformParams('$create', model, params);
const axios = new Axios(model.methodConf.http);
const method = Action.getMethod('$create', model, 'post');
const request = axios[method](endpoint, params.data);
this.onRequest(commit);
request
.then(data => this.onSuccess(commit, model, data))
.catch(error => this.onError(commit, error))
return request;
}
/**
* On Request Method
* @param {object} commit
*/
static onRequest(commit) {
commit('onRequest');
}
/**
* On Successful Request Method
* @param {object} commit
* @param {object} model
* @param {object} data
*/
static onSuccess(commit, model, data) {
commit('onSuccess')
model.insertOrUpdate({
data,
});
}
/**
* On Failed Request Method
* @param {object} commit
* @param {object} error
*/
static onError(commit, error) {
commit('onError', error)
}
}