about summary refs log tree commit diff
path: root/src/components/dialogs/GifSelect.shared.tsx
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2024-06-04 04:05:46 +0300
committerGitHub <noreply@github.com>2024-06-04 02:05:46 +0100
commitda96fb1ef5a37018b6a238c3614e9b845d8e2686 (patch)
tree31022f17c172635beedade3597e48035993e6144 /src/components/dialogs/GifSelect.shared.tsx
parentb02445883ab5abd7daa80c3a27cf06ffaf539ff3 (diff)
downloadvoidsky-da96fb1ef5a37018b6a238c3614e9b845d8e2686.tar.zst
Native `formSheet` for GIF select on iOS (#4328)
* native formsheet for gif select

* trigger confirm discard if have gif

* give modal a background color

* fix web top bar - unrelated but I cba to make a separate PR
Diffstat (limited to 'src/components/dialogs/GifSelect.shared.tsx')
-rw-r--r--src/components/dialogs/GifSelect.shared.tsx53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/components/dialogs/GifSelect.shared.tsx b/src/components/dialogs/GifSelect.shared.tsx
new file mode 100644
index 000000000..90b2abaa8
--- /dev/null
+++ b/src/components/dialogs/GifSelect.shared.tsx
@@ -0,0 +1,53 @@
+import React, {useCallback} from 'react'
+import {Image} from 'expo-image'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {logEvent} from '#/lib/statsig/statsig'
+import {Gif} from '#/state/queries/tenor'
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {Button} from '../Button'
+
+export function GifPreview({
+  gif,
+  onSelectGif,
+}: {
+  gif: Gif
+  onSelectGif: (gif: Gif) => void
+}) {
+  const {gtTablet} = useBreakpoints()
+  const {_} = useLingui()
+  const t = useTheme()
+
+  const onPress = useCallback(() => {
+    logEvent('composer:gif:select', {})
+    onSelectGif(gif)
+  }, [onSelectGif, gif])
+
+  return (
+    <Button
+      label={_(msg`Select GIF "${gif.title}"`)}
+      style={[a.flex_1, gtTablet ? {maxWidth: '33%'} : {maxWidth: '50%'}]}
+      onPress={onPress}>
+      {({pressed}) => (
+        <Image
+          style={[
+            a.flex_1,
+            a.mb_sm,
+            a.rounded_sm,
+            {aspectRatio: 1, opacity: pressed ? 0.8 : 1},
+            t.atoms.bg_contrast_25,
+          ]}
+          source={{
+            uri: gif.media_formats.tinygif.url,
+          }}
+          contentFit="cover"
+          accessibilityLabel={gif.title}
+          accessibilityHint=""
+          cachePolicy="none"
+          accessibilityIgnoresInvertColors
+        />
+      )}
+    </Button>
+  )
+}