Skip to content

Commit c04e18e

Browse files
committed
spike: fetch data from dummJson api
1 parent 76c49a4 commit c04e18e

3 files changed

Lines changed: 29 additions & 4 deletions

File tree

src/scripts/Modules/TodoApp.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import TodoItem from './TodoItem';
44
class TodoApp {
55
constructor() {
66
this.projects = [];
7-
this.loadFromLocalStorage();
87
if (this.projects.length === 0) {
98
this.addProject("Default");
109
}
@@ -14,6 +13,31 @@ class TodoApp {
1413
localStorage.setItem('todoApp', JSON.stringify(this.projects));
1514
}
1615

16+
async loadFromAPI() {
17+
try {
18+
const response = await fetch('https://dummyjson.com/c/5542-d5f6-4d55-a1da');
19+
if (!response.ok) {
20+
throw new Error('Failed to fetch data');
21+
}
22+
const data = await response.json();
23+
// Convert the raw data back to Project and TodoItem instances
24+
this.projects = data.map(projectData => {
25+
const project = new Project(projectData.name);
26+
project.todos = projectData.todos.map(todoData => {
27+
const todo = new TodoItem(todoData.title, todoData.description, todoData.dueDate, todoData.priority);
28+
todo.completed = todoData.completed;
29+
return todo;
30+
});
31+
return project;
32+
});
33+
} catch (error) {
34+
console.error('Error loading data from API:', error);
35+
// Fallback to empty state or show error message
36+
this.projects = [];
37+
}
38+
}
39+
40+
1741
loadFromLocalStorage() {
1842
const data = localStorage.getItem('todoApp');
1943
if (data) {

src/scripts/Modules/UI.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ export default class UI {
1919
});
2020
}
2121

22-
loadHomepage() {
22+
async loadHomepage() {
23+
await this.app.loadFromAPI(); // Fetch projects from the server first
2324
this.loadProjects();
2425
this.OpenProject(this.selectedProject);
2526
}

src/scripts/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import '../assets/styles.css';
33
import '@fortawesome/fontawesome-free/css/all.min.css';
44
import UI from './Modules/UI'
55
import TodoApp from './Modules/TodoApp';
6-
document.addEventListener('DOMContentLoaded', () => {
6+
document.addEventListener('DOMContentLoaded', async () => {
77
const ui = new UI();
8-
ui.loadHomepage();
8+
await ui.loadHomepage();
99

1010
// Setup mobile sidebar functionality
1111
setupMobileSidebar();

0 commit comments

Comments
 (0)