github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/ui/dashboard/src/hooks/usePanelControls.ts (about) 1 import useDownloadPanelData from "./useDownloadPanelData"; 2 import useSelectPanel from "./useSelectPanel"; 3 import { IPanelControl } from "../components/dashboards/layout/Panel/PanelControls"; 4 import { PanelDefinition } from "../types"; 5 import { useCallback, useEffect, useState } from "react"; 6 7 const usePanelControls = (definition, show = false) => { 8 const { download } = useDownloadPanelData(definition as PanelDefinition); 9 const { select } = useSelectPanel(definition as PanelDefinition); 10 11 const downloadPanelData = useCallback( 12 async (e) => { 13 e.stopPropagation(); 14 await download(); 15 }, 16 [download] 17 ); 18 19 const getBasePanelControls = useCallback(() => { 20 const controls: IPanelControl[] = []; 21 if (!show || !definition) { 22 return controls; 23 } 24 if (definition.data) { 25 controls.push({ 26 action: downloadPanelData, 27 icon: "arrow-down-tray", 28 title: "Download data", 29 }); 30 } 31 controls.push({ 32 action: select, 33 icon: "arrows-pointing-out", 34 title: "View detail", 35 }); 36 return controls; 37 }, [definition, downloadPanelData, select, show]); 38 39 const [panelControls, setPanelControls] = useState(getBasePanelControls()); 40 41 useEffect( 42 () => setPanelControls(getBasePanelControls()), 43 [definition, getBasePanelControls, setPanelControls, show] 44 ); 45 46 return { panelControls }; 47 }; 48 49 export default usePanelControls;