@oxyhq/services
Version:
81 lines (78 loc) • 2.46 kB
JavaScript
;
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