|
1 | 1 | (ns status-im.navigation.core
|
2 | 2 | (:require
|
3 | 3 | ["react-native" :as rn]
|
| 4 | + [clojure.set :as clojure.set] |
4 | 5 | ["react-native-gesture-handler" :refer (gestureHandlerRootHOC)]
|
5 | 6 | ["react-native-navigation" :refer (Navigation)]
|
6 | 7 | [quo.components.text-input :as quo.text-input]
|
|
157 | 158 | (.registerComponentDidDisappearListener
|
158 | 159 | (.events Navigation)
|
159 | 160 | (fn [^js evn]
|
160 |
| - (when-not (#{"popover" "bottom-sheet" "signing-sheet" "visibility-status-popover"} |
161 |
| - (.-componentName evn)) |
162 |
| - (doseq [[_ {:keys [ref value]}] @quo.text-input/text-input-refs] |
163 |
| - (.setNativeProps ^js ref (clj->js {:text value}))) |
164 |
| - (doseq [[^js text-input default-value] @react/text-input-refs] |
165 |
| - (.setNativeProps text-input (clj->js {:text default-value}))))))) |
| 161 | + (let [view-id (keyword (.-componentName evn))] |
| 162 | + (when-not (#{"popover" "bottom-sheet" "signing-sheet" "visibility-status-popover"} |
| 163 | + (.-componentName evn)) |
| 164 | + (re-frame/dispatch [::view-disappeared view-id]) |
| 165 | + (doseq [[_ {:keys [ref value]}] @quo.text-input/text-input-refs] |
| 166 | + (.setNativeProps ^js ref (clj->js {:text value}))) |
| 167 | + (doseq [[^js text-input default-value] @react/text-input-refs] |
| 168 | + (.setNativeProps text-input (clj->js {:text default-value})))))))) |
166 | 169 |
|
167 | 170 | ;; SET ROOT
|
168 | 171 | (re-frame/reg-fx
|
|
277 | 280 | (.registerBottomTabSelectedListener
|
278 | 281 | (.events Navigation)
|
279 | 282 | (fn [^js evn]
|
280 |
| - (let [comp (get tab-root-ids (.-selectedTabIndex evn))] |
| 283 | + (let [selected-tab-index (.-selectedTabIndex evn) |
| 284 | + comp (get tab-root-ids selected-tab-index) |
| 285 | + tab-key (get (clojure.set/map-invert tab-key-idx) selected-tab-index)] |
| 286 | + (re-frame/dispatch [:set :current-tab tab-key]) |
281 | 287 | (when (and platform/android? (= @root-comp-id comp))
|
282 | 288 | (.popToRoot Navigation (name comp)))
|
283 | 289 | (reset! root-comp-id comp)))))
|
|
377 | 383 | (log/debug :navigate-replace-fx view-id)
|
378 | 384 | (.pop Navigation (name @root-comp-id))
|
379 | 385 | (navigate view-id)))
|
| 386 | + |
| 387 | +(def community-screens '(:community-management |
| 388 | + :community-members |
| 389 | + :community-requests-to-join |
| 390 | + :create-community-channel |
| 391 | + :community-emoji-thumbnail-picker |
| 392 | + :create-community-category |
| 393 | + :community-edit-chats)) |
| 394 | + |
| 395 | +;; change view-id if it is still same after component is disappeared |
| 396 | +;; https://github.com/wix/react-native-navigation/issues/5744#issuecomment-563226820 |
| 397 | +(fx/defn view-disappeared |
| 398 | + {:events [::view-disappeared]} |
| 399 | + [{:keys [db]} view-id] |
| 400 | + (when (= view-id (:view-id db)) |
| 401 | + {:db (assoc db :view-id (cond |
| 402 | + (= view-id :community-emoji-thumbnail-picker) |
| 403 | + :create-community-channel |
| 404 | + |
| 405 | + (some #(= view-id %) community-screens) |
| 406 | + :community |
| 407 | + |
| 408 | + :else |
| 409 | + :home))})) |
0 commit comments