Clear text input on blur

Fixes #10237

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
This commit is contained in:
Gheorghe Pinzaru 2020-03-31 10:07:42 +03:00
parent 9e5cc74ea9
commit 12bcd79c2c
No known key found for this signature in database
GPG Key ID: C9A094959935A952
2 changed files with 17 additions and 1 deletions

View File

@ -18,6 +18,7 @@
(def use-focus-effect (oget native "useFocusEffect"))
(def use-callback (oget js-dependencies/react "useCallback"))
(def use-effect (oget js-dependencies/react "useEffect"))
(def add-back-handler-listener (oget js-dependencies/back-handler "addEventListener"))
(def remove-back-handler-listener (oget js-dependencies/back-handler "removeEventListener"))
@ -46,6 +47,17 @@
(remove-back-handler-listener "hardwareBackPress" on-back-press))))
#js [])))
(defn handle-on-screen-blur [navigation]
(use-effect
(fn []
(ocall navigation "addListener" "blur"
(fn []
;; Reset currently mounted text inputs to their default values
;; on navigating away; this is a privacy measure
(doseq [[text-input default-value] @react/text-input-refs]
(.setNativeProps text-input (clj->js {:text default-value}))))))
#js [navigation]))
(defn wrapped-screen-style [{:keys [insets style]} insets-obj]
(merge
{:background-color colors/white
@ -70,6 +82,8 @@
(defn wrap-screen [{:keys [component] :as options}]
(assoc options :component
(fn [props]
(handle-on-screen-blur
(oget props "navigation"))
(handle-on-screen-focus options)
(let [props' (js->clj props :keywordize-keys true)
focused? (oget props "navigation" "isFocused")]

View File

@ -59,7 +59,9 @@
(def back-handler #js {:addEventListener identity
:removeEventListener identity})
(def react #js {:useCallback nil})
(def react #js {:useCallback nil
:useEffect nil
:useRef nil})
(def react-navigation-native #js {:NavigationContainer #js {}
:useFocusEffect identity
:CommonActions #js {}