diff --git a/spa/src/components/search-overlay.tsx b/spa/src/components/search-overlay.tsx index 4301f4a..4b39bec 100644 --- a/spa/src/components/search-overlay.tsx +++ b/spa/src/components/search-overlay.tsx @@ -1,4 +1,5 @@ import { useState } from "react" +import { createPortal } from "react-dom" import { useTranslation } from "react-i18next" import { PenLine, Search, X } from "lucide-react" import { Button } from "@/components/ui/button" @@ -27,6 +28,8 @@ type SearchOverlayProps = { onSelect: (movie: MovieSelection) => void } +const IMDB_RE = /^tt\d{4,}$/i + export function SearchOverlay({ open, onClose, onSelect }: SearchOverlayProps) { const { t } = useTranslation() const [query, setQuery] = useState("") @@ -38,6 +41,15 @@ export function SearchOverlay({ open, onClose, onSelect }: SearchOverlayProps) { const debouncedQuery = useDebounce(query, 300) const { data, isPending } = useSearch({ q: debouncedQuery || undefined }) + function handleQueryChange(value: string) { + setQuery(value) + if (IMDB_RE.test(value.trim())) { + setManualImdbId(value.trim()) + setManual(true) + setQuery("") + } + } + if (!open) return null const hasImdbId = manualImdbId.trim().length > 0 @@ -56,62 +68,58 @@ export function SearchOverlay({ open, onClose, onSelect }: SearchOverlayProps) { }) } - if (manual) { - return ( -
{t("searchOverlay.imdbHelp")}
-{t("searchOverlay.orSearchByTitle")}
-{t("searchOverlay.imdbHelp")}
+{t("searchOverlay.orSearchByTitle")}
+