Skip to content

SheetRegistry ​

Register sheets by name, with defaults and typed props, then open them anywhere with presentNamed.

tsx
import {NativeSheetProvider, SheetManager, SheetRegistry} from 'react-native-universal-sheet';

const registry = new SheetRegistry()
  .register<{userId: string}>('user-details', {
    render: ({userId}) => <UserDetails userId={userId} />,
    snapPoints: ['60%', '95%'],
  })
  .register('settings', {
    render: () => <Settings />,
    variant: 'side',
    side: 'right',
  });

const manager = new SheetManager({registry});

export default function App() {
  return (
    <NativeSheetProvider manager={manager}>
      <RootNavigator />
    </NativeSheetProvider>
  );
}

Open one:

tsx
const sheet = useNativeSheet();

sheet.presentNamed('user-details', {id: 'user-42', props: {userId: '42'}});

Methods ​

MethodReturnsDescription
register<P>(name, definition)thisAdd or overwrite a definition. Chainable. Throws on an empty name
unregister(name)booleanRemove a definition
has(name)booleanWhether it is registered
get(name)SheetDefinition | undefinedThe definition

SheetDefinition<P> ​

Every sheet option except id and content, plus:

FieldTypeDescription
render(props: P) => ReactNodeBuilds the content from the props passed to presentNamed

presentNamed(name, options) ​

OptionTypeDescription
idstringRequired. The id of this instance
propsPPassed to render
any sheet optionOverrides the definition's default for this call
tsx
sheet.presentNamed('user-details', {
  id: 'user-7',
  props: {userId: '7'},
  initialSnapPoint: '95%', // override
});

Returns {ok: false, reason: 'unknown-sheet'} if the name isn't registered.

See the Named sheets recipe for a typed setup.

Released under the MIT License.