stream-chat-react-native-core 5.13.0 → 5.13.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +4 -4
- package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/ImageGallery.js +8 -8
- package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js +8 -8
- package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -1
- package/lib/commonjs/i18n/en.json +1 -0
- package/lib/commonjs/i18n/fr.json +1 -0
- package/lib/commonjs/i18n/he.json +1 -0
- package/lib/commonjs/i18n/hi.json +1 -0
- package/lib/commonjs/i18n/it.json +1 -0
- package/lib/commonjs/i18n/ja.json +1 -0
- package/lib/commonjs/i18n/ko.json +1 -0
- package/lib/commonjs/i18n/nl.json +1 -0
- package/lib/commonjs/i18n/ru.json +1 -0
- package/lib/commonjs/i18n/tr.json +1 -0
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +4 -4
- package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
- package/lib/module/components/ImageGallery/ImageGallery.js +8 -8
- package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
- package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js +8 -8
- package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js +1 -1
- package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -1
- package/lib/module/i18n/en.json +1 -0
- package/lib/module/i18n/fr.json +1 -0
- package/lib/module/i18n/he.json +1 -0
- package/lib/module/i18n/hi.json +1 -0
- package/lib/module/i18n/it.json +1 -0
- package/lib/module/i18n/ja.json +1 -0
- package/lib/module/i18n/ko.json +1 -0
- package/lib/module/i18n/nl.json +1 -0
- package/lib/module/i18n/ru.json +1 -0
- package/lib/module/i18n/tr.json +1 -0
- package/lib/module/version.json +1 -1
- package/lib/typescript/i18n/en.json +1 -0
- package/lib/typescript/i18n/fr.json +1 -0
- package/lib/typescript/i18n/he.json +1 -0
- package/lib/typescript/i18n/hi.json +1 -0
- package/lib/typescript/i18n/it.json +1 -0
- package/lib/typescript/i18n/ja.json +1 -0
- package/lib/typescript/i18n/ko.json +1 -0
- package/lib/typescript/i18n/nl.json +1 -0
- package/lib/typescript/i18n/ru.json +1 -0
- package/lib/typescript/i18n/tr.json +1 -0
- package/lib/typescript/test-utils/BetterSqlite.d.ts +2 -2
- package/lib/typescript/utils/Streami18n.d.ts +1 -0
- package/package.json +1 -1
- package/src/components/Message/MessageSimple/MessagePinnedHeader.tsx +1 -1
- package/src/i18n/en.json +1 -0
- package/src/i18n/fr.json +1 -0
- package/src/i18n/he.json +1 -0
- package/src/i18n/hi.json +1 -0
- package/src/i18n/it.json +1 -0
- package/src/i18n/ja.json +1 -0
- package/src/i18n/ko.json +1 -0
- package/src/i18n/nl.json +1 -0
- package/src/i18n/ru.json +1 -0
- package/src/i18n/tr.json +1 -0
- package/src/version.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativeReanimated","_OverlayContext","_native","HasPinched","exports","IsSwiping","MARGIN","useImageGalleryGestures","_ref","currentImageHeight","halfScreenHeight","halfScreenWidth","headerFooterVisible","offsetScale","overlayOpacity","photoLength","scale","screenHeight","screenWidth","selectedIndex","setSelectedIndex","translateX","translateY","translationX","_useOverlayContext","useOverlayContext","setOverlay","isAndroid","Platform","OS","hasHitBottomScale","useSharedValue","hasHitTopScale","originX","originY","oldFocalX","oldFocalY","focalX","focalY","index","value","offsetX","offsetY","focalOffsetX","focalOffsetY","adjustedFocalX","adjustedFocalY","tapX","tapY","numberOfPinchFingers","isSwiping","isPinch","hasPinched","resetTouchValues","UNDETERMINED","resetMovementValues","onPan","useAnimatedGestureHandler","onActive","evt","numberOfPointers","TRUE","FALSE","translationY","maxXYRatio","Math","abs","localEvtScale","onFinish","finalXPosition","velocityX","finalYPosition","velocityY","cancelAnimation","withTiming","duration","easing","Easing","out","ease","runOnJS","withDecay","clamp","deceleration","velocity","onStart","onPinch","triggerHaptic","onSingleTap","onDoubleTap","absoluteX","absoluteY","translateYTopBottom","lowerBound","upperBound","min","max"],"sources":["useImageGalleryGestures.tsx"],"sourcesContent":["import { Platform } from 'react-native';\nimport type {\n PanGestureHandlerGestureEvent,\n PinchGestureHandlerGestureEvent,\n TapGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport {\n cancelAnimation,\n Easing,\n runOnJS,\n SharedValue,\n useAnimatedGestureHandler,\n useSharedValue,\n withDecay,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { useOverlayContext } from '../../../contexts/overlayContext/OverlayContext';\nimport { triggerHaptic } from '../../../native';\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nconst MARGIN = 32;\n\nexport const useImageGalleryGestures = ({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n selectedIndex,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n}: {\n currentImageHeight: number;\n halfScreenHeight: number;\n halfScreenWidth: number;\n headerFooterVisible: SharedValue<number>;\n offsetScale: SharedValue<number>;\n overlayOpacity: SharedValue<number>;\n photoLength: number;\n scale: SharedValue<number>;\n screenHeight: number;\n screenWidth: number;\n selectedIndex: number;\n setSelectedIndex: React.Dispatch<React.SetStateAction<number>>;\n translateX: SharedValue<number>;\n translateY: SharedValue<number>;\n translationX: SharedValue<number>;\n}) => {\n const { setOverlay } = useOverlayContext();\n const isAndroid = Platform.OS === 'android';\n\n /**\n * Values to track scale for haptic feedback firing\n */\n const hasHitBottomScale = useSharedValue(1);\n const hasHitTopScale = useSharedValue(0);\n\n /**\n * Shared values for touch tracking\n */\n const originX = useSharedValue(0);\n const originY = useSharedValue(0);\n const oldFocalX = useSharedValue(0);\n const oldFocalY = useSharedValue(0);\n const focalX = useSharedValue(0);\n const focalY = useSharedValue(0);\n const index = useSharedValue(0);\n\n /**\n * if a specific image index > 0 has been passed in\n * while creating the hook, set the value of the index\n * reference to its value.\n *\n * This makes it possible to seelct an image in the list,\n * and scroll/pan as normal. Prior to this,\n * it was always assumed that one started at index 0 in the\n * gallery.\n * */\n if (index.value !== selectedIndex) {\n index.value = selectedIndex;\n }\n\n /**\n * Shared values for movement\n */\n const offsetX = useSharedValue(0);\n const offsetY = useSharedValue(0);\n\n /**\n * Shared values for touch tracking\n */\n const focalOffsetX = useSharedValue(0);\n const focalOffsetY = useSharedValue(0);\n const adjustedFocalX = useSharedValue(0);\n const adjustedFocalY = useSharedValue(0);\n const tapX = useSharedValue(0);\n const tapY = useSharedValue(0);\n\n /**\n * Shared values for gesture tracking\n */\n const numberOfPinchFingers = useSharedValue(0);\n const isSwiping = useSharedValue(0);\n const isPinch = useSharedValue(false);\n const hasPinched = useSharedValue(0);\n\n /**\n * Reset gesture values for use on touch release\n */\n const resetTouchValues = () => {\n 'worklet';\n focalX.value = 0;\n focalY.value = 0;\n oldFocalX.value = 0;\n oldFocalY.value = 0;\n originX.value = 0;\n originY.value = 0;\n focalOffsetX.value = 0;\n focalOffsetY.value = 0;\n numberOfPinchFingers.value = 0;\n isPinch.value = false;\n isSwiping.value = IsSwiping.UNDETERMINED;\n };\n\n /**\n * Reset movement values for use on selected photo change\n */\n const resetMovementValues = () => {\n 'worklet';\n translateX.value = 0;\n translateY.value = 0;\n scale.value = 1;\n offsetScale.value = 1;\n };\n\n /**\n * We use simultaneousHandlers to allow pan and pinch gesture handlers\n * depending on the gesture. The touch is fully handled by the pinch\n * gesture handler once it has began so all interactions by the pan\n * handler are blocked if isPinch.value is true\n */\n const onPan = useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(\n {\n onActive: (evt) => {\n if (evt.numberOfPointers === 1 && !isPinch.value) {\n /**\n * If Android where a second finger cannot be added back and\n * removing one finger returns to Pan Handler then adjust origin\n * on finger remove and set swiping false\n */\n if (isAndroid && hasPinched.value === HasPinched.TRUE) {\n hasPinched.value = HasPinched.FALSE;\n isSwiping.value = IsSwiping.FALSE;\n offsetX.value = translateX.value + evt.translationX;\n offsetY.value = translateY.value - evt.translationY;\n }\n\n /**\n * isSwiping is used to prevent Y movement if a clear swipe to next\n * or previous is begun when at the edge of a photo. The value is\n * either 0, 1, or 2, via the IsSwiping enum designating undetermined,\n * true, or false and is reset on releasing the touch\n */\n if (isSwiping.value === IsSwiping.UNDETERMINED) {\n const maxXYRatio = isAndroid ? 1 : 0.25;\n if (\n Math.abs(evt.translationX / evt.translationY) > maxXYRatio &&\n (Math.abs(-halfScreenWidth * (scale.value - 1) - offsetX.value) < 3 ||\n Math.abs(halfScreenWidth * (scale.value - 1) - offsetX.value) < 3)\n ) {\n isSwiping.value = IsSwiping.TRUE;\n }\n if (Math.abs(evt.translationY) > 25) {\n isSwiping.value = IsSwiping.FALSE;\n }\n }\n\n /**\n * localEvtScale is used for swipe away\n */\n const localEvtScale = scale.value / offsetScale.value;\n\n /**\n * If not swiping translate the image in X and Y to the event\n * translation plus offset. If swiping only translate X, if\n * swiping down when at top of screen or centered balance scale\n * using offset to a degree (this needs improvement the calculation\n * is incorrect but likely needs origin use to be 100%)\n */\n translateX.value =\n scale.value !== offsetScale.value\n ? offsetX.value * localEvtScale - evt.translationX\n : offsetX.value - evt.translationX;\n translateY.value =\n isSwiping.value !== IsSwiping.TRUE\n ? scale.value !== offsetScale.value\n ? offsetY.value * localEvtScale + evt.translationY\n : offsetY.value + evt.translationY\n : translateY.value;\n\n /**\n * If swiping down start scaling down the image for swipe\n * away effect\n */\n scale.value =\n currentImageHeight * offsetScale.value < screenHeight && translateY.value > 0\n ? offsetScale.value * (1 - (1 / 3) * (translateY.value / screenHeight))\n : currentImageHeight * offsetScale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * offsetScale.value - halfScreenHeight\n ? offsetScale.value *\n (1 -\n (1 / 3) *\n ((translateY.value -\n ((currentImageHeight / 2) * offsetScale.value - halfScreenHeight)) /\n screenHeight))\n : scale.value;\n\n overlayOpacity.value = localEvtScale;\n }\n },\n onFinish: (evt) => {\n if (!isPinch.value && evt.numberOfPointers < 2) {\n /**\n * To determine if the fling should page to the next image we\n * calculate a final position based on the current position and\n * event velocity\n */\n const finalXPosition = evt.translationX - evt.velocityX * 0.3;\n const finalYPosition = evt.translationY + evt.velocityY * 0.1;\n\n /**\n * If there is a next photo, the image is lined up to the right\n * edge, the swipe is to the left, and the final position is more\n * than half the screen width, move to the next image\n */\n if (\n index.value < photoLength - 1 &&\n Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value < 0 &&\n finalXPosition < -halfScreenWidth &&\n isSwiping.value === IsSwiping.TRUE\n ) {\n cancelAnimation(translationX);\n translationX.value = withTiming(\n -(screenWidth + MARGIN) * (index.value + 1),\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n resetMovementValues();\n index.value = index.value + 1;\n runOnJS(setSelectedIndex)(index.value);\n },\n );\n\n /**\n * If there is a previous photo, the image is lined up to the left\n * edge, the swipe is to the right, and the final position is more\n * than half the screen width, move to the previous image\n */\n } else if (\n index.value > 0 &&\n Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value > 0 &&\n finalXPosition > halfScreenWidth &&\n isSwiping.value === IsSwiping.TRUE\n ) {\n cancelAnimation(translationX);\n translationX.value = withTiming(\n -(screenWidth + MARGIN) * (index.value - 1),\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n resetMovementValues();\n index.value = index.value - 1;\n runOnJS(setSelectedIndex)(index.value);\n },\n );\n }\n\n /**\n * When the pan is finished if the scale is less than 1 return the\n * photo to center, if the photo is inside the edges of the screen\n * return the photo to line up with the edges, otherwise use decay\n * with a clamping at the edges to give the effect the image is\n * sliding along using velocity and friction\n */\n translateX.value =\n scale.value < 1\n ? withTiming(0)\n : translateX.value > halfScreenWidth * (scale.value - 1)\n ? withTiming(halfScreenWidth * (scale.value - 1), {\n duration: 200,\n })\n : translateX.value < -halfScreenWidth * (scale.value - 1)\n ? withTiming(-halfScreenWidth * (scale.value - 1), {\n duration: 200,\n })\n : withDecay({\n clamp: [\n -halfScreenWidth * (scale.value - 1),\n halfScreenWidth * (scale.value - 1),\n ],\n deceleration: 0.99,\n velocity: -evt.velocityX,\n });\n\n /**\n * When the pan is finished if the height is less than the screen\n * height return the photo to center, if the photo is inside the\n * edges of the screen return the photo to line up with the edges,\n * otherwise use decay with a clamping at the edges to give the effect\n * the image is sliding along using velocity and friction\n */\n translateY.value =\n currentImageHeight * scale.value < screenHeight\n ? withTiming(0)\n : translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? withTiming((currentImageHeight / 2) * scale.value - halfScreenHeight)\n : translateY.value < (-currentImageHeight / 2) * scale.value + halfScreenHeight\n ? withTiming((-currentImageHeight / 2) * scale.value + halfScreenHeight)\n : withDecay({\n clamp: [\n (-currentImageHeight / 2) * scale.value + halfScreenHeight,\n (currentImageHeight / 2) * scale.value - halfScreenHeight,\n ],\n deceleration: 0.99,\n velocity: evt.velocityY,\n });\n\n resetTouchValues();\n\n /**\n * If the scale has been reduced below one, i.e. zoomed out, translate\n * the zoom back to one\n */\n scale.value =\n scale.value !== offsetScale.value ? withTiming(offsetScale.value) : offsetScale.value;\n\n /**\n * If the photo is centered or at the top of the screen if scaled larger\n * than the screen, and not paging left or right, and the final Y position\n * is greater than half the screen using swipe velocity and position, close\n * the overlay\n */\n if (\n finalYPosition > halfScreenHeight &&\n offsetY.value + 8 >= (currentImageHeight / 2) * scale.value - halfScreenHeight &&\n isSwiping.value !== IsSwiping.TRUE &&\n translateY.value !== 0 &&\n !(\n Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value < 0 &&\n finalXPosition < -halfScreenWidth\n ) &&\n !(\n Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value > 0 &&\n finalXPosition > halfScreenWidth\n )\n ) {\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n overlayOpacity.value = withTiming(\n 0,\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n runOnJS(setOverlay)('none');\n },\n );\n scale.value = withTiming(0.6, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateY.value =\n evt.velocityY > 1000\n ? withDecay({\n velocity: evt.velocityY,\n })\n : withTiming(halfScreenHeight + (currentImageHeight / 2) * scale.value, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateX.value = withDecay({\n velocity: -evt.velocityX,\n });\n }\n }\n },\n onStart: () => {\n if (!isPinch.value) {\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n }\n\n /**\n * Reset hasPinched for Android single finger offset\n */\n hasPinched.value = HasPinched.FALSE;\n },\n },\n [currentImageHeight, photoLength],\n );\n\n /**\n * On pinch is run when two or more fingers touch the screen, it then takes over\n * all touch handling even if the number of fingers is reduced to one until the\n * touch is complete\n */\n const onPinch = useAnimatedGestureHandler<PinchGestureHandlerGestureEvent>(\n {\n onActive: (evt) => {\n /**\n * Android starts with a zero event with 1 touch instead of two\n * we therefore must wait to capture starting info until the double\n * touch begins\n */\n if (!isPinch.value && isAndroid) {\n /**\n * Set hasPinched to true so when removing one finger the pan active\n * state adjusts the offset\n */\n hasPinched.value = HasPinched.TRUE;\n\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n\n /**\n * Reset isSwiping as now the pan gesture handler is no longer running\n */\n isSwiping.value = IsSwiping.UNDETERMINED;\n\n /**\n * Set initial values for pinch gesture interaction handler\n */\n numberOfPinchFingers.value = evt.numberOfPointers;\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n originX.value = adjustedFocalX.value;\n originY.value = adjustedFocalY.value;\n offsetScale.value = scale.value;\n }\n\n /**\n * Set pinch to true to stop all pan gesture interactions, we do this\n * again here for Android outside the check that creates type\n */\n isPinch.value = true;\n\n /**\n * The scale is clamped to a minimum of 1 and maximum of 8 for aesthetics.\n * We use the clamped value to determine a local event scale so the focal\n * point does not become out of sync with the actual photo scaling, e.g.\n * evt.scale is 20 but scale is 8, using evt.scale for offset will put the\n * photo and calculations out of sync\n */\n scale.value = clamp(offsetScale.value * evt.scale, 1, 8);\n const localEvtScale = scale.value / offsetScale.value;\n\n /**\n * When we hit the top or bottom of the scale clamping we run a haptic\n * trigger, we track if it has been run to not spam the trigger\n */\n if (scale.value !== 8 && scale.value !== 1) {\n hasHitTopScale.value = 0;\n hasHitBottomScale.value = 0;\n } else if (scale.value === 8 && hasHitTopScale.value === 0) {\n hasHitTopScale.value = 1;\n runOnJS(triggerHaptic)('impactLight');\n } else if (scale.value === 1 && hasHitBottomScale.value === 0) {\n hasHitBottomScale.value = 1;\n runOnJS(triggerHaptic)('impactLight');\n }\n\n /**\n * We calculate the adjusted focal point on the photo using the events\n * focal position on the screen, screen size, and current photo offset\n */\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n\n /**\n * If the number of fingers on the screen changes, the position of the\n * focal point will change and this needs to be accounted for, e.g. if\n * two fingers are on the screen the focal is between them, but if one is\n * then removed the focal is now at the remaining fingers touch position.\n * If this happens without accounting for the change the image will jump\n * around, we keep track of the previous two finger focal to adjust for this\n * change in a reduction from two fingers to one, then if another finger\n * is added again we adjust the origin to account for the difference between\n * the original two finger touch and the new two finger touch position.\n */\n if (numberOfPinchFingers.value !== evt.numberOfPointers) {\n numberOfPinchFingers.value = evt.numberOfPointers;\n if (evt.numberOfPointers === 1) {\n focalOffsetX.value = oldFocalX.value - adjustedFocalX.value;\n focalOffsetY.value = oldFocalY.value - adjustedFocalY.value;\n } else if (numberOfPinchFingers.value > 1) {\n originX.value =\n originX.value -\n (oldFocalX.value / localEvtScale - adjustedFocalX.value / localEvtScale);\n originY.value =\n originY.value -\n (oldFocalY.value / localEvtScale - adjustedFocalY.value / localEvtScale);\n }\n }\n\n /**\n * If pinch handler has been activated via two fingers then the fingers\n * reduced to one we keep track of the old focal using the focal offset\n * from when the number of fingers was two. We then translate the photo\n * taking into account the offset, focal, focal offset, origin, and scale.\n */\n if (numberOfPinchFingers.value === 1) {\n oldFocalX.value = adjustedFocalX.value + focalOffsetX.value;\n oldFocalY.value = adjustedFocalY.value + focalOffsetY.value;\n translateX.value = offsetX.value - oldFocalX.value + localEvtScale * originX.value;\n translateY.value = offsetY.value + oldFocalY.value - localEvtScale * originY.value;\n\n /**\n * If the number of fingers in the gesture is greater than one the\n * adjusted focal point is saved as the old focal and the photo is\n * translated taking into account the offset, focal, origin, and scale.\n */\n } else if (numberOfPinchFingers.value > 1) {\n oldFocalX.value = adjustedFocalX.value;\n oldFocalY.value = adjustedFocalY.value;\n translateX.value = offsetX.value - adjustedFocalX.value + localEvtScale * originX.value;\n translateY.value = offsetY.value + adjustedFocalY.value - localEvtScale * originY.value;\n }\n },\n onFinish: () => {\n if (isPinch.value) {\n /**\n * When the pinch is finished if the scale is less than 1 return the\n * photo to center, if the photo is inside the edges of the screen\n * return the photo to line up with the edges, otherwise leave the\n * photo in its current position\n */\n translateX.value =\n scale.value < 1\n ? withTiming(0)\n : translateX.value > halfScreenWidth * (scale.value - 1)\n ? withTiming(halfScreenWidth * (scale.value - 1))\n : translateX.value < -halfScreenWidth * (scale.value - 1)\n ? withTiming(-halfScreenWidth * (scale.value - 1))\n : translateX.value;\n\n /**\n * When the pinch is finished if the height is less than the screen\n * height return the photo to center, if the photo is inside the\n * edges of the screen return the photo to line up with the edges,\n * otherwise leave the photo in its current position\n */\n translateY.value =\n currentImageHeight * scale.value < screenHeight\n ? withTiming(0)\n : translateY.value > (currentImageHeight / 2) * scale.value - screenHeight / 2\n ? withTiming((currentImageHeight / 2) * scale.value - screenHeight / 2)\n : translateY.value < (-currentImageHeight / 2) * scale.value + screenHeight / 2\n ? withTiming((-currentImageHeight / 2) * scale.value + screenHeight / 2)\n : translateY.value;\n\n /**\n * If the scale has been reduced below one, i.e. zoomed out, translate\n * the zoom back to one\n */\n offsetScale.value = scale.value < 1 ? 1 : scale.value;\n scale.value = scale.value < 1 ? withTiming(1) : scale.value;\n resetTouchValues();\n }\n },\n onStart: (evt) => {\n /**\n * Android starts with a zero event with 1 touch instead of two\n * we therefore must wait to capture starting info until the double\n * touch begins\n */\n if (!isAndroid) {\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n\n /**\n * Set pinch to true to stop all pan gesture interactions\n */\n isPinch.value = true;\n\n /**\n * Reset isSwiping as now the pan gesture handler is no longer running\n */\n isSwiping.value = IsSwiping.UNDETERMINED;\n\n /**\n * Set initial values for pinch gesture interaction handler\n */\n numberOfPinchFingers.value = evt.numberOfPointers;\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n originX.value = adjustedFocalX.value;\n originY.value = adjustedFocalY.value;\n offsetScale.value = scale.value;\n }\n\n /**\n * Reset hasPinched for Android single finger offset\n */\n hasPinched.value = HasPinched.FALSE;\n },\n },\n [currentImageHeight],\n );\n\n /**\n * Single tap handler for header hiding and showing\n */\n const onSingleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({\n onActive: () => {\n cancelAnimation(headerFooterVisible);\n headerFooterVisible.value = headerFooterVisible.value > 0 ? withTiming(0) : withTiming(1);\n },\n });\n\n /**\n * Double tap handler to zoom back out and hide header and footer\n */\n const onDoubleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({\n onActive: (evt) => {\n if (Math.abs(tapX.value - evt.absoluteX) < 64 && Math.abs(tapY.value - evt.absoluteY) < 64) {\n if (offsetScale.value === 1 && offsetX.value === 0 && offsetY.value === 0) {\n offsetScale.value = 2;\n scale.value = withTiming(2, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateX.value = withTiming(evt.absoluteX - halfScreenWidth, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n if (currentImageHeight * 2 > screenHeight) {\n const translateYTopBottom =\n evt.absoluteY > halfScreenHeight\n ? -(currentImageHeight * 2 - screenHeight) / 2\n : (currentImageHeight * 2 - screenHeight) / 2;\n translateY.value = withTiming(translateYTopBottom, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n }\n } else {\n offsetScale.value = 1;\n scale.value = withTiming(1, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n offsetX.value = 0;\n offsetY.value = 0;\n translateX.value = withTiming(0, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateY.value = withTiming(0, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n if (headerFooterVisible.value !== 0) {\n cancelAnimation(headerFooterVisible);\n headerFooterVisible.value = withTiming(0);\n }\n }\n }\n },\n onStart: (evt) => {\n tapX.value = evt.absoluteX;\n tapY.value = evt.absoluteY;\n },\n });\n\n return {\n onDoubleTap,\n onPan,\n onPinch,\n onSingleTap,\n };\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeReanimated","_OverlayContext","_native","HasPinched","exports","IsSwiping","MARGIN","useImageGalleryGestures","_ref","currentImageHeight","halfScreenHeight","halfScreenWidth","headerFooterVisible","offsetScale","overlayOpacity","photoLength","scale","screenHeight","screenWidth","selectedIndex","setSelectedIndex","translateX","translateY","translationX","_useOverlayContext","useOverlayContext","setOverlay","isAndroid","Platform","OS","hasHitBottomScale","useSharedValue","hasHitTopScale","originX","originY","oldFocalX","oldFocalY","focalX","focalY","index","value","offsetX","offsetY","focalOffsetX","focalOffsetY","adjustedFocalX","adjustedFocalY","tapX","tapY","numberOfPinchFingers","isSwiping","isPinch","hasPinched","resetTouchValues","UNDETERMINED","resetMovementValues","onPan","useAnimatedGestureHandler","onActive","evt","numberOfPointers","TRUE","FALSE","translationY","maxXYRatio","Math","abs","localEvtScale","onFinish","finalXPosition","velocityX","finalYPosition","velocityY","cancelAnimation","withTiming","duration","easing","Easing","out","ease","runOnJS","withDecay","clamp","deceleration","velocity","onStart","onPinch","triggerHaptic","onSingleTap","onDoubleTap","absoluteX","absoluteY","translateYTopBottom","lowerBound","upperBound","min","max"],"sources":["useImageGalleryGestures.tsx"],"sourcesContent":["import { Platform } from 'react-native';\nimport type {\n PanGestureHandlerGestureEvent,\n PinchGestureHandlerGestureEvent,\n TapGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport {\n cancelAnimation,\n Easing,\n runOnJS,\n SharedValue,\n useAnimatedGestureHandler,\n useSharedValue,\n withDecay,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { useOverlayContext } from '../../../contexts/overlayContext/OverlayContext';\nimport { triggerHaptic } from '../../../native';\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nconst MARGIN = 32;\n\nexport const useImageGalleryGestures = ({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n selectedIndex,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n}: {\n currentImageHeight: number;\n halfScreenHeight: number;\n halfScreenWidth: number;\n headerFooterVisible: SharedValue<number>;\n offsetScale: SharedValue<number>;\n overlayOpacity: SharedValue<number>;\n photoLength: number;\n scale: SharedValue<number>;\n screenHeight: number;\n screenWidth: number;\n selectedIndex: number;\n setSelectedIndex: React.Dispatch<React.SetStateAction<number>>;\n translateX: SharedValue<number>;\n translateY: SharedValue<number>;\n translationX: SharedValue<number>;\n}) => {\n const { setOverlay } = useOverlayContext();\n const isAndroid = Platform.OS === 'android';\n\n /**\n * Values to track scale for haptic feedback firing\n */\n const hasHitBottomScale = useSharedValue(1);\n const hasHitTopScale = useSharedValue(0);\n\n /**\n * Shared values for touch tracking\n */\n const originX = useSharedValue(0);\n const originY = useSharedValue(0);\n const oldFocalX = useSharedValue(0);\n const oldFocalY = useSharedValue(0);\n const focalX = useSharedValue(0);\n const focalY = useSharedValue(0);\n const index = useSharedValue(0);\n\n /**\n * if a specific image index > 0 has been passed in\n * while creating the hook, set the value of the index\n * reference to its value.\n *\n * This makes it possible to seelct an image in the list,\n * and scroll/pan as normal. Prior to this,\n * it was always assumed that one started at index 0 in the\n * gallery.\n * */\n if (index.value !== selectedIndex) {\n index.value = selectedIndex;\n }\n\n /**\n * Shared values for movement\n */\n const offsetX = useSharedValue(0);\n const offsetY = useSharedValue(0);\n\n /**\n * Shared values for touch tracking\n */\n const focalOffsetX = useSharedValue(0);\n const focalOffsetY = useSharedValue(0);\n const adjustedFocalX = useSharedValue(0);\n const adjustedFocalY = useSharedValue(0);\n const tapX = useSharedValue(0);\n const tapY = useSharedValue(0);\n\n /**\n * Shared values for gesture tracking\n */\n const numberOfPinchFingers = useSharedValue(0);\n const isSwiping = useSharedValue(0);\n const isPinch = useSharedValue(false);\n const hasPinched = useSharedValue(0);\n\n /**\n * Reset gesture values for use on touch release\n */\n const resetTouchValues = () => {\n 'worklet';\n focalX.value = 0;\n focalY.value = 0;\n oldFocalX.value = 0;\n oldFocalY.value = 0;\n originX.value = 0;\n originY.value = 0;\n focalOffsetX.value = 0;\n focalOffsetY.value = 0;\n numberOfPinchFingers.value = 0;\n isPinch.value = false;\n isSwiping.value = IsSwiping.UNDETERMINED;\n };\n\n /**\n * Reset movement values for use on selected photo change\n */\n const resetMovementValues = () => {\n 'worklet';\n translateX.value = 0;\n translateY.value = 0;\n scale.value = 1;\n offsetScale.value = 1;\n };\n\n /**\n * We use simultaneousHandlers to allow pan and pinch gesture handlers\n * depending on the gesture. The touch is fully handled by the pinch\n * gesture handler once it has began so all interactions by the pan\n * handler are blocked if isPinch.value is true\n */\n const onPan = useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(\n {\n onActive: (evt) => {\n if (evt.numberOfPointers === 1 && !isPinch.value) {\n /**\n * If Android where a second finger cannot be added back and\n * removing one finger returns to Pan Handler then adjust origin\n * on finger remove and set swiping false\n */\n if (isAndroid && hasPinched.value === HasPinched.TRUE) {\n hasPinched.value = HasPinched.FALSE;\n isSwiping.value = IsSwiping.FALSE;\n offsetX.value = translateX.value + evt.translationX;\n offsetY.value = translateY.value - evt.translationY;\n }\n\n /**\n * isSwiping is used to prevent Y movement if a clear swipe to next\n * or previous is begun when at the edge of a photo. The value is\n * either 0, 1, or 2, via the IsSwiping enum designating undetermined,\n * true, or false and is reset on releasing the touch\n */\n if (isSwiping.value === IsSwiping.UNDETERMINED) {\n const maxXYRatio = isAndroid ? 1 : 0.25;\n if (\n Math.abs(evt.translationX / evt.translationY) > maxXYRatio &&\n (Math.abs(-halfScreenWidth * (scale.value - 1) - offsetX.value) < 3 ||\n Math.abs(halfScreenWidth * (scale.value - 1) - offsetX.value) < 3)\n ) {\n isSwiping.value = IsSwiping.TRUE;\n }\n if (Math.abs(evt.translationY) > 25) {\n isSwiping.value = IsSwiping.FALSE;\n }\n }\n\n /**\n * localEvtScale is used for swipe away\n */\n const localEvtScale = scale.value / offsetScale.value;\n\n /**\n * If not swiping translate the image in X and Y to the event\n * translation plus offset. If swiping only translate X, if\n * swiping down when at top of screen or centered balance scale\n * using offset to a degree (this needs improvement the calculation\n * is incorrect but likely needs origin use to be 100%)\n */\n translateX.value =\n scale.value !== offsetScale.value\n ? offsetX.value * localEvtScale - evt.translationX\n : offsetX.value - evt.translationX;\n translateY.value =\n isSwiping.value !== IsSwiping.TRUE\n ? scale.value !== offsetScale.value\n ? offsetY.value * localEvtScale + evt.translationY\n : offsetY.value + evt.translationY\n : translateY.value;\n\n /**\n * If swiping down start scaling down the image for swipe\n * away effect\n */\n scale.value =\n currentImageHeight * offsetScale.value < screenHeight && translateY.value > 0\n ? offsetScale.value * (1 - (1 / 3) * (translateY.value / screenHeight))\n : currentImageHeight * offsetScale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * offsetScale.value - halfScreenHeight\n ? offsetScale.value *\n (1 -\n (1 / 3) *\n ((translateY.value -\n ((currentImageHeight / 2) * offsetScale.value - halfScreenHeight)) /\n screenHeight))\n : scale.value;\n\n overlayOpacity.value = localEvtScale;\n }\n },\n onFinish: (evt) => {\n if (!isPinch.value && evt.numberOfPointers < 2) {\n /**\n * To determine if the fling should page to the next image we\n * calculate a final position based on the current position and\n * event velocity\n */\n const finalXPosition = evt.translationX - evt.velocityX * 0.3;\n const finalYPosition = evt.translationY + evt.velocityY * 0.1;\n\n /**\n * If there is a next photo, the image is lined up to the right\n * edge, the swipe is to the left, and the final position is more\n * than half the screen width, move to the next image\n */\n if (\n index.value < photoLength - 1 &&\n Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value < 0 &&\n finalXPosition < -halfScreenWidth &&\n isSwiping.value === IsSwiping.TRUE\n ) {\n cancelAnimation(translationX);\n translationX.value = withTiming(\n -(screenWidth + MARGIN) * (index.value + 1),\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n resetMovementValues();\n index.value = index.value + 1;\n runOnJS(setSelectedIndex)(index.value);\n },\n );\n\n /**\n * If there is a previous photo, the image is lined up to the left\n * edge, the swipe is to the right, and the final position is more\n * than half the screen width, move to the previous image\n */\n } else if (\n index.value > 0 &&\n Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value > 0 &&\n finalXPosition > halfScreenWidth &&\n isSwiping.value === IsSwiping.TRUE\n ) {\n cancelAnimation(translationX);\n translationX.value = withTiming(\n -(screenWidth + MARGIN) * (index.value - 1),\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n resetMovementValues();\n index.value = index.value - 1;\n runOnJS(setSelectedIndex)(index.value);\n },\n );\n }\n\n /**\n * When the pan is finished if the scale is less than 1 return the\n * photo to center, if the photo is inside the edges of the screen\n * return the photo to line up with the edges, otherwise use decay\n * with a clamping at the edges to give the effect the image is\n * sliding along using velocity and friction\n */\n translateX.value =\n scale.value < 1\n ? withTiming(0)\n : translateX.value > halfScreenWidth * (scale.value - 1)\n ? withTiming(halfScreenWidth * (scale.value - 1), {\n duration: 200,\n })\n : translateX.value < -halfScreenWidth * (scale.value - 1)\n ? withTiming(-halfScreenWidth * (scale.value - 1), {\n duration: 200,\n })\n : withDecay({\n clamp: [\n -halfScreenWidth * (scale.value - 1),\n halfScreenWidth * (scale.value - 1),\n ],\n deceleration: 0.99,\n velocity: -evt.velocityX,\n });\n\n /**\n * When the pan is finished if the height is less than the screen\n * height return the photo to center, if the photo is inside the\n * edges of the screen return the photo to line up with the edges,\n * otherwise use decay with a clamping at the edges to give the effect\n * the image is sliding along using velocity and friction\n */\n translateY.value =\n currentImageHeight * scale.value < screenHeight\n ? withTiming(0)\n : translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? withTiming((currentImageHeight / 2) * scale.value - halfScreenHeight)\n : translateY.value < (-currentImageHeight / 2) * scale.value + halfScreenHeight\n ? withTiming((-currentImageHeight / 2) * scale.value + halfScreenHeight)\n : withDecay({\n clamp: [\n (-currentImageHeight / 2) * scale.value + halfScreenHeight,\n (currentImageHeight / 2) * scale.value - halfScreenHeight,\n ],\n deceleration: 0.99,\n velocity: evt.velocityY,\n });\n\n resetTouchValues();\n\n /**\n * If the scale has been reduced below one, i.e. zoomed out, translate\n * the zoom back to one\n */\n scale.value =\n scale.value !== offsetScale.value ? withTiming(offsetScale.value) : offsetScale.value;\n\n /**\n * If the photo is centered or at the top of the screen if scaled larger\n * than the screen, and not paging left or right, and the final Y position\n * is greater than half the screen using swipe velocity and position, close\n * the overlay\n */\n if (\n finalYPosition > halfScreenHeight &&\n offsetY.value + 8 >= (currentImageHeight / 2) * scale.value - halfScreenHeight &&\n isSwiping.value !== IsSwiping.TRUE &&\n translateY.value !== 0 &&\n !(\n Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value < 0 &&\n finalXPosition < -halfScreenWidth\n ) &&\n !(\n Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value > 0 &&\n finalXPosition > halfScreenWidth\n )\n ) {\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n overlayOpacity.value = withTiming(\n 0,\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n runOnJS(setOverlay)('none');\n },\n );\n scale.value = withTiming(0.6, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateY.value =\n evt.velocityY > 1000\n ? withDecay({\n velocity: evt.velocityY,\n })\n : withTiming(halfScreenHeight + (currentImageHeight / 2) * scale.value, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateX.value = withDecay({\n velocity: -evt.velocityX,\n });\n }\n }\n },\n onStart: () => {\n if (!isPinch.value) {\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n }\n\n /**\n * Reset hasPinched for Android single finger offset\n */\n hasPinched.value = HasPinched.FALSE;\n },\n },\n [currentImageHeight, photoLength],\n );\n\n /**\n * On pinch is run when two or more fingers touch the screen, it then takes over\n * all touch handling even if the number of fingers is reduced to one until the\n * touch is complete\n */\n const onPinch = useAnimatedGestureHandler<PinchGestureHandlerGestureEvent>(\n {\n onActive: (evt) => {\n /**\n * Android starts with a zero event with 1 touch instead of two\n * we therefore must wait to capture starting info until the double\n * touch begins\n */\n if (!isPinch.value && isAndroid) {\n /**\n * Set hasPinched to true so when removing one finger the pan active\n * state adjusts the offset\n */\n hasPinched.value = HasPinched.TRUE;\n\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n\n /**\n * Reset isSwiping as now the pan gesture handler is no longer running\n */\n isSwiping.value = IsSwiping.UNDETERMINED;\n\n /**\n * Set initial values for pinch gesture interaction handler\n */\n numberOfPinchFingers.value = evt.numberOfPointers;\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n originX.value = adjustedFocalX.value;\n originY.value = adjustedFocalY.value;\n offsetScale.value = scale.value;\n }\n\n /**\n * Set pinch to true to stop all pan gesture interactions, we do this\n * again here for Android outside the check that creates type\n */\n isPinch.value = true;\n\n /**\n * The scale is clamped to a minimum of 1 and maximum of 8 for aesthetics.\n * We use the clamped value to determine a local event scale so the focal\n * point does not become out of sync with the actual photo scaling, e.g.\n * evt.scale is 20 but scale is 8, using evt.scale for offset will put the\n * photo and calculations out of sync\n */\n scale.value = clamp(offsetScale.value * evt.scale, 1, 8);\n const localEvtScale = scale.value / offsetScale.value;\n\n /**\n * When we hit the top or bottom of the scale clamping we run a haptic\n * trigger, we track if it has been run to not spam the trigger\n */\n if (scale.value !== 8 && scale.value !== 1) {\n hasHitTopScale.value = 0;\n hasHitBottomScale.value = 0;\n } else if (scale.value === 8 && hasHitTopScale.value === 0) {\n hasHitTopScale.value = 1;\n runOnJS(triggerHaptic)('impactLight');\n } else if (scale.value === 1 && hasHitBottomScale.value === 0) {\n hasHitBottomScale.value = 1;\n runOnJS(triggerHaptic)('impactLight');\n }\n\n /**\n * We calculate the adjusted focal point on the photo using the events\n * focal position on the screen, screen size, and current photo offset\n */\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n\n /**\n * If the number of fingers on the screen changes, the position of the\n * focal point will change and this needs to be accounted for, e.g. if\n * two fingers are on the screen the focal is between them, but if one is\n * then removed the focal is now at the remaining fingers touch position.\n * If this happens without accounting for the change the image will jump\n * around, we keep track of the previous two finger focal to adjust for this\n * change in a reduction from two fingers to one, then if another finger\n * is added again we adjust the origin to account for the difference between\n * the original two finger touch and the new two finger touch position.\n */\n if (numberOfPinchFingers.value !== evt.numberOfPointers) {\n numberOfPinchFingers.value = evt.numberOfPointers;\n if (evt.numberOfPointers === 1) {\n focalOffsetX.value = oldFocalX.value - adjustedFocalX.value;\n focalOffsetY.value = oldFocalY.value - adjustedFocalY.value;\n } else if (numberOfPinchFingers.value > 1) {\n originX.value =\n originX.value -\n (oldFocalX.value / localEvtScale - adjustedFocalX.value / localEvtScale);\n originY.value =\n originY.value -\n (oldFocalY.value / localEvtScale - adjustedFocalY.value / localEvtScale);\n }\n }\n\n /**\n * If pinch handler has been activated via two fingers then the fingers\n * reduced to one we keep track of the old focal using the focal offset\n * from when the number of fingers was two. We then translate the photo\n * taking into account the offset, focal, focal offset, origin, and scale.\n */\n if (numberOfPinchFingers.value === 1) {\n oldFocalX.value = adjustedFocalX.value + focalOffsetX.value;\n oldFocalY.value = adjustedFocalY.value + focalOffsetY.value;\n translateX.value = offsetX.value - oldFocalX.value + localEvtScale * originX.value;\n translateY.value = offsetY.value + oldFocalY.value - localEvtScale * originY.value;\n\n /**\n * If the number of fingers in the gesture is greater than one the\n * adjusted focal point is saved as the old focal and the photo is\n * translated taking into account the offset, focal, origin, and scale.\n */\n } else if (numberOfPinchFingers.value > 1) {\n oldFocalX.value = adjustedFocalX.value;\n oldFocalY.value = adjustedFocalY.value;\n translateX.value = offsetX.value - adjustedFocalX.value + localEvtScale * originX.value;\n translateY.value = offsetY.value + adjustedFocalY.value - localEvtScale * originY.value;\n }\n },\n onFinish: () => {\n if (isPinch.value) {\n /**\n * When the pinch is finished if the scale is less than 1 return the\n * photo to center, if the photo is inside the edges of the screen\n * return the photo to line up with the edges, otherwise leave the\n * photo in its current position\n */\n translateX.value =\n scale.value < 1\n ? withTiming(0)\n : translateX.value > halfScreenWidth * (scale.value - 1)\n ? withTiming(halfScreenWidth * (scale.value - 1))\n : translateX.value < -halfScreenWidth * (scale.value - 1)\n ? withTiming(-halfScreenWidth * (scale.value - 1))\n : translateX.value;\n\n /**\n * When the pinch is finished if the height is less than the screen\n * height return the photo to center, if the photo is inside the\n * edges of the screen return the photo to line up with the edges,\n * otherwise leave the photo in its current position\n */\n translateY.value =\n currentImageHeight * scale.value < screenHeight\n ? withTiming(0)\n : translateY.value > (currentImageHeight / 2) * scale.value - screenHeight / 2\n ? withTiming((currentImageHeight / 2) * scale.value - screenHeight / 2)\n : translateY.value < (-currentImageHeight / 2) * scale.value + screenHeight / 2\n ? withTiming((-currentImageHeight / 2) * scale.value + screenHeight / 2)\n : translateY.value;\n\n /**\n * If the scale has been reduced below one, i.e. zoomed out, translate\n * the zoom back to one\n */\n offsetScale.value = scale.value < 1 ? 1 : scale.value;\n scale.value = scale.value < 1 ? withTiming(1) : scale.value;\n resetTouchValues();\n }\n },\n onStart: (evt) => {\n /**\n * Android starts with a zero event with 1 touch instead of two\n * we therefore must wait to capture starting info until the double\n * touch begins\n */\n if (!isAndroid) {\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n\n /**\n * Set pinch to true to stop all pan gesture interactions\n */\n isPinch.value = true;\n\n /**\n * Reset isSwiping as now the pan gesture handler is no longer running\n */\n isSwiping.value = IsSwiping.UNDETERMINED;\n\n /**\n * Set initial values for pinch gesture interaction handler\n */\n numberOfPinchFingers.value = evt.numberOfPointers;\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n originX.value = adjustedFocalX.value;\n originY.value = adjustedFocalY.value;\n offsetScale.value = scale.value;\n }\n\n /**\n * Reset hasPinched for Android single finger offset\n */\n hasPinched.value = HasPinched.FALSE;\n },\n },\n [currentImageHeight],\n );\n\n /**\n * Single tap handler for header hiding and showing\n */\n const onSingleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({\n onActive: () => {\n cancelAnimation(headerFooterVisible);\n headerFooterVisible.value = headerFooterVisible.value > 0 ? withTiming(0) : withTiming(1);\n },\n });\n\n /**\n * Double tap handler to zoom back out and hide header and footer\n */\n const onDoubleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({\n onActive: (evt) => {\n if (Math.abs(tapX.value - evt.absoluteX) < 64 && Math.abs(tapY.value - evt.absoluteY) < 64) {\n if (offsetScale.value === 1 && offsetX.value === 0 && offsetY.value === 0) {\n offsetScale.value = 2;\n scale.value = withTiming(2, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateX.value = withTiming(evt.absoluteX - halfScreenWidth, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n if (currentImageHeight * 2 > screenHeight) {\n const translateYTopBottom =\n evt.absoluteY > halfScreenHeight\n ? -(currentImageHeight * 2 - screenHeight) / 2\n : (currentImageHeight * 2 - screenHeight) / 2;\n translateY.value = withTiming(translateYTopBottom, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n }\n } else {\n offsetScale.value = 1;\n scale.value = withTiming(1, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n offsetX.value = 0;\n offsetY.value = 0;\n translateX.value = withTiming(0, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateY.value = withTiming(0, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n if (headerFooterVisible.value !== 0) {\n cancelAnimation(headerFooterVisible);\n headerFooterVisible.value = withTiming(0);\n }\n }\n }\n },\n onStart: (evt) => {\n tapX.value = evt.absoluteX;\n tapY.value = evt.absoluteY;\n },\n });\n\n return {\n onDoubleTap,\n onPan,\n onPinch,\n onSingleTap,\n };\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n"],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ var MessagePinnedHeaderWithContext = function MessagePinnedHeaderWithContext(pro
|
|
|
66
66
|
lineNumber: 57,
|
|
67
67
|
columnNumber: 7
|
|
68
68
|
}
|
|
69
|
-
},
|
|
69
|
+
}, t('Pinned by'), ' ', (message == null ? void 0 : (_message$pinned_by = message.pinned_by) == null ? void 0 : _message$pinned_by.id) === (client == null ? void 0 : (_client$user = client.user) == null ? void 0 : _client$user.id) ? t('You') : message == null ? void 0 : (_message$pinned_by2 = message.pinned_by) == null ? void 0 : _message$pinned_by2.name));
|
|
70
70
|
};
|
|
71
71
|
var areEqual = function areEqual(prevProps, nextProps) {
|
|
72
72
|
var prevMessage = prevProps.message;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_ChatContext","_MessageContext","_ThemeContext","_TranslationContext","_icons","_this","_jsxFileName","styles","StyleSheet","create","container","display","flexDirection","marginBottom","marginLeft","marginTop","label","MessagePinnedHeaderWithContext","props","_message$pinned_by","_client$user","_message$pinned_by2","alignment","message","_useTheme","useTheme","_useTheme$theme","theme","grey","colors","pinnedHeader","messageSimple","_useTranslationContex","useTranslationContext","t","_useChatContext","useChatContext","client","createElement","View","style","justifyContent","testID","__self","__source","fileName","lineNumber","columnNumber","PinHeader","pathFill","Text","color","pinned_by","id","user","name","areEqual","prevProps","nextProps","prevMessage","nextMessage","messageEqual","deleted_at","status","type","text","pinned","MemoizedMessagePinnedHeader","React","memo","MessagePinnedHeader","_useMessageContext","useMessageContext","lastGroupMessage","_extends2","exports","displayName"],"sources":["MessagePinnedHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\n\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';\nimport { PinHeader } from '../../../icons';\n\nconst styles = StyleSheet.create({\n container: {\n display: 'flex',\n flexDirection: 'row',\n marginBottom: 8,\n marginLeft: 30,\n marginTop: 5,\n },\n label: {},\n});\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type MessagePinnedHeaderPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<MessageContextValue<StreamChatGenerics>, 'alignment' | 'message'>;\n\nconst MessagePinnedHeaderWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessagePinnedHeaderPropsWithContext<StreamChatGenerics>,\n) => {\n const { alignment, message } = props;\n const {\n theme: {\n colors: { grey },\n messageSimple: { pinnedHeader },\n },\n } = useTheme();\n const { container, label } = pinnedHeader;\n const { t } = useTranslationContext();\n const { client } = useChatContext();\n return (\n <View\n style={[\n styles.container,\n {\n justifyContent: alignment === 'left' ? 'flex-start' : 'flex-end',\n },\n container,\n ]}\n testID='message-pinned'\n >\n <PinHeader pathFill={grey} />\n <Text style={[{ color: grey }, styles.label, label]}>\n Pinned by{' '}\n {message?.pinned_by?.id === client?.user?.id ? t('You') : message?.pinned_by?.name}\n </Text>\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessagePinnedHeaderPropsWithContext<StreamChatGenerics>,\n nextProps: MessagePinnedHeaderPropsWithContext<StreamChatGenerics>,\n) => {\n const { message: prevMessage } = prevProps;\n const { message: nextMessage } = nextProps;\n const messageEqual =\n prevMessage.deleted_at === nextMessage.deleted_at &&\n prevMessage.status === nextMessage.status &&\n prevMessage.type === nextMessage.type &&\n prevMessage.text === nextMessage.text &&\n prevMessage.pinned === nextMessage.pinned;\n if (!messageEqual) return false;\n return true;\n};\n\nconst MemoizedMessagePinnedHeader = React.memo(\n MessagePinnedHeaderWithContext,\n areEqual,\n) as typeof MessagePinnedHeaderWithContext;\n\nexport type MessagePinnedHeaderProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessagePinnedHeaderPropsWithContext<StreamChatGenerics>>;\n\nexport const MessagePinnedHeader = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessagePinnedHeaderProps<StreamChatGenerics>,\n) => {\n const { alignment, lastGroupMessage, message } = useMessageContext<StreamChatGenerics>();\n\n return (\n <MemoizedMessagePinnedHeader\n {...{\n alignment,\n lastGroupMessage,\n message,\n }}\n {...props}\n />\n );\n};\n\nMessagePinnedHeader.displayName = 'MessagePinnedHeader{messageSimple{pinned}}';\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AAIA,IAAAI,aAAA,GAAAJ,OAAA;AACA,IAAAK,mBAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AAA2C,IAAAO,KAAA;EAAAC,YAAA;AAE3C,IAAMC,MAAM,GAAGC,uBAAU,CAACC,MAAM,CAAC;EAC/BC,SAAS,EAAE;IACTC,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,KAAK;IACpBC,YAAY,EAAE,CAAC;IACfC,UAAU,EAAE,EAAE;IACdC,SAAS,EAAE;EACb,CAAC;EACDC,KAAK,EAAE,CAAC;AACV,CAAC,CAAC;AAQF,IAAMC,8BAA8B,GAAG,SAAjCA,8BAA8BA,CAGlCC,KAA8D,EAC3D;EAAA,IAAAC,kBAAA,EAAAC,YAAA,EAAAC,mBAAA;EACH,IAAQC,SAAS,GAAcJ,KAAK,CAA5BI,SAAS;IAAEC,OAAO,GAAKL,KAAK,CAAjBK,OAAO;EAC1B,IAAAC,SAAA,GAKI,IAAAC,sBAAQ,GAAE;IAAAC,eAAA,GAAAF,SAAA,CAJZG,KAAK;IACOC,IAAI,GAAAF,eAAA,CAAdG,MAAM,CAAID,IAAI;IACGE,YAAY,GAAAJ,eAAA,CAA7BK,aAAa,CAAID,YAAY;EAGjC,IAAQpB,SAAS,GAAYoB,YAAY,CAAjCpB,SAAS;IAAEM,KAAK,GAAKc,YAAY,CAAtBd,KAAK;EACxB,IAAAgB,qBAAA,GAAc,IAAAC,yCAAqB,GAAE;IAA7BC,CAAC,GAAAF,qBAAA,CAADE,CAAC;EACT,IAAAC,eAAA,GAAmB,IAAAC,2BAAc,GAAE;IAA3BC,MAAM,GAAAF,eAAA,CAANE,MAAM;EACd,OACEzC,MAAA,YAAA0C,aAAA,CAACvC,YAAA,CAAAwC,IAAI;IACHC,KAAK,EAAE,CACLjC,MAAM,CAACG,SAAS,EAChB;MACE+B,cAAc,EAAEnB,SAAS,KAAK,MAAM,GAAG,YAAY,GAAG;IACxD,CAAC,EACDZ,SAAS,CACT;IACFgC,MAAM,EAAC,gBAAgB;IAAAC,MAAA,EAAAtC,KAAA;IAAAuC,QAAA;MAAAC,QAAA,EAAAvC,YAAA;MAAAwC,UAAA;MAAAC,YAAA;IAAA;EAAA,GAEvBnD,MAAA,YAAA0C,aAAA,CAAClC,MAAA,CAAA4C,SAAS;IAACC,QAAQ,EAAErB,IAAK;IAAAe,MAAA,EAAAtC,KAAA;IAAAuC,QAAA;MAAAC,QAAA,EAAAvC,YAAA;MAAAwC,UAAA;MAAAC,YAAA;IAAA;EAAA,EAAG,EAC7BnD,MAAA,YAAA0C,aAAA,CAACvC,YAAA,CAAAmD,IAAI;IAACV,KAAK,EAAE,CAAC;MAAEW,KAAK,EAAEvB;IAAK,CAAC,EAAErB,MAAM,CAACS,KAAK,EAAEA,KAAK,CAAE;IAAA2B,MAAA,EAAAtC,KAAA;IAAAuC,QAAA;MAAAC,QAAA,EAAAvC,YAAA;MAAAwC,UAAA;MAAAC,YAAA;IAAA;EAAA,
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_ChatContext","_MessageContext","_ThemeContext","_TranslationContext","_icons","_this","_jsxFileName","styles","StyleSheet","create","container","display","flexDirection","marginBottom","marginLeft","marginTop","label","MessagePinnedHeaderWithContext","props","_message$pinned_by","_client$user","_message$pinned_by2","alignment","message","_useTheme","useTheme","_useTheme$theme","theme","grey","colors","pinnedHeader","messageSimple","_useTranslationContex","useTranslationContext","t","_useChatContext","useChatContext","client","createElement","View","style","justifyContent","testID","__self","__source","fileName","lineNumber","columnNumber","PinHeader","pathFill","Text","color","pinned_by","id","user","name","areEqual","prevProps","nextProps","prevMessage","nextMessage","messageEqual","deleted_at","status","type","text","pinned","MemoizedMessagePinnedHeader","React","memo","MessagePinnedHeader","_useMessageContext","useMessageContext","lastGroupMessage","_extends2","exports","displayName"],"sources":["MessagePinnedHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\n\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';\nimport { PinHeader } from '../../../icons';\n\nconst styles = StyleSheet.create({\n container: {\n display: 'flex',\n flexDirection: 'row',\n marginBottom: 8,\n marginLeft: 30,\n marginTop: 5,\n },\n label: {},\n});\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type MessagePinnedHeaderPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<MessageContextValue<StreamChatGenerics>, 'alignment' | 'message'>;\n\nconst MessagePinnedHeaderWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessagePinnedHeaderPropsWithContext<StreamChatGenerics>,\n) => {\n const { alignment, message } = props;\n const {\n theme: {\n colors: { grey },\n messageSimple: { pinnedHeader },\n },\n } = useTheme();\n const { container, label } = pinnedHeader;\n const { t } = useTranslationContext();\n const { client } = useChatContext();\n return (\n <View\n style={[\n styles.container,\n {\n justifyContent: alignment === 'left' ? 'flex-start' : 'flex-end',\n },\n container,\n ]}\n testID='message-pinned'\n >\n <PinHeader pathFill={grey} />\n <Text style={[{ color: grey }, styles.label, label]}>\n {t('Pinned by')}{' '}\n {message?.pinned_by?.id === client?.user?.id ? t('You') : message?.pinned_by?.name}\n </Text>\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessagePinnedHeaderPropsWithContext<StreamChatGenerics>,\n nextProps: MessagePinnedHeaderPropsWithContext<StreamChatGenerics>,\n) => {\n const { message: prevMessage } = prevProps;\n const { message: nextMessage } = nextProps;\n const messageEqual =\n prevMessage.deleted_at === nextMessage.deleted_at &&\n prevMessage.status === nextMessage.status &&\n prevMessage.type === nextMessage.type &&\n prevMessage.text === nextMessage.text &&\n prevMessage.pinned === nextMessage.pinned;\n if (!messageEqual) return false;\n return true;\n};\n\nconst MemoizedMessagePinnedHeader = React.memo(\n MessagePinnedHeaderWithContext,\n areEqual,\n) as typeof MessagePinnedHeaderWithContext;\n\nexport type MessagePinnedHeaderProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessagePinnedHeaderPropsWithContext<StreamChatGenerics>>;\n\nexport const MessagePinnedHeader = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessagePinnedHeaderProps<StreamChatGenerics>,\n) => {\n const { alignment, lastGroupMessage, message } = useMessageContext<StreamChatGenerics>();\n\n return (\n <MemoizedMessagePinnedHeader\n {...{\n alignment,\n lastGroupMessage,\n message,\n }}\n {...props}\n />\n );\n};\n\nMessagePinnedHeader.displayName = 'MessagePinnedHeader{messageSimple{pinned}}';\n"],"mappings":"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"}
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"Photo": "Photo",
|
|
40
40
|
"Photos and Videos": "Photos and Videos",
|
|
41
41
|
"Pin to Conversation": "Pin to Conversation",
|
|
42
|
+
"Pinned by": "Pinned by",
|
|
42
43
|
"Please enable access to your photos and videos so you can share them.": "Please enable access to your photos and videos so you can share them.",
|
|
43
44
|
"Please select a channel first": "Please select a channel first",
|
|
44
45
|
"Reconnecting...": "Reconnecting...",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"Photo": "Photo",
|
|
40
40
|
"Photos and Videos": "Photos et vidéos",
|
|
41
41
|
"Pin to Conversation": "Épingler à la conversation",
|
|
42
|
+
"Pinned by": "Épinglé par",
|
|
42
43
|
"Please enable access to your photos and videos so you can share them.": "Veuillez autoriser l'accès à vos photos et vidéos afin de pouvoir les partager.",
|
|
43
44
|
"Please select a channel first": "Veuillez d'abord selectionnez un canal",
|
|
44
45
|
"Reconnecting...": "Se Reconnecter...",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"Photos": "תמונות",
|
|
41
41
|
"Photos and Videos": "תמונות ווידאו",
|
|
42
42
|
"Pin to Conversation": "הצמד/י לשיחה",
|
|
43
|
+
"Pinned by": " - הוצמד לשיחה",
|
|
43
44
|
"Please enable access to your photos and videos so you can share them.": "אפשר/י גישה לתמונות ולסרטונים שלך כדי שתוכל/י לשתף אותם.",
|
|
44
45
|
"Please select a channel first": "אנא בחר/י שיחה תחילה",
|
|
45
46
|
"Reconnecting...": "מתחבר מחדש...",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"Photo": "तस्वीर",
|
|
40
40
|
"Photos and Videos": "तस्वीरें और वीडियों",
|
|
41
41
|
"Pin to Conversation": "बातचीत में पिन करें",
|
|
42
|
+
"Pinned by": "द्वारा पिन किया गया",
|
|
42
43
|
"Please enable access to your photos and videos so you can share them.": "कृपया अपनी फ़ोटो और वीडियो तक पहुंच सक्षम करें ताकि आप उन्हें साझा कर सकें।",
|
|
43
44
|
"Please select a channel first": "कृपया पहले एक चैनल चुनें",
|
|
44
45
|
"Reconnecting...": "पुनः कनेक्ट हो...",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"Photo": "Foto",
|
|
40
40
|
"Photos and Videos": "Foto e Video",
|
|
41
41
|
"Pin to Conversation": "Metti in evidenza",
|
|
42
|
+
"Pinned by": "Fissato da",
|
|
42
43
|
"Please enable access to your photos and videos so you can share them.": "Abilita l'accesso alle tue foto e ai tuoi video in modo da poterli condividere.",
|
|
43
44
|
"Please select a channel first": "Seleziona un canale",
|
|
44
45
|
"Reconnecting...": "Ricollegarsi...",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"Photos": "写真",
|
|
32
32
|
"Photos and Videos": "写真と動画",
|
|
33
33
|
"Pin to Conversation": "会話にピンする",
|
|
34
|
+
"Pinned by": "ピン留めされユーザー",
|
|
34
35
|
"Please enable access to your photos and videos so you can share them.": "写真やビデオへのアクセスを有効にして、共有できるようにしてください。",
|
|
35
36
|
"Please select a channel first": "最初にチャンネルを選択してください",
|
|
36
37
|
"Reconnecting...": "再接続中。。。",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"Photos": "사진",
|
|
32
32
|
"Photos and Videos": "사진과 동영상",
|
|
33
33
|
"Pin to Conversation": "대화에 고정합니다",
|
|
34
|
+
"Pinned by": "고정된 사용자",
|
|
34
35
|
"Please enable access to your photos and videos so you can share them.": "사진 및 비디오에 대한 액세스를 사용하여 공유 할 수 있도록합니다.",
|
|
35
36
|
"Please select a channel first": "먼저 채널을 선택하십시오",
|
|
36
37
|
"Reconnecting...": "다시 연결 중...",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"Photo": "Foto",
|
|
40
40
|
"Photos and Videos": "Foto's en video's",
|
|
41
41
|
"Pin to Conversation": "Vastmaken aan gesprek",
|
|
42
|
+
"Pinned by": "Vastgemaakt door",
|
|
42
43
|
"Please enable access to your photos and videos so you can share them.": "Schakel toegang tot uw foto's en video's in zodat u ze kunt delen.",
|
|
43
44
|
"Please select a channel first": "Selecteer eerst een kanaal",
|
|
44
45
|
"Reconnecting...": "Opnieuw Verbinding Maken...",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"Photo": "Фото",
|
|
40
40
|
"Photos and Videos": "Фото и видео",
|
|
41
41
|
"Pin to Conversation": "Закрепить к беседе",
|
|
42
|
+
"Pinned by": "Закреплено пользователем",
|
|
42
43
|
"Please enable access to your photos and videos so you can share them.": "Разрешите доступ к своим фотографиям и видео, чтобы вы могли ими поделиться.",
|
|
43
44
|
"Please select a channel first": "Пожалуйста, сначала выберите канал",
|
|
44
45
|
"Reconnecting...": "Переподключение...",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"Photo": "Fotoğraf",
|
|
40
40
|
"Photos and Videos": "Fotoğraflar ve Videolar",
|
|
41
41
|
"Pin to Conversation": "Konuşmaya sabitle",
|
|
42
|
+
"Pinned by": "Tarafından sabitlendi",
|
|
42
43
|
"Please enable access to your photos and videos so you can share them.": "Paylaşım yapabilmek için lutfen fotoğraflarınıza ve videolarınıza erişimi etkinleştirin.",
|
|
43
44
|
"Please select a channel first": "Lütfen önce bir kanal seçiniz",
|
|
44
45
|
"Reconnecting...": "Yeniden Bağlanılıyor...",
|
|
@@ -111,13 +111,13 @@ var getLatestMessageDisplayDate = function getLatestMessageDisplayDate(message,
|
|
|
111
111
|
}
|
|
112
112
|
return parserOutput;
|
|
113
113
|
};
|
|
114
|
-
var MessageReadStatus
|
|
115
|
-
exports.MessageReadStatus = MessageReadStatus;
|
|
116
|
-
(function (MessageReadStatus) {
|
|
114
|
+
var MessageReadStatus = function (MessageReadStatus) {
|
|
117
115
|
MessageReadStatus[MessageReadStatus["NOT_SENT_BY_CURRENT_USER"] = 0] = "NOT_SENT_BY_CURRENT_USER";
|
|
118
116
|
MessageReadStatus[MessageReadStatus["UNREAD"] = 1] = "UNREAD";
|
|
119
117
|
MessageReadStatus[MessageReadStatus["READ"] = 2] = "READ";
|
|
120
|
-
|
|
118
|
+
return MessageReadStatus;
|
|
119
|
+
}({});
|
|
120
|
+
exports.MessageReadStatus = MessageReadStatus;
|
|
121
121
|
var getLatestMessageReadStatus = function getLatestMessageReadStatus(channel, client, message, readEvents) {
|
|
122
122
|
var _message$user5;
|
|
123
123
|
var currentUserId = client.userID;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_ChatContext","_TranslationContext","getMessageSenderName","message","currentUserId","t","membersLength","_message$user","user","id","_message$user2","_message$user3","_message$user4","name","username","getMentionUsers","mentionedUser","Array","isArray","mentionUserString","reduce","acc","cur","userName","length","getLatestMessageDisplayText","channel","client","_message$attachments","bold","text","isMessageTypeDeleted","type","userID","members","Object","keys","state","messageSender","messageSenderText","boldOwner","includes","shortenedText","substring","replace","mentionedUsers","mentioned_users","regEx","RegExp","concat","_toConsumableArray2","split","index","test","push","command","attachments","getLatestMessageDisplayDate","tDateTimeParser","parserOutput","created_at","isDayOrMoment","isSame","Date","format","MessageReadStatus","exports","getLatestMessageReadStatus","readEvents","_message$user5","NOT_SENT_BY_CURRENT_USER","readList","read","messageUpdatedAt","updated_at","undefined","values","some","_ref","last_read","READ","UNREAD","getLatestMessagePreview","params","lastMessage","messages","messageObject","previews","status","channelStateLastMessage","useLatestMessagePreview","forceUpdate","_useChatContext","useChatContext","_useTranslationContex","useTranslationContext","channelConfigExists","getConfig","channelLastMessageString","_useState","useState","_useState2","_slicedToArray2","setReadEvents","_useState3","_useState4","latestMessagePreview","setLatestMessagePreview","readStatus","useEffect","_channel$getConfig","read_events"],"sources":["useLatestMessagePreview.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, MessageResponse, StreamChat, UserResponse } from 'stream-chat';\n\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport {\n isDayOrMoment,\n TDateTimeParser,\n useTranslationContext,\n} from '../../../contexts/translationContext/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype LatestMessage<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n\nexport type LatestMessagePreview<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n created_at: string | number | Date;\n messageObject: LatestMessage<StreamChatGenerics> | undefined;\n previews: {\n bold: boolean;\n text: string;\n }[];\n status: number;\n};\n\nconst getMessageSenderName = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n currentUserId: string | undefined,\n t: (key: string) => string,\n membersLength: number,\n) => {\n if (message?.user?.id === currentUserId) {\n return t('You');\n }\n\n if (membersLength > 2) {\n return message?.user?.name || message?.user?.username || message?.user?.id || '';\n }\n\n return '';\n};\n\nconst getMentionUsers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n mentionedUser: UserResponse<StreamChatGenerics>[] | undefined,\n) => {\n if (Array.isArray(mentionedUser)) {\n const mentionUserString = mentionedUser.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '');\n return mentionUserString;\n }\n return '';\n};\n\nconst getLatestMessageDisplayText = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n t: (key: string) => string,\n) => {\n if (!message) return [{ bold: false, text: t('Nothing yet...') }];\n const isMessageTypeDeleted = message.type === 'deleted';\n if (isMessageTypeDeleted) return [{ bold: false, text: t('Message deleted') }];\n const currentUserId = client?.userID;\n const members = Object.keys(channel.state.members);\n\n const messageSender = getMessageSenderName(message, currentUserId, t, members.length);\n const messageSenderText = messageSender\n ? `${messageSender === t('You') ? '' : '@'}${messageSender}: `\n : '';\n const boldOwner = messageSenderText.includes('@');\n if (message.text) {\n // rough guess optimization to limit string preview to max 100 characters\n const shortenedText = message.text.substring(0, 100).replace(/\\n/g, ' ');\n const mentionedUsers = getMentionUsers(message.mentioned_users);\n const regEx = new RegExp(`^(${mentionedUsers})`);\n return [\n { bold: boldOwner, text: messageSenderText },\n ...shortenedText.split('').reduce(\n (acc, cur, index) => {\n if (cur === '@' && mentionedUsers && regEx.test(shortenedText.substring(index))) {\n acc.push({ bold: true, text: cur });\n } else if (mentionedUsers && regEx.test(acc[acc.length - 1].text)) {\n acc.push({ bold: false, text: cur });\n } else {\n acc[acc.length - 1].text += cur;\n }\n return acc;\n },\n [{ bold: false, text: '' }],\n ),\n ];\n }\n if (message.command) {\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: `/${message.command}` },\n ];\n }\n if (message.attachments?.length) {\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: t('🏙 Attachment...') },\n ];\n }\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: t('Empty message...') },\n ];\n};\n\nconst getLatestMessageDisplayDate = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n tDateTimeParser: TDateTimeParser,\n) => {\n const parserOutput = tDateTimeParser(message?.created_at);\n if (isDayOrMoment(parserOutput)) {\n if (parserOutput.isSame(new Date(), 'day')) {\n return parserOutput.format('LT');\n }\n return parserOutput.format('L');\n }\n return parserOutput;\n};\n\nexport enum MessageReadStatus {\n NOT_SENT_BY_CURRENT_USER = 0,\n UNREAD = 1,\n READ = 2,\n}\n\nconst getLatestMessageReadStatus = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n readEvents: boolean,\n): MessageReadStatus => {\n const currentUserId = client.userID;\n if (!message || currentUserId !== message.user?.id || readEvents === false) {\n return MessageReadStatus.NOT_SENT_BY_CURRENT_USER;\n }\n\n const readList = channel.state.read;\n if (currentUserId) {\n delete readList[currentUserId];\n }\n\n const messageUpdatedAt = message.updated_at\n ? typeof message.updated_at === 'string'\n ? new Date(message.updated_at)\n : message.updated_at\n : undefined;\n\n return Object.values(readList).some(\n ({ last_read }) => messageUpdatedAt && messageUpdatedAt < last_read,\n )\n ? MessageReadStatus.READ\n : MessageReadStatus.UNREAD;\n};\n\nconst getLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(params: {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n readEvents: boolean;\n t: (key: string) => string;\n tDateTimeParser: TDateTimeParser;\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n}) => {\n const { channel, client, lastMessage, readEvents, t, tDateTimeParser } = params;\n\n const messages = channel.state.messages;\n\n if (!messages.length && !lastMessage) {\n return {\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: t('Nothing yet...'),\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n };\n }\n\n const channelStateLastMessage = messages.length ? messages[messages.length - 1] : undefined;\n\n const message = lastMessage !== undefined ? lastMessage : channelStateLastMessage;\n\n return {\n created_at: getLatestMessageDisplayDate(message, tDateTimeParser),\n messageObject: message,\n previews: getLatestMessageDisplayText(channel, client, message, t),\n status: getLatestMessageReadStatus(channel, client, message, readEvents),\n };\n};\n\n/**\n * Hook to set the display preview for latest message on channel.\n *\n * @param {*} channel Channel object\n *\n * @returns {object} latest message preview e.g.. { text: 'this was last message ...', created_at: '11/12/2020', messageObject: { originalMessageObject } }\n */\nexport const useLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n forceUpdate: number,\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { t, tDateTimeParser } = useTranslationContext();\n\n const channelConfigExists = typeof channel?.getConfig === 'function';\n\n const messages = channel.state.messages;\n const message = messages.length ? messages[messages.length - 1] : undefined;\n\n const channelLastMessageString = `${lastMessage?.id || message?.id}${\n lastMessage?.updated_at || message?.updated_at\n }`;\n\n const [readEvents, setReadEvents] = useState(true);\n const [latestMessagePreview, setLatestMessagePreview] = useState<\n LatestMessagePreview<StreamChatGenerics>\n >({\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: '',\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n });\n\n const readStatus = getLatestMessageReadStatus(\n channel,\n client,\n lastMessage || message,\n readEvents,\n );\n\n useEffect(() => {\n if (channelConfigExists) {\n const read_events = channel.getConfig()?.read_events;\n if (typeof read_events === 'boolean') {\n setReadEvents(read_events);\n }\n }\n }, [channelConfigExists]);\n\n useEffect(\n () =>\n setLatestMessagePreview(\n getLatestMessagePreview({\n channel,\n client,\n lastMessage,\n readEvents,\n t,\n tDateTimeParser,\n }),\n ),\n [channelLastMessageString, forceUpdate, readEvents, readStatus],\n );\n\n return latestMessagePreview;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_react","require","_ChatContext","_TranslationContext","getMessageSenderName","message","currentUserId","t","membersLength","_message$user","user","id","_message$user2","_message$user3","_message$user4","name","username","getMentionUsers","mentionedUser","Array","isArray","mentionUserString","reduce","acc","cur","userName","length","getLatestMessageDisplayText","channel","client","_message$attachments","bold","text","isMessageTypeDeleted","type","userID","members","Object","keys","state","messageSender","messageSenderText","boldOwner","includes","shortenedText","substring","replace","mentionedUsers","mentioned_users","regEx","RegExp","concat","_toConsumableArray2","split","index","test","push","command","attachments","getLatestMessageDisplayDate","tDateTimeParser","parserOutput","created_at","isDayOrMoment","isSame","Date","format","MessageReadStatus","exports","getLatestMessageReadStatus","readEvents","_message$user5","NOT_SENT_BY_CURRENT_USER","readList","read","messageUpdatedAt","updated_at","undefined","values","some","_ref","last_read","READ","UNREAD","getLatestMessagePreview","params","lastMessage","messages","messageObject","previews","status","channelStateLastMessage","useLatestMessagePreview","forceUpdate","_useChatContext","useChatContext","_useTranslationContex","useTranslationContext","channelConfigExists","getConfig","channelLastMessageString","_useState","useState","_useState2","_slicedToArray2","setReadEvents","_useState3","_useState4","latestMessagePreview","setLatestMessagePreview","readStatus","useEffect","_channel$getConfig","read_events"],"sources":["useLatestMessagePreview.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, MessageResponse, StreamChat, UserResponse } from 'stream-chat';\n\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport {\n isDayOrMoment,\n TDateTimeParser,\n useTranslationContext,\n} from '../../../contexts/translationContext/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype LatestMessage<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n\nexport type LatestMessagePreview<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n created_at: string | number | Date;\n messageObject: LatestMessage<StreamChatGenerics> | undefined;\n previews: {\n bold: boolean;\n text: string;\n }[];\n status: number;\n};\n\nconst getMessageSenderName = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n currentUserId: string | undefined,\n t: (key: string) => string,\n membersLength: number,\n) => {\n if (message?.user?.id === currentUserId) {\n return t('You');\n }\n\n if (membersLength > 2) {\n return message?.user?.name || message?.user?.username || message?.user?.id || '';\n }\n\n return '';\n};\n\nconst getMentionUsers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n mentionedUser: UserResponse<StreamChatGenerics>[] | undefined,\n) => {\n if (Array.isArray(mentionedUser)) {\n const mentionUserString = mentionedUser.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '');\n return mentionUserString;\n }\n return '';\n};\n\nconst getLatestMessageDisplayText = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n t: (key: string) => string,\n) => {\n if (!message) return [{ bold: false, text: t('Nothing yet...') }];\n const isMessageTypeDeleted = message.type === 'deleted';\n if (isMessageTypeDeleted) return [{ bold: false, text: t('Message deleted') }];\n const currentUserId = client?.userID;\n const members = Object.keys(channel.state.members);\n\n const messageSender = getMessageSenderName(message, currentUserId, t, members.length);\n const messageSenderText = messageSender\n ? `${messageSender === t('You') ? '' : '@'}${messageSender}: `\n : '';\n const boldOwner = messageSenderText.includes('@');\n if (message.text) {\n // rough guess optimization to limit string preview to max 100 characters\n const shortenedText = message.text.substring(0, 100).replace(/\\n/g, ' ');\n const mentionedUsers = getMentionUsers(message.mentioned_users);\n const regEx = new RegExp(`^(${mentionedUsers})`);\n return [\n { bold: boldOwner, text: messageSenderText },\n ...shortenedText.split('').reduce(\n (acc, cur, index) => {\n if (cur === '@' && mentionedUsers && regEx.test(shortenedText.substring(index))) {\n acc.push({ bold: true, text: cur });\n } else if (mentionedUsers && regEx.test(acc[acc.length - 1].text)) {\n acc.push({ bold: false, text: cur });\n } else {\n acc[acc.length - 1].text += cur;\n }\n return acc;\n },\n [{ bold: false, text: '' }],\n ),\n ];\n }\n if (message.command) {\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: `/${message.command}` },\n ];\n }\n if (message.attachments?.length) {\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: t('🏙 Attachment...') },\n ];\n }\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: t('Empty message...') },\n ];\n};\n\nconst getLatestMessageDisplayDate = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n tDateTimeParser: TDateTimeParser,\n) => {\n const parserOutput = tDateTimeParser(message?.created_at);\n if (isDayOrMoment(parserOutput)) {\n if (parserOutput.isSame(new Date(), 'day')) {\n return parserOutput.format('LT');\n }\n return parserOutput.format('L');\n }\n return parserOutput;\n};\n\nexport enum MessageReadStatus {\n NOT_SENT_BY_CURRENT_USER = 0,\n UNREAD = 1,\n READ = 2,\n}\n\nconst getLatestMessageReadStatus = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n readEvents: boolean,\n): MessageReadStatus => {\n const currentUserId = client.userID;\n if (!message || currentUserId !== message.user?.id || readEvents === false) {\n return MessageReadStatus.NOT_SENT_BY_CURRENT_USER;\n }\n\n const readList = channel.state.read;\n if (currentUserId) {\n delete readList[currentUserId];\n }\n\n const messageUpdatedAt = message.updated_at\n ? typeof message.updated_at === 'string'\n ? new Date(message.updated_at)\n : message.updated_at\n : undefined;\n\n return Object.values(readList).some(\n ({ last_read }) => messageUpdatedAt && messageUpdatedAt < last_read,\n )\n ? MessageReadStatus.READ\n : MessageReadStatus.UNREAD;\n};\n\nconst getLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(params: {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n readEvents: boolean;\n t: (key: string) => string;\n tDateTimeParser: TDateTimeParser;\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n}) => {\n const { channel, client, lastMessage, readEvents, t, tDateTimeParser } = params;\n\n const messages = channel.state.messages;\n\n if (!messages.length && !lastMessage) {\n return {\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: t('Nothing yet...'),\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n };\n }\n\n const channelStateLastMessage = messages.length ? messages[messages.length - 1] : undefined;\n\n const message = lastMessage !== undefined ? lastMessage : channelStateLastMessage;\n\n return {\n created_at: getLatestMessageDisplayDate(message, tDateTimeParser),\n messageObject: message,\n previews: getLatestMessageDisplayText(channel, client, message, t),\n status: getLatestMessageReadStatus(channel, client, message, readEvents),\n };\n};\n\n/**\n * Hook to set the display preview for latest message on channel.\n *\n * @param {*} channel Channel object\n *\n * @returns {object} latest message preview e.g.. { text: 'this was last message ...', created_at: '11/12/2020', messageObject: { originalMessageObject } }\n */\nexport const useLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n forceUpdate: number,\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { t, tDateTimeParser } = useTranslationContext();\n\n const channelConfigExists = typeof channel?.getConfig === 'function';\n\n const messages = channel.state.messages;\n const message = messages.length ? messages[messages.length - 1] : undefined;\n\n const channelLastMessageString = `${lastMessage?.id || message?.id}${\n lastMessage?.updated_at || message?.updated_at\n }`;\n\n const [readEvents, setReadEvents] = useState(true);\n const [latestMessagePreview, setLatestMessagePreview] = useState<\n LatestMessagePreview<StreamChatGenerics>\n >({\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: '',\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n });\n\n const readStatus = getLatestMessageReadStatus(\n channel,\n client,\n lastMessage || message,\n readEvents,\n );\n\n useEffect(() => {\n if (channelConfigExists) {\n const read_events = channel.getConfig()?.read_events;\n if (typeof read_events === 'boolean') {\n setReadEvents(read_events);\n }\n }\n }, [channelConfigExists]);\n\n useEffect(\n () =>\n setLatestMessagePreview(\n getLatestMessagePreview({\n channel,\n client,\n lastMessage,\n readEvents,\n t,\n tDateTimeParser,\n }),\n ),\n [channelLastMessageString, forceUpdate, readEvents, readStatus],\n );\n\n return latestMessagePreview;\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAIA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AA0BA,IAAMG,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAGxBC,OAAsD,EACtDC,aAAiC,EACjCC,CAA0B,EAC1BC,aAAqB,EAClB;EAAA,IAAAC,aAAA;EACH,IAAI,CAAAJ,OAAO,qBAAAI,aAAA,GAAPJ,OAAO,CAAEK,IAAI,qBAAbD,aAAA,CAAeE,EAAE,MAAKL,aAAa,EAAE;IACvC,OAAOC,CAAC,CAAC,KAAK,CAAC;EACjB;EAEA,IAAIC,aAAa,GAAG,CAAC,EAAE;IAAA,IAAAI,cAAA,EAAAC,cAAA,EAAAC,cAAA;IACrB,OAAO,CAAAT,OAAO,qBAAAO,cAAA,GAAPP,OAAO,CAAEK,IAAI,qBAAbE,cAAA,CAAeG,IAAI,MAAIV,OAAO,qBAAAQ,cAAA,GAAPR,OAAO,CAAEK,IAAI,qBAAbG,cAAA,CAAeG,QAAQ,MAAIX,OAAO,qBAAAS,cAAA,GAAPT,OAAO,CAAEK,IAAI,qBAAbI,cAAA,CAAeH,EAAE,KAAI,EAAE;EAClF;EAEA,OAAO,EAAE;AACX,CAAC;AAED,IAAMM,eAAe,GAAG,SAAlBA,eAAeA,CAGnBC,aAA6D,EAC1D;EACH,IAAIC,KAAK,CAACC,OAAO,CAACF,aAAa,CAAC,EAAE;IAChC,IAAMG,iBAAiB,GAAGH,aAAa,CAACI,MAAM,CAAC,UAACC,GAAG,EAAEC,GAAG,EAAK;MAC3D,IAAMC,QAAQ,GAAGD,GAAG,CAACT,IAAI,IAAIS,GAAG,CAACb,EAAE,IAAI,EAAE;MACzC,IAAIc,QAAQ,EAAE;QACZF,GAAG,KAAOA,GAAG,CAACG,MAAM,GAAG,GAAG,GAAG,EAAE,UAAID,QAAU;MAC/C;MACA,OAAOF,GAAG;IACZ,CAAC,EAAE,EAAE,CAAC;IACN,OAAOF,iBAAiB;EAC1B;EACA,OAAO,EAAE;AACX,CAAC;AAED,IAAMM,2BAA2B,GAAG,SAA9BA,2BAA2BA,CAG/BC,OAAoC,EACpCC,MAAsC,EACtCxB,OAAsD,EACtDE,CAA0B,EACvB;EAAA,IAAAuB,oBAAA;EACH,IAAI,CAACzB,OAAO,EAAE,OAAO,CAAC;IAAE0B,IAAI,EAAE,KAAK;IAAEC,IAAI,EAAEzB,CAAC,CAAC,gBAAgB;EAAE,CAAC,CAAC;EACjE,IAAM0B,oBAAoB,GAAG5B,OAAO,CAAC6B,IAAI,KAAK,SAAS;EACvD,IAAID,oBAAoB,EAAE,OAAO,CAAC;IAAEF,IAAI,EAAE,KAAK;IAAEC,IAAI,EAAEzB,CAAC,CAAC,iBAAiB;EAAE,CAAC,CAAC;EAC9E,IAAMD,aAAa,GAAGuB,MAAM,oBAANA,MAAM,CAAEM,MAAM;EACpC,IAAMC,OAAO,GAAGC,MAAM,CAACC,IAAI,CAACV,OAAO,CAACW,KAAK,CAACH,OAAO,CAAC;EAElD,IAAMI,aAAa,GAAGpC,oBAAoB,CAACC,OAAO,EAAEC,aAAa,EAAEC,CAAC,EAAE6B,OAAO,CAACV,MAAM,CAAC;EACrF,IAAMe,iBAAiB,GAAGD,aAAa,SAChCA,aAAa,KAAKjC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,IAAGiC,aAAa,UACxD,EAAE;EACN,IAAME,SAAS,GAAGD,iBAAiB,CAACE,QAAQ,CAAC,GAAG,CAAC;EACjD,IAAItC,OAAO,CAAC2B,IAAI,EAAE;IAEhB,IAAMY,aAAa,GAAGvC,OAAO,CAAC2B,IAAI,CAACa,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAACC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;IACxE,IAAMC,cAAc,GAAG9B,eAAe,CAACZ,OAAO,CAAC2C,eAAe,CAAC;IAC/D,IAAMC,KAAK,GAAG,IAAIC,MAAM,QAAMH,cAAc,OAAI;IAChD,QACE;MAAEhB,IAAI,EAAEW,SAAS;MAAEV,IAAI,EAAES;IAAkB,CAAC,EAAAU,MAAA,KAAAC,mBAAA,aACzCR,aAAa,CAACS,KAAK,CAAC,EAAE,CAAC,CAAC/B,MAAM,CAC/B,UAACC,GAAG,EAAEC,GAAG,EAAE8B,KAAK,EAAK;MACnB,IAAI9B,GAAG,KAAK,GAAG,IAAIuB,cAAc,IAAIE,KAAK,CAACM,IAAI,CAACX,aAAa,CAACC,SAAS,CAACS,KAAK,CAAC,CAAC,EAAE;QAC/E/B,GAAG,CAACiC,IAAI,CAAC;UAAEzB,IAAI,EAAE,IAAI;UAAEC,IAAI,EAAER;QAAI,CAAC,CAAC;MACrC,CAAC,MAAM,IAAIuB,cAAc,IAAIE,KAAK,CAACM,IAAI,CAAChC,GAAG,CAACA,GAAG,CAACG,MAAM,GAAG,CAAC,CAAC,CAACM,IAAI,CAAC,EAAE;QACjET,GAAG,CAACiC,IAAI,CAAC;UAAEzB,IAAI,EAAE,KAAK;UAAEC,IAAI,EAAER;QAAI,CAAC,CAAC;MACtC,CAAC,MAAM;QACLD,GAAG,CAACA,GAAG,CAACG,MAAM,GAAG,CAAC,CAAC,CAACM,IAAI,IAAIR,GAAG;MACjC;MACA,OAAOD,GAAG;IACZ,CAAC,EACD,CAAC;MAAEQ,IAAI,EAAE,KAAK;MAAEC,IAAI,EAAE;IAAG,CAAC,CAAC,CAC5B;EAEL;EACA,IAAI3B,OAAO,CAACoD,OAAO,EAAE;IACnB,OAAO,CACL;MAAE1B,IAAI,EAAEW,SAAS;MAAEV,IAAI,EAAES;IAAkB,CAAC,EAC5C;MAAEV,IAAI,EAAE,KAAK;MAAEC,IAAI,QAAM3B,OAAO,CAACoD;IAAU,CAAC,CAC7C;EACH;EACA,KAAA3B,oBAAA,GAAIzB,OAAO,CAACqD,WAAW,aAAnB5B,oBAAA,CAAqBJ,MAAM,EAAE;IAC/B,OAAO,CACL;MAAEK,IAAI,EAAEW,SAAS;MAAEV,IAAI,EAAES;IAAkB,CAAC,EAC5C;MAAEV,IAAI,EAAE,KAAK;MAAEC,IAAI,EAAEzB,CAAC,CAAC,kBAAkB;IAAE,CAAC,CAC7C;EACH;EACA,OAAO,CACL;IAAEwB,IAAI,EAAEW,SAAS;IAAEV,IAAI,EAAES;EAAkB,CAAC,EAC5C;IAAEV,IAAI,EAAE,KAAK;IAAEC,IAAI,EAAEzB,CAAC,CAAC,kBAAkB;EAAE,CAAC,CAC7C;AACH,CAAC;AAED,IAAMoD,2BAA2B,GAAG,SAA9BA,2BAA2BA,CAG/BtD,OAAsD,EACtDuD,eAAgC,EAC7B;EACH,IAAMC,YAAY,GAAGD,eAAe,CAACvD,OAAO,oBAAPA,OAAO,CAAEyD,UAAU,CAAC;EACzD,IAAI,IAAAC,iCAAa,EAACF,YAAY,CAAC,EAAE;IAC/B,IAAIA,YAAY,CAACG,MAAM,CAAC,IAAIC,IAAI,EAAE,EAAE,KAAK,CAAC,EAAE;MAC1C,OAAOJ,YAAY,CAACK,MAAM,CAAC,IAAI,CAAC;IAClC;IACA,OAAOL,YAAY,CAACK,MAAM,CAAC,GAAG,CAAC;EACjC;EACA,OAAOL,YAAY;AACrB,CAAC;AAAC,IAEUM,iBAAiB,aAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AAAAC,OAAA,CAAAD,iBAAA,GAAAA,iBAAA;AAM7B,IAAME,0BAA0B,GAAG,SAA7BA,0BAA0BA,CAG9BzC,OAAoC,EACpCC,MAAsC,EACtCxB,OAAsD,EACtDiE,UAAmB,EACG;EAAA,IAAAC,cAAA;EACtB,IAAMjE,aAAa,GAAGuB,MAAM,CAACM,MAAM;EACnC,IAAI,CAAC9B,OAAO,IAAIC,aAAa,OAAAiE,cAAA,GAAKlE,OAAO,CAACK,IAAI,qBAAZ6D,cAAA,CAAc5D,EAAE,KAAI2D,UAAU,KAAK,KAAK,EAAE;IAC1E,OAAOH,iBAAiB,CAACK,wBAAwB;EACnD;EAEA,IAAMC,QAAQ,GAAG7C,OAAO,CAACW,KAAK,CAACmC,IAAI;EACnC,IAAIpE,aAAa,EAAE;IACjB,OAAOmE,QAAQ,CAACnE,aAAa,CAAC;EAChC;EAEA,IAAMqE,gBAAgB,GAAGtE,OAAO,CAACuE,UAAU,GACvC,OAAOvE,OAAO,CAACuE,UAAU,KAAK,QAAQ,GACpC,IAAIX,IAAI,CAAC5D,OAAO,CAACuE,UAAU,CAAC,GAC5BvE,OAAO,CAACuE,UAAU,GACpBC,SAAS;EAEb,OAAOxC,MAAM,CAACyC,MAAM,CAACL,QAAQ,CAAC,CAACM,IAAI,CACjC,UAAAC,IAAA;IAAA,IAAGC,SAAS,GAAAD,IAAA,CAATC,SAAS;IAAA,OAAON,gBAAgB,IAAIA,gBAAgB,GAAGM,SAAS;EAAA,EACpE,GACGd,iBAAiB,CAACe,IAAI,GACtBf,iBAAiB,CAACgB,MAAM;AAC9B,CAAC;AAED,IAAMC,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAE3BC,MASD,EAAK;EACJ,IAAQzD,OAAO,GAA0DyD,MAAM,CAAvEzD,OAAO;IAAEC,MAAM,GAAkDwD,MAAM,CAA9DxD,MAAM;IAAEyD,WAAW,GAAqCD,MAAM,CAAtDC,WAAW;IAAEhB,UAAU,GAAyBe,MAAM,CAAzCf,UAAU;IAAE/D,CAAC,GAAsB8E,MAAM,CAA7B9E,CAAC;IAAEqD,eAAe,GAAKyB,MAAM,CAA1BzB,eAAe;EAEpE,IAAM2B,QAAQ,GAAG3D,OAAO,CAACW,KAAK,CAACgD,QAAQ;EAEvC,IAAI,CAACA,QAAQ,CAAC7D,MAAM,IAAI,CAAC4D,WAAW,EAAE;IACpC,OAAO;MACLxB,UAAU,EAAE,EAAE;MACd0B,aAAa,EAAEX,SAAS;MACxBY,QAAQ,EAAE,CACR;QACE1D,IAAI,EAAE,KAAK;QACXC,IAAI,EAAEzB,CAAC,CAAC,gBAAgB;MAC1B,CAAC,CACF;MACDmF,MAAM,EAAEvB,iBAAiB,CAACK;IAC5B,CAAC;EACH;EAEA,IAAMmB,uBAAuB,GAAGJ,QAAQ,CAAC7D,MAAM,GAAG6D,QAAQ,CAACA,QAAQ,CAAC7D,MAAM,GAAG,CAAC,CAAC,GAAGmD,SAAS;EAE3F,IAAMxE,OAAO,GAAGiF,WAAW,KAAKT,SAAS,GAAGS,WAAW,GAAGK,uBAAuB;EAEjF,OAAO;IACL7B,UAAU,EAAEH,2BAA2B,CAACtD,OAAO,EAAEuD,eAAe,CAAC;IACjE4B,aAAa,EAAEnF,OAAO;IACtBoF,QAAQ,EAAE9D,2BAA2B,CAACC,OAAO,EAAEC,MAAM,EAAExB,OAAO,EAAEE,CAAC,CAAC;IAClEmF,MAAM,EAAErB,0BAA0B,CAACzC,OAAO,EAAEC,MAAM,EAAExB,OAAO,EAAEiE,UAAU;EACzE,CAAC;AACH,CAAC;AASM,IAAMsB,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAGlChE,OAAoC,EACpCiE,WAAmB,EACnBP,WAEuC,EACpC;EACH,IAAAQ,eAAA,GAAmB,IAAAC,2BAAc,GAAsB;IAA/ClE,MAAM,GAAAiE,eAAA,CAANjE,MAAM;EACd,IAAAmE,qBAAA,GAA+B,IAAAC,yCAAqB,GAAE;IAA9C1F,CAAC,GAAAyF,qBAAA,CAADzF,CAAC;IAAEqD,eAAe,GAAAoC,qBAAA,CAAfpC,eAAe;EAE1B,IAAMsC,mBAAmB,GAAG,QAAOtE,OAAO,oBAAPA,OAAO,CAAEuE,SAAS,MAAK,UAAU;EAEpE,IAAMZ,QAAQ,GAAG3D,OAAO,CAACW,KAAK,CAACgD,QAAQ;EACvC,IAAMlF,OAAO,GAAGkF,QAAQ,CAAC7D,MAAM,GAAG6D,QAAQ,CAACA,QAAQ,CAAC7D,MAAM,GAAG,CAAC,CAAC,GAAGmD,SAAS;EAE3E,IAAMuB,wBAAwB,SAAM,CAAAd,WAAW,oBAAXA,WAAW,CAAE3E,EAAE,MAAIN,OAAO,oBAAPA,OAAO,CAAEM,EAAE,MAChE,CAAA2E,WAAW,oBAAXA,WAAW,CAAEV,UAAU,MAAIvE,OAAO,oBAAPA,OAAO,CAAEuE,UAAU,EAC9C;EAEF,IAAAyB,SAAA,GAAoC,IAAAC,eAAQ,EAAC,IAAI,CAAC;IAAAC,UAAA,OAAAC,eAAA,aAAAH,SAAA;IAA3C/B,UAAU,GAAAiC,UAAA;IAAEE,aAAa,GAAAF,UAAA;EAChC,IAAAG,UAAA,GAAwD,IAAAJ,eAAQ,EAE9D;MACAxC,UAAU,EAAE,EAAE;MACd0B,aAAa,EAAEX,SAAS;MACxBY,QAAQ,EAAE,CACR;QACE1D,IAAI,EAAE,KAAK;QACXC,IAAI,EAAE;MACR,CAAC,CACF;MACD0D,MAAM,EAAEvB,iBAAiB,CAACK;IAC5B,CAAC,CAAC;IAAAmC,UAAA,OAAAH,eAAA,aAAAE,UAAA;IAZKE,oBAAoB,GAAAD,UAAA;IAAEE,uBAAuB,GAAAF,UAAA;EAcpD,IAAMG,UAAU,GAAGzC,0BAA0B,CAC3CzC,OAAO,EACPC,MAAM,EACNyD,WAAW,IAAIjF,OAAO,EACtBiE,UAAU,CACX;EAED,IAAAyC,gBAAS,EAAC,YAAM;IACd,IAAIb,mBAAmB,EAAE;MAAA,IAAAc,kBAAA;MACvB,IAAMC,WAAW,IAAAD,kBAAA,GAAGpF,OAAO,CAACuE,SAAS,EAAE,qBAAnBa,kBAAA,CAAqBC,WAAW;MACpD,IAAI,OAAOA,WAAW,KAAK,SAAS,EAAE;QACpCR,aAAa,CAACQ,WAAW,CAAC;MAC5B;IACF;EACF,CAAC,EAAE,CAACf,mBAAmB,CAAC,CAAC;EAEzB,IAAAa,gBAAS,EACP;IAAA,OACEF,uBAAuB,CACrBzB,uBAAuB,CAAC;MACtBxD,OAAO,EAAPA,OAAO;MACPC,MAAM,EAANA,MAAM;MACNyD,WAAW,EAAXA,WAAW;MACXhB,UAAU,EAAVA,UAAU;MACV/D,CAAC,EAADA,CAAC;MACDqD,eAAe,EAAfA;IACF,CAAC,CAAC,CACH;EAAA,GACH,CAACwC,wBAAwB,EAAEP,WAAW,EAAEvB,UAAU,EAAEwC,UAAU,CAAC,CAChE;EAED,OAAOF,oBAAoB;AAC7B,CAAC;AAACxC,OAAA,CAAAwB,uBAAA,GAAAA,uBAAA"}
|
|
@@ -38,19 +38,19 @@ var measuredScreenHeight = (0, _utils.vh)(100);
|
|
|
38
38
|
var screenWidth = (0, _utils.vw)(100);
|
|
39
39
|
var halfScreenWidth = (0, _utils.vw)(50);
|
|
40
40
|
var MARGIN = 32;
|
|
41
|
-
var HasPinched
|
|
42
|
-
exports.HasPinched = HasPinched;
|
|
43
|
-
(function (HasPinched) {
|
|
41
|
+
var HasPinched = function (HasPinched) {
|
|
44
42
|
HasPinched[HasPinched["FALSE"] = 0] = "FALSE";
|
|
45
43
|
HasPinched[HasPinched["TRUE"] = 1] = "TRUE";
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
exports.
|
|
49
|
-
|
|
44
|
+
return HasPinched;
|
|
45
|
+
}({});
|
|
46
|
+
exports.HasPinched = HasPinched;
|
|
47
|
+
var IsSwiping = function (IsSwiping) {
|
|
50
48
|
IsSwiping[IsSwiping["UNDETERMINED"] = 0] = "UNDETERMINED";
|
|
51
49
|
IsSwiping[IsSwiping["TRUE"] = 1] = "TRUE";
|
|
52
50
|
IsSwiping[IsSwiping["FALSE"] = 2] = "FALSE";
|
|
53
|
-
|
|
51
|
+
return IsSwiping;
|
|
52
|
+
}({});
|
|
53
|
+
exports.IsSwiping = IsSwiping;
|
|
54
54
|
var ImageGallery = function ImageGallery(props) {
|
|
55
55
|
var _StatusBar$currentHei, _imageGalleryAttachme;
|
|
56
56
|
var _props$giphyVersion = props.giphyVersion,
|