payment.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { defineStore } from 'pinia';
  2. import { ref } from 'vue';
  3. const getPixExpiresAt = (payment) => payment?.pix?.expires_at ?? payment?.expires_at ?? null;
  4. const isFutureDate = (date) => {
  5. if (!date) return false;
  6. const time = new Date(date).getTime();
  7. return Number.isFinite(time) && time > Date.now();
  8. };
  9. export const usePaymentStore = defineStore('payment', () => {
  10. const pixPaymentsByScheduleId = ref({});
  11. const getValidPixPayment = (scheduleId) => {
  12. const payment = pixPaymentsByScheduleId.value[scheduleId] ?? null;
  13. if (!payment) return null;
  14. if (!isFutureDate(getPixExpiresAt(payment))) {
  15. clearPixPayment(scheduleId);
  16. return null;
  17. }
  18. return payment;
  19. };
  20. const setPixPayment = (scheduleId, payment) => {
  21. if (!scheduleId || !payment) return;
  22. pixPaymentsByScheduleId.value = {
  23. ...pixPaymentsByScheduleId.value,
  24. [scheduleId]: payment,
  25. };
  26. };
  27. const clearPixPayment = (scheduleId) => {
  28. if (!scheduleId || !pixPaymentsByScheduleId.value[scheduleId]) return;
  29. const payments = { ...pixPaymentsByScheduleId.value };
  30. delete payments[scheduleId];
  31. pixPaymentsByScheduleId.value = payments;
  32. };
  33. return {
  34. pixPaymentsByScheduleId,
  35. getValidPixPayment,
  36. setPixPayment,
  37. clearPixPayment,
  38. };
  39. });