🔼 feat: Add Auto Submit For URL Query Params (#6440)

* feat: Add submit query param to auto submit a prompt passed in via URL

* refactor: add case-insensitive value for auto-submit

---------

Co-authored-by: Danny Avila <danacordially@gmail.com>
This commit is contained in:
Mike Averto 2025-03-21 12:00:18 -04:00 committed by GitHub
parent 3cff02e0b7
commit e928a8eee4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -14,6 +14,7 @@ import type { ZodAny } from 'zod';
import { getConvoSwitchLogic, removeUnavailableTools } from '~/utils';
import useDefaultConvo from '~/hooks/Conversations/useDefaultConvo';
import { useChatContext, useChatFormContext } from '~/Providers';
import useSubmitMessage from '~/hooks/Messages/useSubmitMessage';
import store from '~/store';
const parseQueryValue = (value: string) => {
@ -76,6 +77,7 @@ export default function useQueryParams({
const getDefaultConversation = useDefaultConvo();
const modularChat = useRecoilValue(store.modularChat);
const availableTools = useRecoilValue(store.availableTools);
const { submitMessage } = useSubmitMessage();
const queryClient = useQueryClient();
const { conversation, newConversation } = useChatContext();
@ -160,10 +162,12 @@ export default function useQueryParams({
});
const decodedPrompt = queryParams.prompt || '';
const shouldAutoSubmit = queryParams.submit?.toLowerCase() === 'true';
delete queryParams.prompt;
delete queryParams.submit;
const validSettings = processValidSettings(queryParams);
return { decodedPrompt, validSettings };
return { decodedPrompt, validSettings, shouldAutoSubmit };
};
const intervalId = setInterval(() => {
@ -180,7 +184,7 @@ export default function useQueryParams({
if (!textAreaRef.current) {
return;
}
const { decodedPrompt, validSettings } = processQueryParams();
const { decodedPrompt, validSettings, shouldAutoSubmit } = processQueryParams();
const currentText = methods.getValues('text');
/** Clean up URL parameters after successful processing */
@ -196,6 +200,15 @@ export default function useQueryParams({
methods.setValue('text', decodedPrompt, { shouldValidate: true });
textAreaRef.current.focus();
textAreaRef.current.setSelectionRange(decodedPrompt.length, decodedPrompt.length);
// Auto-submit if the submit parameter is true
if (shouldAutoSubmit) {
methods.handleSubmit((data) => {
if (data.text?.trim()) {
submitMessage(data);
}
})();
}
}
if (Object.keys(validSettings).length > 0) {
@ -208,5 +221,5 @@ export default function useQueryParams({
return () => {
clearInterval(intervalId);
};
}, [searchParams, methods, textAreaRef, newQueryConvo, newConversation]);
}, [searchParams, methods, textAreaRef, newQueryConvo, newConversation, submitMessage]);
}