Return

All tests / components/LangSelect index.tsx

86.66% Statements 13/15
100% Branches 0/0
50% Functions 2/4
85.71% Lines 12/14

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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 571x 1x 1x 1x 1x               1x 1x 1x   1x             1x                                         3x                     1x  
import { useRouter } from 'next/router';
import { useIntl } from 'react-intl';
import React from 'react';
import styles from './langselect.module.css';
import { messages } from '../../../src/intl/translations';
 
/**
 * @example
 *     <LangSelect />;
 *
 * @returns {JSX.Element}
 */
const LangSelect = () => {
    const { formatMessage: f } = useIntl();
    const router = useRouter();
 
    const handleLanguageChange = React.useCallback((newLocale: string) => {
        // Use router.push with locale parameter
        router.push(router.asPath, router.asPath, {
            locale: newLocale,
        });
    }, [router]);
 
    const handleSelectChange = React.useCallback(
        (e: React.ChangeEvent<HTMLSelectElement>) => {
            handleLanguageChange(e.target.value);
        },
        [handleLanguageChange]
    );
 
    return (
        <div className={styles.lang_container} data-testid="lang-select">
            <label className={styles.lang_label} htmlFor="lang">
                {f({ id: 'settings.lang.preferred' })}
            </label>
            <select
                id="lang"
                name="lang"
                className={styles.lang_select}
                size={Object.keys(messages).length}
                value={router.locale}
                onChange={handleSelectChange}
            >
                {Object.entries(messages).map(([key, value]) => {
                    return (
                        <option key={key} value={key}>
                            {value.language}
                        </option>
                    );
                })}
            </select>
        </div>
    );
};
 
export default LangSelect;