             [tab
              {:icon                icon
               :label               title
-              :on-press            #(let [view-id (navigation/get-index-route-name route-index (bean state))]
-                                      (re-frame/dispatch-sync [:screens/tab-will-change view-id])
-                                      (reagent/flush)
-                                      (navigate (name nav-stack)))
+              :on-press            #(if (= (str index) (str route-index))
+                                      (popToTop)
+                                      (let [view-id (navigation/get-index-route-name route-index (bean state))]
+                                        (re-frame/dispatch-sync [:screens/tab-will-change view-id])
+                                        (reagent/flush)
+                                        (navigate (name nav-stack))))
               :accessibility-label accessibility-label
               :count-subscription  count-subscription
               :active?             (= (str index) (str route-index))

(def tabs
  (reagent/adapt-react-class
   (fn [props]
     (let [{:keys [navigate index route state]} (bean props)
           {:keys [keyboard-shown]
            :or   {keyboard-shown false}} (when platform/android? (rn/use-keyboard))
           {:keys [bottom]}               (safe-area/use-safe-area)
           animated-visible               (animated/use-timing-transition
                                           (main-tab? (keyword route))
                                           {:duration 150})
           keyboard-visible               (animated/use-timing-transition
                                           keyboard-shown
                                           {:duration 200})]
       (reagent/as-element
        [animated/view {:style          (tabs.styles/tabs-wrapper keyboard-shown keyboard-visible)
                        :pointer-events (if keyboard-shown "none" "auto")}


(defn tabbar [props]
  (let [navigate (oget props "navigation" "navigate")
        pop-to-top (oget props "navigation" "popToTop")
        state (bean (oget props "state"))
        index (get state :index)]
    (reagent/as-element
     [tabs {:navigate navigate
            :state    (oget props "state")
            :popToTop pop-to-top
            :route    (navigation/get-active-route-name state)
            :index    index}])))
