diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-04-19 03:42:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-19 03:42:26 +0100 |
commit | ba1c4834ab23726c065aff31ef09e3578210ff01 (patch) | |
tree | 7c3335e22daf3b21e2e315d170b0936e0e26b5e6 /src/components/Dialog | |
parent | 20907381858b61fec61249c6ef836b9696e1ab05 (diff) | |
download | voidsky-ba1c4834ab23726c065aff31ef09e3578210ff01.tar.zst |
Add GIF select to composer (#3600)
* create dialog with flatlist in it * use alf for composer photos/camera/gif buttons * add gif icons * focus textinput on gif dialog close * add giphy API + gif grid * web support * add consent confirmation * track gif select * desktop web consent styles * use InlineLinkText instead of Link * add error/loading state * hide sideborders on web * disable composer buttons where necessary * skip cardyb and set thumbnail directly * switch legacy analytics to statsig * remove autoplay prop * disable photo/gif buttons if external media is present * memoize listmaybeplaceholder * fix pagination * don't set `value` of TextInput, clear via ref * remove console.log * close modal if press escape * pass alt text in the description * Fix typo * Rm dialog --------- Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
Diffstat (limited to 'src/components/Dialog')
-rw-r--r-- | src/components/Dialog/index.tsx | 34 | ||||
-rw-r--r-- | src/components/Dialog/index.web.tsx | 18 |
2 files changed, 49 insertions, 3 deletions
diff --git a/src/components/Dialog/index.tsx b/src/components/Dialog/index.tsx index 55798db7f..859e4965c 100644 --- a/src/components/Dialog/index.tsx +++ b/src/components/Dialog/index.tsx @@ -4,6 +4,8 @@ import Animated, {useAnimatedStyle} from 'react-native-reanimated' import {useSafeAreaInsets} from 'react-native-safe-area-context' import BottomSheet, { BottomSheetBackdropProps, + BottomSheetFlatList, + BottomSheetFlatListMethods, BottomSheetScrollView, BottomSheetScrollViewMethods, BottomSheetTextInput, @@ -11,10 +13,10 @@ import BottomSheet, { useBottomSheet, WINDOW_HEIGHT, } from '@discord/bottom-sheet/src' +import {BottomSheetFlatListProps} from '@discord/bottom-sheet/src/components/bottomSheetScrollable/types' import {logger} from '#/logger' import {useDialogStateControlContext} from '#/state/dialogs' -import {isNative} from 'platform/detection' import {atoms as a, flatten, useTheme} from '#/alf' import {Context} from '#/components/Dialog/context' import { @@ -238,7 +240,7 @@ export const ScrollableInner = React.forwardRef< }, flatten(style), ]} - contentContainerStyle={isNative ? a.pb_4xl : undefined} + contentContainerStyle={a.pb_4xl} ref={ref}> {children} <View style={{height: insets.bottom + a.pt_5xl.paddingTop}} /> @@ -246,6 +248,34 @@ export const ScrollableInner = React.forwardRef< ) }) +export const InnerFlatList = React.forwardRef< + BottomSheetFlatListMethods, + BottomSheetFlatListProps<any> +>(function InnerFlatList({style, contentContainerStyle, ...props}, ref) { + const insets = useSafeAreaInsets() + return ( + <BottomSheetFlatList + keyboardShouldPersistTaps="handled" + contentContainerStyle={[a.pb_4xl, flatten(contentContainerStyle)]} + ListFooterComponent={ + <View style={{height: insets.bottom + a.pt_5xl.paddingTop}} /> + } + ref={ref} + {...props} + style={[ + a.flex_1, + a.p_xl, + a.pt_0, + a.h_full, + { + marginTop: 40, + }, + flatten(style), + ]} + /> + ) +}) + export function Handle() { const t = useTheme() diff --git a/src/components/Dialog/index.web.tsx b/src/components/Dialog/index.web.tsx index 1892d944e..d00d2d832 100644 --- a/src/components/Dialog/index.web.tsx +++ b/src/components/Dialog/index.web.tsx @@ -1,5 +1,10 @@ import React, {useImperativeHandle} from 'react' -import {TouchableWithoutFeedback, View} from 'react-native' +import { + FlatList, + FlatListProps, + TouchableWithoutFeedback, + View, +} from 'react-native' import Animated, {FadeIn, FadeInDown} from 'react-native-reanimated' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' @@ -192,6 +197,17 @@ export function Inner({ export const ScrollableInner = Inner +export function InnerFlatList({ + label, + ...props +}: FlatListProps<any> & {label: string}) { + return ( + <Inner label={label}> + <FlatList {...props} /> + </Inner> + ) +} + export function Handle() { return null } |