From 4304af47b90ac48205ac346480855623da4c3d31 Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Wed, 27 Mar 2024 12:21:26 +0000 Subject: [PATCH] feat: addons in bottomsheet --- packages/react-native-ui/src/Layout.tsx | 87 +++++++++++++++++++++---- packages/react-native/src/View.tsx | 2 +- 2 files changed, 74 insertions(+), 15 deletions(-) diff --git a/packages/react-native-ui/src/Layout.tsx b/packages/react-native-ui/src/Layout.tsx index 768c540f16..e883b04649 100644 --- a/packages/react-native-ui/src/Layout.tsx +++ b/packages/react-native-ui/src/Layout.tsx @@ -1,7 +1,12 @@ import { Sidebar } from './Sidebar'; import { addons /* useStorybookApi, useStorybookState */ } from '@storybook/manager-api'; import { SET_CURRENT_STORY } from '@storybook/core-events'; -import type { API_IndexHash, Args, StoryContext } from '@storybook/types'; +import { + Addon_TypesEnum, + type API_IndexHash, + type Args, + type StoryContext, +} from '@storybook/types'; import { DEFAULT_REF_ID } from './constants'; import { BottomSheetBackdrop, @@ -120,12 +125,16 @@ export interface MobileAddonsPanelRef { setAddonsPanelOpen: (isOpen: boolean) => void; } -const MobileAddonsPanel = forwardRef( - ({ children }, ref) => { +const MobileAddonsPanel = forwardRef( + ({ storyId }, ref) => { const [isAddonsPanelOpen, setAddonsPanelOpen] = useState(false); const reducedMotion = useReducedMotion(); const addonsPanelBottomSheetRef = useRef(null); + const insets = useSafeAreaInsets(); + + const panels = addons.getElements(Addon_TypesEnum.PANEL); + const [addonSelected, setAddonSelected] = useState(Object.keys(panels)[0]); useImperativeHandle(ref, () => ({ isAddonsPanelOpen, @@ -149,8 +158,14 @@ const MobileAddonsPanel = forwardRef - + - - - - + + {Object.values(panels).map(({ id, title }) => { + let resolvedTitle = typeof title === 'function' ? title({}) : title; + + if (typeof resolvedTitle === 'string') { + resolvedTitle = resolvedTitle.toUpperCase(); + } + + return ( + setAddonSelected(id)} + text={resolvedTitle} + /> + ); + })} - {children} + + {(() => { + if (!storyId) { + return ( + + No Story Selected + + ); + } + + if (Object.keys(panels).length === 0) { + return ( + + No addons loaded. + + ); + } + + return panels[addonSelected].render({ active: true }); + })()} + ); @@ -214,9 +275,7 @@ export const Layout = ({ refId={DEFAULT_REF_ID} /> - - Test - +