< Summary - Frontend Coverage Report (Windows)

Information
Class: src\components\Header.js
Assembly: Default
File(s): src\components\Header.js
Line coverage
100%
Covered lines: 83
Uncovered lines: 0
Coverable lines: 83
Total lines: 83
Line coverage: 100%
Branch coverage
100%
Covered branches: 7
Total branches: 7
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

File(s)

src\components\Header.js

#LineLine coverage
 11import React, { useState, useEffect, useRef } from 'react';
 12import { Clock, User } from 'lucide-react';
 13
 14const WelcomeMessage = () => {
 185    const [time, setTime] = useState(new Date().toLocaleTimeString());
 186
 187    useEffect(() => {
 78        const timer = setInterval(() => setTime(new Date().toLocaleTimeString()), 1000);
 79        return () => clearInterval(timer);
 1810    }, []);
 1811
 1812    return (
 1813        <div style={{ padding: '10px 0', borderBottom: '1px solid #eee', marginBottom: '20px', display: 'flex', justifyC
 1814            <div style={{ display: 'flex', alignItems: 'center', gap: '8px', color: '#666' }}>
 1815                <Clock size={16} />
 1816                <span>{time}</span>
 1817            </div>
 1818            <div style={{ color: '#2ecc71', fontWeight: 'bold', fontSize: '0.9rem' }}>
 1819                ● SYSTEM OPERATIONAL
 1820            </div>
 1821        </div>
 1822    );
 1823};
 124
 125export const Header = ({ title }) => {
 1726    const username = localStorage.getItem('username') || 'Unknown User';
 1727    const role = localStorage.getItem('user_role') || 'operator';
 1728
 1729    return (
 1730        <header style={{
 1731            display: 'flex',
 1732            justifyContent: 'space-between',
 1733            alignItems: 'center',
 1734            padding: '20px 0',
 1735            borderBottom: '2px solid #2c3e50',
 1736            marginBottom: '10px'
 1737        }}>
 1738            <div>
 1739                <h1 style={{ margin: 0, color: '#2c3e50', fontSize: '2rem', fontWeight: 800 }}>{title}</h1>
 1740                <div style={{ color: '#7f8c8d', fontSize: '0.9rem', marginTop: '4px' }}>
 1741                    INDUSTRIAL INTELLIGENCE GATEWAY V2.0
 1742                </div>
 1743            </div>
 1744
 1745            <div style={{
 1746                display: 'flex',
 1747                alignItems: 'center',
 1748                gap: '15px',
 1749                backgroundColor: '#f8f9fa',
 1750                padding: '10px 20px',
 1751                borderRadius: '12px',
 1752                border: '1px solid #e1e4e8'
 1753            }}>
 1754                <div style={{ textAlign: 'right' }}>
 1755                    <div style={{ fontWeight: 'bold', color: '#2c3e50', fontSize: '1rem' }}>{username}</div>
 1756                    <div style={{
 1757                        fontSize: '0.7rem',
 1758                        color: '#3498db',
 1759                        fontWeight: 'bold',
 1760                        textTransform: 'uppercase',
 1761                        letterSpacing: '1px'
 1762                    }}>
 1763                        {role.toUpperCase()} LEVEL ACCESS
 1764                    </div>
 1765                </div>
 1766                <div style={{
 1767                    width: '40px',
 1768                    height: '40px',
 1769                    backgroundColor: '#2c3e50',
 1770                    borderRadius: '50%',
 1771                    display: 'flex',
 1772                    alignItems: 'center',
 1773                    justifyContent: 'center',
 1774                    color: 'white'
 1775                }}>
 1776                    <User size={20} />
 1777                </div>
 1778            </div>
 1779        </header>
 1780    );
 1781};
 182
 183export default WelcomeMessage;

Methods/Properties

WelcomeMessage
Header