From 295056ef6eb759d8e2f76a048ed1cfbf40f97151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phan=20H=E1=BB=AFu=20L=E1=BB=A3i?= Date: Tue, 12 Sep 2023 22:17:08 +0700 Subject: [PATCH] Implement show wallet data method --- .../src/js/controllers/homeController.js | 9 ++++ javascript-practice/src/js/helpers/helpers.js | 6 +++ .../src/js/models/transaction.js | 13 ++++++ javascript-practice/src/js/models/wallet.js | 4 +- .../src/js/services/walletService.js | 3 +- javascript-practice/src/js/views/homeView.js | 46 +++++++++++++++++-- javascript-practice/src/pages/index.html | 8 ++-- 7 files changed, 78 insertions(+), 11 deletions(-) create mode 100644 javascript-practice/src/js/models/transaction.js diff --git a/javascript-practice/src/js/controllers/homeController.js b/javascript-practice/src/js/controllers/homeController.js index 7397d8c..a77adfb 100644 --- a/javascript-practice/src/js/controllers/homeController.js +++ b/javascript-practice/src/js/controllers/homeController.js @@ -12,6 +12,10 @@ export default class HomeController { return this.service.walletService.checkWalletExist(idUser); } + handlerGetWalletUser(idUser) { + return this.service.walletService.getWalletByIdUser(idUser); + } + handlerSaveWallet(wallet) { return this.service.walletService.saveWallet(wallet); } @@ -19,13 +23,18 @@ export default class HomeController { init() { if (this.homeView) { this.homeView.addHandlerInputChangeWalletForm(); + this.homeView.addHandlerSubmitWalletForm( this.handlerSaveWallet.bind(this), ); + this.homeView.loadPage( this.handlerGetInfoUserLogin.bind(this), this.handlerCheckWalletExist.bind(this), + this.handlerGetWalletUser.bind(this), ); + + this.homeView.addHandlerSubmitBudgetForm(); } } } diff --git a/javascript-practice/src/js/helpers/helpers.js b/javascript-practice/src/js/helpers/helpers.js index 97b5146..21ea8a3 100644 --- a/javascript-practice/src/js/helpers/helpers.js +++ b/javascript-practice/src/js/helpers/helpers.js @@ -75,3 +75,9 @@ export const getSubdirectoryURL = () => { return subDirectory; }; + +export const formatNumber = (number) => { + return number.toLocaleString(undefined, { + minimumFractionDigits: 2, + }); +}; diff --git a/javascript-practice/src/js/models/transaction.js b/javascript-practice/src/js/models/transaction.js new file mode 100644 index 0000000..4b7be3b --- /dev/null +++ b/javascript-practice/src/js/models/transaction.js @@ -0,0 +1,13 @@ +export default class Transaction { + constructor({ categoryName = '', date = '', note = 'None', amount = 0 }) { + this.id = Transaction.createIdTransactions(); + this.categoryName = categoryName; + this.date = date; + this.note = note; + this.amount = amount; + } + + static createIdTransactions() { + return new Date().getTime(); + } +} diff --git a/javascript-practice/src/js/models/wallet.js b/javascript-practice/src/js/models/wallet.js index ff48f73..1a20ae8 100644 --- a/javascript-practice/src/js/models/wallet.js +++ b/javascript-practice/src/js/models/wallet.js @@ -1,14 +1,14 @@ export default class Wallet { constructor({ walletName = '', - amount = '', + amount = 0, inflow = 0, outflow = 0, idUser, }) { this.id = Wallet.createIdWallet(); this.walletName = walletName; - this.amout = amount; + this.amount = amount; this.inflow = inflow; this.outflow = outflow; this.idUser = idUser; diff --git a/javascript-practice/src/js/services/walletService.js b/javascript-practice/src/js/services/walletService.js index 5331bcb..dc52fce 100644 --- a/javascript-practice/src/js/services/walletService.js +++ b/javascript-practice/src/js/services/walletService.js @@ -1,3 +1,4 @@ +import Wallet from '../models/wallet'; import CommonService from './commonService'; export default class WalletService extends CommonService { @@ -39,7 +40,7 @@ export default class WalletService extends CommonService { const result = await this.getDataFromProp('idUser', idUser); if (result) { - return result; + return new Wallet(result); } return null; diff --git a/javascript-practice/src/js/views/homeView.js b/javascript-practice/src/js/views/homeView.js index e55b283..3c0aaa7 100644 --- a/javascript-practice/src/js/views/homeView.js +++ b/javascript-practice/src/js/views/homeView.js @@ -2,6 +2,7 @@ import { TYPE_TOAST, BTN_CONTENT } from '../constants/variable'; import * as MESSAGE from '../constants/message'; import CommonView from './commonView'; import Wallet from '../models/wallet'; +import { formatNumber } from '../helpers/helpers'; export default class HomeView extends CommonView { constructor() { @@ -11,7 +12,7 @@ export default class HomeView extends CommonView { this.allContent = document.querySelectorAll('.app__content-item'); this.addTransactionBtn = document.getElementById('addTransaction'); this.addBudgetBtn = document.getElementById('addBudget'); - this.saveBtn = document.querySelectorAll('.form__save-btn'); + this.saveBtns = document.querySelectorAll('.form__save-btn'); this.dialogs = document.querySelectorAll('.dialog'); this.categoryField = document.getElementById('selectCategory'); this.closeIcon = document.querySelector('.close-icon'); @@ -22,7 +23,8 @@ export default class HomeView extends CommonView { this.walletDialog = document.getElementById('walletDialog'); } - async loadPage(getInfoUserLogin, checkWalletExist) { + async loadPage(getInfoUserLogin, checkWalletExist, getWalletByIdUser) { + this.getWalletByIdUser = getWalletByIdUser; // Init function this.toggleLoaderSpinner(); const user = await getInfoUserLogin(); @@ -37,13 +39,40 @@ export default class HomeView extends CommonView { // Show add wallet dialog this.walletDialog.showModal(); } else { + // Load event page this.loadEvent(); + + // Init data + this.loadData(); } } this.toggleLoaderSpinner(); } + async loadData() { + const wallet = await this.getWalletByIdUser(this.user.id); // Get data wallet + const walletName = document.querySelector('.wallet__name'); + const walletPrice = document.querySelector('.wallet__price'); + const sign = wallet.amount >= 0 ? '+' : '-'; + const walletNameValue = wallet.walletName; + const walletAmountValue = formatNumber(wallet.amount); + + this.wallet = wallet; + + walletName.textContent = walletNameValue; + walletPrice.textContent = `${sign}$ ${walletAmountValue}`; + } + + // ---------------------ADD BUDGET DIALOG---------------------// + addHandlerSubmitBudgetForm() { + this.budgetDialog.addEventListener('submit', (e) => { + // TODO + }); + } + // ---------------------END DIALOG---------------------// + + // ---------------------WALLET DIALOG--------------------- // addHandlerSubmitWalletForm(saveWallet) { this.walletDialog.addEventListener('submit', (e) => { e.preventDefault(); @@ -58,7 +87,7 @@ export default class HomeView extends CommonView { try { const wallet = new Wallet({ walletName: this.walletName, - amount: this.amount, + amount: +this.amount, idUser: this.user.id, }); @@ -66,6 +95,7 @@ export default class HomeView extends CommonView { this.showSuccessToast('Add wallet success', 'Click ok to continue!'); this.loadEvent(); + this.loadData(); } catch (error) { // Show toast error this.initErrorToast(error); @@ -93,6 +123,8 @@ export default class HomeView extends CommonView { } } + // ---------------------END DIALOG--------------------- // + showSuccessToast(title, message) { const typeToast = TYPE_TOAST.success; const btnContent = BTN_CONTENT.OK; @@ -116,7 +148,7 @@ export default class HomeView extends CommonView { this.dialogToast.showModal(); } - /* ------------------------------- HANDLER EVENT ------------------------------- */ + // ------------------------------- HANDLER EVENT ------------------------------- // loadEvent() { this.addCommonEventPage(); @@ -169,6 +201,12 @@ export default class HomeView extends CommonView { this.addBudgetBtn.addEventListener('click', () => { this.budgetDialog.showModal(); }); + + this.saveBtns.forEach((btn) => { + btn.addEventListener('click', (e) => { + e.preventDefault(); + }); + }); } addEventSelectCategoryDialog() { diff --git a/javascript-practice/src/pages/index.html b/javascript-practice/src/pages/index.html index ceadbfa..0c70e2f 100644 --- a/javascript-practice/src/pages/index.html +++ b/javascript-practice/src/pages/index.html @@ -82,7 +82,7 @@
-
+

Amount

-
+

Date

@@ -284,8 +284,8 @@ Wallet Icon
-

Nezumi

-

+$ 499,900,900.00

+

User

+

+$ 0.00