main

mattermost/focalboard

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

calculation.tsx

TLDR

This file contains a React component called KanbanCalculation which is responsible for rendering a calculation button in a kanban board. The button allows users to perform calculations on selected cards.

Methods

This file does not contain any methods.

Classes

This file does not contain any additional classes.

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

import {Card} from '../../../blocks/card'
import Button from '../../../widgets/buttons/button'
import './calculation.scss'
import {IPropertyTemplate} from '../../../blocks/board'

import Calculations from '../../calculations/calculations'

import {KanbanCalculationOptions} from './calculationOptions'

type Props = {
    cards: Card[]
    cardProperties: IPropertyTemplate[]
    menuOpen: boolean
    onMenuClose: () => void
    onMenuOpen: () => void
    onChange: (data: { calculation: string, propertyId: string }) => void
    value: string
    property: IPropertyTemplate
    readonly: boolean
}

function KanbanCalculation(props: Props): JSX.Element {
    const intl = useIntl()

    return (
        <div className='KanbanCalculation'>
            <Button
                onClick={() => (props.menuOpen ? props.onMenuClose : props.onMenuOpen)()}
                onBlur={props.onMenuClose}
                title={Calculations[props.value] ? Calculations[props.value](props.cards, props.property, intl) : ''}
            >
                {Calculations[props.value] ? Calculations[props.value](props.cards, props.property, intl) : ''}
            </Button>

            {
                !props.readonly && props.menuOpen && (
                    <KanbanCalculationOptions
                        value={props.value}
                        property={props.property}
                        menuOpen={props.menuOpen}
                        onChange={(data: { calculation: string, propertyId: string }) => {
                            props.onChange(data)
                            props.onMenuClose()
                        }}
                        cardProperties={props.cardProperties}
                    />
                )
            }
        </div>
    )
}

export {
    KanbanCalculation,
}