diff --git a/src/element/send-zap.tsx b/src/element/send-zap.tsx index 10f4654..157c4e5 100644 --- a/src/element/send-zap.tsx +++ b/src/element/send-zap.tsx @@ -13,7 +13,8 @@ import QrCode from "./qr-code"; import { useLogin } from "hooks/login"; import Copy from "./copy"; import { defaultRelays } from "const"; -import { FormattedMessage } from "react-intl"; +import { FormattedMessage, FormattedNumber } from "react-intl"; +import { useRates } from "hooks/rates"; export interface LNURLLike { get name(): string; @@ -33,8 +34,6 @@ export interface SendZapsProps { } export function SendZaps({ lnurl, pubkey, aTag, eTag, targetName, onFinish }: SendZapsProps) { - const UsdRate = 28_000; - const satsAmounts = [ 21, 69, 121, 420, 1_000, 2_100, 4_200, 10_000, 21_000, 42_000, 69_000, 100_000, 210_000, 500_000, 1_000_000, ]; @@ -45,6 +44,7 @@ export function SendZaps({ lnurl, pubkey, aTag, eTag, targetName, onFinish }: Se const [comment, setComment] = useState(""); const [invoice, setInvoice] = useState(""); const login = useLogin(); + const rate = useRates("BTCUSD"); const relays = Object.keys(defaultRelays); const name = targetName ?? svc?.name; async function loadService(lnurl: string) { @@ -52,6 +52,7 @@ export function SendZaps({ lnurl, pubkey, aTag, eTag, targetName, onFinish }: Se await s.load(); setSvc(s); } + const usdRate = rate.time ? rate.ask : 26_000; useEffect(() => { if (!svc) { @@ -72,7 +73,7 @@ export function SendZaps({ lnurl, pubkey, aTag, eTag, targetName, onFinish }: Se isAnon = true; } - const amountInSats = isFiat ? Math.floor((amount / UsdRate) * 1e8) : amount; + const amountInSats = isFiat ? Math.floor((amount / usdRate) * 1e8) : amount; let zap: NostrEvent | undefined; if (pubkey) { zap = await pub.zap(amountInSats * 1000, pubkey, relays, undefined, comment, eb => { @@ -132,6 +133,18 @@ export function SendZaps({ lnurl, pubkey, aTag, eTag, targetName, onFinish }: Se defaultMessage="Zap amount in {currency}" values={{ currency: isFiat ? "USD" : "SATS" }} /> + {isFiat && ( + <> +   + , + }} + /> + + )}
{(isFiat ? usdAmounts : satsAmounts).map(a => ( diff --git a/src/hooks/rates.ts b/src/hooks/rates.ts new file mode 100644 index 0000000..d2339c7 --- /dev/null +++ b/src/hooks/rates.ts @@ -0,0 +1,32 @@ +import { bech32ToHex } from "@snort/shared"; +import { EventKind, ReplaceableNoteStore, RequestBuilder } from "@snort/system"; +import { useRequestBuilder } from "@snort/system-react"; +import { useMemo } from "react"; + +// Snort backend publishes rates +const SnortPubkey = "npub1sn0rtcjcf543gj4wsg7fa59s700d5ztys5ctj0g69g2x6802npjqhjjtws"; + +export function useRates(symbol: string, leaveOpen = true) { + const sub = useMemo(() => { + const rb = new RequestBuilder(`rates:${symbol}`); + rb.withOptions({ + leaveOpen, + }); + rb.withFilter() + .kinds([1009 as EventKind]) + .authors([bech32ToHex(SnortPubkey)]) + .tag("d", [symbol]); + return rb; + }, [symbol]); + + const data = useRequestBuilder(ReplaceableNoteStore, sub); + + const tag = data?.data?.tags.find(a => a[0] === "d" && a[1] === symbol); + return { + time: data.data?.created_at, + ask: Number(tag?.[2]), + bid: Number(tag?.[3]), + low: Number(tag?.[4]), + hight: Number(tag?.[5]), + }; +} diff --git a/src/lang.json b/src/lang.json index 6a8307a..9b42556 100644 --- a/src/lang.json +++ b/src/lang.json @@ -239,6 +239,10 @@ "X2PZ7D": { "defaultMessage": "Create Goal" }, + "YPh5Nq": { + "defaultMessage": "@ {rate}", + "description": "Showing zap amount in USD @ rate" + }, "Z8ZOEY": { "defaultMessage": "This method is insecure. We recommend using a {nostrlink}" }, diff --git a/src/translations/af_ZA.json b/src/translations/af_ZA.json index ca2b144..6a8307a 100644 --- a/src/translations/af_ZA.json +++ b/src/translations/af_ZA.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/ar_SA.json b/src/translations/ar_SA.json index 43ebb1e..168512f 100644 --- a/src/translations/ar_SA.json +++ b/src/translations/ar_SA.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/bg_BG.json b/src/translations/bg_BG.json index e3aadf0..e784c11 100644 --- a/src/translations/bg_BG.json +++ b/src/translations/bg_BG.json @@ -414,4 +414,3 @@ "defaultMessage": "Зап Тревога" } } - diff --git a/src/translations/bn_BD.json b/src/translations/bn_BD.json index c8d3b5f..f73f705 100644 --- a/src/translations/bn_BD.json +++ b/src/translations/bn_BD.json @@ -414,4 +414,3 @@ "defaultMessage": "জ্যাপ অ্যালার্ট" } } - diff --git a/src/translations/ca_ES.json b/src/translations/ca_ES.json index ca2b144..6a8307a 100644 --- a/src/translations/ca_ES.json +++ b/src/translations/ca_ES.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/cs_CZ.json b/src/translations/cs_CZ.json index ca2b144..6a8307a 100644 --- a/src/translations/cs_CZ.json +++ b/src/translations/cs_CZ.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/da_DK.json b/src/translations/da_DK.json index ca2b144..6a8307a 100644 --- a/src/translations/da_DK.json +++ b/src/translations/da_DK.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/de_DE.json b/src/translations/de_DE.json index f3fb6e6..3e9295b 100644 --- a/src/translations/de_DE.json +++ b/src/translations/de_DE.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/el_GR.json b/src/translations/el_GR.json index ca2b144..6a8307a 100644 --- a/src/translations/el_GR.json +++ b/src/translations/el_GR.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/en.json b/src/translations/en.json index 9e0f266..99b0c8c 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -79,6 +79,7 @@ "VA/Z1S": "Hide", "W9355R": "Unmute", "X2PZ7D": "Create Goal", + "YPh5Nq": "@ {rate}", "Z8ZOEY": "This method is insecure. We recommend using a {nostrlink}", "ZmqxZs": "You can change this later", "acrOoz": "Continue", diff --git a/src/translations/es_ES.json b/src/translations/es_ES.json index ae2773c..2b5549c 100644 --- a/src/translations/es_ES.json +++ b/src/translations/es_ES.json @@ -414,4 +414,3 @@ "defaultMessage": "Alerta de Zap" } } - diff --git a/src/translations/fa_IR.json b/src/translations/fa_IR.json index f281e7d..0aa84f0 100644 --- a/src/translations/fa_IR.json +++ b/src/translations/fa_IR.json @@ -414,4 +414,3 @@ "defaultMessage": "هشدار زپ" } } - diff --git a/src/translations/fi_FI.json b/src/translations/fi_FI.json index 00f7e12..49a86eb 100644 --- a/src/translations/fi_FI.json +++ b/src/translations/fi_FI.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap-hälytys" } } - diff --git a/src/translations/fr_FR.json b/src/translations/fr_FR.json index 3e202e9..05cb262 100644 --- a/src/translations/fr_FR.json +++ b/src/translations/fr_FR.json @@ -414,4 +414,3 @@ "defaultMessage": "Alerte Zap" } } - diff --git a/src/translations/he_IL.json b/src/translations/he_IL.json index ca2b144..6a8307a 100644 --- a/src/translations/he_IL.json +++ b/src/translations/he_IL.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/hu_HU.json b/src/translations/hu_HU.json index 231b24f..7e36605 100644 --- a/src/translations/hu_HU.json +++ b/src/translations/hu_HU.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Riadó" } } - diff --git a/src/translations/it_IT.json b/src/translations/it_IT.json index 1b79e7e..a645119 100644 --- a/src/translations/it_IT.json +++ b/src/translations/it_IT.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/ja_JP.json b/src/translations/ja_JP.json index a7e7d8d..ae83540 100644 --- a/src/translations/ja_JP.json +++ b/src/translations/ja_JP.json @@ -414,4 +414,3 @@ "defaultMessage": "ザップアラート" } } - diff --git a/src/translations/ko_KR.json b/src/translations/ko_KR.json index ca2b144..6a8307a 100644 --- a/src/translations/ko_KR.json +++ b/src/translations/ko_KR.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/nl_NL.json b/src/translations/nl_NL.json index e4044ba..b4aa76c 100644 --- a/src/translations/nl_NL.json +++ b/src/translations/nl_NL.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/no_NO.json b/src/translations/no_NO.json index ca2b144..6a8307a 100644 --- a/src/translations/no_NO.json +++ b/src/translations/no_NO.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/pl_PL.json b/src/translations/pl_PL.json index ca2b144..6a8307a 100644 --- a/src/translations/pl_PL.json +++ b/src/translations/pl_PL.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/pt_BR.json b/src/translations/pt_BR.json index b387c65..660cb7f 100644 --- a/src/translations/pt_BR.json +++ b/src/translations/pt_BR.json @@ -414,4 +414,3 @@ "defaultMessage": "Alerta Zap" } } - diff --git a/src/translations/pt_PT.json b/src/translations/pt_PT.json index ca2b144..6a8307a 100644 --- a/src/translations/pt_PT.json +++ b/src/translations/pt_PT.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/ro_RO.json b/src/translations/ro_RO.json index ca2b144..6a8307a 100644 --- a/src/translations/ro_RO.json +++ b/src/translations/ro_RO.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/ru_RU.json b/src/translations/ru_RU.json index dfe0e0c..da22b24 100644 --- a/src/translations/ru_RU.json +++ b/src/translations/ru_RU.json @@ -414,4 +414,3 @@ "defaultMessage": "Оповещение о запе" } } - diff --git a/src/translations/sr_SP.json b/src/translations/sr_SP.json index ca2b144..6a8307a 100644 --- a/src/translations/sr_SP.json +++ b/src/translations/sr_SP.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/sv_SE.json b/src/translations/sv_SE.json index 76b23ac..751df11 100644 --- a/src/translations/sv_SE.json +++ b/src/translations/sv_SE.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/sw_KE.json b/src/translations/sw_KE.json index 9622090..344759c 100644 --- a/src/translations/sw_KE.json +++ b/src/translations/sw_KE.json @@ -414,4 +414,3 @@ "defaultMessage": "Tahadhari ya Zap" } } - diff --git a/src/translations/th_TH.json b/src/translations/th_TH.json index 6f35888..53dd290 100644 --- a/src/translations/th_TH.json +++ b/src/translations/th_TH.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/tr_TR.json b/src/translations/tr_TR.json index ca2b144..6a8307a 100644 --- a/src/translations/tr_TR.json +++ b/src/translations/tr_TR.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/uk_UA.json b/src/translations/uk_UA.json index ca2b144..6a8307a 100644 --- a/src/translations/uk_UA.json +++ b/src/translations/uk_UA.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/vi_VN.json b/src/translations/vi_VN.json index ca2b144..6a8307a 100644 --- a/src/translations/vi_VN.json +++ b/src/translations/vi_VN.json @@ -414,4 +414,3 @@ "defaultMessage": "Zap Alert" } } - diff --git a/src/translations/zh_CN.json b/src/translations/zh_CN.json index 4da3d36..694a14b 100644 --- a/src/translations/zh_CN.json +++ b/src/translations/zh_CN.json @@ -414,4 +414,3 @@ "defaultMessage": "打闪提示" } } - diff --git a/src/translations/zh_TW.json b/src/translations/zh_TW.json index 59a387e..8c7eaab 100644 --- a/src/translations/zh_TW.json +++ b/src/translations/zh_TW.json @@ -414,4 +414,3 @@ "defaultMessage": "打閃提示" } } -