import { useEffect, useState } from "react"; import { Modal } from "./Modal"; import { search, type SearchResponse } from "api/api"; import SearchResults from "../SearchResults"; import type { MergeFunc, MergeSearchCleanerFunc } from "~/routes/MediaItems/MediaLayout"; import { useNavigate } from "react-router"; interface Props { open: boolean setOpen: Function type: string currentId: number currentTitle: string mergeFunc: MergeFunc mergeCleanerFunc: MergeSearchCleanerFunc } export default function MergeModal(props: Props) { const [query, setQuery] = useState(''); const [data, setData] = useState(); const [debouncedQuery, setDebouncedQuery] = useState(query); const [mergeTarget, setMergeTarget] = useState<{title: string, id: number}>({title: '', id: 0}) const [mergeOrderReversed, setMergeOrderReversed] = useState(false) const [replaceImage, setReplaceImage] = useState(false) const navigate = useNavigate() const closeMergeModal = () => { props.setOpen(false) setQuery('') setData(undefined) setMergeOrderReversed(false) setMergeTarget({title: '', id: 0}) } const toggleSelect = ({title, id}: {title: string, id: number}) => { if (mergeTarget.id === 0) { setMergeTarget({title: title, id: id}) } else { setMergeTarget({title:"", id: 0}) } } useEffect(() => { console.log(mergeTarget) }, [mergeTarget]) const doMerge = () => { let from, to if (!mergeOrderReversed) { from = mergeTarget to = {id: props.currentId, title: props.currentTitle} } else { from = {id: props.currentId, title: props.currentTitle} to = mergeTarget } props.mergeFunc(from.id, to.id, replaceImage) .then(r => { if (r.ok) { if (mergeOrderReversed) { navigate(`/${props.type.toLowerCase()}/${mergeTarget.id}`) closeMergeModal() } else { window.location.reload() } } else { // TODO: handle error console.log(r) } }) .catch((err) => console.log(err)) } useEffect(() => { const handler = setTimeout(() => { setDebouncedQuery(query); if (query === '') { setData(undefined) } }, 300); return () => { clearTimeout(handler); }; }, [query]); useEffect(() => { if (debouncedQuery) { search(debouncedQuery).then((r) => { r = props.mergeCleanerFunc(r, props.currentId) setData(r); }); } }, [debouncedQuery]); return (

Merge {props.type}s

setQuery(e.target.value)} /> { mergeTarget.id !== 0 ? <> {mergeOrderReversed ?

{props.currentTitle} will be merged into {mergeTarget.title}

:

{mergeTarget.title} will be merged into {props.currentTitle}

}
setMergeOrderReversed(!mergeOrderReversed)} />
{ (props.type.toLowerCase() === "album" || props.type.toLowerCase() === "artist") &&
setReplaceImage(!replaceImage)} />
} : ''}
) }