client/app/pages/queries/hooks/useEditVisualizationDialog.js (24 lines of code) (raw):

import { extend, filter, find } from "lodash"; import { useCallback } from "react"; import EditVisualizationDialog from "@/components/visualizations/EditVisualizationDialog"; import useImmutableCallback from "@/lib/hooks/useImmutableCallback"; export default function useEditVisualizationDialog(query, queryResult, onChange) { const handleChange = useImmutableCallback(onChange); return useCallback( (visualizationId = null) => { const visualization = find(query.visualizations, { id: visualizationId }) || null; EditVisualizationDialog.showModal({ query, visualization, queryResult, }).onClose(updatedVisualization => { const filteredVisualizations = filter(query.visualizations, v => v.id !== updatedVisualization.id); handleChange( extend(query.clone(), { visualizations: [...filteredVisualizations, updatedVisualization] }), updatedVisualization ); }); }, [query, queryResult, handleChange] ); }