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
+27 -15
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,24 +29,35 @@ const Sidebar: React.FC = () => {
fetchDatabases(); fetchDatabases();
}, []); }, []);
const handleDatabaseClick = async (db: string) => { // Fetch tables when activeDatabase changes
useEffect(() => {
const fetchTables = async () => {
if (!activeDatabase) {
setTables([]);
return;
}
setTablesLoading(true);
try {
const response = await SchemaService.getTables(activeDatabase);
setTables(response.data);
} catch (error) {
console.error('Failed to fetch tables', error);
setTables([]);
} finally {
setTablesLoading(false);
}
};
fetchTables();
}, [activeDatabase]);
const handleDatabaseClick = (db: string) => {
if (activeDatabase === db) { if (activeDatabase === db) {
setActiveDatabase(null); setActiveDatabase(null);
setTables([]);
setTableSearch(''); setTableSearch('');
return; } else {
} setActiveDatabase(db);
setTableSearch('');
setActiveDatabase(db);
setTableSearch('');
setTablesLoading(true);
try {
const response = await SchemaService.getTables(db);
setTables(response.data);
} catch (error) {
console.error('Failed to fetch tables', error);
} finally {
setTablesLoading(false);
} }
}; };
+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
}), }),
} }
) )