import { RcTextField } from '@ringcentral/juno'; import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState, } from 'react'; import i18n from './i18n'; import styles from './styles.scss'; type TopicProps = { name: string; currentLocale: string; defaultTopic: string; updateMeetingTopic: (name: string) => void; }; export type TopicRef = { value: string; }; const InnerTopic = forwardRef( ({ name, currentLocale, defaultTopic, updateMeetingTopic }, ref) => { const [topic, setTopic] = useState(name || defaultTopic); const [isTopicChange, setIsTopicChange] = useState(false); const inputRef = useRef(); // DefaultTopic has translation, If user change browser language, defaultTopic need to be switch to corresponding language. // If user has input the topic custom. we don't need to update default topic anymore. useEffect(() => { if (!isTopicChange) { setTopic(defaultTopic); } }, [defaultTopic, isTopicChange]); useImperativeHandle( ref, () => ({ value: topic, }), [topic], ); return ( { setIsTopicChange(true); setTopic(e.target.value); }} onBlur={() => { updateMeetingTopic(topic); }} classes={{ root: styles.input, }} gutterBottom /> ); }, ); export const Topic = React.memo( InnerTopic, (prevProps, nextProps) => prevProps.name === nextProps.name && prevProps.currentLocale === nextProps.currentLocale, );