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 [tableSearch, setTableSearch] = useState('');
// Fetch databases on mount
useEffect(() => {
const fetchDatabases = async () => {
try {
@@ -28,26 +29,37 @@ const Sidebar: React.FC = () => {
fetchDatabases();
}, []);
const handleDatabaseClick = async (db: string) => {
if (activeDatabase === db) {
setActiveDatabase(null);
// Fetch tables when activeDatabase changes
useEffect(() => {
const fetchTables = async () => {
if (!activeDatabase) {
setTables([]);
setTableSearch('');
return;
}
setActiveDatabase(db);
setTableSearch('');
setTablesLoading(true);
try {
const response = await SchemaService.getTables(db);
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) {
setActiveDatabase(null);
setTableSearch('');
} else {
setActiveDatabase(db);
setTableSearch('');
}
};
const filteredDatabases = useMemo(() => {
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',
storage: createJSONStorage(() => localStorage),
// Only persist connection and connected status
// Persist crucial session state
partialize: (state) => ({
connection: state.connection,
connected: state.connected,
darkMode: state.darkMode
darkMode: state.darkMode,
activeDatabase: state.activeDatabase,
activeTable: state.activeTable,
activeTab: state.activeTab
}),
}
)