Dynamically calculate composer height to adjust the spacing on the bottom of the list (#16235)
* fix: Android auto scrolling to bottom of chat --------- Co-authored-by: Omar Basem <omarbasem.0101@gmail.com>
This commit is contained in:
parent
ea3b090265
commit
f047665f75
|
@ -251,16 +251,18 @@
|
||||||
|
|
||||||
(defn render-fn
|
(defn render-fn
|
||||||
[{:keys [type value content-type] :as message-data} _ _
|
[{:keys [type value content-type] :as message-data} _ _
|
||||||
{:keys [context keyboard-shown?]}]
|
{:keys [context keyboard-shown? insets]}]
|
||||||
;;TODO temporary hide mutual-state-updates https://github.com/status-im/status-mobile/issues/16254
|
;;TODO temporary hide mutual-state-updates https://github.com/status-im/status-mobile/issues/16254
|
||||||
(when (not= content-type constants/content-type-system-mutual-state-update)
|
(when (not= content-type constants/content-type-system-mutual-state-update)
|
||||||
|
(if (= type :header)
|
||||||
|
[list-header insets]
|
||||||
[rn/view
|
[rn/view
|
||||||
(add-inverted-y-android {:background-color (colors/theme-colors colors/white colors/neutral-95)})
|
(add-inverted-y-android {:background-color (colors/theme-colors colors/white colors/neutral-95)})
|
||||||
(if (= type :datemark)
|
(if (= type :datemark)
|
||||||
[quo/divider-date value]
|
[quo/divider-date value]
|
||||||
(if (= content-type constants/content-type-gap)
|
(if (= content-type constants/content-type-gap)
|
||||||
[message.gap/gap message-data]
|
[message.gap/gap message-data]
|
||||||
[message/message message-data context keyboard-shown?]))]))
|
[message/message message-data context keyboard-shown?]))])))
|
||||||
|
|
||||||
(defn scroll-handler
|
(defn scroll-handler
|
||||||
[event scroll-y]
|
[event scroll-y]
|
||||||
|
@ -291,22 +293,21 @@
|
||||||
:ref list-ref
|
:ref list-ref
|
||||||
:header [:<>
|
:header [:<>
|
||||||
(when (= (:chat-type chat) constants/private-group-chat-type)
|
(when (= (:chat-type chat) constants/private-group-chat-type)
|
||||||
[list-group-chat-header chat])
|
[list-group-chat-header chat])]
|
||||||
[list-header insets]]
|
|
||||||
:footer [list-footer
|
:footer [list-footer
|
||||||
{:chat chat
|
{:chat chat
|
||||||
:scroll-y scroll-y
|
:scroll-y scroll-y
|
||||||
:cover-bg-color cover-bg-color
|
:cover-bg-color cover-bg-color
|
||||||
:on-layout footer-on-layout
|
:on-layout footer-on-layout
|
||||||
:shell-animation-complete? shell-animation-complete?}]
|
:shell-animation-complete? shell-animation-complete?}]
|
||||||
:data messages
|
:data (into [{:type :header}] messages)
|
||||||
:render-data {:context context
|
:render-data {:context context
|
||||||
:keyboard-shown? keyboard-shown?}
|
:keyboard-shown? keyboard-shown?
|
||||||
|
:insets insets}
|
||||||
:render-fn render-fn
|
:render-fn render-fn
|
||||||
:on-viewable-items-changed on-viewable-items-changed
|
:on-viewable-items-changed on-viewable-items-changed
|
||||||
:on-end-reached #(list-on-end-reached scroll-y)
|
:on-end-reached #(list-on-end-reached scroll-y)
|
||||||
:on-scroll-to-index-failed identity
|
:on-scroll-to-index-failed identity
|
||||||
:content-container-style {:padding-bottom style/messages-list-bottom-offset}
|
|
||||||
:scroll-indicator-insets {:top (- composer.constants/composer-default-height 16)}
|
:scroll-indicator-insets {:top (- composer.constants/composer-default-height 16)}
|
||||||
:keyboard-dismiss-mode :interactive
|
:keyboard-dismiss-mode :interactive
|
||||||
:keyboard-should-persist-taps :always
|
:keyboard-should-persist-taps :always
|
||||||
|
@ -329,9 +330,6 @@
|
||||||
;;TODO(rasom) https://github.com/facebook/react-native/issues/30034
|
;;TODO(rasom) https://github.com/facebook/react-native/issues/30034
|
||||||
:inverted (when platform/ios? true)
|
:inverted (when platform/ios? true)
|
||||||
:on-layout (fn [e]
|
:on-layout (fn [e]
|
||||||
;; FIXME: this is due to Android not triggering the initial
|
|
||||||
;; scrollTo event
|
|
||||||
(scroll-to-offset 1)
|
|
||||||
(let [layout-height (oops/oget e "nativeEvent.layout.height")]
|
(let [layout-height (oops/oget e "nativeEvent.layout.height")]
|
||||||
(reset! messages-view-height layout-height)))
|
(reset! messages-view-height layout-height)))
|
||||||
:scroll-enabled (not recording?)}]]))
|
:scroll-enabled (not recording?)}]]))
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
[status-im.group-chats.db :as group-chats.db]
|
[status-im.group-chats.db :as group-chats.db]
|
||||||
[status-im.multiaccounts.core :as multiaccounts]
|
[status-im.multiaccounts.core :as multiaccounts]
|
||||||
[status-im2.constants :as constants]
|
[status-im2.constants :as constants]
|
||||||
|
[status-im2.contexts.chat.composer.constants :as composer.constants]
|
||||||
[status-im2.contexts.chat.events :as chat.events]))
|
[status-im2.contexts.chat.events :as chat.events]))
|
||||||
|
|
||||||
(re-frame/reg-sub
|
(re-frame/reg-sub
|
||||||
|
@ -140,6 +141,24 @@
|
||||||
(fn [[chat-id inputs]]
|
(fn [[chat-id inputs]]
|
||||||
(get inputs chat-id)))
|
(get inputs chat-id)))
|
||||||
|
|
||||||
|
(re-frame/reg-sub
|
||||||
|
:chats/composer-height
|
||||||
|
:<- [:chats/current-chat-input]
|
||||||
|
:<- [:chats/link-previews-unfurled]
|
||||||
|
(fn [[{:keys [input-content-height metadata]} link-previews]]
|
||||||
|
(let [{:keys [responding-to-message editing-message sending-image]} metadata]
|
||||||
|
(+ (max composer.constants/input-height input-content-height)
|
||||||
|
(when responding-to-message
|
||||||
|
composer.constants/reply-container-height)
|
||||||
|
(when editing-message
|
||||||
|
composer.constants/edit-container-height)
|
||||||
|
(when (seq sending-image)
|
||||||
|
composer.constants/images-container-height)
|
||||||
|
(when (seq link-previews)
|
||||||
|
composer.constants/links-container-height)
|
||||||
|
composer.constants/bar-container-height
|
||||||
|
composer.constants/actions-container-height))))
|
||||||
|
|
||||||
(re-frame/reg-sub
|
(re-frame/reg-sub
|
||||||
:chats/sending-image
|
:chats/sending-image
|
||||||
:<- [:chats/current-chat-id]
|
:<- [:chats/current-chat-id]
|
||||||
|
|
Loading…
Reference in New Issue