UNPKG

@oxyhq/services

Version:

OxyHQ Expo/React Native SDK — UI components, screens, and native features

73 lines (69 loc) 2.07 kB
"use strict"; import { isValidRoute } from "./routes.js"; import { createStore } from 'zustand/vanilla'; /** * Bottom Sheet State Manager */ const initialState = { currentScreen: null, screenProps: {}, currentStep: undefined, history: [], isOpen: false, fullScreen: false }; export const bottomSheetStore = createStore(() => initialState); export const getState = () => bottomSheetStore.getState(); export const showBottomSheet = screenOrConfig => { const screen = typeof screenOrConfig === 'string' ? screenOrConfig : screenOrConfig.screen; const props = typeof screenOrConfig === 'string' ? {} : screenOrConfig.props || {}; const fullScreen = typeof screenOrConfig === 'string' ? false : screenOrConfig.fullScreen ?? false; if (!isValidRoute(screen)) { if (__DEV__) console.warn(`[BottomSheet] Invalid route: ${screen}`); return; } const state = bottomSheetStore.getState(); // Push current screen to history if navigating to different screen if (state.currentScreen && state.currentScreen !== screen) { bottomSheetStore.setState({ history: [...state.history, { screen: state.currentScreen, props: state.screenProps, step: state.currentStep }] }); } bottomSheetStore.setState({ currentScreen: screen, screenProps: props, currentStep: typeof props.initialStep === 'number' ? props.initialStep : undefined, isOpen: true, fullScreen }); }; export const closeBottomSheet = () => { bottomSheetStore.setState(initialState); }; export const goBack = () => { const { history } = bottomSheetStore.getState(); if (history.length > 0) { const prev = history[history.length - 1]; bottomSheetStore.setState({ currentScreen: prev.screen, screenProps: prev.props, currentStep: prev.step, history: history.slice(0, -1) }); return true; } return false; }; export const updateState = updates => { bottomSheetStore.setState(state => ({ ...state, ...updates })); }; //# sourceMappingURL=bottomSheetManager.js.map