From 68da7971806182cb99856c21954836b6facff0a9 Mon Sep 17 00:00:00 2001 From: Spence Pope Date: Thu, 4 Jun 2026 22:19:35 -0400 Subject: [PATCH] Add OTA fallback for gallery embed (#10734) Co-authored-by: Eric Bailey --- .../Post/Embed/GalleryFallbackEmbed.tsx | 99 +++++++++++++++++++ .../screens/Storybook/GalleryFallback.tsx | 25 +++++ src/view/screens/Storybook/Storybook.tsx | 2 + 3 files changed, 126 insertions(+) create mode 100644 src/components/Post/Embed/GalleryFallbackEmbed.tsx create mode 100644 src/view/screens/Storybook/GalleryFallback.tsx diff --git a/src/components/Post/Embed/GalleryFallbackEmbed.tsx b/src/components/Post/Embed/GalleryFallbackEmbed.tsx new file mode 100644 index 0000000000..38d7e4d013 --- /dev/null +++ b/src/components/Post/Embed/GalleryFallbackEmbed.tsx @@ -0,0 +1,99 @@ +import {Linking, View} from 'react-native' +import {plural} from '@lingui/core/macro' +import {Trans, useLingui} from '@lingui/react/macro' + +import {BSKY_DOWNLOAD_URL} from '#/lib/constants' +import {atoms as a, useTheme} from '#/alf' +import {Button, ButtonText} from '#/components/Button' +import {Sparkle_Stroke2_Corner0_Rounded as Sparkle} from '#/components/icons/Sparkle' +import {Text} from '#/components/Typography' +import {IS_NATIVE} from '#/env' + +/** + * OTA-able fallback that ships to native builds which don't yet know how to + * render the new gallery embed (>4 images, Photos v2). Final copy and visual + * treatment pending design from Darrin/Danielle/Alex. + * + * Native-only per APP-2308 - web builds receive the new gallery support in + * the same release that adds it. + */ +export function GalleryFallbackEmbed({count}: {count?: number}) { + const t = useTheme() + const {t: l} = useLingui() + + const bodyStyle = [ + a.text_sm, + a.text_center, + a.leading_snug, + t.atoms.text_contrast_high, + ] + + return ( + + + + Something new is here + + {count ? ( + + + {plural(count, { + one: 'This post has # photo.', + other: 'This post has # photos.', + })} + + {IS_NATIVE ? ( + + {plural(count, { + one: 'Update your app to see it.', + other: 'Update your app to see them all.', + })} + + ) : ( + + {plural(count, { + one: 'Refresh the page to see it.', + other: 'Refresh the page to see them all.', + })} + + )} + + ) : IS_NATIVE ? ( + + Update your app to see it. + + ) : ( + + Refresh the page to see it. + + )} + {IS_NATIVE && ( + + )} + + ) +} diff --git a/src/view/screens/Storybook/GalleryFallback.tsx b/src/view/screens/Storybook/GalleryFallback.tsx new file mode 100644 index 0000000000..7cca087dba --- /dev/null +++ b/src/view/screens/Storybook/GalleryFallback.tsx @@ -0,0 +1,25 @@ +import {View} from 'react-native' + +import {atoms as a} from '#/alf' +import {GalleryFallbackEmbed} from '#/components/Post/Embed/GalleryFallbackEmbed' +import {H1, H3} from '#/components/Typography' + +export function GalleryFallback() { + return ( + +

Gallery fallback (APP-2308)

+ +

No count

+ + +

1 photo

+ + +

5 photos

+ + +

10 photos

+ +
+ ) +} diff --git a/src/view/screens/Storybook/Storybook.tsx b/src/view/screens/Storybook/Storybook.tsx index 8fb85e8e0a..33c31a9ee6 100644 --- a/src/view/screens/Storybook/Storybook.tsx +++ b/src/view/screens/Storybook/Storybook.tsx @@ -16,6 +16,7 @@ import {Breakpoints} from './Breakpoints' import {Buttons} from './Buttons' import {Dialogs} from './Dialogs' import {Forms} from './Forms' +import {GalleryFallback} from './GalleryFallback' import {Icons} from './Icons' import {Links} from './Links' import {Menus} from './Menus' @@ -120,6 +121,7 @@ export default function Storybook() { +