update flow final

This commit is contained in:
bagus-arie05
2025-09-17 15:40:54 +07:00
parent 4e30edeaf8
commit 3ef6f38f2e
8 changed files with 440 additions and 187 deletions

View File

@@ -9,19 +9,32 @@ export const usePaymentStore = defineStore('payment', {
amount: '',
expiry: '',
},
// Berikan default object instead of null
qrData: {
qrvalue: null,
display_nobill: null,
display_name: null,
display_amount: null
display_amount: null,
status: null, // Tambahkan status untuk tracking
ip: null, // Tambahkan IP untuk reference
},
}),
getters: {
// Tambahkan getter untuk safe access
hasQrData: (state) => state.qrData && state.qrData.qrvalue,
safeQrValue: (state) => state.qrData?.qrvalue || 'https://www.google.com'
safeQrValue: (state) => state.qrData?.qrvalue || 'https://www.google.com',
// Getter untuk cek apakah data siap untuk polling status
isReadyForStatusCheck: (state) => {
return state.qrData.display_nobill && state.qrData.display_name;
},
// Getter untuk informasi debug
debugInfo: (state) => ({
step: state.currentStep,
hasIdentifiers: !!(state.qrData.display_nobill && state.qrData.display_name),
qrData: state.qrData,
patientInfo: state.patientInfo,
})
},
actions: {
@@ -31,22 +44,32 @@ export const usePaymentStore = defineStore('payment', {
prevStep() {
this.currentStep--;
},
setStep(step) {
console.log(`Setting step from ${this.currentStep} to ${step}`);
this.currentStep = step;
},
reset() {
console.log('Resetting payment store');
this.currentStep = 1;
this.patientInfo = {
name: '',
amount: '',
expiry: '',
};
// Reset ke default object, bukan null
this.qrData = {
qrvalue: null,
display_nobill: null,
display_name: null,
display_amount: null
display_amount: null,
status: null,
ip: null,
};
},
updatePayment(apiResponse) {
console.log("=== UPDATE PAYMENT ===");
console.log("API Response:", apiResponse);
// Validasi response
@@ -58,27 +81,72 @@ export const usePaymentStore = defineStore('payment', {
const apiData = apiResponse.data[0];
console.log("API Data:", apiData);
// Update qrData dengan validasi
// Simpan data lama untuk comparison
const oldQrData = { ...this.qrData };
// Update qrData dengan semua properti dari API
this.qrData = {
qrvalue: apiData.qrvalue || null,
display_nobill: apiData.display_nobill || null,
display_name: apiData.display_name || null,
display_amount: apiData.display_amount || null,
...apiData // spread untuk properti lain yang mungkin ada
qrvalue: apiData.qrvalue || apiData.qr_code || this.qrData.qrvalue,
display_nobill: apiData.display_nobill || this.qrData.display_nobill,
display_name: apiData.display_name || this.qrData.display_name,
display_amount: apiData.display_amount || apiData.nominal || this.qrData.display_amount,
status: apiData.status || this.qrData.status,
ip: apiData.ip || this.qrData.ip,
// Spread untuk properti lain yang mungkin ada
...apiData
};
// Update patientInfo
this.patientInfo = {
name: apiData.display_name || 'Unknown',
amount: apiData.display_amount || '0',
expiry: this.patientInfo.expiry, // keep existing value
name: apiData.display_name || this.patientInfo.name || 'Unknown',
amount: apiData.display_amount || apiData.nominal || this.patientInfo.amount || '0',
expiry: this.patientInfo.expiry,
};
// Log changes
if (oldQrData.status !== this.qrData.status) {
console.log(`Status changed: ${oldQrData.status} -> ${this.qrData.status}`);
}
console.log("Updated qrData:", this.qrData);
console.log("Updated patientInfo:", this.patientInfo);
// Ganti step
this.currentStep = 2;
console.log("===================");
},
// Method untuk debug
debugCurrentState() {
console.log("=== PAYMENT STORE DEBUG ===");
console.log("Current Step:", this.currentStep);
console.log("Patient Info:", this.patientInfo);
console.log("QR Data:", this.qrData);
console.log("Has QR Data:", this.hasQrData);
console.log("Ready for Status Check:", this.isReadyForStatusCheck);
console.log("Safe QR Value:", this.safeQrValue);
console.log("==========================");
},
// Method untuk validasi data
validateData() {
const issues = [];
if (!this.qrData.display_nobill) {
issues.push('display_nobill missing');
}
if (!this.qrData.display_name) {
issues.push('display_name missing');
}
if (!this.qrData.qrvalue && !this.qrData.qr_code) {
issues.push('QR code missing');
}
if (issues.length > 0) {
console.warn('Data validation issues:', issues);
return false;
}
return true;
}
},
});

View File

@@ -1,37 +0,0 @@
// src/stores/payment.js
import { defineStore } from 'pinia';
export const usePaymentStore = defineStore('payment', {
state: () => ({
currentStep: 1,
patientInfo: {
name: '',
amount: '',
expiry: '',
},
paymentData: null, // Tambahkan state ini untuk menyimpan data dari backend
}),
actions: {
nextStep() {
this.currentStep++;
},
prevStep() {
this.currentStep--;
},
reset() {
this.currentStep = 1;
this.patientInfo = {};
this.paymentData = null; // Reset data pembayaran
},
// Tambahkan action baru untuk menerima data dari WebSocket
updatePayment(data: { patientName: any; amount: any; expiryDate: any; } | null) {
this.paymentData = data;
this.patientInfo = {
name: data.patientName,
amount: data.amount,
expiry: data.expiryDate,
};
this.currentStep = 2; // Pindah ke step 2 secara otomatis
},
},
});