Skip to content

Commit bbdfbd9

Browse files
authored
Update dashboard.html
Updated
1 parent 65a4b09 commit bbdfbd9

File tree

1 file changed

+106
-93
lines changed

1 file changed

+106
-93
lines changed

dashboard.html

Lines changed: 106 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -167,22 +167,6 @@ <h3 class="card-title">Reports</h3>
167167
<div class="card" id="recommendations-card">
168168
<h3 class="card-title">🌱 Expert Recommendations</h3>
169169
<div class="loading">⏳ Loading...</div>
170-
171-
<div class="card" id="recommendations-card">
172-
<h3 class="card-title"></h3>
173-
<button id="refresh-recommendations">🔄 Refresh Recommendations</button>
174-
<div id="recommendations-list"></div>
175-
</div>
176-
</div>
177-
178-
<!-- Modal -->
179-
<div id="detail-modal" class="modal">
180-
<div class="modal-content">
181-
<span class="close-modal">&times;</span>
182-
<h3 id="modal-title"></h3>
183-
<p id="modal-details"></p>
184-
</div>
185-
</div>
186170
</div>
187171

188172
<div class="card" id="tutorials-card">
@@ -204,94 +188,123 @@ <h3 class="card-title">🔮 Yield Prediction</h3>
204188
<h3 class="card-title">🚜 Equipment Status</h3>
205189
<div class="equipment-list" id="equipment-status"></div>
206190
</div>
191+
</div>
207192

193+
<!-- Modal -->
194+
<div id="detail-modal" class="modal">
195+
<div class="modal-content">
196+
<span class="close-modal">&times;</span>
197+
<h3 id="modal-title"></h3>
198+
<p id="modal-details"></p>
199+
</div>
200+
</div>
208201

209202
<script>
210-
// Function to handle dynamic active class for navigation
211-
function updateActiveNavLink() {
212-
const navLinks = document.querySelectorAll('.nav-links .menu-item');
213-
const currentPath = window.location.pathname.split('/').pop(); // Get the last part of the URL
214-
215-
navLinks.forEach(link => {
216-
const linkPath = link.getAttribute('href').split('/').pop();
217-
if (linkPath === currentPath) {
218-
link.classList.add('active');
219-
} else {
220-
link.classList.remove('active');
221-
}
222-
});
223-
}
224-
225-
// Call the function on page load
226203
document.addEventListener('DOMContentLoaded', () => {
227-
updateActiveNavLink();
228-
fetchReportsData();
229-
fetchTutorialsData();
204+
loadDashboardData();
230205
});
231206

232-
// Sync Reports and Tutorials (Assuming these functions are meant to fetch and display data)
233-
async function fetchReportsData() {
234-
// 'https://eoagritool.z39.web.core.windows.net' API endpoint
235-
try {
236-
const response = await fetch('reports.html');
237-
if (!response.ok) {
238-
console.error('Failed to fetch reports:', response.status);
239-
document.getElementById('reports-card').innerHTML = `
240-
<h3 class="card-title">📊 Reports</h3>
241-
<p class="error-message">Failed to load reports.</p>
242-
`;
243-
return;
244-
}
245-
const data = await response.json();
246-
document.getElementById('reports-card').innerHTML = `
247-
<h3 class="card-title">📊 Reports</h3>
248-
<div>
249-
${data.map(report => `
250-
<p><strong>${report.title}</strong></p>
251-
<p>${report.summary}</p>
252-
<p>Date: ${new Date(report.date).toLocaleDateString()}</p>
253-
`).join('')}
254-
</div>
255-
`;
256-
} catch (error) {
257-
console.error('Error fetching reports:', error);
258-
document.getElementById('reports-card').innerHTML = `
259-
<h3 class="card-title">📊 Reports</h3>
260-
<p class="error-message">Error loading reports.</p>
261-
`;
207+
function loadDashboardData() {
208+
const fieldsData = JSON.parse(localStorage.getItem('fieldsData')) || { fields: [] };
209+
const climateData = JSON.parse(localStorage.getItem('climateData')) || {};
210+
const waterData = JSON.parse(localStorage.getItem('waterData')) || {};
211+
const reportsData = JSON.parse(localStorage.getItem('reportsData')) || {};
212+
const recommendationsData = JSON.parse(localStorage.getItem('recommendationsData')) || {};
213+
const tutorialsData = JSON.parse(localStorage.getItem('tutorialsData')) || {};
214+
215+
document.getElementById('fields-card').innerHTML = `<h3 class="card-title">Field Status</h3>${renderFields(fieldsData)}`;
216+
document.getElementById('climate-card').innerHTML = `<h3 class="card-title">Climate Overview</h3>${renderClimate(climateData)}`;
217+
document.getElementById('water-card').innerHTML = `<h3 class="card-title">Water Resources</h3>${renderWater(waterData)}`;
218+
document.getElementById('reports-card').innerHTML = `<h3 class="card-title">Reports</h3>${renderReports(reportsData)}`;
219+
document.getElementById('recommendations-card').innerHTML = `<h3 class="card-title">🌱 Expert Recommendations</h3>${renderRecommendations(recommendationsData)}`;
220+
document.getElementById('tutorials-card').innerHTML = `<h3 class="card-title">🎓 Tutorials</h3>${renderTutorials(tutorialsData)}`;
221+
}
222+
223+
function renderFields(data) {
224+
if (!data.fields.length) {
225+
return '<p>No fields registered yet.</p>';
226+
}
227+
return data.fields.map(field => `
228+
<div>
229+
<p><strong>${field.name}</strong></p>
230+
<p>Crop: ${field.crop}</p>
231+
<p>Yield: ${field.yield}</p>
232+
<p>Health: ${field.health.charAt(0).toUpperCase() + field.health.slice(1)}</p>
233+
<p>Last Updated: ${timeSince(field.lastUpdated)} ago</p>
234+
</div>
235+
`).join('');
236+
}
237+
238+
function renderClimate(data) {
239+
return `
240+
<div>
241+
<p>Average Temperature: ${data.avgTemp}°C</p>
242+
<p>Last Recorded Precipitation: ${data.lastPrecip}mm</p>
243+
</div>
244+
`;
245+
}
246+
247+
function renderWater(data) {
248+
return `
249+
<div>
250+
<p>Surface Water: ${data.surface.length} bodies</p>
251+
<p>Groundwater: ${data.groundwater.length} regions</p>
252+
<p>Irrigation: ${data.irrigation.length} schedules</p>
253+
</div>
254+
`;
255+
}
256+
257+
function renderReports(data) {
258+
return `
259+
<div>
260+
<p>Last Report Generated: ${new Date(data.lastGenerated).toLocaleDateString()}</p>
261+
</div>
262+
`;
263+
}
264+
265+
function renderRecommendations(data) {
266+
if (!data.recommendations.length) {
267+
return '<p>No recommendations available.</p>';
268+
}
269+
return data.recommendations.map(rec => `
270+
<div>
271+
<p><strong>${rec.title}</strong></p>
272+
<p>${rec.details}</p>
273+
</div>
274+
`).join('');
275+
}
276+
277+
function renderTutorials(data) {
278+
if (!data.tutorials.length) {
279+
return '<p>No tutorials available.</p>';
262280
}
281+
return data.tutorials.map(tutorial => `
282+
<div>
283+
<p><strong>${tutorial.title}</strong></p>
284+
<p>${tutorial.description}</p>
285+
<p>Duration: ${tutorial.duration} minutes</p>
286+
</div>
287+
`).join('');
263288
}
264289

265-
async function fetchTutorialsData() {
266-
// 'https://eoagritool.africa.communication.azure.com' API endpoint
267-
try {
268-
const response = await fetch('tutorials.html');
269-
if (!response.ok) {
270-
console.error('Failed to fetch tutorials:', response.status);
271-
document.getElementById('tutorials-card').innerHTML = `
272-
<h3 class="card-title">🎓 Tutorials</h3>
273-
<p class="error-message">Failed to load tutorials.</p>
274-
`;
275-
return;
290+
function timeSince(dateString) {
291+
const date = new Date(dateString);
292+
const seconds = Math.floor((new Date() - date) / 1000);
293+
const intervals = {
294+
year: 31536000,
295+
month: 2592000,
296+
day: 86400,
297+
hour: 3600,
298+
minute: 60
299+
};
300+
301+
for (const [unit, secondsInUnit] of Object.entries(intervals)) {
302+
const interval = Math.floor(seconds / secondsInUnit);
303+
if (interval >= 1) {
304+
return `${interval} ${unit}${interval !== 1 ? 's' : ''}`;
276305
}
277-
const data = await response.json();
278-
document.getElementById('tutorials-card').innerHTML = `
279-
<h3 class="card-title">🎓 Tutorials</h3>
280-
<div>
281-
${data.map(tutorial => `
282-
<p><strong>${tutorial.title}</strong></p>
283-
<p>${tutorial.description}</p>
284-
<p>Duration: ${tutorial.duration} minutes</p>
285-
`).join('')}
286-
</div>
287-
`;
288-
} catch (error) {
289-
console.error('Error fetching tutorials:', error);
290-
document.getElementById('tutorials-card').innerHTML = `
291-
<h3 class="card-title">🎓 Tutorials</h3>
292-
<p class="error-message">Error loading tutorials.</p>
293-
`;
294306
}
307+
return 'just now';
295308
}
296309
</script>
297310

0 commit comments

Comments
 (0)