From f36d642ec8fd3614aecb3b4c6096e103b9cf056e Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 4 May 2022 13:05:54 +0600 Subject: [PATCH] sendDataOrWorkWithQueryId --- CHANGELOG.md | 1 + .../dev/inmo/tgbotapi/webapps/SendData.kt | 23 +++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50bdf79304..fe957764ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * `WebApps`: * `WebAppInitData#queryId` now have correct js name of field + * New function `sendDataOrWorkWithQueryId` ## 0.38.20 diff --git a/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/SendData.kt b/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/SendData.kt index 5f469cfd0f..bd6ebb191f 100644 --- a/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/SendData.kt +++ b/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/SendData.kt @@ -8,11 +8,26 @@ import dev.inmo.tgbotapi.types.WebAppQueryId * that callback. Before and after calling of this callback will not be used any method of answering to the telegram * system, so, you must use something like [answerWebAppQuery] by yourself to send the result */ -inline fun handleResult( +inline fun sendDataOrWorkWithQueryId( onSendData: () -> String?, onAnswerWebAppQuery: (WebAppQueryId) -> Unit ) { - webApp.initDataUnsafe.queryId ?.let { - onAnswerWebAppQuery(it) - } ?: webApp.sendData(onSendData() ?: return) + val queryId = webApp.initDataUnsafe.queryId + + if (queryId == null) { + webApp.sendData(onSendData() ?: return) + } else { + onAnswerWebAppQuery(queryId) + } } + +/** + * @param onSendData Should return the data which must be used in [WebApp.sendData]. If returns null, data will not be sent + * @param onAnswerWebAppQuery In case if [WebAppInitData.queryId] is presented in [WebApp.initDataUnsafe], will be called + * that callback. Before and after calling of this callback will not be used any method of answering to the telegram + * system, so, you must use something like [answerWebAppQuery] by yourself to send the result + */ +inline fun handleResult( + onSendData: () -> String?, + onAnswerWebAppQuery: (WebAppQueryId) -> Unit +) = sendDataOrWorkWithQueryId(onSendData, onAnswerWebAppQuery)