export function GoogleTranslation()

in translate/src/modules/machinery/components/source/GoogleTranslation.tsx [20:142]


export function GoogleTranslation({
  isOpenAIChatGPTSupported,
  translation,
}: Props): React.ReactElement<'li'> {
  const [isDropdownOpen, setDropdownOpen] = useState(false);
  const dropdownRef = useRef<HTMLLIElement>(null);
  const locale = useContext(Locale);

  const getLLMTranslationState = useLLMTranslation();

  const { transformLLMTranslation, selectedOption, restoreOriginal } =
    getLLMTranslationState(translation);

  const toggleDropdown = (ev: React.MouseEvent) => {
    ev.stopPropagation();
    setDropdownOpen((isDropdownOpen) => !isDropdownOpen);
  };

  const handleOptionClick = async (ev: React.MouseEvent<HTMLLIElement>) => {
    ev.stopPropagation();
    const target = ev.currentTarget;
    const characteristic = target.dataset['characteristic'] as string;

    if (characteristic === 'original') {
      restoreOriginal(translation);
    } else {
      await transformLLMTranslation(translation, characteristic, locale.name);
      logUXAction('LLM Dropdown Select', 'LLM Feature Adoption', {
        optionSelected: characteristic,
        localeCode: locale.code,
      });
    }
    setDropdownOpen(false);
  };

  const title = (
    <Localized id='machinery-GoogleTranslation--translation-source'>
      <span className='translation-source'>GOOGLE TRANSLATE</span>
    </Localized>
  );

  return isOpenAIChatGPTSupported ? (
    <li ref={dropdownRef} className='google-translation'>
      <Localized id='machinery-GoogleTranslation--selector'>
        <span
          className='selector'
          onClick={toggleDropdown}
          title='Refine using AI'
        >
          {title}

          {selectedOption ? (
            <Localized
              id={`machinery-GoogleTranslation--option-${selectedOption}`}
            >
              <span className='selected-option'>{selectedOption}</span>
            </Localized>
          ) : (
            <span className='selected-option'>{selectedOption}</span>
          )}

          <button
            className='dropdown-toggle'
            aria-haspopup='true'
            aria-expanded={isDropdownOpen}
          >
            <Localized id='machinery-GoogleTranslation--dropdown-title'>
              <span className='dropdown-title'>AI</span>
            </Localized>
            <i className='fas fa-caret-down'></i>
          </button>
        </span>
      </Localized>
      {isDropdownOpen && (
        <ul className='dropdown-menu'>
          <Localized id='machinery-GoogleTranslation--option-rephrase'>
            <li
              data-characteristic='rephrased'
              onClick={handleOptionClick}
              title=''
            >
              REPHRASE
            </li>
          </Localized>
          <Localized id='machinery-GoogleTranslation--option-make-formal'>
            <li
              data-characteristic='formal'
              onClick={handleOptionClick}
              title=''
            >
              MAKE FORMAL
            </li>
          </Localized>
          <Localized id='machinery-GoogleTranslation--option-make-informal'>
            <li
              data-characteristic='informal'
              onClick={handleOptionClick}
              title=''
            >
              MAKE INFORMAL
            </li>
          </Localized>
          {selectedOption && (
            <>
              <li className='horizontal-separator'></li>
              <Localized id='machinery-GoogleTranslation--option-show-original'>
                <li
                  data-characteristic='original'
                  onClick={handleOptionClick}
                  title=''
                >
                  SHOW ORIGINAL
                </li>
              </Localized>
            </>
          )}
        </ul>
      )}
    </li>
  ) : (
    <li className='google-translation'>{title}</li>
  );
}