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 };