import { Mutation, QueryKey, Query } from "@tanstack/react-query";
import { QueryBrowserModal } from "./QueryBrowserModal";
import { DataEditorModal } from "./DataEditorModal";
import { MutationBrowserModal } from "./MutationBrowserModal";
import { MutationEditorModal } from "./MutationEditorModal";
interface ReactQueryModalProps {
visible: boolean;
selectedQueryKey?: QueryKey;
selectedMutationId?: number;
onQuerySelect: (query: Query | undefined) => void;
onMutationSelect: (mutation: Mutation | undefined) => void;
onClose: () => void;
onMinimize?: (modalState: any) => void;
activeFilter?: string | null;
onFilterChange?: (filter: string | null) => void;
activeTab: "queries" | "mutations";
onTabChange: (tab: "queries" | "mutations") => void;
enableSharedModalDimensions?: boolean;
searchText?: string;
onSearchChange?: (text: string) => void;
}
/**
* Refactored ReactQueryModal following composition principles
*
* Applied principles:
* - Decompose by Responsibility: Separated query browser and data editor modals
* - Prefer Composition over Configuration: Uses specialized modal components
* - Extract Reusable Logic: Modal routing logic based on query selection
* - Utilize Render Props: Each modal handles its own rendering responsibility
*/
export function ReactQueryModal({
visible,
selectedQueryKey,
selectedMutationId,
onQuerySelect,
onMutationSelect,
onClose,
onMinimize,
activeFilter,
onFilterChange,
activeTab,
onTabChange,
enableSharedModalDimensions = false,
searchText = "",
onSearchChange,
}: ReactQueryModalProps) {
// Check if we have a key/id even if the query/mutation hasn't been found yet
const inDetail = !!selectedQueryKey || !!selectedMutationId;
const isQueryMode = activeTab === "queries";
const isMutationMode = activeTab === "mutations";
const commonProps = {
onClose,
onMinimize,
activeFilter,
onFilterChange,
enableSharedModalDimensions,
};
const showQueryBrowserModal = visible && !inDetail && isQueryMode;
const showMutationBrowserModal = visible && !inDetail && isMutationMode;
const showDataEditorModal =
visible && inDetail && isQueryMode && !!selectedQueryKey;
const showMutationEditorModal =
visible && inDetail && isMutationMode && !!selectedMutationId;
return (
<>
>
);
}