in translate/src/modules/otherlocales/components/OtherLocaleTranslation.tsx [29:110]
export function OtherLocaleTranslationComponent({
entity: { format },
translation,
parameters: { project, resource, entity },
index,
}: Props): React.ReactElement<React.ElementType> {
const { setEditorFromHelpers } = useContext(EditorActions);
const { element, setElement } = useContext(HelperSelection);
const isSelected = element === index;
const copyTranslationIntoEditor = useCallback(() => {
if (window.getSelection()?.isCollapsed !== false) {
setElement(index);
const value = getPlainMessage(translation.translation, format);
setEditorFromHelpers(value, [], true);
}
}, [format, index, setEditorFromHelpers, translation]);
const className = classNames(
'translation',
useReadonlyEditor() && 'cannot-copy',
isSelected && 'selected',
);
const translationRef = useRef<HTMLLIElement>(null);
useEffect(() => {
if (isSelected) {
const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
translationRef.current?.scrollIntoView({
behavior: mediaQuery.matches ? 'auto' : 'smooth',
block: 'nearest',
});
}
}, [isSelected]);
return (
<Localized id='otherlocales-Translation--copy' attrs={{ title: true }}>
<li
className={className}
title='Copy Into Translation (Ctrl + Shift + Down)'
onClick={copyTranslationIntoEditor}
ref={translationRef}
>
<header>
{translation.locale.code === 'en-US' ? (
<div>
{translation.locale.name}
<span>{translation.locale.code}</span>
</div>
) : (
<Localized
id='otherlocales-Translation--header-link'
attrs={{ title: true }}
vars={{
locale: translation.locale.name,
code: translation.locale.code,
}}
>
<a
href={`/${translation.locale.code}/${project}/${resource}/?string=${entity}`}
target='_blank'
rel='noopener noreferrer'
title='Open string in { $locale } ({ $code })'
onClick={(ev) => ev.stopPropagation()}
>
{translation.locale.name}
<span>{translation.locale.code}</span>
</a>
</Localized>
)}
</header>
<p
lang={translation.locale.code}
dir={translation.locale.direction}
data-script={translation.locale.script}
>
<Translation content={translation.translation} format={format} />
</p>
</li>
</Localized>
);
}