Skip to content

Commit ec365a0

Browse files
committed
Issue-tracker Project Complate
1 parent 800e452 commit ec365a0

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

app.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
document.getElementById('issueInputForm').addEventListener('submit', submitIssue);
2+
3+
function submitIssue(e) {
4+
const getInputValue = id => document.getElementById(id).value;
5+
const description = getInputValue('issueDescription');
6+
const severity = getInputValue('issueSeverity');
7+
const assignedTo = getInputValue('issueAssignedTo');
8+
const id = Math.floor(Math.random()*100000000) + '';
9+
const status = 'Open';
10+
11+
const issue = { id, description, severity, assignedTo, status };
12+
let issues = [];
13+
if (localStorage.getItem('issues')){
14+
issues = JSON.parse(localStorage.getItem('issues'));
15+
}
16+
issues.push(issue);
17+
localStorage.setItem('issues', JSON.stringify(issues));
18+
19+
document.getElementById('issueInputForm').reset();
20+
fetchIssues();
21+
e.preventDefault();
22+
}
23+
24+
const setStatusClosed = id => {
25+
const issues = JSON.parse(localStorage.getItem('issues'));
26+
const currentIssue = issues.find(issue => issue.id == id);
27+
currentIssue.status = 'Closed';
28+
localStorage.setItem('issues', JSON.stringify(issues));
29+
fetchIssues();
30+
}
31+
32+
const deleteIssue = id => {
33+
const issues = JSON.parse(localStorage.getItem('issues'));
34+
const remainingIssues = issues.filter(issue => issue.id != id);
35+
localStorage.setItem('issues', JSON.stringify(remainingIssues));
36+
fetchIssues();
37+
}
38+
39+
const fetchIssues = () => {
40+
const issues = JSON.parse(localStorage.getItem('issues')) || [];
41+
const issuesList = document.getElementById('issuesList');
42+
issuesList.innerHTML = '';
43+
44+
// Update counters
45+
const totalIssues = issues.length;
46+
const closedIssues = issues.filter(issue => issue.status === 'Closed').length;
47+
48+
document.getElementById('issueCount').textContent = totalIssues;
49+
document.getElementById('closedCount').textContent = closedIssues;
50+
51+
for (var i = 0; i < issues.length; i++) {
52+
const {id, description, severity, assignedTo, status} = issues[i];
53+
54+
issuesList.innerHTML += `<div class="well">
55+
<h6>Issue ID: ${id} </h6>
56+
<p><span class="label label-info"> ${status} </span></p>
57+
<h3> ${description} </h3>
58+
<p><span class="glyphicon glyphicon-time"></span> ${severity}</p>
59+
<p><span class="glyphicon glyphicon-user"></span> ${assignedTo}</p>
60+
<a href="#" onclick="setStatusClosed('${id}')" class="btn btn-warning">Close</a>
61+
<a href="#" onclick="deleteIssue('${id}')" class="btn btn-danger">Delete</a>
62+
</div>`;
63+
}
64+
}

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
1212
</head>
1313

14-
<body>
14+
<body onload="fetchIssues()">
1515
<div class="container">
1616
<h1>Issue Tracker
1717
<span class="badge" style="background-color: rgb(13, 230, 13);" id="issueCount"> 0 </span>

0 commit comments

Comments
 (0)