// 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 ( ) } return
{props.propertyValue}
} export default BaseTextEditor