From 3998285fd5ddcdb9d96ae05559fd373cb5300135 Mon Sep 17 00:00:00 2001 From: Hannah_Bagga Date: Fri, 26 Jun 2026 20:58:57 +0200 Subject: [PATCH] Fixed the gif picker just need to add in gifs --- src/app/api/gifs/route.ts | 6 +----- src/components/chats/media-picker.tsx | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/app/api/gifs/route.ts b/src/app/api/gifs/route.ts index 03ee7a1..8ecf18e 100644 --- a/src/app/api/gifs/route.ts +++ b/src/app/api/gifs/route.ts @@ -15,11 +15,7 @@ export async function GET(request: NextRequest) { const pos = searchParams.get("pos") || "" if (!TENOR_API_KEY) { - return NextResponse.json({ - results: [], - error: "TENOR_API_KEY not configured", - noKey: true, - }) + return NextResponse.json({ results: [], noKey: true }) } const endpoint = q diff --git a/src/components/chats/media-picker.tsx b/src/components/chats/media-picker.tsx index e611ded..d732c96 100644 --- a/src/components/chats/media-picker.tsx +++ b/src/components/chats/media-picker.tsx @@ -39,8 +39,9 @@ export default function MediaPicker({ onEmojiSelect, onMediaSelect, onClose, the const [gifResults, setGifResults] = useState([]) const [gifLoading, setGifLoading] = useState(false) const [gifError, setGifError] = useState("") - const [gifNoKey, setGifNoKey] = useState(false) + const [gifUnavailable, setGifUnavailable] = useState(false) const [gifNext, setGifNext] = useState("") + const gifCache = useRef>(new Map()) const [recentGifs, setRecentGifs] = useState([]) const [recentStickers, setRecentStickers] = useState([]) const [stickerPacks] = useState(getStickerPacks) @@ -60,6 +61,13 @@ export default function MediaPicker({ onEmojiSelect, onMediaSelect, onClose, the useEffect(() => { setRecentStickers(getRecent(RECENT_STICKERS_KEY)) }, []) const fetchGifs = useCallback(async (query: string, pos = "") => { + const cacheKey = `${query}::${pos}` + const cached = gifCache.current.get(cacheKey) + if (cached && !pos) { + setGifResults(cached.results) + setGifNext(cached.next) + return + } setGifLoading(true) setGifError("") try { @@ -68,17 +76,18 @@ export default function MediaPicker({ onEmojiSelect, onMediaSelect, onClose, the const res = await fetch(`/api/gifs?${params}`) const data = await res.json() if (data.noKey) { - setGifNoKey(true) + setGifUnavailable(true) setGifResults([]) } else if (data.results) { setGifResults((prev) => (pos ? [...prev, ...data.results] : data.results)) setGifNext(data.next || "") - setGifNoKey(false) + setGifUnavailable(false) + if (!pos) gifCache.current.set(cacheKey, { results: data.results, next: data.next || "" }) } else { setGifError("No results found") } } catch { - setGifError("Failed to load GIFs") + setGifError("Could not load GIFs. Check your connection.") } setGifLoading(false) }, []) @@ -196,11 +205,10 @@ export default function MediaPicker({ onEmojiSelect, onMediaSelect, onClose, the
- ) : gifNoKey ? ( + ) : gifUnavailable ? (
- GIF search requires a Tenor API key - Set TENOR_API_KEY in .env.local + GIFs are temporarily unavailable.
) : gifError ? (