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;