PHP Classes

File: client/src/app/stores/TransactionStore.ts

Recommend this page to a friend!
  Classes of mohammad anzawi   PHP Wallet API and Application   client/src/app/stores/TransactionStore.ts   Download  
File: client/src/app/stores/TransactionStore.ts
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: PHP Wallet API and Application
Application to manage a wallet by calling an API
Author: By
Last change:
Date: 2 years ago
Size: 4,792 bytes
 

Contents

Class file image Download
import {makeAutoObservable, runInAction} from "mobx"; import Transaction, {TransactionFormValues, TransactionTotal} from "../models/Transaction"; import agent from "../api/agent"; import {store} from "./store"; export default class TransactionStore { all: Transaction[] = [] loaded = false totals: TransactionTotal | null = null /* Read last comment */ // approved: Transaction[] = [] // declined: Transaction[] = [] // pending: Transaction[] = [] current: Transaction[] = [] // get total count for all transaction get totalTransaction() { return this.totals?.declined! + this.totals?.approved! + this.totals?.pending! } // setup tabs tabs = new Map<string, boolean>() constructor() { makeAutoObservable(this) this.initTabs() } // initialize tabs initTabs = () => { const tempTabs = ["all", "pending", "approved", "declined"] for (let i = 0; i < tempTabs.length; i++) { this.tabs.set(tempTabs[i], false) } } /** * select table * @param tab */ setTab = (tab: string) => { this.initTabs() this.tabs.set(tab, true) if (tab === 'all') { this.current = this.all return } this.current = this.all.filter((transaction) => { return transaction.status === tab }) } /** * get data for chart in dashboard */ getDataForChart = async () => { const totals = await agent.Transactions.allTotals() try { runInAction(() => { this.loaded = true this.totals = totals }) } catch (err) { throw err } } /** * get all transactions from server */ getAllTransaction = async () => { try { const transactions = await agent.Transactions.all() runInAction(() => { this.current = this.all = transactions this.setTab('pending') }) } catch (err) { throw err } } /** * edit transaction * @param uuid * @param type */ change = async (uuid: string, type: string) => { try { await agent.Transactions.confirm({type: type}, uuid) runInAction(() => { const allIndex = this.all.findIndex(x => x.uuid === uuid) this.all[allIndex].status = type if (this.tabs.get('all') === false) this.current = this.current.filter(x => { return x.uuid !== uuid }) }) } catch (err) { throw err } } // get total counts for transaction for logged user totalsByUser = async () => { try { const result = await agent.Transactions.totals() runInAction(() => { this.totals = result }) } catch (err) { throw err } } /** * create new transaction * @param values * @param setSubmitting */ create = async (values: TransactionFormValues, setSubmitting: any) => { try { await agent.Transactions.create(values) runInAction(() => { this.totals!.pending++ }) store.modalStore.closeModal() setSubmitting(false) } catch (err: any) { throw err } } /** * actually we dont need call every endpoint * we jus call endpoint to get transaction * and then we can filter by status * I wrote this functions for test only * we can using it if we need that and * create variable called -currentTransactions- * and then set values to it and work with. * but in this time I just want to make this app simple as I can */ /*getApprovedTransaction = async () => { try { const transactions = await agent.Transactions.approved() runInAction(() => { this.approved = transactions }) } catch (err) { throw err } } getDeclinedTransaction = async () => { try { const transactions = await agent.Transactions.declined() runInAction(() => { this.declined = transactions }) } catch (err) { throw err } } getPendingTransaction = async () => { try { const transactions = await agent.Transactions.pending() runInAction(() => { this.pending = transactions }) } catch (err) { throw err } }*/ }