From 8c7949f22be5bd64e2c7e2d545bb9ec8d8cdefce Mon Sep 17 00:00:00 2001 From: Christian Maier Date: Tue, 26 Mar 2024 16:19:58 +0100 Subject: [PATCH 1/4] Add support for pre-filling the PAYONE form --- core/src/main/java/io/snabble/sdk/Snabble.kt | 6 ++++++ .../sdk/payment/data/FormPrefillData.kt | 16 ++++++++++++++ .../sdk/ui/payment/PaymentInputViewHelper.kt | 2 +- .../java/io/snabble/sdk/ui/payment/Payone.kt | 6 ++++-- .../sdk/ui/payment/PayoneInputFragment.kt | 6 +++++- .../snabble/sdk/ui/payment/PayoneInputView.kt | 10 ++++++++- ui/src/main/res/raw/snabble_payoneform.html | 21 +++++++++++++++++++ 7 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 core/src/main/java/io/snabble/sdk/payment/data/FormPrefillData.kt diff --git a/core/src/main/java/io/snabble/sdk/Snabble.kt b/core/src/main/java/io/snabble/sdk/Snabble.kt index 528fbe77a8..65b5493b16 100644 --- a/core/src/main/java/io/snabble/sdk/Snabble.kt +++ b/core/src/main/java/io/snabble/sdk/Snabble.kt @@ -21,6 +21,7 @@ import io.snabble.sdk.customization.IsMergeable import io.snabble.sdk.events.Events import io.snabble.sdk.extensions.getPackageInfoCompat import io.snabble.sdk.payment.PaymentCredentialsStore +import io.snabble.sdk.payment.data.FormPrefillData import io.snabble.sdk.utils.* import okhttp3.OkHttpClient import java.io.ByteArrayInputStream @@ -313,6 +314,11 @@ object Snabble { */ var isMergeable: IsMergeable? = null + /** + * Set to have PAYONE forms prefilled with the given data. + */ + var formPrefillData: FormPrefillData? = null + /** * Setup the snabble SDK. * diff --git a/core/src/main/java/io/snabble/sdk/payment/data/FormPrefillData.kt b/core/src/main/java/io/snabble/sdk/payment/data/FormPrefillData.kt new file mode 100644 index 0000000000..1f7b5478c4 --- /dev/null +++ b/core/src/main/java/io/snabble/sdk/payment/data/FormPrefillData.kt @@ -0,0 +1,16 @@ +package io.snabble.sdk.payment.data + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class FormPrefillData( + @SerializedName("name") val name: String? = null, + @SerializedName("street") val street: String? = null, + @SerializedName("zip") val zip: String? = null, + @SerializedName("city") val city: String? = null, + @SerializedName("countryCode") val countryCode: String? = null, + @SerializedName("stateCode") val stateCode: String? = null, + @SerializedName("email") val email: String? = null +) : Parcelable diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentInputViewHelper.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentInputViewHelper.kt index a3be77b24d..9358320daf 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentInputViewHelper.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentInputViewHelper.kt @@ -33,7 +33,7 @@ object PaymentInputViewHelper { if (useDatatrans && paymentMethod != null) { Datatrans.registerCard(activity, project, paymentMethod) } else if (usePayone && paymentMethod != null) { - Payone.registerCard(activity, project, paymentMethod) + Payone.registerCard(activity, project, paymentMethod, Snabble.formPrefillData) } else { when (paymentMethod) { PaymentMethod.VISA -> { diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/Payone.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/Payone.kt index c53bce7536..742f66efcb 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/Payone.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/Payone.kt @@ -8,9 +8,9 @@ import com.google.gson.annotations.SerializedName import io.snabble.sdk.PaymentMethod import io.snabble.sdk.Project import io.snabble.sdk.Snabble +import io.snabble.sdk.payment.data.FormPrefillData import io.snabble.sdk.ui.R import io.snabble.sdk.ui.SnabbleUI -import io.snabble.sdk.ui.payment.creditcard.data.CreditCardInfo import io.snabble.sdk.utils.Dispatch import io.snabble.sdk.utils.Logger import io.snabble.sdk.utils.SimpleJsonCallback @@ -72,7 +72,8 @@ object Payone { fun registerCard( activity: FragmentActivity, project: Project, - paymentMethod: PaymentMethod + paymentMethod: PaymentMethod, + formPrefillData: FormPrefillData? ) { val descriptor = project.paymentMethodDescriptors.find { it.paymentMethod == paymentMethod } if (descriptor == null) { @@ -107,6 +108,7 @@ object Payone { args.putString(PayoneInputView.ARG_PROJECT_ID, project.id) args.putSerializable(PayoneInputView.ARG_PAYMENT_TYPE, paymentMethod) args.putParcelable(PayoneInputView.ARG_TOKEN_DATA, response) + args.putParcelable(PayoneInputView.ARG_FORM_PREFILL_DATA, formPrefillData) Dispatch.mainThread { SnabbleUI.executeAction(activity, SnabbleUI.Event.SHOW_PAYONE_INPUT, args) } diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/PayoneInputFragment.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/PayoneInputFragment.kt index d3b859eb2c..96fad7b5d4 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/PayoneInputFragment.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/PayoneInputFragment.kt @@ -3,6 +3,7 @@ package io.snabble.sdk.ui.payment import android.os.Bundle import android.view.View import io.snabble.sdk.PaymentMethod +import io.snabble.sdk.payment.data.FormPrefillData import io.snabble.sdk.ui.BaseFragment import io.snabble.sdk.ui.R import io.snabble.sdk.ui.utils.parcelableExtra @@ -16,11 +17,13 @@ open class PayoneInputFragment : BaseFragment( const val ARG_PROJECT_ID = PayoneInputView.ARG_PROJECT_ID const val ARG_PAYMENT_TYPE = PayoneInputView.ARG_PAYMENT_TYPE const val ARG_TOKEN_DATA = PayoneInputView.ARG_TOKEN_DATA + const val ARG_FORM_PREFILL_DATA = PayoneInputView.ARG_FORM_PREFILL_DATA } private lateinit var projectId: String private lateinit var paymentMethod: PaymentMethod private lateinit var tokenizationData: Payone.PayoneTokenizationData + private var formPrefillData: FormPrefillData? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -28,10 +31,11 @@ open class PayoneInputFragment : BaseFragment( projectId = requireNotNull(arguments?.getString(ARG_PROJECT_ID, null)) paymentMethod = requireNotNull(arguments?.serializableExtra(ARG_PAYMENT_TYPE) as? PaymentMethod) tokenizationData = requireNotNull(arguments?.parcelableExtra(ARG_TOKEN_DATA)) + formPrefillData = arguments?.parcelableExtra(ARG_FORM_PREFILL_DATA) } override fun onActualViewCreated(view: View, savedInstanceState: Bundle?) { view.findViewById(R.id.user_payment_method_view) - .load(projectId, paymentMethod, tokenizationData) + .load(projectId, paymentMethod, tokenizationData, formPrefillData) } } diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/PayoneInputView.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/PayoneInputView.kt index 03a0270e40..027447e873 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/PayoneInputView.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/PayoneInputView.kt @@ -27,6 +27,7 @@ import io.snabble.sdk.PaymentMethod import io.snabble.sdk.Project import io.snabble.sdk.Snabble import io.snabble.sdk.payment.PaymentCredentials +import io.snabble.sdk.payment.data.FormPrefillData import io.snabble.sdk.ui.Keyguard import io.snabble.sdk.ui.R import io.snabble.sdk.ui.SnabbleUI @@ -62,6 +63,7 @@ class PayoneInputView @JvmOverloads constructor(context: Context, attrs: Attribu private lateinit var project: Project private lateinit var tokenizationData: PayoneTokenizationData private lateinit var threeDHint: TextView + private var formPrefillData: FormPrefillData? = null private var lastPreAuthResponse: Payone.PreAuthResponse? = null private var polling = LazyWorker.createLifeCycleAwareJob(context) { lastPreAuthResponse?.links?.get("preAuthStatus")?.href?.let { statusUrl -> @@ -169,11 +171,13 @@ class PayoneInputView @JvmOverloads constructor(context: Context, attrs: Attribu fun load( projectId: String, paymentType: PaymentMethod, - tokenizationData: PayoneTokenizationData + tokenizationData: PayoneTokenizationData, + formPrefillData: FormPrefillData? ) { this.project = Snabble.projects.first { it.id == projectId } this.paymentType = paymentType this.tokenizationData = tokenizationData + this.formPrefillData = formPrefillData inflateView() } @@ -418,6 +422,9 @@ class PayoneInputView @JvmOverloads constructor(context: Context, attrs: Attribu fun log(message: String?) { Logger.d(message) } + + @JavascriptInterface + fun prefillData(): String = GsonHolder.get().toJson(formPrefillData) } override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { @@ -469,6 +476,7 @@ class PayoneInputView @JvmOverloads constructor(context: Context, attrs: Attribu const val ARG_PROJECT_ID = "projectId" const val ARG_PAYMENT_TYPE = "paymentType" const val ARG_TOKEN_DATA = "tokenData" + const val ARG_FORM_PREFILL_DATA = "formPrefillData" } } diff --git a/ui/src/main/res/raw/snabble_payoneform.html b/ui/src/main/res/raw/snabble_payoneform.html index 8e6fd81c51..f3a73362e6 100644 --- a/ui/src/main/res/raw/snabble_payoneform.html +++ b/ui/src/main/res/raw/snabble_payoneform.html @@ -1109,6 +1109,27 @@ handleCountrySelect(localeCountryCode); } countryOptions(); + +function prefillForm() { + const data = JSON.parse(snabble.prefillData()) + document.getElementById('name').value = data.name || '' + document.getElementById('street').value = data.street || '' + document.getElementById('zip').value = data.zip || '' + document.getElementById('city').value = data.city || '' + document.getElementById('email').value = data.email || '' + + if (typeof data.countryCode !== 'undefined') { + const countrySelect = document.getElementById('countrySelect') + countrySelect.selectedIndex = countries.findIndex(country => country.code == data.countryCode) + 1 + handleCountrySelect(data.countryCode); + + if (typeof data.stateCode !== 'undefined') { + const selectState = document.getElementById('stateSelect') + selectState.selectedIndex = subdivisions[data.countryCode].findIndex(state => state.code == data.stateCode) + 1 + } + } +} +prefillForm() From b930a657d30212421049a8a1e5b9a076ecffe012 Mon Sep 17 00:00:00 2001 From: Christian Maier Date: Tue, 26 Mar 2024 19:58:48 +0100 Subject: [PATCH 2/4] Update CHANGELOG.md --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05d11e28e9..6c0129c6e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,16 @@ All notable changes to this project will be documented in this file. ## UNRELEASED ### Added * ui/ui-toolkit: i18n using the Lokalise +* Autofill support for PAYONE credit card forms ### Changed -* ui: The `ProductResolver.Builder` now requires a project as constructor param, since the default value has been removed ### Removed * ui: Remove phrase for i18n ### Fixed + +## [0.72.5] +### Changed +* ui: The `ProductResolver.Builder` now requires a project as constructor param, since the default value has been removed +### Fixed * core: Handle `SQLiteDatabaseLockedException` to fix app crash when updating the database * ui: Avoid npe caused by `isEmpty()` check on a null shopping cart * ui: Change project reference in `ProductResolver.kt` to get rid of IllegalArgumentException From 99e52a9b11cc011c069292ee711f8ed80932fdca Mon Sep 17 00:00:00 2001 From: Christian Maier Date: Tue, 26 Mar 2024 20:17:17 +0100 Subject: [PATCH 3/4] Add missing strings by adjusted lokalise.sh --- lokalise.sh | 2 +- ui/src/main/res/values-de/strings.xml | 35 +++++++++++++++++++++ ui/src/main/res/values-fr-rCH/strings.xml | 6 +++- ui/src/main/res/values-fr/strings.xml | 35 +++++++++++++++++++++ ui/src/main/res/values-hu/strings.xml | 35 +++++++++++++++++++++ ui/src/main/res/values-it/strings.xml | 4 +++ ui/src/main/res/values-sk/strings.xml | 37 +++++++++++++++++++++++ ui/src/main/res/values/strings.xml | 35 +++++++++++++++++++++ 8 files changed, 187 insertions(+), 2 deletions(-) diff --git a/lokalise.sh b/lokalise.sh index a7168d9d5f..58c1cc9844 100755 --- a/lokalise.sh +++ b/lokalise.sh @@ -17,7 +17,7 @@ function lokalise { } # ui -lokalise 3931709465f04f20a1bc18.55914019 ui/src/main/res --exclude-tags Onboarding,Shop,Scanner +lokalise 3931709465f04f20a1bc18.55914019 ui/src/main/res # ui-toolkit lokalise 3931709465f04f20a1bc18.55914019 ui-toolkit/src/main/res --include-tags Onboarding,Shop,Scanner diff --git a/ui/src/main/res/values-de/strings.xml b/ui/src/main/res/values-de/strings.xml index bf854d77a9..9852b02331 100644 --- a/ui/src/main/res/values-de/strings.xml +++ b/ui/src/main/res/values-de/strings.xml @@ -93,6 +93,10 @@ Ab einem Warenwert von %s stehen nicht mehr alle Zahlungsmethoden zur Verfügung Bitte beachten Dieses Produkt kann derzeit leider nicht mit der App bezahlt werden, bitte bezahle es wie gewohnt an der Kasse. + %s öffnen + Ansehen + Fertig + Weiter Die Zahlung kann jetzt nicht abgebrochen werden. Abbrechen nicht möglich Bei der Verarbeitung deiner Kreditkarte ist ein Fehler aufgetreten @@ -283,6 +287,7 @@ Nicht vergessen! Das Produkt konnte nicht angefragt werden. Bitte überprüfe deine Internetverbindung. Artikel nicht gefunden + Begib dich zu einem Store um den Scanner zu verwenden. + %s Pfand Dein Alter wird einmalig bei der Zahlung überprüft werden. Bitte wiege das Produkt und scanne dann den Barcode auf dem Aufkleber @@ -293,6 +298,36 @@ Licht Für dieses Produkt sind leider keine Preisinformationen verfügbar. Warenkorb aktualisieren + %1$s in %2$s %3$s + Telefonnummer %s + Öffnungszeiten + Jetzt hier einkaufen + Möchten Sie die Navigation starten? + Details + Aktivieren + Du hast die Verwendung von %s deaktiviert. + Anrufen + Vertragspartner + Freitag + Montag + Samstag + Sonntag + Donnerstag + Dienstag + Mittwoch + In %s entfernung + + Keine Filialen + %d Filiale + %d Filialen + + Shops + Sie sind hier + zuklappen + %s zugeklappt + %s aufgeklappt + aufklappen + Shop-Details anzeigen Einkaufen Warenkorb Produkte scannen diff --git a/ui/src/main/res/values-fr-rCH/strings.xml b/ui/src/main/res/values-fr-rCH/strings.xml index ddcad61db8..e923306c4e 100644 --- a/ui/src/main/res/values-fr-rCH/strings.xml +++ b/ui/src/main/res/values-fr-rCH/strings.xml @@ -178,6 +178,11 @@ Lumière Aucune information de prix n’est malheureusement disponible pour ce produit. Actualiser le panier + + No stores + %d succursale + %d succursales + Panier Créer une nouvelle liste d’achats Effacer @@ -198,7 +203,6 @@ Produit inconnu Chercher ou saisir directement Liste d’achats - Update quantity Listes d’achats Ton panier est vide. Scanne les codes-barres des articles que tu souhaites acheter. Commencer un nouvel achat diff --git a/ui/src/main/res/values-fr/strings.xml b/ui/src/main/res/values-fr/strings.xml index f44625a775..807ef06909 100644 --- a/ui/src/main/res/values-fr/strings.xml +++ b/ui/src/main/res/values-fr/strings.xml @@ -81,6 +81,10 @@ Tous les modes de paiement ne sont plus disponibles à partir d\'une valeur de %s. Veuillez noter Ce produit ne peut malheureusement pas être payé avec l\'application pour l\'instant. Veuillez le payer comme d\'habitude à la caisse. + Ouvrir %s + Consulter + Terminé + Continuer Le paiement ne peut pas être annulé maintenant. Annulation impossible Une erreur s\'est produite lors du traitement de votre carte de crédit @@ -229,6 +233,7 @@ Ne pas oublier ! Le produit n\'a pas pu être demandé. Vérifiez votre connexion Internet. Article non trouvé + Visit a store to use the scanner. + %s consigne Votre âge sera vérifié une seule fois lors du paiement. Veuillez peser le produit et scanner le code-barres sur l\'étiquette. @@ -239,6 +244,36 @@ Lumière Désolé, aucune information de prix n\'est disponible pour ce produit. Actualiser le panier d\'achat + %1$s à %2$s %3$s + Numéro de téléphone %s + Heures d\'ouverture + Acheter ici maintenant + Vous souhaitez lancer la navigation ? + Détails + Activer + Tu as désactivé l\'utilisation de %s. + Appeler + Partenaire contractuel + Vendredi + Lundi + Samedi + Dimanche + Jeudi + Mardi + Mercredi + À une distance de %s + + Aucune filiale + Filiale %d + Filiales %d + + Boutiques + Vous êtes ici + fermer + %s fermé + %s ouvert + ouvrir + Afficher les détails de la boutique Acheter Panier d\'achat Scanner le produit diff --git a/ui/src/main/res/values-hu/strings.xml b/ui/src/main/res/values-hu/strings.xml index fa54482836..dfb9c1d885 100644 --- a/ui/src/main/res/values-hu/strings.xml +++ b/ui/src/main/res/values-hu/strings.xml @@ -91,6 +91,10 @@ %s feletti áruértéknél nem áll rendelkezésedre az összes fizetési mód Vedd figyelembe Ezt a terméket jelenleg sajnos nem lehet az alkalmazással kifizetni. Kérlek, fizesd a szokásos módon a kasszánál. + %s megnyitása + Megtekintés + Kész + Tovább A fizetés megszakítása jelenleg nem lehetséges. A megszakítás nem lehetséges A hitelkártyád feldolgozása során hiba történt @@ -260,6 +264,7 @@ Ne felejtsd el! A terméket nem sikerült lekérdezni. Ellenőrizd az internetkapcsolatot. Termék nem található + A szkenner használatához fáradj be egy üzletbe. + %s betétdíj A fizetésnél egyszeri alkalommal ellenőrizzük a korodat. Kérlek, mérd le a terméket, és utána olvasd be a matricán található vonalkódot @@ -270,6 +275,36 @@ Fény Ehhez a termékhez sajnos nem érhető el árinformáció. Kosár frissítése + %1$s %2$s %3$s-ban + Telefonszám %s + Nyitvatartási idők + Vásárolj be most itt + Szeretnéd elindítani a navigációt? + Részletek + Bekapcsolás + Kikapcsoltad a(z) %s használatát. + Felhívás + Szerződéses partner + Péntek + Hétfő + Szombat + Vasárnap + Csütörtök + Kedd + Szerda + %s távolságban + + Nincsenek üzletek + %d üzlet + %d üzletek + + Üzlet + Itt vagy + összecsukni + %s összecsukva + %s kinyitva + kinyitni + Az üzlet adatainak megjelenítése Bevásárlás Kosár Termékek szkennelése diff --git a/ui/src/main/res/values-it/strings.xml b/ui/src/main/res/values-it/strings.xml index 1f02e906ae..0251d477f3 100644 --- a/ui/src/main/res/values-it/strings.xml +++ b/ui/src/main/res/values-it/strings.xml @@ -138,6 +138,8 @@ Mostra questo codice alla cassa Pagare alla cassa Somma totale: + Non è stato possibile scaricare la ricevuta + Non è stata trovata un’applicazione per leggere i PDF (in caricamento) Non hai ancora fatto acquisti con Snabble Orario @@ -183,6 +185,8 @@ Purtroppo non sono disponibili informazioni di prezzo per questo prodotto. Aggiorna carrello Carrello + Scansiona prodotti + Detta prodotti Crea nuova lista della spesa Cancella Salva diff --git a/ui/src/main/res/values-sk/strings.xml b/ui/src/main/res/values-sk/strings.xml index 9425c480a5..ed32487b77 100644 --- a/ui/src/main/res/values-sk/strings.xml +++ b/ui/src/main/res/values-sk/strings.xml @@ -97,6 +97,10 @@ Nad hodnotu tovaru %s nie sú k dispozícii všetky spôsoby platby Pozor Tento produkt momentálne nie je možné zaplatiť cez aplikáciu. Zaplať ho pri pokladni ako obvykle. + Otvoriť %s + Prezrieť + Hotovo + Ďalej Platba teraz nemôže byť prerušená. Prerušenie nie je možné Pri spracovaní tvojej platobnej karty sa vyskytla chyba @@ -266,6 +270,7 @@ Nezabudni! Produkt nie je možné nájsť. Prosím, skontroluj svoje internetové pripojenie. Položka nebola nájdená + Choď do obchodu a použi skener. + %s záloha Preto bude tvoj vek pri platbe jednorazovo skontrolovaný. Odváž produkt a naskenuj čiarový kód na etikete @@ -276,6 +281,38 @@ Svetlo Informácie o cene tohto produktu nie sú k dispozícii Aktualizovať košík + %1$s v %2$s %3$s + Telefónne číslo %s + Otváracie hodiny + Teraz nakúpiť tu + Chcete zapnúť navigáciu? + Detaily + Aktivovať + Deaktivoval/a si používanie služby %s. + Zavolať + Zmluvný partner + Piatok + Pondelok + Sobota + Nedeľa + Štvrtok + Utorok + Streda + Vo vzdialenosti %s + + Žiadne obchody + %d obchod + %d obchody + %d obchodov + %d obchody/obchodov + + Obchod + Nachádzate sa tu + zatvoriť + %s zatvorený + %s otvorený + otvoriť + Zobraziť detaily obchodu Nakúpiť Košík Skenovanie produktov diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index e24e09332d..59ad985447 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -93,6 +93,10 @@ With a total of more than %s, not all payment methods are available. Note This product cannot be paid for using the app, please pay for it at the cashier. + open %s + Show + Done + Continue Payment cannot be cancelled at this time. Error cancelling payment There was an error processing your credit card @@ -283,6 +287,7 @@ Don\'t forget! Could not retrieve product data. Please check your internet connection. Product not found + Visit a store to use the scanner. + %s deposit Your age will be checked once at the time of payment. Please weigh the product, then scan the barcode from the sticker @@ -293,6 +298,36 @@ Torch No price information available for this product. Update cart + %1$s in %2$s %3$s + Phonenumber %s + Opening hours + Start shopping + Do you like to start navigation? + Details + Activate + You have disabled the use of %s. + Call + Contracting Party + Friday + Monday + Saturday + Sunday + Thursday + Tuesday + Wednesday + In %s + + No stores + %d store + %d stores + + Shop + You are here + collapse + %s collapsed + %s expanded + expand + Show shop details Shopping Shopping Cart Scan products From a214fec6d80484ae1245a44c92fb9736493390f5 Mon Sep 17 00:00:00 2001 From: Christian Maier Date: Thu, 28 Mar 2024 11:16:18 +0100 Subject: [PATCH 4/4] Refactor too fresh css has-selector --- ui/src/main/res/raw/snabble_payoneform.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ui/src/main/res/raw/snabble_payoneform.html b/ui/src/main/res/raw/snabble_payoneform.html index f3a73362e6..04be9f8e61 100644 --- a/ui/src/main/res/raw/snabble_payoneform.html +++ b/ui/src/main/res/raw/snabble_payoneform.html @@ -59,9 +59,6 @@ outline: none; background-color: transparent; } -.form-group:has(select:disabled) { - display: none; -} #submit { margin: 2rem 0; background-color:#07b; @@ -1075,6 +1072,7 @@ const stateSelect = document.getElementById('stateSelect') stateSelect.replaceChildren() stateSelect.disabled = !subdivisions[countryCode] + stateSelect.closest('.form-group').style.display = !subdivisions[countryCode] ? 'none' : 'block' if (!subdivisions[countryCode]) return