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 && ( - )