-
Notifications
You must be signed in to change notification settings - Fork 5
/
main.js
114 lines (91 loc) · 3.31 KB
/
main.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
106
107
108
109
110
111
112
113
114
document.getElementById('issueInputForm').addEventListener('submit', saveIssue);
const IssueService = {
getIssues() {
const issues = localStorage.getItem('issues');
return issues ? JSON.parse(issues) : []
},
getIssue(id) {
return this.getIssues.find(issue => issue.id === id);
},
saveIssue(issue) {
const issues = this.getIssues();
issues.push(issue);
localStorage.setItem('issues', JSON.stringify(issues));
},
deleteIssue(id) {
const issues = this.getIssues.filter(issue => issue.id !== id);
localStorage.setItem('issues', JSON.stringify(issues));
}
};
function createIssueTemplate({ id, status, description, severity, assignedTo }) {
return (
`<div class="well">
<h6>Issue ID: ${id} </h6>
<p><span class="label label-info">${status}</span></p>
<h3>${description}</h3>
<p><span class="glyphicon glyphicon-time"></span>${severity}
<span class="glyphicon glyphicon-user"></span>${assignedTo}</p>
<a href="#" class="btn btn-warning" onclick="setStatusClosed('${id}')">Close</a>
<a href="#" class="btn btn-danger" onclick="deleteIssue('${id}')">Delete</a>
</div>`
);
}
function issuesList() {
return localStorage.getItem('issues') ?
JSON.parse(localStorage.getItem('issues')) :
[];
}
function fetchIssues(){
const issues = this.issuesList();
const issuesList = document.getElementById('issuesList');
let issueListHtml = '';
if (issues) {
issues.forEach(element => issueListHtml += createIssueTemplate(element));
}
issuesList.innerHTML = issueListHtml;
}
function saveIssue(e) {
const id = chance.guid();
const description = document.getElementById('issueDescInput').value || 'No Description Provided';
const severity = document.getElementById('issueSeverityInput').value;
const assignedTo = document.getElementById('issueAssignedToInput').value || 'No User Assigned.';
const issues = JSON.parse(localStorage.getItem('issues')) || [];
issues.push({
id,
description,
severity,
assignedTo,
status: 'Open'
});
localStorage.setItem('issues', JSON.stringify(issues))
document.getElementById('issueInputForm').reset();
fetchIssues();
e.preventDefault();
}
function setStatusClosed (id) {
const issues = this.issuesList();
if (issues.length) {
const updateIssue = issues.find(issueToClose => issueToClose.id === id);
const indOf = issues.indexOf(updateIssue)
issues.splice(indOf, 1)
issues.push({
id: updateIssue.id,
description: updateIssue.description,
severity: updateIssue.severity,
assignedTo: updateIssue.assignedTo,
status: 'Closed'
})
localStorage.setItem('issues', JSON.stringify(issues));
fetchIssues();
}
}
function deleteIssue (id) {
const issues = this.issuesList();
if (issues.length) {
const issueToDelete = issues.find(issueToFind => issueToFind.id === id);
const indOf = issues.indexOf(issueToDelete)
issues.splice(indOf, 1)
localStorage.setItem('issues', JSON.stringify(issues));
fetchIssues();
}
}