github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/ui/dashboard/src/utils/storybook.tsx (about)

     1  import "../utils/registerComponents";
     2  import Dashboard from "../components/dashboards/layout/Dashboard";
     3  import { buildComponentsMap } from "../components";
     4  import { DashboardContext } from "../hooks/useDashboard";
     5  import {
     6    DashboardDataModeLive,
     7    DashboardPanelType,
     8    DashboardRunState,
     9    DashboardSearch,
    10  } from "../types";
    11  import { noop } from "./func";
    12  import { useStorybookTheme } from "../hooks/useStorybookTheme";
    13  
    14  type PanelStoryDecoratorProps = {
    15    definition: any;
    16    panelType: DashboardPanelType;
    17    panels?: {
    18      [key: string]: any;
    19    };
    20    status?: DashboardRunState;
    21    additionalProperties?: {
    22      [key: string]: any;
    23    };
    24  };
    25  
    26  const stubDashboardSearch: DashboardSearch = {
    27    value: "",
    28    groupBy: { value: "mod", tag: null },
    29  };
    30  
    31  export const PanelStoryDecorator = ({
    32    definition = {},
    33    panels = {},
    34    panelType,
    35    status = "complete",
    36    additionalProperties = {},
    37  }: PanelStoryDecoratorProps) => {
    38    const { theme, wrapperRef } = useStorybookTheme();
    39    const { properties, ...rest } = definition;
    40  
    41    const newPanel = {
    42      ...rest,
    43      name: `${panelType}.story`,
    44      panel_type: panelType,
    45      properties: {
    46        ...(properties || {}),
    47        ...additionalProperties,
    48      },
    49      sql: "storybook",
    50      status,
    51    };
    52  
    53    return (
    54      <DashboardContext.Provider
    55        value={{
    56          versionMismatchCheck: false,
    57          metadata: {
    58            mod: {
    59              title: "Storybook",
    60              full_name: "mod.storybook",
    61              short_name: "storybook",
    62            },
    63            installed_mods: {},
    64            telemetry: "none",
    65          },
    66          availableDashboardsLoaded: true,
    67          closePanelDetail: noop,
    68          dataMode: DashboardDataModeLive,
    69          snapshotId: null,
    70          dispatch: noop,
    71          error: null,
    72          dashboards: [],
    73          dashboardsMap: {},
    74          selectedPanel: null,
    75          selectedDashboard: {
    76            title: "Storybook Dashboard Wrapper",
    77            full_name: "storybook.dashboard.storybook_dashboard_wrapper",
    78            short_name: "storybook_dashboard_wrapper",
    79            type: "dashboard",
    80            tags: {},
    81            mod_full_name: "mod.storybook",
    82            is_top_level: true,
    83          },
    84          selectedDashboardInputs: {},
    85          lastChangedInput: null,
    86          execution_id: null,
    87          panelsLog: {},
    88          panelsMap: {
    89            [newPanel.name]: newPanel,
    90            ...panels,
    91          },
    92          dashboard: {
    93            artificial: false,
    94            name: "storybook.dashboard.storybook_dashboard_wrapper",
    95            children: [newPanel],
    96            panel_type: "dashboard",
    97            dashboard: "storybook.dashboard.storybook_dashboard_wrapper",
    98          },
    99  
   100          dashboardTags: {
   101            keys: [],
   102          },
   103  
   104          search: stubDashboardSearch,
   105  
   106          breakpointContext: {
   107            currentBreakpoint: "xl",
   108            maxBreakpoint: () => true,
   109            minBreakpoint: () => true,
   110            width: 0,
   111          },
   112  
   113          themeContext: {
   114            theme,
   115            setTheme: noop,
   116            wrapperRef,
   117          },
   118  
   119          components: buildComponentsMap(),
   120          refetchDashboard: false,
   121          state: "complete",
   122          progress: 100,
   123          render: { headless: false, snapshotCompleteDiv: false },
   124          snapshot: null,
   125          snapshotFileName: null,
   126        }}
   127      >
   128        <Dashboard showPanelControls={false} />
   129      </DashboardContext.Provider>
   130    );
   131  };