From 2f1af31c3d46ba53344d74c56ab59d08c157694f Mon Sep 17 00:00:00 2001 From: KraXen72 Date: Sat, 22 Jun 2024 19:46:02 +0200 Subject: [PATCH] more work --- minibits.inlang/.gitignore | 1 + minibits.inlang/settings.json | 6 ++++- src/components/MemoInputCard.tsx | 14 +++++++--- src/screens/BackupScreen.tsx | 1 - src/screens/TransferScreen.tsx | 46 +++++++++++++++++--------------- src/services/lnurlService.ts | 22 +++++++-------- 6 files changed, 52 insertions(+), 38 deletions(-) create mode 100644 minibits.inlang/.gitignore diff --git a/minibits.inlang/.gitignore b/minibits.inlang/.gitignore new file mode 100644 index 00000000..5e465967 --- /dev/null +++ b/minibits.inlang/.gitignore @@ -0,0 +1 @@ +cache \ No newline at end of file diff --git a/minibits.inlang/settings.json b/minibits.inlang/settings.json index 2e7f4338..635d6a42 100644 --- a/minibits.inlang/settings.json +++ b/minibits.inlang/settings.json @@ -8,7 +8,7 @@ "modules": [ "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-empty-pattern@latest/dist/index.js", "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-without-source@latest/dist/index.js", - "https://cdn.jsdelivr.net/gh/KraXen72/inlang-t-function-jsx-hybrid-matcher/dist/index.js", + "https://cdn.jsdelivr.net/gh/KraXen72/inlang-t-function-jsx-hybrid-matcher@021003e/dist/index.js", "https://cdn.jsdelivr.net/npm/@inlang/plugin-json@latest/dist/index.js" ], "plugin.inlang.json": { @@ -22,6 +22,10 @@ "preferredTfuncName": "translate", "recognizedTfuncNames": [ "translate" + ], + "recognizedJSXAttributes": [ + "tx", + "subTx" ] } } \ No newline at end of file diff --git a/src/components/MemoInputCard.tsx b/src/components/MemoInputCard.tsx index d7deaeb4..4a8b565b 100644 --- a/src/components/MemoInputCard.tsx +++ b/src/components/MemoInputCard.tsx @@ -10,11 +10,19 @@ interface MemoInputProps { setMemo: (memo: string) => void disabled?: boolean onMemoDone: () => void - onMemoEndEditing: () => void + onMemoEndEditing?: () => void + maxLength?: number } export const MemoInputCard = forwardRef((props, memoInputRef) => { - const {memo, setMemo, disabled = true, onMemoDone, onMemoEndEditing} = props + const { + memo, + setMemo, + disabled = true, + onMemoDone, + onMemoEndEditing = () => {}, + maxLength = 200, + } = props return ( ((props, memoI onEndEditing={onMemoEndEditing} value={`${memo}`} style={$memoInput} - maxLength={200} + maxLength={maxLength} keyboardType="default" selectTextOnFocus={true} placeholder={translate('sendScreen.memo')} diff --git a/src/screens/BackupScreen.tsx b/src/screens/BackupScreen.tsx index 97118fd5..e65e2dde 100644 --- a/src/screens/BackupScreen.tsx +++ b/src/screens/BackupScreen.tsx @@ -4,7 +4,6 @@ import {Switch, TextStyle, View, ViewStyle} from 'react-native' import {colors, spacing, useThemeColor} from '../theme' import {SettingsStackScreenProps} from '../navigation' import { - Icon, ListItem, Screen, Text, diff --git a/src/screens/TransferScreen.tsx b/src/screens/TransferScreen.tsx index 3efffe53..fe4d556c 100644 --- a/src/screens/TransferScreen.tsx +++ b/src/screens/TransferScreen.tsx @@ -51,6 +51,7 @@ import numbro from 'numbro' import { TranItem } from './TranDetailScreen' import useIsInternetReachable from '../utils/useIsInternetReachable' import { translate } from '../i18n' +import { MemoInputCard } from '../components/MemoInputCard' if ( @@ -451,7 +452,7 @@ const onAmountEndEditing = async function () { return; } - if (lnurlPayParams.maxSendable && amount > lnurlPayParams.maxSendable / 1000 ) { + if (lnurlPayParams.maxSendable && amount > lnurlPayParams.maxSendable / 1000) { infoMessage(translate("payCommon.maximumPay", { amount: roundDown(lnurlPayParams.maxSendable / 1000, 0), currency: CurrencyCode.SATS @@ -460,13 +461,13 @@ const onAmountEndEditing = async function () { } if (lnurlPayParams.payerData) { - infoMessage(translate("transferScreen.LUD18unsupported")) + infoMessage(translate("transferScreen.LUD18unsupported")) } setAmountToTransfer(`${numbro(amountToTransfer).format({thousandSeparated: true, mantissa: getCurrency(unit).mantissa})}`) setIsLoading(true) - const encoded = await LnurlClient.getInvoice(lnurlPayParams, amount * 1000) + const encoded = await LnurlClient.getInvoice(lnurlPayParams, amount * 1000, lnurlPayCommentAllowed > 0 ? lnurlPaymentComment : void 0) setIsLoading(false) if (encoded) return onEncodedInvoice(encoded); @@ -579,6 +580,17 @@ const iconColor = useThemeColor('textDim') const inputBg = useThemeColor('background') const satsColor = colors.palette.primary200 +const memoInputRef = useRef(null) +const onMemoDone = function () { + console.log(lnurlPayParams) + if (parseInt(amountToTransfer) > 0) { + if (memoInputRef && memoInputRef.current) memoInputRef.current.blur(); + if (amountInputRef && amountInputRef.current) amountInputRef.current.blur(); + } else { + if (amountInputRef && amountInputRef.current) amountInputRef.current.focus(); + } +} + return ( )} - {transactionStatus !== TransactionStatus.COMPLETED && encodedInvoice && - lnurlPayCommentAllowed > 0 && ( - setLnurlPaymentComment(data)} - value={lnurlPaymentComment} - autoCapitalize="none" - keyboardType="default" - maxLength={lnurlPayCommentAllowed} - numberOfLines={3} - multiline={true} - selectTextOnFocus={true} - style={[$commentInput, {backgroundColor: inputBg}]} - /> - } + {lnurlPayCommentAllowed > 0 && ( + )} {availableMintBalances.length > 0 && diff --git a/src/services/lnurlService.ts b/src/services/lnurlService.ts index 88805bf1..04b2e32e 100644 --- a/src/services/lnurlService.ts +++ b/src/services/lnurlService.ts @@ -123,27 +123,27 @@ const getLnurlAddressParams = async (lnurlAddress: string) => { -const getInvoice = async(lnurlParams: LNURLPayParams, amountMsat?: number) => { +const getInvoice = async (lnurlParams: LNURLPayParams, amountMsat?: number, comment?: string) => { + if (!amountMsat || amountMsat === 0) { amountMsat = lnurlParams.minSendable } - if(!amountMsat || amountMsat === 0) { - amountMsat = lnurlParams.minSendable - } - - const url = lnurlParams.callback.includes('?') ? `${lnurlParams.callback}&amount=${amountMsat}` : `${lnurlParams.callback}?amount=${amountMsat}` + const url = new URL(lnurlParams.callback) + url.searchParams.set('amount', amountMsat.toString()) + if (comment) url.searchParams.set('comment', comment) + const strUrl = url.toString() const method = 'GET' const headers = MinibitsClient.getPublicHeaders() - const invoiceResult: any = await MinibitsClient.fetchApi(url, { - method, - headers, + const invoiceResult: any = await MinibitsClient.fetchApi(strUrl, { + method, + headers, }) if(invoiceResult.status && invoiceResult.status === 'ERROR') { - throw new AppError(Err.CONNECTION_ERROR, invoiceResult.reason, {domain: lnurlParams.domain, caller: 'getLnurlParams'}) + throw new AppError(Err.CONNECTION_ERROR, invoiceResult.reason, {domain: lnurlParams.domain, caller: 'getLnurlParams'}) } if(invoiceResult.pr) { - return invoiceResult.pr as string + return invoiceResult.pr as string } throw new AppError(Err.CONNECTION_ERROR, 'Could not get lightning invoice from the LNURL provider', {domain: lnurlParams.domain, caller: 'getLnurlParams'})