Great Deal! Get Instant $10 FREE in Account on First Order + 10% Cashback on Every Order Order Now

Homework: Online/Offline Budget Trackers Add functionality to our existing Budget Tracker application to allow for offline access and functionality. The user will be able to add expenses and deposits...

1 answer below »

Homework: Online/Offline Budget Trackers

Add functionality to our existing Budget Tracker application to allow for offline access and functionality.

The user will be able to add expenses and deposits to their budget with or without a connection. When entering transactions offline, they should populate the total when brought back online.

Offline Functionality:

  • Enter deposits offline

  • Enter expenses offline

When brought back online:

  • Offline entries should be added to tracker.

User Story

AS AN avid traveller I WANT to be able to track my withdrawals and deposits with or without a data/internet connection SO THAT my account balance is accurate when I am traveling

Business Context

Giving users a fast and easy way to track their money is important, but allowing them to access that information anytime is even more important. Having offline functionality is paramount to our applications success.

Acceptance Criteria

GIVEN a user is on Budget App without an internet connection WHEN the user inputs a withdrawal or deposit THEN that will be shown on the page, and added to their transaction history when their connection is back online.

Answered Same Day Apr 25, 2021

Solution

Sanghamitra answered on Apr 28 2021
145 Votes
PWA-Budget-Tracke
models/transaction.js
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const transactionSchema = new Schema({
name: {
type: String,
trim: true,
required: "Enter a name for transaction"
},
value: {
type: Number,
required: "Enter an amount"
},
date: {
type: Date,
default: Date.now
}
});
const Transaction = mongoose.model("Transaction", transactionSchema);
module.exports = Transaction;
PWA-Budget-Tracke
public/db.js
let db;
const request = indexedDB.open("budget", 1);
equest.onupgradeneeded = function (event) {
const db = event.target.result;
db.createObjectStore("pending", { autoIncrement: true });
};
equest.onsuccess = function (event) {
db = event.target.result;

check if app is online before reading from d
if (navigator.onLine) {
checkDatabase();
}
};
equest.one
or = function (event) {
console.log("Woops! " + event.target.e
orCode);
};
function saveRecord(record) {
const transaction = db.transaction(["pending"], "readwrite");
const store = transaction.objectStore("pending");
store.add(record);
}
function checkDatabase() {
const transaction = db.transaction(["pending"], "readwrite");
const store = transaction.objectStore("pending");
const getAll = store.getAll();
getAll.onsuccess = function () {
if (getAll.result.length > 0) {
fetch("/api/transaction
ulk", {
method: "POST",
body: JSON.stringify(getAll.result),
headers: {
Accept: "application/json, text/plain, */*",
"Content-Type": "application/json"
}
})
.then(response => response.json())
.then(() => {

delete records if successful
const transaction = db.transaction(["pending"], "readwrite");
const store = transaction.objectStore("pending");
store.clear();
});
}
};
}
function deletePending() {
const transaction = db.transaction(["pending"], "readwrite");
const store = transaction.objectStore("pending");
store.clear();
}
listen for app coming back online
window.addEventListener("online", checkDatabase);
PWA-Budget-Tracke
public/index.html


Your total is: $0


Transaction Name:

Transaction Amount:


Add Deposits

Subtract Expense



        Transaction        Amount









PWA-Budget-Tracke
public/index.js
let transactions = [];
let myChart;
fetch("/api/transaction")
.then(response => response.json())
.then(data => {

save db data on global variable
transactions = data;
populateTotal();
populateTable();
populateChart();
});
function populateTotal() {

reduce transaction amounts to a single total value
const total = transactions.reduce((total, t) => {
return total + parseInt(t.value);
}, 0);
const totalEl = document.querySelector("#total");
totalEl.textContent = total;
}
function populateTable() {
const tbody = document.querySelector("#tbody");
tbody.innerHTML = "";
transactions.forEach(transaction => {

create and populate a table row
const tr = document.createElement("tr");
tr.innerHTML = `
${transaction.name}
td
${transaction.value}
td
`;
tbody.appendChild(tr);
});
}
function...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here