/
index.js
105 lines (90 loc) · 2.72 KB
/
index.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
var _ = require('underscore');
var $ = require('jquery');
module.exports = {
template: "#feedback-template",
data: function () {
return {
feedbackMessages: []
};
},
methods: {
/**
*
* @param messages
* @param type
*/
provideFeedback: function (messages, type) {
if (typeof messages === 'string') {
messages = [messages];
}
var feedback = {
messages: messages,
type: type
};
var that = this;
this.feedbackMessages.push(feedback);
setTimeout(function () {
that.feedbackMessages = _.without(that.feedbackMessages, feedback);
}, 4000);
},
/**
*
* @param data
* @param status
* @returns {*}
*/
handleResponseError: function (data, status, response) {
var messages = [];
var defaultMessage = 'There was an error';
if (!status && data && data.status) {
status = data.status;
}
switch(status) {
case 503:
messages.push('Sorry, application under construction. Please try again later.');
break;
case 401:
messages.push('You are not logged in');
break;
case 422:
messages = this.setMessagesFrom422Status(data);
break;
default:
data && data.error ? messages.push(data.error) : messages.push(defaultMessage);
break;
}
if (messages.length < 1) {
messages.push(defaultMessage);
}
return messages;
},
/**
*
* @returns {string}
*/
setMessagesFrom422Status: function (data) {
var messages = [];
for (errors in data) {
for (var i = 0; i < data[errors].length; i++) {
messages.push(data[errors][i]);
}
}
return messages;
},
/**
*
*/
listen: function () {
var that = this;
$(document).on('provide-feedback', function (event, messages, type) {
that.provideFeedback(messages, type);
});
$(document).on('response-error', function (event, data, status, response) {
that.provideFeedback(that.handleResponseError(data, status, response), 'error');
});
},
},
ready: function () {
this.listen();
},
};