@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.
- package/dist/helpers/CurrencyHelper.d.ts +13 -0
- package/dist/helpers/CurrencyHelper.d.ts.map +1 -1
- package/dist/helpers/CurrencyHelper.js +60 -3
- package/dist/helpers/CurrencyHelper.js.map +1 -1
- package/dist/public/locales/de.json +281 -281
- package/dist/public/locales/es.json +281 -281
- package/dist/public/locales/fr.json +281 -281
- package/dist/public/locales/hi.json +281 -281
- package/dist/public/locales/it.json +281 -281
- package/dist/public/locales/ko.json +281 -281
- package/dist/public/locales/no.json +281 -281
- package/dist/public/locales/pt.json +281 -281
- package/dist/public/locales/ru.json +281 -281
- package/dist/public/locales/tl.json +281 -281
- package/dist/public/locales/zh.json +281 -281
- package/package.json +109 -109
|
@@ -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":"
|
|
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":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"CurrencyHelper.js","sourceRoot":"","sources":["../../src/helpers/CurrencyHelper.ts"],"names":[],"mappings":"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"}
|