@t1mmen/srtd
Version:
Supabase Repeatable Template Definitions (srtd): 🪄 Live-reloading SQL templates for Supabase DX. Make your database changes reviewable and migrations maintainable! 🚀
58 lines • 1.97 kB
JavaScript
// hooks/useDatabaseConnection.ts
import { useEffect, useState } from 'react';
import { testConnection } from '../utils/databaseConnection.js';
function parseDbError(error) {
if (error instanceof Error) {
if (error.message.includes('Connection terminated unexpectedly')) {
return 'Database connection lost. Is Supabase running?';
}
if (error.message.includes('ECONNREFUSED')) {
return 'Unable to connect to database. Is Supabase running?';
}
return error.message.split('\n')[0] || error.message;
}
return String(error);
}
export function useDatabaseConnection(checkInterval = 3000) {
const [state, setState] = useState({
isConnected: false,
isChecking: true,
error: undefined,
});
useEffect(() => {
let mounted = true;
async function checkConnection() {
if (!mounted)
return;
setState(prev => ({ ...prev, isChecking: true }));
try {
if (!mounted)
return;
const isConnected = await testConnection();
setState({
isConnected,
error: undefined,
isChecking: false,
});
}
catch (err) {
if (!mounted)
return;
setState({
isConnected: false,
error: parseDbError(err),
isChecking: false,
});
}
}
void checkConnection();
const intervalId = !state.isConnected ? setInterval(checkConnection, checkInterval) : undefined;
return () => {
mounted = false;
if (intervalId)
clearInterval(intervalId);
};
}, [checkInterval, state.isConnected]);
return state;
}
//# sourceMappingURL=useDatabaseConnection.js.map