main

mattermost/focalboard

Last updated at: 29/12/2023 09:42

textOption.tsx

TLDR

This file defines a React functional component called TextOption. It is a menu option component that can be used in a menu. It displays a name, an optional icon, and an optional subtext. When clicked, it triggers a callback function provided through the onClick prop.

Methods

This file does not have any additional methods.

Classes

This file does not have any additional classes.

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React from 'react'

import {MenuOptionProps} from './menuItem'

type TextOptionProps = MenuOptionProps & {
    check?: boolean
    icon?: React.ReactNode
    rightIcon?: React.ReactNode
    className?: string
    subText?: string
    disabled?: boolean
}

function TextOption(props: TextOptionProps): JSX.Element {
    const {name, icon, rightIcon, check, subText, disabled} = props
    let className = 'MenuOption TextOption menu-option'
    if (props.className) {
        className += ' ' + props.className
    }
    if (subText) {
        className += ' menu-option--with-subtext'
    }
    if (disabled) {
        className += ' menu-option--disabled'
    }

    return (
        <div
            role='button'
            aria-label={name}
            className={className}
            onClick={(e: React.MouseEvent) => {
                e.target.dispatchEvent(new Event('menuItemClicked'))
                props.onClick(props.id)
                e.stopPropagation()
            }}
        >
            <div className={`${check ? 'd-flex menu-option__check' : 'd-flex'}`}>{icon ? <div className='menu-option__icon'>{icon}</div> : <div className='noicon'/>}</div>
            <div className='menu-option__content'>
                <div className='menu-name'>{name}</div>
                {subText && <div className='menu-subtext text-75 mt-1'>{subText}</div>}
            </div>
            {rightIcon ?? <div className='noicon'/>}
        </div>
    )
}

export default React.memo(TextOption)