Return

All tests / src/components/Dock/Icon index.tsx

100% Statements 5/5
100% Branches 0/0
100% Functions 1/1
100% Lines 4/4

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 395x 5x                                 5x                                     90x  
import React from 'react';
import Image from 'next/image';
 
type Props = {
    src: string;
    alt: string;
    testId?: string;
};
 
/**
 * @description: Icon component
 * @param {string} src - Image source
 * @param {string} alt - Image alt text
 * @param {string} testId - Test id for testing
 * @returns {JSX.Element}
 * @example
 * <Icon src="/images/nextjs.svg" alt="NextJS" testId="nextjs-icon" />
 */
const Icon = ({ src, alt, testId }: Props) => {
    return (
        <>
            {/*
             * SDD-L03: `priority` removed. It emits a high-priority `<link rel="preload">`, and with
             * five Dock icons that meant five preloads competing against the LCP image — which had
             * none. The Dock is `position: fixed; bottom: 1px`, so it is always inside the initial
             * viewport; at ~2-4 KB delivered per 60px icon there is nothing to gain from outranking
             * the background.
             *
             * They did not load immediately, though: without `priority` next/image defaults to
             * `loading="lazy"`, and the browser only requests a lazy image after layout. On a cold
             * cache the Dock showed empty until then. `eager` fixes that without the preloads.
             */}
            <Image data-testid={testId} src={src} alt={alt} width={60} height={60} loading="eager" />
        </>
    );
};
 
export default Icon;