satmachineclient/static/js/index.js

91 lines
2.2 KiB
JavaScript

window.app = Vue.createApp({
mixins: [windowMixin],
delimiters: ['${', '}'],
data() {
return {
dashboardData: null,
transactions: [],
analytics: null,
loading: true,
error: null
}
},
methods: {
// Utility Methods
formatCurrency(amount) {
if (!amount) return 'Q 0.00';
// Convert centavos to quetzales
return new Intl.NumberFormat('es-GT', {
style: 'currency',
currency: 'GTQ',
}).format(amount / 100);
},
formatDate(dateString) {
if (!dateString) return ''
return new Date(dateString).toLocaleDateString()
},
formatDateTime(dateString) {
if (!dateString) return ''
const date = new Date(dateString)
return date.toLocaleDateString() + ' ' + date.toLocaleTimeString('en-US', { hour12: false })
},
formatSats(amount) {
if (!amount) return '0 sats'
return new Intl.NumberFormat('en-US').format(amount) + ' sats'
},
async loadDashboardData() {
try {
const {data} = await LNbits.api.request(
'GET',
'/satmachineclient/api/v1/dashboard/summary',
this.g.user.wallets[0].inkey
)
this.dashboardData = data
} catch (error) {
console.error('Error loading dashboard data:', error)
this.error = 'Failed to load dashboard data'
}
},
async loadTransactions() {
try {
const {data} = await LNbits.api.request(
'GET',
'/satmachineclient/api/v1/dashboard/transactions?limit=10',
this.g.user.wallets[0].inkey
)
this.transactions = data
} catch (error) {
console.error('Error loading transactions:', error)
}
}
},
async created() {
try {
this.loading = true
await Promise.all([
this.loadDashboardData(),
this.loadTransactions()
])
} catch (error) {
console.error('Error initializing dashboard:', error)
this.error = 'Failed to initialize dashboard'
} finally {
this.loading = false
}
},
computed: {
hasData() {
return this.dashboardData && !this.loading
}
}
})
window.app.mount('#dcaClient')