import { atom } from "jotai"; import { setActiveConvoIdAtom } from "./Conversation.atom"; import { systemBarVisibilityAtom } from "./SystemBar.atom"; export enum MainViewState { Welcome, ExploreModel, MyModel, ResourceMonitor, Setting, Conversation, /** * When user wants to create new conversation but haven't selected a model yet. */ ConversationEmptyModel, } /** * Stores the current main view state. Default is Welcome. */ const currentMainViewStateAtom = atom(MainViewState.Welcome); /** * Getter for current main view state. */ export const getMainViewStateAtom = atom((get) => get(currentMainViewStateAtom) ); /** * Setter for current main view state. */ export const setMainViewStateAtom = atom( null, (get, set, state: MainViewState) => { // return if the state is already set if (get(getMainViewStateAtom) === state) return; if (state !== MainViewState.Conversation) { // clear active conversation id if main view state is not Conversation set(setActiveConvoIdAtom, undefined); } const showSystemBar = state !== MainViewState.Conversation && state !== MainViewState.ConversationEmptyModel; // show system bar if state is not Conversation nor ConversationEmptyModel set(systemBarVisibilityAtom, showSystemBar); set(currentMainViewStateAtom, state); } );