AIStory: add blocking ui on generation
This commit is contained in:
parent
d917c6e6a9
commit
469359807d
|
|
@ -53,6 +53,12 @@ button {
|
|||
background-color: var(--backgroundColor);
|
||||
color: var(--color);
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
|
||||
&.disabled {
|
||||
pointer-events: none;
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ export const Input = () => {
|
|||
const { input, setInput, addMessage, continueMessage } = useContext(StateContext);
|
||||
const { generating } = useContext(LLMContext);
|
||||
|
||||
console.log({generating});
|
||||
|
||||
const handleChange = useCallback((e: Event) => {
|
||||
if (e.target instanceof HTMLTextAreaElement) {
|
||||
setInput(e.target.value);
|
||||
|
|
@ -36,7 +38,7 @@ export const Input = () => {
|
|||
return (
|
||||
<div class="chat-input">
|
||||
<textarea onInput={handleChange} onKeyDown={handleKeyDown} value={input} />
|
||||
<button onClick={handleSend} disabled={generating}>{input ? 'Send' : 'Continue'}</button>
|
||||
<button onClick={handleSend} class={`${generating ? 'disabled': ''}`}>{input ? 'Send' : 'Continue'}</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -27,17 +27,22 @@ export const MiniChat = ({ history = [], buttons = {}, open, onClose }: IProps)
|
|||
ref.current?.querySelectorAll('textarea').forEach(height ? DOMTools.fixHeight : DOMTools.scrollDown);
|
||||
}, []);
|
||||
|
||||
const handleInit = useCallback((force = false) => {
|
||||
if (force || confirm('Clear chat?')) {
|
||||
setMessages([MessageTools.create('', 'user', true)]);
|
||||
}
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
fitTextareas();
|
||||
}, [messages]);
|
||||
|
||||
useEffect(() => {
|
||||
if (messages.length === 0) {
|
||||
handleInit(true);
|
||||
}
|
||||
DOMTools.scrollDown(ref.current);
|
||||
}, [messages.length]);
|
||||
|
||||
useEffect(() => {
|
||||
setMessages([MessageTools.create('', 'user', true)]);
|
||||
}, [open])
|
||||
}, [messages.length, handleInit]);
|
||||
|
||||
const handleGenerate = useCallback(async () => {
|
||||
if (messages.length > 0 && !generating) {
|
||||
|
|
@ -97,11 +102,18 @@ export const MiniChat = ({ history = [], buttons = {}, open, onClose }: IProps)
|
|||
</div>
|
||||
</div>
|
||||
<div class={styles.buttons}>
|
||||
<button onClick={handleGenerate} disabled={generating}>
|
||||
<button onClick={handleGenerate} class={`${generating ? 'disabled' : ''}`}>
|
||||
Generate
|
||||
</button>
|
||||
{answer && Object.entries(buttons).map(([label, onClick], i) => (
|
||||
<button key={i} onClick={() => onClick(answer)}>
|
||||
<button onClick={() => handleInit()} class={`${generating ? 'disabled' : ''}`}>
|
||||
Clear
|
||||
</button>
|
||||
{Object.entries(buttons).map(([label, onClick], i) => (
|
||||
<button
|
||||
key={i}
|
||||
onClick={() => onClick(answer ?? '')}
|
||||
class={`${(generating || !answer) ? 'disabled' : ''}`}
|
||||
>
|
||||
{label}
|
||||
</button>
|
||||
))}
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ export const LLMContextProvider = ({ children }: { children?: any }) => {
|
|||
}), [connectionUrl]);
|
||||
|
||||
useEffect(() => void (async () => {
|
||||
if (triggerNext && !generating) {
|
||||
if (triggerNext && !generating.value) {
|
||||
setTriggerNext(false);
|
||||
|
||||
let messageId = messages.length - 1;
|
||||
|
|
@ -152,7 +152,7 @@ export const LLMContextProvider = ({ children }: { children?: any }) => {
|
|||
|
||||
MessageTools.playReady();
|
||||
}
|
||||
})(), [triggerNext, messages, generating]);
|
||||
})(), [triggerNext, messages, generating.value]);
|
||||
|
||||
const rawContext: IContext = {
|
||||
generating: generating.value,
|
||||
|
|
|
|||
Loading…
Reference in New Issue