Organize composer worklets (#18528)
This commit is contained in:
parent
a2bf23cc12
commit
248996ce6f
|
@ -1,92 +0,0 @@
|
||||||
import { useDerivedValue, withTiming, interpolate, useAnimatedScrollHandler, runOnJS } from 'react-native-reanimated';
|
|
||||||
|
|
||||||
export function navigationHeaderOpacity(distanceFromListTop, isAllLoaded, isCalculationsComplete, startPosition) {
|
|
||||||
return useDerivedValue(function () {
|
|
||||||
'worklet';
|
|
||||||
const isCalculationsCompleteValue = isCalculationsComplete.value;
|
|
||||||
if (distanceFromListTop.value < startPosition && isAllLoaded.value) {
|
|
||||||
return isCalculationsCompleteValue ? withTiming(0) : 0;
|
|
||||||
} else {
|
|
||||||
return isCalculationsCompleteValue ? withTiming(1) : 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function navigationHeaderPosition(distanceFromListTop, isAllLoaded, topBarHeight, startPosition) {
|
|
||||||
return useDerivedValue(function () {
|
|
||||||
'worklet';
|
|
||||||
return distanceFromListTop.value < startPosition && isAllLoaded.value ? withTiming(topBarHeight) : withTiming(0);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function interpolateNavigationViewOpacity(props) {
|
|
||||||
return useDerivedValue(function () {
|
|
||||||
'worklet';
|
|
||||||
const {
|
|
||||||
'all-loaded?': isAllLoaded,
|
|
||||||
'end-position': endPosition,
|
|
||||||
'start-position': startPosition,
|
|
||||||
'distance-from-list-top': distanceFromListTop,
|
|
||||||
} = props;
|
|
||||||
if (isAllLoaded.value) {
|
|
||||||
return interpolate(distanceFromListTop.value, [startPosition, endPosition], [0, 1], {
|
|
||||||
extrapolateLeft: 'clamp',
|
|
||||||
extrapolateRight: 'clamp',
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function messagesListOnScroll(distanceFromListTop, chatListScrollY, callback) {
|
|
||||||
return function (event) {
|
|
||||||
'worklet';
|
|
||||||
const currentY = event.contentOffset.y;
|
|
||||||
const layoutHeight = event.layoutMeasurement.height;
|
|
||||||
const contentSizeY = event.contentSize.height - layoutHeight;
|
|
||||||
const newDistance = contentSizeY - currentY;
|
|
||||||
distanceFromListTop.value = newDistance;
|
|
||||||
chatListScrollY.value = currentY;
|
|
||||||
runOnJS(callback)(layoutHeight, newDistance);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function placeholderOpacity(isCalculationsComplete) {
|
|
||||||
return useDerivedValue(function () {
|
|
||||||
'worklet';
|
|
||||||
return isCalculationsComplete.value ? 0 : 1;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function placeholderZIndex(isCalculationsComplete) {
|
|
||||||
return useDerivedValue(function () {
|
|
||||||
'worklet';
|
|
||||||
return isCalculationsComplete.value ? 0 : 2;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function scrollDownButtonOpacity(chatListScrollY, isComposerFocused, windowHeight) {
|
|
||||||
return useDerivedValue(function () {
|
|
||||||
'worklet';
|
|
||||||
if (isComposerFocused.value) {
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
return chatListScrollY.value > windowHeight * 0.75 ? 1 : 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function jumpToButtonOpacity(scrollDownButtonOpacity, isComposerFocused) {
|
|
||||||
return useDerivedValue(function () {
|
|
||||||
'worklet';
|
|
||||||
return withTiming(scrollDownButtonOpacity.value == 1 || isComposerFocused.value ? 0 : 1);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function jumpToButtonPosition(scrollDownButtonOpacity, isComposerFocused) {
|
|
||||||
return useDerivedValue(function () {
|
|
||||||
'worklet';
|
|
||||||
return withTiming(scrollDownButtonOpacity.value == 1 || isComposerFocused.value ? 35 : 0);
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
import { useDerivedValue, withTiming } from 'react-native-reanimated';
|
||||||
|
|
||||||
|
export function scrollDownButtonOpacity(chatListScrollY, isComposerFocused, windowHeight) {
|
||||||
|
return useDerivedValue(function () {
|
||||||
|
'worklet';
|
||||||
|
if (isComposerFocused.value) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return chatListScrollY.value > windowHeight * 0.75 ? 1 : 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function jumpToButtonOpacity(scrollDownButtonOpacity, isComposerFocused) {
|
||||||
|
return useDerivedValue(function () {
|
||||||
|
'worklet';
|
||||||
|
return withTiming(scrollDownButtonOpacity.value == 1 || isComposerFocused.value ? 0 : 1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function jumpToButtonPosition(scrollDownButtonOpacity, isComposerFocused) {
|
||||||
|
return useDerivedValue(function () {
|
||||||
|
'worklet';
|
||||||
|
return withTiming(scrollDownButtonOpacity.value == 1 || isComposerFocused.value ? 35 : 0);
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { withTiming, runOnJS } from 'react-native-reanimated';
|
||||||
|
|
||||||
|
export function messagesListOnScroll(distanceFromListTop, chatListScrollY, callback) {
|
||||||
|
return function (event) {
|
||||||
|
'worklet';
|
||||||
|
const currentY = event.contentOffset.y;
|
||||||
|
const layoutHeight = event.layoutMeasurement.height;
|
||||||
|
const contentSizeY = event.contentSize.height - layoutHeight;
|
||||||
|
const newDistance = contentSizeY - currentY;
|
||||||
|
distanceFromListTop.value = newDistance;
|
||||||
|
chatListScrollY.value = currentY;
|
||||||
|
runOnJS(callback)(layoutHeight, newDistance);
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
import { useDerivedValue, withTiming, interpolate } from 'react-native-reanimated';
|
||||||
|
|
||||||
|
export function navigationHeaderOpacity(distanceFromListTop, isAllLoaded, isCalculationsComplete, startPosition) {
|
||||||
|
return useDerivedValue(function () {
|
||||||
|
'worklet';
|
||||||
|
const isCalculationsCompleteValue = isCalculationsComplete.value;
|
||||||
|
if (distanceFromListTop.value < startPosition && isAllLoaded.value) {
|
||||||
|
return isCalculationsCompleteValue ? withTiming(0) : 0;
|
||||||
|
} else {
|
||||||
|
return isCalculationsCompleteValue ? withTiming(1) : 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function navigationHeaderPosition(distanceFromListTop, isAllLoaded, topBarHeight, startPosition) {
|
||||||
|
return useDerivedValue(function () {
|
||||||
|
'worklet';
|
||||||
|
return distanceFromListTop.value < startPosition && isAllLoaded.value ? withTiming(topBarHeight) : withTiming(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function interpolateNavigationViewOpacity(props) {
|
||||||
|
return useDerivedValue(function () {
|
||||||
|
'worklet';
|
||||||
|
const {
|
||||||
|
'all-loaded?': isAllLoaded,
|
||||||
|
'end-position': endPosition,
|
||||||
|
'start-position': startPosition,
|
||||||
|
'distance-from-list-top': distanceFromListTop,
|
||||||
|
} = props;
|
||||||
|
if (isAllLoaded.value) {
|
||||||
|
return interpolate(distanceFromListTop.value, [startPosition, endPosition], [0, 1], {
|
||||||
|
extrapolateLeft: 'clamp',
|
||||||
|
extrapolateRight: 'clamp',
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { useDerivedValue } from 'react-native-reanimated';
|
||||||
|
|
||||||
|
export function placeholderOpacity(isCalculationsComplete) {
|
||||||
|
return useDerivedValue(function () {
|
||||||
|
'worklet';
|
||||||
|
return isCalculationsComplete.value ? 0 : 1;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function placeholderZIndex(isCalculationsComplete) {
|
||||||
|
return useDerivedValue(function () {
|
||||||
|
'worklet';
|
||||||
|
return isCalculationsComplete.value ? 0 : 2;
|
||||||
|
});
|
||||||
|
}
|
|
@ -377,81 +377,88 @@
|
||||||
(defn mock
|
(defn mock
|
||||||
[module]
|
[module]
|
||||||
(case module
|
(case module
|
||||||
"react-native-languages" react-native-languages
|
"react-native-languages" react-native-languages
|
||||||
"react-native-background-timer" background-timer
|
"react-native-background-timer" background-timer
|
||||||
"react-native-image-crop-picker" image-crop-picker
|
"react-native-image-crop-picker" image-crop-picker
|
||||||
"react-native-gesture-handler" react-native-gesture-handler
|
"react-native-gesture-handler" react-native-gesture-handler
|
||||||
"react-native-static-safe-area-insets" react-native-static-safe-area-insets
|
"react-native-static-safe-area-insets" react-native-static-safe-area-insets
|
||||||
"react-native-config" config
|
"react-native-config" config
|
||||||
"react-native-iphone-x-helper" (clj->js {:getStatusBarHeight (fn [])
|
"react-native-iphone-x-helper" (clj->js {:getStatusBarHeight (fn [])
|
||||||
:getBottomSpace (fn [])})
|
:getBottomSpace (fn [])})
|
||||||
"react-native-screens" (clj->js {})
|
"react-native-screens" (clj->js {})
|
||||||
"react-native-reanimated" react-native-reanimated
|
"react-native-reanimated" react-native-reanimated
|
||||||
"react-native-redash" react-native-redash
|
"react-native-redash" react-native-redash
|
||||||
"react-native-fetch-polyfill" fetch
|
"react-native-fetch-polyfill" fetch
|
||||||
"react-native-status-keycard" status-keycard
|
"react-native-status-keycard" status-keycard
|
||||||
"react-native-keychain" keychain
|
"react-native-keychain" keychain
|
||||||
"react-native-touch-id" touchid
|
"react-native-touch-id" touchid
|
||||||
"@react-native-community/netinfo" net-info
|
"@react-native-community/netinfo" net-info
|
||||||
"react-native-dialogs" dialogs
|
"react-native-dialogs" dialogs
|
||||||
"react-native" react-native
|
"react-native" react-native
|
||||||
"react-native-fs" fs
|
"react-native-fs" fs
|
||||||
"react-native-mail" react-native-mail
|
"react-native-mail" react-native-mail
|
||||||
"react-native-image-resizer" image-resizer
|
"react-native-image-resizer" image-resizer
|
||||||
"react-native-haptic-feedback" react-native-haptic-feedback
|
"react-native-haptic-feedback" react-native-haptic-feedback
|
||||||
"react-native-device-info" react-native-device-info
|
"react-native-device-info" react-native-device-info
|
||||||
"react-native-push-notification" react-native-push-notification
|
"react-native-push-notification" react-native-push-notification
|
||||||
"react-native-linear-gradient" react-native-gradien
|
"react-native-linear-gradient" react-native-gradien
|
||||||
"@react-native-community/masked-view" masked-view
|
"@react-native-community/masked-view" masked-view
|
||||||
"react-native-blob-util" react-native-blob-util
|
"react-native-blob-util" react-native-blob-util
|
||||||
"react-native-navigation" react-native-navigation
|
"react-native-navigation" react-native-navigation
|
||||||
"@react-native-community/push-notification-ios" push-notification-ios
|
"@react-native-community/push-notification-ios" push-notification-ios
|
||||||
"@react-native-community/blur" react-native-blur
|
"@react-native-community/blur" react-native-blur
|
||||||
"@react-native-camera-roll/camera-roll" react-native-camera-roll
|
"@react-native-camera-roll/camera-roll" react-native-camera-roll
|
||||||
"react-native-camera-kit" react-native-camera-kit
|
"react-native-camera-kit" react-native-camera-kit
|
||||||
"react-native-permissions" react-native-permissions
|
"react-native-permissions" react-native-permissions
|
||||||
"rn-emoji-keyboard" rn-emoji-keyboard
|
"rn-emoji-keyboard" rn-emoji-keyboard
|
||||||
"react-native-hole-view" react-native-hole-view
|
"react-native-hole-view" react-native-hole-view
|
||||||
"react-native-draggable-flatlist" react-native-draggable-flatlist
|
"react-native-draggable-flatlist" react-native-draggable-flatlist
|
||||||
"react-native-webview" react-native-webview
|
"react-native-webview" react-native-webview
|
||||||
"@react-native-community/audio-toolkit" react-native-audio-toolkit
|
"@react-native-community/audio-toolkit" react-native-audio-toolkit
|
||||||
"react-native-image-viewing" react-native-image-viewing
|
"react-native-image-viewing" react-native-image-viewing
|
||||||
"react-native-share" react-native-share
|
"react-native-share" react-native-share
|
||||||
"@react-native-async-storage/async-storage" async-storage
|
"@react-native-async-storage/async-storage" async-storage
|
||||||
"react-native-svg" react-native-svg
|
"react-native-svg" react-native-svg
|
||||||
"react-native-transparent-video" react-native-transparent-video
|
"react-native-transparent-video" react-native-transparent-video
|
||||||
"react-native-orientation-locker" react-native-orientation-locker
|
"react-native-orientation-locker" react-native-orientation-locker
|
||||||
"react-native-gifted-charts" react-native-gifted-charts
|
"react-native-gifted-charts" react-native-gifted-charts
|
||||||
"../resources/data/emojis/en.json" (js/JSON.parse (slurp
|
"../resources/data/emojis/en.json" (js/JSON.parse
|
||||||
"./resources/data/emojis/en.json"))
|
(slurp
|
||||||
"../src/js/worklets/core.js" worklet-factory
|
"./resources/data/emojis/en.json"))
|
||||||
"../src/js/worklets/shell/bottom_tabs.js" #js {}
|
"../src/js/worklets/core.js" worklet-factory
|
||||||
"../src/js/worklets/shell/home_stack.js" #js {}
|
"../src/js/worklets/shell/bottom_tabs.js" #js {}
|
||||||
"../src/js/worklets/shell/floating_screen.js" #js {}
|
"../src/js/worklets/shell/home_stack.js" #js {}
|
||||||
"../src/js/worklets/bottom_sheet.js" #js {}
|
"../src/js/worklets/shell/floating_screen.js" #js {}
|
||||||
"../src/js/worklets/record_audio.js" #js {}
|
"../src/js/worklets/bottom_sheet.js" #js {}
|
||||||
"../src/js/worklets/scroll_view.js" #js {}
|
"../src/js/worklets/record_audio.js" #js {}
|
||||||
"../src/js/worklets/onboarding_carousel.js" #js {}
|
"../src/js/worklets/scroll_view.js" #js {}
|
||||||
"../src/js/worklets/chat/lightbox.js" #js {}
|
"../src/js/worklets/onboarding_carousel.js" #js {}
|
||||||
"../src/js/worklets/chat/messages.js" #js {}
|
"../src/js/worklets/chat/messenger/lightbox.js" #js {}
|
||||||
"../src/js/worklets/parallax.js" #js {}
|
"../src/js/worklets/chat/messenger/messages.js" #js {}
|
||||||
"../src/js/worklets/identifiers_highlighting.js" #js {}
|
"../src/js/worklets/chat/messenger/navigation.js" #js {}
|
||||||
"./fleets.js" default-fleets
|
"../src/js/worklets/chat/messenger/composer.js" #js {}
|
||||||
"../translations/ar.json" (js/JSON.parse (slurp "./translations/ar.json"))
|
"../src/js/worklets/chat/messenger/placeholder.js" #js {}
|
||||||
"../translations/de.json" (js/JSON.parse (slurp "./translations/de.json"))
|
"../src/js/worklets/parallax.js" #js {}
|
||||||
"../translations/en.json" (js/JSON.parse (slurp "./translations/en.json"))
|
"../src/js/worklets/identifiers_highlighting.js" #js {}
|
||||||
"../translations/es.json" (js/JSON.parse (slurp "./translations/es.json"))
|
"./fleets.js" default-fleets
|
||||||
"../translations/es_419.json" (js/JSON.parse (slurp "./translations/es_419.json"))
|
"../translations/ar.json" (js/JSON.parse (slurp "./translations/ar.json"))
|
||||||
"../translations/fil.json" (js/JSON.parse (slurp "./translations/fil.json"))
|
"../translations/de.json" (js/JSON.parse (slurp "./translations/de.json"))
|
||||||
"../translations/fr.json" (js/JSON.parse (slurp "./translations/fr.json"))
|
"../translations/en.json" (js/JSON.parse (slurp "./translations/en.json"))
|
||||||
"../translations/id.json" (js/JSON.parse (slurp "./translations/id.json"))
|
"../translations/es.json" (js/JSON.parse (slurp "./translations/es.json"))
|
||||||
"../translations/it.json" (js/JSON.parse (slurp "./translations/it.json"))
|
"../translations/es_419.json" (js/JSON.parse (slurp
|
||||||
"../translations/ko.json" (js/JSON.parse (slurp "./translations/ko.json"))
|
"./translations/es_419.json"))
|
||||||
"../translations/pt_BR.json" (js/JSON.parse (slurp "./translations/pt_BR.json"))
|
"../translations/fil.json" (js/JSON.parse (slurp "./translations/fil.json"))
|
||||||
"../translations/ru.json" (js/JSON.parse (slurp "./translations/ru.json"))
|
"../translations/fr.json" (js/JSON.parse (slurp "./translations/fr.json"))
|
||||||
"../translations/tr.json" (js/JSON.parse (slurp "./translations/tr.json"))
|
"../translations/id.json" (js/JSON.parse (slurp "./translations/id.json"))
|
||||||
"../translations/zh.json" (js/JSON.parse (slurp "./translations/zh.json"))
|
"../translations/it.json" (js/JSON.parse (slurp "./translations/it.json"))
|
||||||
"../translations/zh_hant.json" (js/JSON.parse (slurp
|
"../translations/ko.json" (js/JSON.parse (slurp "./translations/ko.json"))
|
||||||
"./translations/zh_hant.json"))
|
"../translations/pt_BR.json" (js/JSON.parse (slurp
|
||||||
"../translations/zh_TW.json" (js/JSON.parse (slurp "./translations/zh_TW.json"))
|
"./translations/pt_BR.json"))
|
||||||
|
"../translations/ru.json" (js/JSON.parse (slurp "./translations/ru.json"))
|
||||||
|
"../translations/tr.json" (js/JSON.parse (slurp "./translations/tr.json"))
|
||||||
|
"../translations/zh.json" (js/JSON.parse (slurp "./translations/zh.json"))
|
||||||
|
"../translations/zh_hant.json" (js/JSON.parse (slurp
|
||||||
|
"./translations/zh_hant.json"))
|
||||||
|
"../translations/zh_TW.json" (js/JSON.parse (slurp
|
||||||
|
"./translations/zh_TW.json"))
|
||||||
nil))
|
nil))
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
[status-im.contexts.chat.messenger.composer.style :as style]
|
[status-im.contexts.chat.messenger.composer.style :as style]
|
||||||
[utils.i18n :as i18n]
|
[utils.i18n :as i18n]
|
||||||
[utils.re-frame :as rf]
|
[utils.re-frame :as rf]
|
||||||
[utils.worklets.chat.messages :as worklets]))
|
[utils.worklets.chat.messenger.composer :as worklets]))
|
||||||
|
|
||||||
(defn bar
|
(defn bar
|
||||||
[theme]
|
[theme]
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
[status-im.contexts.chat.messenger.lightbox.constants :as constants]
|
[status-im.contexts.chat.messenger.lightbox.constants :as constants]
|
||||||
[status-im.contexts.chat.messenger.lightbox.top-view :as top-view]
|
[status-im.contexts.chat.messenger.lightbox.top-view :as top-view]
|
||||||
[utils.re-frame :as rf]
|
[utils.re-frame :as rf]
|
||||||
[utils.worklets.chat.lightbox :as worklet]))
|
[utils.worklets.chat.messenger.lightbox :as worklet]))
|
||||||
|
|
||||||
(defn clear-timers
|
(defn clear-timers
|
||||||
[timers]
|
[timers]
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
[status-im.contexts.shell.jump-to.constants :as jump-to.constants]
|
[status-im.contexts.shell.jump-to.constants :as jump-to.constants]
|
||||||
[utils.i18n :as i18n]
|
[utils.i18n :as i18n]
|
||||||
[utils.re-frame :as rf]
|
[utils.re-frame :as rf]
|
||||||
[utils.worklets.chat.messages :as worklets]))
|
[utils.worklets.chat.messenger.messages :as worklets]))
|
||||||
|
|
||||||
(defonce ^:const loading-indicator-extra-spacing 250)
|
(defonce ^:const loading-indicator-extra-spacing 250)
|
||||||
(defonce ^:const loading-indicator-page-loading-height 100)
|
(defonce ^:const loading-indicator-page-loading-height 100)
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
[status-im.contexts.chat.messenger.messages.pin.banner.view :as pin.banner]
|
[status-im.contexts.chat.messenger.messages.pin.banner.view :as pin.banner]
|
||||||
[utils.i18n :as i18n]
|
[utils.i18n :as i18n]
|
||||||
[utils.re-frame :as rf]
|
[utils.re-frame :as rf]
|
||||||
[utils.worklets.chat.messages :as worklets]))
|
[utils.worklets.chat.messenger.navigation :as worklets]))
|
||||||
|
|
||||||
(defn f-header-content-container
|
(defn f-header-content-container
|
||||||
[{:keys [chat distance-from-list-top all-loaded? calculations-complete?]}]
|
[{:keys [chat distance-from-list-top all-loaded? calculations-complete?]}]
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
[react-native.reanimated :as reanimated]
|
[react-native.reanimated :as reanimated]
|
||||||
[react-native.safe-area :as safe-area]
|
[react-native.safe-area :as safe-area]
|
||||||
[status-im.contexts.chat.messenger.placeholder.style :as style]
|
[status-im.contexts.chat.messenger.placeholder.style :as style]
|
||||||
[utils.worklets.chat.messages :as worklets]))
|
[utils.worklets.chat.messenger.placeholder :as worklets]))
|
||||||
|
|
||||||
(defn- loading-skeleton
|
(defn- loading-skeleton
|
||||||
[]
|
[]
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
(ns utils.worklets.chat.messages)
|
|
||||||
|
|
||||||
(def ^:private messages-worklets (js/require "../src/js/worklets/chat/messages.js"))
|
|
||||||
|
|
||||||
;;;; Navigtion
|
|
||||||
(defn navigation-header-opacity
|
|
||||||
[distance-from-list-top all-loaded? calculations-complete? start-position]
|
|
||||||
(.navigationHeaderOpacity ^js messages-worklets
|
|
||||||
distance-from-list-top
|
|
||||||
all-loaded?
|
|
||||||
calculations-complete?
|
|
||||||
start-position))
|
|
||||||
|
|
||||||
(defn navigation-header-position
|
|
||||||
[distance-from-list-top all-loaded? top-bar-height start-position]
|
|
||||||
(.navigationHeaderPosition ^js messages-worklets
|
|
||||||
distance-from-list-top
|
|
||||||
all-loaded?
|
|
||||||
top-bar-height
|
|
||||||
start-position))
|
|
||||||
|
|
||||||
(defn interpolate-navigation-view-opacity
|
|
||||||
[props]
|
|
||||||
(.interpolateNavigationViewOpacity ^js messages-worklets (clj->js props)))
|
|
||||||
|
|
||||||
;;;; Messages List
|
|
||||||
(defn messages-list-on-scroll
|
|
||||||
[distance-from-list-top chat-list-scroll-y callback]
|
|
||||||
(.messagesListOnScroll ^js messages-worklets distance-from-list-top chat-list-scroll-y callback))
|
|
||||||
|
|
||||||
;;;; Placeholder
|
|
||||||
(defn placeholder-opacity
|
|
||||||
[calculations-complete?]
|
|
||||||
(.placeholderOpacity ^js messages-worklets calculations-complete?))
|
|
||||||
|
|
||||||
(defn placeholder-z-index
|
|
||||||
[calculations-complete?]
|
|
||||||
(.placeholderZIndex ^js messages-worklets calculations-complete?))
|
|
||||||
|
|
||||||
;;;; Common
|
|
||||||
(defn scroll-down-button-opacity
|
|
||||||
[chat-list-scroll-y composer-focused? window-height]
|
|
||||||
(.scrollDownButtonOpacity ^js messages-worklets chat-list-scroll-y composer-focused? window-height))
|
|
||||||
|
|
||||||
(defn jump-to-button-opacity
|
|
||||||
[scroll-down-button-opacity-sv composer-focused?]
|
|
||||||
(.jumpToButtonOpacity ^js messages-worklets scroll-down-button-opacity-sv composer-focused?))
|
|
||||||
|
|
||||||
(defn jump-to-button-position
|
|
||||||
[scroll-down-button-opacity-sv composer-focused?]
|
|
||||||
(.jumpToButtonPosition ^js messages-worklets scroll-down-button-opacity-sv composer-focused?))
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
(ns utils.worklets.chat.messenger.composer)
|
||||||
|
|
||||||
|
(def ^:private worklets (js/require "../src/js/worklets/chat/messenger/composer.js"))
|
||||||
|
|
||||||
|
(defn scroll-down-button-opacity
|
||||||
|
[chat-list-scroll-y composer-focused? window-height]
|
||||||
|
(.scrollDownButtonOpacity ^js worklets chat-list-scroll-y composer-focused? window-height))
|
||||||
|
|
||||||
|
(defn jump-to-button-opacity
|
||||||
|
[scroll-down-button-opacity-sv composer-focused?]
|
||||||
|
(.jumpToButtonOpacity ^js worklets scroll-down-button-opacity-sv composer-focused?))
|
||||||
|
|
||||||
|
(defn jump-to-button-position
|
||||||
|
[scroll-down-button-opacity-sv composer-focused?]
|
||||||
|
(.jumpToButtonPosition ^js worklets scroll-down-button-opacity-sv composer-focused?))
|
|
@ -1,6 +1,6 @@
|
||||||
(ns utils.worklets.chat.lightbox)
|
(ns utils.worklets.chat.messenger.lightbox)
|
||||||
|
|
||||||
(def ^:private layout-worklets (js/require "../src/js/worklets/chat/lightbox.js"))
|
(def ^:private layout-worklets (js/require "../src/js/worklets/chat/messenger/lightbox.js"))
|
||||||
|
|
||||||
(defn info-layout
|
(defn info-layout
|
||||||
[input top?]
|
[input top?]
|
|
@ -0,0 +1,7 @@
|
||||||
|
(ns utils.worklets.chat.messenger.messages)
|
||||||
|
|
||||||
|
(def ^:private worklets (js/require "../src/js/worklets/chat/messenger/messages.js"))
|
||||||
|
|
||||||
|
(defn messages-list-on-scroll
|
||||||
|
[distance-from-list-top chat-list-scroll-y callback]
|
||||||
|
(.messagesListOnScroll ^js worklets distance-from-list-top chat-list-scroll-y callback))
|
|
@ -0,0 +1,23 @@
|
||||||
|
(ns utils.worklets.chat.messenger.navigation)
|
||||||
|
|
||||||
|
(def ^:private worklets (js/require "../src/js/worklets/chat/messenger/navigation.js"))
|
||||||
|
|
||||||
|
(defn navigation-header-opacity
|
||||||
|
[distance-from-list-top all-loaded? calculations-complete? start-position]
|
||||||
|
(.navigationHeaderOpacity ^js worklets
|
||||||
|
distance-from-list-top
|
||||||
|
all-loaded?
|
||||||
|
calculations-complete?
|
||||||
|
start-position))
|
||||||
|
|
||||||
|
(defn navigation-header-position
|
||||||
|
[distance-from-list-top all-loaded? top-bar-height start-position]
|
||||||
|
(.navigationHeaderPosition ^js worklets
|
||||||
|
distance-from-list-top
|
||||||
|
all-loaded?
|
||||||
|
top-bar-height
|
||||||
|
start-position))
|
||||||
|
|
||||||
|
(defn interpolate-navigation-view-opacity
|
||||||
|
[props]
|
||||||
|
(.interpolateNavigationViewOpacity ^js worklets (clj->js props)))
|
|
@ -0,0 +1,11 @@
|
||||||
|
(ns utils.worklets.chat.messenger.placeholder)
|
||||||
|
|
||||||
|
(def ^:private worklets (js/require "../src/js/worklets/chat/messenger/placeholder.js"))
|
||||||
|
|
||||||
|
(defn placeholder-opacity
|
||||||
|
[calculations-complete?]
|
||||||
|
(.placeholderOpacity ^js worklets calculations-complete?))
|
||||||
|
|
||||||
|
(defn placeholder-z-index
|
||||||
|
[calculations-complete?]
|
||||||
|
(.placeholderZIndex ^js worklets calculations-complete?))
|
Loading…
Reference in New Issue