const React = require("react"); const Component = React.Component; const { Platform, TouchableOpacity, Linking, View, Switch, Slider, StyleSheet, Text, Button, ScrollView, TextInput } = require("react-native"); const { connect } = require("react-redux"); const { ScreenHeader } = require("lib/components/screen-header.js"); const { _, setLocale } = require("lib/locale.js"); const { BaseScreenComponent } = require("lib/components/base-screen.js"); const { Dropdown } = require("lib/components/Dropdown.js"); const { themeStyle } = require("lib/components/global-style.js"); const Setting = require("lib/models/Setting.js"); const shared = require("lib/components/shared/config-shared.js"); const SyncTargetRegistry = require("lib/SyncTargetRegistry"); class ConfigScreenComponent extends BaseScreenComponent { static navigationOptions(options) { return { header: null }; } constructor() { super(); this.styles_ = {}; shared.init(this); this.checkSyncConfig_ = async () => { await shared.checkSyncConfig(this, this.state.settings); }; this.saveButton_press = () => { return shared.saveSettings(this); }; } componentWillMount() { this.setState({ settings: this.props.settings }); } styles() { const themeId = this.props.theme; const theme = themeStyle(themeId); if (this.styles_[themeId]) return this.styles_[themeId]; this.styles_ = {}; let styles = { body: { flex: 1, justifyContent: "flex-start", flexDirection: "column", }, settingContainer: { flex: 1, flexDirection: "row", alignItems: "center", borderBottomWidth: 1, borderBottomColor: theme.dividerColor, paddingTop: theme.marginTop, paddingBottom: theme.marginBottom, paddingLeft: theme.marginLeft, paddingRight: theme.marginRight, }, settingText: { fontWeight: "bold", color: theme.color, fontSize: theme.fontSize, flex: 1, }, descriptionText: { color: theme.color, fontSize: theme.fontSize, flex: 1, }, settingControl: { color: theme.color, flex: 1, }, }; if (Platform.OS === "ios") { styles.settingControl.borderBottomWidth = 1; styles.settingControl.borderBottomColor = theme.dividerColor; } styles.switchSettingText = Object.assign({}, styles.settingText); styles.switchSettingText.width = "80%"; styles.switchSettingContainer = Object.assign({}, styles.settingContainer); styles.switchSettingContainer.flexDirection = "row"; styles.switchSettingContainer.justifyContent = "space-between"; styles.linkText = Object.assign({}, styles.settingText); styles.linkText.borderBottomWidth = 1; styles.linkText.borderBottomColor = theme.color; styles.linkText.flex = 0; styles.linkText.fontWeight = "normal"; styles.switchSettingControl = Object.assign({}, styles.settingControl); delete styles.switchSettingControl.color; //styles.switchSettingControl.width = '20%'; styles.switchSettingControl.flex = 0; this.styles_[themeId] = StyleSheet.create(styles); return this.styles_[themeId]; } settingToComponent(key, value) { const themeId = this.props.theme; const theme = themeStyle(themeId); let output = null; const updateSettingValue = (key, value) => { return shared.updateSettingValue(this, key, value); }; const md = Setting.settingMetadata(key); if (md.isEnum) { value = value.toString(); let items = []; const settingOptions = md.options(); for (let k in settingOptions) { if (!settingOptions.hasOwnProperty(k)) continue; items.push({ label: settingOptions[k], value: k.toString() }); } return ( {md.label()} { updateSettingValue(key, itemValue); }} /> ); } else if (md.type == Setting.TYPE_BOOL) { return ( {md.label()} updateSettingValue(key, value)} /> ); } else if (md.type == Setting.TYPE_INT) { return ( {md.label()} updateSettingValue(key, value)} /> ); } else if (md.type == Setting.TYPE_STRING) { return ( {md.label()} updateSettingValue(key, value)} secureTextEntry={!!md.secure} /> ); } else { //throw new Error('Unsupported setting type: ' + md.type); } return output; } render() { const settings = this.state.settings; const settingComps = shared.settingsToComponents(this, "mobile", settings); const syncTargetMd = SyncTargetRegistry.idToMetadata(settings["sync.target"]); if (syncTargetMd.supportsConfigCheck) { const messages = shared.checkSyncConfigMessages(this); const statusComp = !messages.length ? null : ( {messages[0]} {messages.length >= 1 ? ( {messages[1]} ) : null} ); settingComps.push(