diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorMenu.tsx b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorMenu.tsx
index f186c21f9d2..6b77f079544 100644
--- a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorMenu.tsx
+++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorMenu.tsx
@@ -22,13 +22,7 @@ const SideBarContent = observer(() => {
const router = useRouter()
const { profile } = useProfile()
const project = useSelectedProject()
-
- const [personalSnippetsFilterString, setPersonalSnippetsFilterString] = useState('')
- const [projectSnippetsFilterString, setProjectSnippetsFilterString] = useState('')
- const [favoritesFilterString, setFavoritesFilterString] = useState('')
- const [isPersonalSnippetsFilterOpen, setIsPersonalSnippetsFilterOpen] = useState(false)
- const [isProjectSnippetsFilterOpen, setIsProjectSnippetsFilterOpen] = useState(false)
- const [isFavoritesFilterOpen, setIsFavoritesFilterOpen] = useState(false)
+ const [searchText, setSearchText] = useState('')
const snap = useSqlEditorStateSnapshot()
const { isLoading, isSuccess } = useSqlSnippetsQuery(ref, {
@@ -46,39 +40,37 @@ const SideBarContent = observer(() => {
}, [snippets])
const filteredProjectSnippets = useMemo(() => {
- if (projectSnippetsFilterString.length > 0) {
+ if (searchText.length > 0) {
return projectSnippets.filter((tab) =>
- tab.name.toLowerCase().includes(projectSnippetsFilterString.toLowerCase())
+ tab.name.toLowerCase().includes(searchText.toLowerCase())
)
}
return projectSnippets
- }, [projectSnippets, projectSnippetsFilterString])
+ }, [projectSnippets, searchText])
const personalSnippets = useMemo(() => {
const ss = snippets.filter(
(snippet) => snippet.visibility === 'user' && !snippet.content.favorite
)
- if (personalSnippetsFilterString.length > 0) {
- return ss.filter((tab) =>
- tab.name.toLowerCase().includes(personalSnippetsFilterString.toLowerCase())
- )
+ if (searchText.length > 0) {
+ return ss.filter((tab) => tab.name.toLowerCase().includes(searchText.toLowerCase()))
}
return ss
- }, [personalSnippetsFilterString, snippets])
+ }, [searchText, snippets])
const favoriteSnippets = useMemo(() => {
return snippets.filter((snippet) => snippet.content.favorite)
}, [snippets])
const filteredFavoriteSnippets = useMemo(() => {
- if (favoritesFilterString.length > 0) {
+ if (searchText.length > 0) {
return favoriteSnippets.filter((tab) =>
- tab.name.toLowerCase().includes(favoritesFilterString.toLowerCase())
+ tab.name.toLowerCase().includes(searchText.toLowerCase())
)
}
return favoriteSnippets
- }, [favoriteSnippets, favoritesFilterString])
+ }, [favoriteSnippets, searchText])
const canCreateSQLSnippet = useCheckPermissions(PermissionAction.CREATE, 'user_content', {
resource: { type: 'sql', owner_id: profile?.id },
@@ -106,13 +98,7 @@ const SideBarContent = observer(() => {
snap.addSnippet(snippet as SqlSnippet, ref)
router.push(`/project/${ref}/sql/${snippet.id}`)
- // reset all search inputs when a new query is added
- setPersonalSnippetsFilterString('')
- setProjectSnippetsFilterString('')
- setFavoritesFilterString('')
- setIsPersonalSnippetsFilterOpen(false)
- setIsProjectSnippetsFilterOpen(false)
- setIsFavoritesFilterOpen(false)
+ setSearchText('')
} catch (error: any) {
ui.setNotification({
category: 'error',
@@ -132,236 +118,102 @@ const SideBarContent = observer(() => {
) : isSuccess ? (
-
+
+
+ }
+ placeholder="Search queries"
+ onChange={(e) => setSearchText(e.target.value.trim())}
+ value={searchText}
+ size="tiny"
+ actions={
+ searchText && (
+
+ )
+ }
+ />
-
-
- {favoriteSnippets.length >= 1 && (
-
-
-
-
-
- {isFavoritesFilterOpen && (
-
- }
- placeholder="Filter"
- disabled={isLoading}
- onChange={(e) => setFavoritesFilterString(e.target.value)}
- value={favoritesFilterString}
- onKeyDown={(e) => {
- if (e.key === 'Escape') {
- setIsFavoritesFilterOpen(false)
- setFavoritesFilterString('')
- }
- }}
- actions={
- favoritesFilterString && (
- setFavoritesFilterString('')}
- />
- )
- }
- />
-
- )}
- {filteredFavoriteSnippets.length > 0 ? (
-
- {filteredFavoriteSnippets.map((tabInfo) => {
- const { id } = tabInfo || {}
- return
- })}
-
- ) : (
-
- No queries found
-
- )}
+
+ {searchText.length === 0 && (
+
)}
- {projectSnippets.length >= 1 && (
-
-
-
-
-
- {isProjectSnippetsFilterOpen && (
-
-
}
- placeholder="Filter"
- disabled={isLoading}
- onChange={(e) => setProjectSnippetsFilterString(e.target.value)}
- value={projectSnippetsFilterString}
- onKeyDown={(e) => {
- if (e.key === 'Escape') {
- setIsProjectSnippetsFilterOpen(false)
- setProjectSnippetsFilterString('')
- }
- }}
- actions={
- projectSnippetsFilterString && (
-
setProjectSnippetsFilterString('')}
- />
- )
- }
- />
+ {searchText.length > 0 &&
+ filteredFavoriteSnippets.length === 0 &&
+ filteredProjectSnippets.length === 0 &&
+ personalSnippets.length === 0 && (
+
+
+
No queries found
+
+ Your search for "{searchText}" did not return any results
+
- )}
- {filteredProjectSnippets.length > 0 ? (
-
- {filteredProjectSnippets.map((tabInfo) => {
- const { id } = tabInfo || {}
- return
- })}
-
- ) : (
-
- No queries found
-
- )}
-
- )}
-
-
-
-
-
-
- {isPersonalSnippetsFilterOpen && (
-
- }
- placeholder="Filter"
- disabled={isLoading}
- onChange={(e) => setPersonalSnippetsFilterString(e.target.value)}
- value={personalSnippetsFilterString}
- onKeyDown={(e) => {
- if (e.key === 'Escape') {
- setIsPersonalSnippetsFilterOpen(false)
- setPersonalSnippetsFilterString('')
- }
- }}
- actions={
- personalSnippetsFilterString && (
- setPersonalSnippetsFilterString('')}
- />
- )
- }
- />
+
)}
- {personalSnippets.length > 0 ? (
+
+ {filteredFavoriteSnippets.length > 0 ? (
+
+
+
+ {filteredFavoriteSnippets.map((tabInfo) => {
+ const { id } = tabInfo || {}
+ return
+ })}
+
+
+ ) : null}
+
+ {filteredProjectSnippets.length > 0 ? (
+
+
+
+
+ {filteredProjectSnippets.map((tabInfo) => {
+ const { id } = tabInfo || {}
+ return
+ })}
+
+
+ ) : null}
+
+ {personalSnippets.length > 0 ? (
+
+
{personalSnippets.map((tabInfo) => {
const { id } = tabInfo || {}
return
})}
- ) : (
-
- {filteredFavoriteSnippets.length === 0 && (
- No queries found
- )}
-
-
- )}
-
+
+ ) : null}
) : (
diff --git a/apps/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx b/apps/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx
index c371007a0a3..8a1a498e4ad 100644
--- a/apps/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx
+++ b/apps/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx
@@ -191,7 +191,7 @@ const TableEditorMenu = () => {
size="tiny"
actions={
searchText && (
-