import * as React from 'react'; import ReactDOM from 'react-dom'; import { Component, Styles, View } from 'reactxp'; import { colors } from '../../config.json'; import { messages } from '../../shared/gettext'; import CustomScrollbars from './CustomScrollbars'; import { Container, Layout } from './Layout'; import { BackBarItem, NavigationBar, NavigationContainer, NavigationItems, NavigationScrollbars, TitleBarItem, } from './NavigationBar'; import Selector, { ISelectorItem, SelectorCell } from './Selector'; import SettingsHeader, { HeaderTitle } from './SettingsHeader'; interface IProps { preferredLocale: string; preferredLocalesList: Array<{ name: string; code: string }>; setPreferredLocale: (locale: string) => void; onClose: () => void; } interface IState { source: Array>; } const styles = { page: Styles.createViewStyle({ backgroundColor: colors.darkBlue, flex: 1, }), container: Styles.createViewStyle({ flex: 1, }), selector: Styles.createViewStyle({ marginBottom: 0, }), // plain CSS style scrollview: { flex: 1, }, }; export default class SelectLanguage extends Component { private scrollView = React.createRef(); private selectedCellRef = React.createRef>(); constructor(props: IProps) { super(props); this.state = { source: [ ...this.props.preferredLocalesList.map((item) => ({ label: item.name, value: item.code })), ], }; } public componentDidMount() { this.scrollToSelectedCell(); } public render() { return ( {// TRANSLATORS: Back button in navigation bar messages.pgettext('navigation-bar', 'Settings')} {// TRANSLATORS: Title label in navigation bar messages.pgettext('select-language-nav', 'Select language')} {messages.pgettext('select-language-nav', 'Select language')} ); } private scrollToSelectedCell() { const ref = this.selectedCellRef.current; const scrollView = this.scrollView.current; if (scrollView && ref) { const cellDOMNode = ReactDOM.findDOMNode(ref); if (cellDOMNode instanceof HTMLElement) { scrollView.scrollToElement(cellDOMNode, 'middle'); } } } }