UNPKG

@oxyhq/services

Version:

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

81 lines (78 loc) 2.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateState = exports.showBottomSheet = exports.goBack = exports.getState = exports.closeBottomSheet = exports.bottomSheetStore = void 0; var _routes = require("./routes.js"); var _vanilla = require("zustand/vanilla"); /** * Bottom Sheet State Manager */ const initialState = { currentScreen: null, screenProps: {}, currentStep: undefined, history: [], isOpen: false, fullScreen: false }; const bottomSheetStore = exports.bottomSheetStore = (0, _vanilla.createStore)(() => initialState); const getState = () => bottomSheetStore.getState(); exports.getState = getState; 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 (!(0, _routes.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 }); }; exports.showBottomSheet = showBottomSheet; const closeBottomSheet = () => { bottomSheetStore.setState(initialState); }; exports.closeBottomSheet = closeBottomSheet; 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; }; exports.goBack = goBack; const updateState = updates => { bottomSheetStore.setState(state => ({ ...state, ...updates })); }; exports.updateState = updateState; //# sourceMappingURL=bottomSheetManager.js.map