(function UserI
- {canSearch && }
+ {canSearch && }
{isSttSupported && (
{
void setComposerMode('assistant')
- setSearchQuery('')
initialViewUserInputRef.current?.clear()
chatViewUserInputRef.current?.clear()
void handleSubmit(prompt, undefined, undefined, 'assistant')
diff --git a/apps/sim/app/workspace/[workspaceId]/home/hooks/use-mothership-mode.ts b/apps/sim/app/workspace/[workspaceId]/home/hooks/use-mothership-mode.ts
index 99d8c5ea2d0..b9f66ed060a 100644
--- a/apps/sim/app/workspace/[workspaceId]/home/hooks/use-mothership-mode.ts
+++ b/apps/sim/app/workspace/[workspaceId]/home/hooks/use-mothership-mode.ts
@@ -1,7 +1,13 @@
'use client'
-import { useQueryState } from 'nuqs'
-import { modeParam } from '@/app/workspace/[workspaceId]/home/search-params'
+import { useCallback } from 'react'
+import { useQueryStates } from 'nuqs'
+import {
+ CLEARED_SEARCH_FILTERS,
+ composerModeParsers,
+ type MothershipMode,
+ resourceUrlKeys,
+} from '@/app/workspace/[workspaceId]/home/search-params'
/**
* The composer's mode, read from and written to the URL's `mode` param so a
@@ -9,5 +15,18 @@ import { modeParam } from '@/app/workspace/[workspaceId]/home/search-params'
* separate Search and Assistant routes do. Build is the clean URL.
*/
export function useMothershipMode() {
- return useQueryState(modeParam.key, modeParam.parser)
+ const [{ mode }, setParams] = useQueryStates(composerModeParsers, resourceUrlKeys)
+ const setMode = useCallback(
+ (next: MothershipMode) =>
+ setParams(
+ {
+ mode: next,
+ ...(next === 'search' ? {} : { q: null, ...CLEARED_SEARCH_FILTERS }),
+ },
+ { history: 'replace', scroll: false }
+ ),
+ [setParams]
+ )
+
+ return [mode, setMode] as const
}
diff --git a/apps/sim/app/workspace/[workspaceId]/home/search-params.ts b/apps/sim/app/workspace/[workspaceId]/home/search-params.ts
index 101ec04207e..18398e046b8 100644
--- a/apps/sim/app/workspace/[workspaceId]/home/search-params.ts
+++ b/apps/sim/app/workspace/[workspaceId]/home/search-params.ts
@@ -76,3 +76,10 @@ export const searchFilterParsers = {
/** Every search param at its default: what leaving a search writes. */
export const CLEARED_SEARCH_FILTERS = { source: null, updated: null } as const
+
+/** A mode transition clears its search query and filters in the same URL update. */
+export const composerModeParsers = {
+ [modeParam.key]: modeParam.parser,
+ [searchQueryParam.key]: searchQueryParam.parser,
+ ...searchFilterParsers,
+} as const