client/app/pages/queries/hooks/useDeleteVisualization.js (20 lines of code) (raw):

import { extend, filter } from "lodash"; import { useCallback } from "react"; import Visualization from "@/services/visualization"; import notification from "@/services/notification"; import useImmutableCallback from "@/lib/hooks/useImmutableCallback"; export default function useDeleteVisualization(query, onChange) { const handleChange = useImmutableCallback(onChange); return useCallback( visualizationId => Visualization.delete({ id: visualizationId }) .then(() => { const filteredVisualizations = filter(query.visualizations, v => v.id !== visualizationId); handleChange(extend(query.clone(), { visualizations: filteredVisualizations })); }) .catch(() => { notification.error("Error deleting visualization.", "Maybe it's used in a dashboard?"); }), [query, handleChange] ); }