import * as React from "react"; import { classList, ControlProps } from "../util"; import { Button } from "./Button"; import { FocusList } from "./FocusList"; import { MenuDropdown } from "./MenuDropdown"; import { useState } from "react"; export interface EditorToggleProps extends ControlProps { items: EditorToggleItem[]; selected: number; id: string; } export type EditorToggleItem = BasicEditorToggleItem | DropdownEditorToggleItem; export interface BasicEditorToggleItem { label: string; title: string; focusable: boolean; icon?: string; onClick: () => void; } export interface DropdownEditorToggleItem extends BasicEditorToggleItem { items: BasicEditorToggleItem[]; } export const EditorToggle = (props: EditorToggleProps) => { const { id, className, ariaHidden, ariaLabel, role, items, selected } = props; const [isFocused, setIsFocused] = useState(false); const hasDropdown = items.some(item => isDropdownItem(item)); const onKeydown = (ev: React.KeyboardEvent) => { // TODO } const classNameComposite = classList( "common-editor-toggle", hasDropdown && "has-dropdown", isFocused && "focused", className); return (
{items.map((item, index) => { const isSelected = selected === index; return (
{ isDropdownItem(item) && ({ role: "menuitem", title: item.title, label: item.label, onClick: item.onClick, leftIcon: item.icon }))} /> }
); })}
); } interface ToggleButtonProps { item: BasicEditorToggleItem; isSelected?: boolean; isFocused?: boolean; onKeydown: (ev: React.KeyboardEvent) => void; } const ToggleButton = (props: ToggleButtonProps) => { const { item, isSelected, onKeydown } = props; const { label, title, onClick, icon, focusable } = item; return