# All files / context-menu-item context-menu-item.tsx

100% Statements 18/18
100% Branches 9/9
100% Functions 5/5
100% Lines 18/18

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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    671x
    1x
    1x

    1x
    1x
    1x
    1x
    1x

    1x

    10x

    10x

    4x

    6x

    10x

    10x

    1x
    1x
    1x
     import * as React from "react";
    import Foundation, { HandledProps } from "../foundation";
    import { IContextMenuItemClassNameContract } from "@microsoft/fast-components-class-name-contracts";
    import {
        ContextMenuItemProps,
        IContextMenuItemHandledProps,
        IContextMenuItemManagedClasses,
        IContextMenuItemUnhandledProps,
    } from "./context-menu-item.props";

    export enum ContextMenuItemRole {
        menuitem = "menuitem",
        menuitemcheckbox = "menuitemcheckbox",
        menuitemradio = "menuitemradio",
        separator = "separator"
    }

    /* tslint:disable-next-line */
    class ContextMenuItem extends Foundation<IContextMenuItemHandledProps & IContextMenuItemManagedClasses, IContextMenuItemUnhandledProps, {}> {
        public static defaultProps: IContextMenuItemHandledProps = {
            role: ContextMenuItemRole.menuitem
        };

        protected handledProps: HandledProps<IContextMenuItemHandledProps & IContextMenuItemManagedClasses> = {
            managedClasses: void 0,
            children: void 0
        };

        private get ariaChecked(): boolean | null {
            switch (ContextMenuItemRole[this.props.role]) {
                case ContextMenuItemRole.menuitemcheckbox:
                case ContextMenuItemRole.menuitemradio:
                    return Boolean(this.props.checked);
                default:
                    return null;
            }
        }

        /**
         * Renders the component
         */
        public render(): React.ReactElement<HTMLLIElement> {
            return (
                <li
                    {...this.unhandledProps()}
                    className={this.generateClassNames()}
                    aria-checked={this.ariaChecked}
                    role={ContextMenuItemRole[this.props.role] || ContextMenuItem.defaultProps.role}
                >
                    {this.props.role === ContextMenuItemRole.separator ? null : this.props.children}
                </li>
            );
        }

        /**
         * Create class-names
         */
        protected generateClassNames(): string {
            return super.generateClassNames(this.props.managedClasses.contextMenuItem);
        }
    }

    export default ContextMenuItem;
    export * from "./context-menu-item.props";
    export {IContextMenuItemClassNameContract};