# code-block-pro/1.13.0/src/editor/controls/Toolbar.tsx

Code Block Pro – Beautiful Syntax Highlighting, version 1.13.0. 77 lines.

- Page: https://pluginprobe.com/plugins/code-block-pro/1.13.0/code/src/editor/controls/Toolbar.tsx
- Raw: https://pluginprobe.com/plugins/code-block-pro/1.13.0/raw/src/editor/controls/Toolbar.tsx
- Modified: 2023-02-06T00:28:04+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/code-block-pro/1.13.0/code/src/editor/controls/Toolbar.tsx#L10-L20`.

```tsx
import { BlockControls } from '@wordpress/block-editor';
import {
    ToolbarGroup,
    Dropdown,
    Button,
    NavigableMenu,
    MenuItem,
    MenuGroup,
} from '@wordpress/components';
import { __ } from '@wordpress/i18n';
import { useLanguage } from '../../hooks/useLanguage';
import { AttributesPropsAndSetter, Lang } from '../../types';
import { languages } from '../../util/languages';

export const ToolbarControls = ({
    attributes,
    setAttributes,
}: AttributesPropsAndSetter) => {
    const [language, setLanguage] = useLanguage({ attributes, setAttributes });
    return (
        <BlockControls>
            <ToolbarGroup className="code-block-pro-editor">
                <Dropdown
                    renderContent={() => (
                        <DropdownLanguageSelect
                            language={language}
                            setLanguage={setLanguage}
                        />
                    )}
                    renderToggle={({ isOpen, onToggle }) => (
                        <Button
                            onClick={onToggle}
                            aria-expanded={isOpen}
                            aria-haspopup="true">
                            {(languages[language] ?? language).replace(
                                'ANSI',
                                'ANSI (experimental)',
                            )}
                        </Button>
                    )}
                />
            </ToolbarGroup>
        </BlockControls>
    );
};
type LanguageSetterAndGetter = {
    language: Lang;
    setLanguage: (language: Lang) => void;
};
const DropdownLanguageSelect = ({
    language,
    setLanguage,
}: LanguageSetterAndGetter) => (
    <NavigableMenu
        orientation="vertical"
        role="menu"
        style={{
            minWidth: '200px',
        }}>
        <MenuGroup label={__('Select language', 'code-block-pro')}>
            {Object.entries(languages).map(([value, label]) => (
                <MenuItem
                    key={value}
                    role="menuitem"
                    style={{ width: '100%' }}
                    isSelected={language === value}
                    variant={language === value ? 'primary' : undefined}
                    onClick={() => {
                        setLanguage(value as Lang);
                    }}>
                    {label}
                </MenuItem>
            ))}
        </MenuGroup>
    </NavigableMenu>
);

```
