feat: implement database and table explorer sidebar with persistent app state management

This commit is contained in:
Ümit Tunç
2026-04-24 08:14:14 +03:00
parent cd34cc6412
commit d0d0f193a1
2 changed files with 32 additions and 17 deletions
+19 -7
View File
@@ -14,6 +14,7 @@ const Sidebar: React.FC = () => {
const [dbSearch, setDbSearch] = useState(''); const [dbSearch, setDbSearch] = useState('');
const [tableSearch, setTableSearch] = useState(''); const [tableSearch, setTableSearch] = useState('');
// Fetch databases on mount
useEffect(() => { useEffect(() => {
const fetchDatabases = async () => { const fetchDatabases = async () => {
try { try {
@@ -28,26 +29,37 @@ const Sidebar: React.FC = () => {
fetchDatabases(); fetchDatabases();
}, []); }, []);
const handleDatabaseClick = async (db: string) => { // Fetch tables when activeDatabase changes
if (activeDatabase === db) { useEffect(() => {
setActiveDatabase(null); const fetchTables = async () => {
if (!activeDatabase) {
setTables([]); setTables([]);
setTableSearch('');
return; return;
} }
setActiveDatabase(db);
setTableSearch('');
setTablesLoading(true); setTablesLoading(true);
try { try {
const response = await SchemaService.getTables(db); const response = await SchemaService.getTables(activeDatabase);
setTables(response.data); setTables(response.data);
} catch (error) { } catch (error) {
console.error('Failed to fetch tables', error); console.error('Failed to fetch tables', error);
setTables([]);
} finally { } finally {
setTablesLoading(false); setTablesLoading(false);
} }
}; };
fetchTables();
}, [activeDatabase]);
const handleDatabaseClick = (db: string) => {
if (activeDatabase === db) {
setActiveDatabase(null);
setTableSearch('');
} else {
setActiveDatabase(db);
setTableSearch('');
}
};
const filteredDatabases = useMemo(() => { const filteredDatabases = useMemo(() => {
return databases.filter(db => db.toLowerCase().includes(dbSearch.toLowerCase())); return databases.filter(db => db.toLowerCase().includes(dbSearch.toLowerCase()));
+5 -2
View File
@@ -43,11 +43,14 @@ export const useAppStore = create<AppState>()(
{ {
name: 'mariavel-storage', name: 'mariavel-storage',
storage: createJSONStorage(() => localStorage), storage: createJSONStorage(() => localStorage),
// Only persist connection and connected status // Persist crucial session state
partialize: (state) => ({ partialize: (state) => ({
connection: state.connection, connection: state.connection,
connected: state.connected, connected: state.connected,
darkMode: state.darkMode darkMode: state.darkMode,
activeDatabase: state.activeDatabase,
activeTable: state.activeTable,
activeTab: state.activeTab
}), }),
} }
) )