synor/apps/desktop-wallet/src/hooks/useMiningEvents.ts
2026-02-02 04:54:53 +05:30

57 lines
1.7 KiB
TypeScript

import { useEffect } from 'react';
import { useMiningStore } from '../store/mining';
/**
* Hook to setup and cleanup mining event listeners
* Should be called once at the app level
*/
export function useMiningEvents() {
const setupEventListeners = useMiningStore(
(state) => state.setupEventListeners
);
const cleanupEventListeners = useMiningStore(
(state) => state.cleanupEventListeners
);
useEffect(() => {
setupEventListeners();
return () => cleanupEventListeners();
}, [setupEventListeners, cleanupEventListeners]);
}
/**
* Hook to auto-start mining if enabled in settings
*/
export function useAutoStartMining() {
const autoStartMining = useMiningStore((state) => state.autoStartMining);
const defaultThreads = useMiningStore((state) => state.defaultThreads);
const defaultCoinbaseAddress = useMiningStore(
(state) => state.defaultCoinbaseAddress
);
const status = useMiningStore((state) => state.status);
const startMining = useMiningStore((state) => state.startMining);
useEffect(() => {
// Only auto-start if setting is enabled and not already mining
if (!autoStartMining || status.isMining || !defaultCoinbaseAddress) return;
const autoStart = async () => {
try {
await startMining(defaultCoinbaseAddress, defaultThreads);
} catch (error) {
// Silently fail auto-start
console.debug('Auto-start mining failed:', error);
}
};
// Delay auto-start to allow node to connect first
const timeout = setTimeout(autoStart, 3000);
return () => clearTimeout(timeout);
}, [
autoStartMining,
defaultThreads,
defaultCoinbaseAddress,
status.isMining,
startMining,
]);
}