feat: close #1301 support message actions

This commit is contained in:
Yidadaa
2023-05-09 00:39:00 +08:00
parent 1b19fdfe11
commit 222301307f
9 changed files with 68 additions and 21 deletions

View File

@@ -26,12 +26,10 @@ import {
SubmitKey,
useChatStore,
BOT_HELLO,
ROLES,
createMessage,
useAccessStore,
Theme,
useAppConfig,
ModelConfig,
DEFAULT_TOPIC,
} from "../store";
@@ -58,11 +56,8 @@ import { useLocation, useNavigate } from "react-router-dom";
import { Path } from "../constant";
import { Avatar } from "./emoji";
import { MaskAvatar, MaskConfig } from "./mask";
import {
DEFAULT_MASK_AVATAR,
DEFAULT_MASK_ID,
useMaskStore,
} from "../store/mask";
import { useMaskStore } from "../store/mask";
import { useCommand } from "../command";
const Markdown = dynamic(async () => (await import("./markdown")).Markdown, {
loading: () => <LoadingIcon />,
@@ -478,8 +473,7 @@ export function Chat() {
}
};
// submit user input
const onUserSubmit = () => {
const doSubmit = (userInput: string) => {
if (userInput.trim() === "") return;
setIsLoading(true);
chatStore.onUserInput(userInput).then(() => setIsLoading(false));
@@ -504,7 +498,7 @@ export function Chat() {
return;
}
if (shouldSubmit(e)) {
onUserSubmit();
doSubmit(userInput);
e.preventDefault();
}
};
@@ -618,6 +612,13 @@ export function Chat() {
const isChat = location.pathname === Path.Chat;
const autoFocus = !isMobileScreen || isChat; // only focus in chat page
useCommand({
fill: setUserInput,
submit: (text) => {
doSubmit(text);
},
});
return (
<div className={styles.chat} key={session.id}>
<div className="window-header">
@@ -816,7 +817,7 @@ export function Chat() {
text={Locale.Chat.Send}
className={styles["chat-input-send"]}
type="primary"
onClick={onUserSubmit}
onClick={() => doSubmit(userInput)}
/>
</div>
</div>

View File

@@ -23,6 +23,7 @@ import {
} from "react-router-dom";
import { SideBar } from "./sidebar";
import { useAppConfig } from "../store/config";
import { useMaskStore } from "../store/mask";
export function Loading(props: { noLogo?: boolean }) {
return (

View File

@@ -20,7 +20,7 @@ import Locale, { AllLangs, Lang } from "../locales";
import { useNavigate } from "react-router-dom";
import chatStyle from "./chat.module.scss";
import { useEffect, useState } from "react";
import { useState } from "react";
import { downloadAs, readFromFile } from "../utils";
import { Updater } from "../api/openai/typing";
import { ModelConfigList } from "./model-config";
@@ -197,7 +197,7 @@ export function ContextPrompts(props: {
className={chatStyle["context-prompt-button"]}
onClick={() =>
addContextPrompt({
role: "system",
role: "user",
content: "",
date: "",
})

View File

@@ -13,6 +13,7 @@ import { Mask, useMaskStore } from "../store/mask";
import Locale from "../locales";
import { useAppConfig, useChatStore } from "../store";
import { MaskAvatar } from "./mask";
import { useCommand } from "../command";
function getIntersectionArea(aRect: DOMRect, bRect: DOMRect) {
const xmin = Math.max(aRect.x, bRect.x);
@@ -108,9 +109,20 @@ export function NewChat() {
const startChat = (mask?: Mask) => {
chatStore.newSession(mask);
navigate(Path.Chat);
setTimeout(() => navigate(Path.Chat), 1);
};
useCommand({
mask: (id) => {
try {
const mask = maskStore.get(parseInt(id));
startChat(mask ?? undefined);
} catch {
console.error("[New Chat] failed to create chat from mask id=", id);
}
},
});
return (
<div className={styles["new-chat"]}>
<div className={styles["mask-header"]}>