* add empty conversation model selection Signed-off-by: James <james@jan.ai> * chore: using secondary button instead of sidebar button Signed-off-by: James <james@jan.ai> --------- Signed-off-by: James <james@jan.ai> Co-authored-by: James <james@jan.ai>
55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
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>(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);
|
|
}
|
|
);
|