initial: bootstrap from BukidBountyApp base
This commit is contained in:
58
resources/js/stores/globalTransaction.js
Normal file
58
resources/js/stores/globalTransaction.js
Normal file
@@ -0,0 +1,58 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import axios from 'axios';
|
||||
|
||||
export const useGlobalTransactionStore = defineStore('globalTransaction', {
|
||||
state: () => ({
|
||||
transactions: [],
|
||||
isLoading: false,
|
||||
error: null,
|
||||
lastFetched: null,
|
||||
}),
|
||||
|
||||
getters: {
|
||||
getTransactionsByProduct: (state) => (productHash) => {
|
||||
return state.transactions.filter(tx => tx.product_hash === productHash);
|
||||
},
|
||||
getTransactionsByStore: (state) => (storeHash) => {
|
||||
return state.transactions.filter(tx => tx.store_hash === storeHash);
|
||||
}
|
||||
},
|
||||
|
||||
actions: {
|
||||
async fetchTransactions(filters = {}) {
|
||||
try {
|
||||
this.isLoading = true;
|
||||
this.error = null;
|
||||
|
||||
const response = await axios.post('/admin/transactions/list', filters);
|
||||
|
||||
if (Array.isArray(response.data)) {
|
||||
this.transactions = response.data;
|
||||
this.lastFetched = Date.now();
|
||||
}
|
||||
|
||||
return this.transactions;
|
||||
} catch (err) {
|
||||
this.error = 'Failed to load transactions';
|
||||
console.error('Error fetching transactions:', err);
|
||||
throw err;
|
||||
} finally {
|
||||
this.isLoading = false;
|
||||
}
|
||||
},
|
||||
|
||||
async precache() {
|
||||
// Avoid refetching if data is fresh (less than 5 minutes old)
|
||||
if (this.transactions.length > 0 && this.lastFetched && (Date.now() - this.lastFetched < 300000)) {
|
||||
return;
|
||||
}
|
||||
|
||||
await this.fetchTransactions();
|
||||
},
|
||||
|
||||
clearCache() {
|
||||
this.transactions = [];
|
||||
this.lastFetched = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user