< Summary - Frontend Coverage Report (Windows)

Information
Class: src\context\useHooks.js
Assembly: Default
File(s): src\context\useHooks.js
Line coverage
77%
Covered lines: 46
Uncovered lines: 13
Coverable lines: 59
Total lines: 59
Line coverage: 77.9%
Branch coverage
80%
Covered branches: 8
Total branches: 10
Branch coverage: 80%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

File(s)

src\context\useHooks.js

#LineLine coverage
 11import { useState, useEffect, useMemo, useCallback } from 'react';
 12import { useMaintenance } from './MaintenanceContext.js';
 13
 14// Custom Hook: useMachineStats
 15// Demonstrates Point 4 (useMemo) and Point 5 (Custom Hooks)
 16export function useMachineStats() {
 167    const { machines } = useMaintenance();
 168
 169    // useMemo: Only recalculate stats if the machines array changes
 1610    const stats = useMemo(() => {
 811        const machineList = machines || [];
 812        const total = machineList.length;
 813        const operational = machineList.filter(m => m.status === 'operational').length;
 814        const warning = machineList.filter(m => m.status === 'warning').length;
 815        const maintenance = machineList.filter(m => m.status === 'maintenance').length;
 816
 817        return {
 818            total,
 819            operational,
 820            warning,
 821            maintenance,
 822            healthScore: total > 0 ? Math.round((operational / total) * 100) : 0
 823        };
 1624    }, [machines]);
 1625
 1626    return stats;
 1627}
 128
 129// Custom Hook: useSystemClock
 130// Demonstrates Point 1 (useState), Point 2 (useEffect) and Point 5 (Custom Hooks)
 131export function useSystemClock() {
 032    const [time, setTime] = useState(new Date());
 033
 034    useEffect(() => {
 035        const timer = setInterval(() => {
 036            setTime(new Date());
 037        }, 1000);
 038
 039        // Point 2: Cleanup function
 040        return () => clearInterval(timer);
 041    }, []);
 042
 043    return time.toLocaleTimeString();
 044}
 145
 146// Custom Hook: useLiveSearch
 147// Demonstrates Point 4 (useCallback)
 148export function useLiveSearch(items, searchKey) {
 2649    const [query, setQuery] = useState('');
 2650
 2651    const filteredItems = useMemo(() => {
 1752        if (!query) return items;
 253        return items.filter(item =>
 454            item[searchKey].toLowerCase().includes(query.toLowerCase())
 255        );
 2656    }, [items, query, searchKey]);
 2657
 2658    return { query, setQuery, filteredItems };
 2659}