@churchapps/apphelper 0.6.20 → 0.6.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,21 @@
1
1
  export declare class CurrencyHelper {
2
+ static CACHE_KEY: string;
3
+ static CACHE_EXPIRATION: number;
2
4
  static loadCurrency: () => Promise<any>;
3
5
  static formatCurrency(amount: number): string;
4
6
  static formatCurrencyWithLocale(amount: number, currency?: string, fractionDigits?: number): string;
5
7
  static getCurrencySymbol(currency?: string): any;
6
8
  private static getLocaleForCurrency;
9
+ static getExchangeRates(baseCurrency: string): Promise<Record<string, number>>;
10
+ static convertDonation(donation: {
11
+ currency: string;
12
+ amount: number;
13
+ }, rates: Record<string, number>, targetCurrency: string): string;
14
+ static convertDonationTotals(donations: {
15
+ currency: string;
16
+ amount: number;
17
+ }[], rates: Record<string, number>, targetCurrency: string): string;
18
+ static convertAmount(amount: number, fromCurrency: string, toCurrency: string, rates: Record<string, number>): number;
19
+ static convertAmountWithLocale(amount: number, donationCurrency: string, selectedCurrency: string, rates: Record<string, number>): Promise<string>;
7
20
  }
8
21
  //# sourceMappingURL=CurrencyHelper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CurrencyHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/CurrencyHelper.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc;IACzB,MAAM,CAAC,YAAY,qBAIjB;IAEF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM;IAUpC,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAc,EAAE,cAAc,GAAE,MAAU;IAmBpG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM;IAsB1C,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAqBpC"}
1
+ {"version":3,"file":"CurrencyHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/CurrencyHelper.ts"],"names":[],"mappings":"AAQA,qBAAa,cAAc;IACzB,MAAM,CAAC,SAAS,SAA0B;IAC1C,MAAM,CAAC,gBAAgB,SAAuB;IAE9C,MAAM,CAAC,YAAY,qBAIjB;IAEF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM;IASpC,MAAM,CAAC,wBAAwB,CAC7B,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAc,EACxB,cAAc,GAAE,MAAU;IAoB5B,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM;IAsB1C,OAAO,CAAC,MAAM,CAAC,oBAAoB;WAsBtB,gBAAgB,CAC3B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA4BlC,MAAM,CAAC,eAAe,CACpB,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAC9C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,cAAc,EAAE,MAAM;IAYxB,MAAM,CAAC,qBAAqB,CAC1B,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,EACjD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,cAAc,EAAE,MAAM;IAuBxB,MAAM,CAAC,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM;WAkBI,uBAAuB,CAClC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAWhC"}
@@ -5,7 +5,7 @@ export class CurrencyHelper {
5
5
  const formatter = new Intl.NumberFormat("en-US", {
6
6
  style: "currency",
7
7
  currency: "USD",
8
- minimumFractionDigits: 2
8
+ minimumFractionDigits: 2,
9
9
  });
10
10
  return formatter.format(amount);
11
11
  }
@@ -41,7 +41,7 @@ export class CurrencyHelper {
41
41
  dkk: { percent: 2.9, fixed: 1.8, symbol: "DKK" },
42
42
  chf: { percent: 2.9, fixed: 0.3, symbol: "CHF" },
43
43
  mxn: { percent: 2.9, fixed: 3.0, symbol: "MXN" },
44
- brl: { percent: 3.9, fixed: 0.5, symbol: "R$" }
44
+ brl: { percent: 3.9, fixed: 0.5, symbol: "R$" },
45
45
  };
46
46
  return stripeCurrencyFees[normalizedCurrency]?.symbol || "$";
47
47
  }
@@ -61,12 +61,69 @@ export class CurrencyHelper {
61
61
  DKK: "da-DK",
62
62
  CHF: "de-CH",
63
63
  MXN: "es-MX",
64
- BRL: "pt-BR"
64
+ BRL: "pt-BR",
65
65
  };
66
66
  return currencyLocaleMap[currency] || "en-US";
67
67
  }
68
+ static async getExchangeRates(baseCurrency) {
69
+ const cached = localStorage.getItem(this.CACHE_KEY);
70
+ if (cached) {
71
+ const parsed = JSON.parse(cached);
72
+ const expired = Date.now() - parsed.timestamp > this.CACHE_EXPIRATION;
73
+ if (!expired && parsed.base === baseCurrency) {
74
+ return parsed.rates;
75
+ }
76
+ }
77
+ const response = await fetch(`https://api.frankfurter.dev/v1/latest?base=${baseCurrency}`);
78
+ const data = await response.json();
79
+ const cache = {
80
+ base: baseCurrency,
81
+ rates: data.rates,
82
+ timestamp: Date.now(),
83
+ };
84
+ localStorage.setItem(this.CACHE_KEY, JSON.stringify(cache));
85
+ return data.rates;
86
+ }
87
+ static convertDonation(donation, rates, targetCurrency) {
88
+ const converted = this.convertAmount(Number(donation.amount || 0), donation.currency?.toUpperCase() || "USD", targetCurrency, rates);
89
+ return this.formatCurrencyWithLocale(converted, targetCurrency);
90
+ }
91
+ static convertDonationTotals(donations, rates, targetCurrency) {
92
+ const grouped = {};
93
+ donations.forEach((donation) => {
94
+ const currency = donation.currency?.toUpperCase() || "USD";
95
+ if (!grouped[currency]) {
96
+ grouped[currency] = 0;
97
+ }
98
+ grouped[currency] += Number(donation.amount || 0);
99
+ });
100
+ let total = 0;
101
+ Object.entries(grouped).forEach(([currency, amount]) => {
102
+ total += this.convertAmount(amount, currency, targetCurrency, rates);
103
+ });
104
+ return this.formatCurrencyWithLocale(total, targetCurrency);
105
+ }
106
+ static convertAmount(amount, fromCurrency, toCurrency, rates) {
107
+ const from = fromCurrency.toUpperCase();
108
+ const to = toCurrency.toUpperCase();
109
+ if (from === to) {
110
+ return amount;
111
+ }
112
+ const rate = rates[from];
113
+ if (!rate) {
114
+ return amount;
115
+ }
116
+ return amount / rate;
117
+ }
118
+ //this is just temporary, we can remove this later
119
+ static async convertAmountWithLocale(amount, donationCurrency, selectedCurrency, rates) {
120
+ const converted = this.convertAmount(amount, donationCurrency, selectedCurrency, rates);
121
+ return this.formatCurrencyWithLocale(converted, selectedCurrency);
122
+ }
68
123
  }
69
124
  _a = CurrencyHelper;
125
+ CurrencyHelper.CACHE_KEY = "exchange_rates_cache";
126
+ CurrencyHelper.CACHE_EXPIRATION = 12 * 60 * 60 * 1000; // 12 hours
70
127
  CurrencyHelper.loadCurrency = async () => {
71
128
  const gateways = await ApiHelper.get("/gateways", "GivingApi");
72
129
  if (gateways.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"CurrencyHelper.js","sourceRoot":"","sources":["../../src/helpers/CurrencyHelper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CurrencyHelper.js","sourceRoot":"","sources":["../../src/helpers/CurrencyHelper.ts"],"names":[],"mappings":"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"}