kanban / webapp /src /properties /baseTextEditor.tsx
Leon4gr45's picture
Upload folder using huggingface_hub
13555f3 verified
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React, {useCallback, useState, useRef, useEffect} from 'react'
import {useIntl} from 'react-intl'
import mutator from '../mutator'
import Editable from '../widgets/editable'
import {PropertyProps} from './types'
const BaseTextEditor = (props: PropertyProps & {validator: () => boolean, spellCheck?: boolean}): JSX.Element => {
const [value, setValue] = useState(props.card.fields.properties[props.propertyTemplate.id || ''] || '')
const onCancel = useCallback(() => setValue(props.propertyValue || ''), [props.propertyValue])
const saveTextProperty = useCallback(() => {
if (value !== (props.card.fields.properties[props.propertyTemplate?.id || ''] || '')) {
mutator.changePropertyValue(props.board.id, props.card, props.propertyTemplate?.id || '', value)
}
}, [props.board.id, props.card, props.propertyTemplate?.id, value])
const saveTextPropertyRef = useRef<() => void>(saveTextProperty)
if (props.readOnly) {
saveTextPropertyRef.current = () => null
} else {
saveTextPropertyRef.current = saveTextProperty
}
const intl = useIntl()
const emptyDisplayValue = props.showEmptyPlaceholder ? intl.formatMessage({id: 'PropertyValueElement.empty', defaultMessage: 'Empty'}) : ''
useEffect(() => {
return () => {
saveTextPropertyRef.current && saveTextPropertyRef.current()
}
}, [])
if (!props.readOnly) {
return (
<Editable
className={props.property.valueClassName(props.readOnly)}
placeholderText={emptyDisplayValue}
value={value.toString()}
autoExpand={true}
onChange={setValue}
onSave={saveTextProperty}
onCancel={onCancel}
validator={props.validator}
spellCheck={props.spellCheck}
/>
)
}
return <div className={props.property.valueClassName(true)}>{props.propertyValue}</div>
}
export default BaseTextEditor