diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2019-05-31 12:03:57 +0100 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2019-05-31 12:44:12 +0100 |
| commit | 651e8e219210dd0bd7a673967ae26439697324ad (patch) | |
| tree | 93794ebff6d1449aa7015c74dc4ac5ff51276d05 /gui/src | |
| parent | fb3696c2914492ef0b0a9598a886fd992b49015e (diff) | |
| download | mullvadvpn-651e8e219210dd0bd7a673967ae26439697324ad.tar.xz mullvadvpn-651e8e219210dd0bd7a673967ae26439697324ad.zip | |
Refactor SelectorItem in advanced settings
Diffstat (limited to 'gui/src')
| -rw-r--r-- | gui/src/renderer/components/AdvancedSettings.tsx | 98 | ||||
| -rw-r--r-- | gui/src/renderer/redux/settings/reducers.ts | 6 |
2 files changed, 58 insertions, 46 deletions
diff --git a/gui/src/renderer/components/AdvancedSettings.tsx b/gui/src/renderer/components/AdvancedSettings.tsx index 5c9be492a0..5a4b7b0d5a 100644 --- a/gui/src/renderer/components/AdvancedSettings.tsx +++ b/gui/src/renderer/components/AdvancedSettings.tsx @@ -18,44 +18,24 @@ import SettingsHeader, { HeaderTitle } from './SettingsHeader'; const MIN_MSSFIX_VALUE = 1000; const MAX_MSSFIX_VALUE = 1450; -const PROTOCOLS: RelayProtocol[] = ['udp', 'tcp']; const UDP_PORTS = [1194, 1195, 1196, 1197, 1300, 1301, 1302]; const TCP_PORTS = [80, 443]; -const PORT_ITEMS: { [key in RelayProtocol]: Array<ISelectorItem<number>> } = { - udp: UDP_PORTS.map(mapPortToSelectorItem), - tcp: TCP_PORTS.map(mapPortToSelectorItem), -}; +type OptionalPort = number | undefined; -const PROTOCOL_ITEMS: Array<ISelectorItem<RelayProtocol>> = PROTOCOLS.map((value) => ({ - label: value.toUpperCase(), - value, -})); +type OptionalRelayProtocol = RelayProtocol | undefined; function mapPortToSelectorItem(value: number): ISelectorItem<number> { return { label: value.toString(), value }; } -function makeBridgeItems(): Array<ISelectorItem<BridgeState>> { - return [ - { - label: messages.pgettext('advanced-settings-view', 'On'), - value: 'on', - }, - { - label: messages.pgettext('advanced-settings-view', 'Off'), - value: 'off', - }, - ]; -} - interface IProps { enableIpv6: boolean; blockWhenDisconnected: boolean; protocol?: RelayProtocol; mssfix?: number; port?: number; - bridgeState?: BridgeState; + bridgeState: BridgeState; setBridgeState: (value: BridgeState) => void; setEnableIpv6: (value: boolean) => void; setBlockWhenDisconnected: (value: boolean) => void; @@ -71,11 +51,53 @@ interface IState { } export default class AdvancedSettings extends Component<IProps, IState> { - private bridgeSelectorItems = makeBridgeItems(); + private portItems: { [key in RelayProtocol]: Array<ISelectorItem<OptionalPort>> }; + private protocolItems: Array<ISelectorItem<OptionalRelayProtocol>>; + private bridgeStateItems: Array<ISelectorItem<BridgeState>>; constructor(props: IProps) { super(props); + const automaticPort: ISelectorItem<OptionalPort> = { + label: messages.pgettext('advanced-settings-view', 'Automatic'), + value: undefined, + }; + + this.portItems = { + udp: [automaticPort].concat(UDP_PORTS.map(mapPortToSelectorItem)), + tcp: [automaticPort].concat(TCP_PORTS.map(mapPortToSelectorItem)), + }; + + this.protocolItems = [ + { + label: messages.pgettext('advanced-settings-view', 'Automatic'), + value: undefined, + }, + { + label: messages.pgettext('advanced-settings-view', 'TCP'), + value: 'tcp', + }, + { + label: messages.pgettext('advanced-settings-view', 'UDP'), + value: 'udp', + }, + ]; + + this.bridgeStateItems = [ + { + label: messages.pgettext('advanced-settings-view', 'Automatic'), + value: 'auto', + }, + { + label: messages.pgettext('advanced-settings-view', 'On'), + value: 'on', + }, + { + label: messages.pgettext('advanced-settings-view', 'Off'), + value: 'off', + }, + ]; + this.state = { persistedMssfix: props.mssfix, editedMssfix: props.mssfix, @@ -155,7 +177,7 @@ export default class AdvancedSettings extends Component<IProps, IState> { <View style={styles.advanced_settings__content}> <Selector title={messages.pgettext('advanced-settings-view', 'Network protocols')} - values={PROTOCOL_ITEMS} + values={this.protocolItems} value={this.props.protocol} onSelect={this.onSelectProtocol} /> @@ -171,7 +193,7 @@ export default class AdvancedSettings extends Component<IProps, IState> { portType: this.props.protocol.toUpperCase(), }, )} - values={PORT_ITEMS[this.props.protocol]} + values={this.portItems[this.props.protocol]} value={this.props.port} onSelect={this.onSelectPort} /> @@ -185,7 +207,7 @@ export default class AdvancedSettings extends Component<IProps, IState> { // TRANSLATORS: The title for the shadowsocks bridge selector section. messages.pgettext('advanced-settings-view', 'Shadowsocks bridge') } - values={this.bridgeSelectorItems} + values={this.bridgeStateItems} value={this.props.bridgeState} onSelect={this.onSelectBridgeState} /> @@ -240,12 +262,8 @@ export default class AdvancedSettings extends Component<IProps, IState> { this.props.setRelayProtocolAndPort(this.props.protocol, port); }; - private onSelectBridgeState = (bridgeState?: BridgeState) => { - if (bridgeState) { - this.props.setBridgeState(bridgeState); - } else { - this.props.setBridgeState('auto'); - } + private onSelectBridgeState = (bridgeState: BridgeState) => { + this.props.setBridgeState(bridgeState); }; private onMssfixChange = (mssfixString: string) => { @@ -286,8 +304,8 @@ interface ISelectorItem<T> { interface ISelectorProps<T> { title: string; values: Array<ISelectorItem<T>>; - value?: T; - onSelect: (value?: T) => void; + value: T; + onSelect: (value: T) => void; } class Selector<T> extends Component<ISelectorProps<T>> { @@ -295,12 +313,6 @@ class Selector<T> extends Component<ISelectorProps<T>> { return ( <Cell.Section style={styles.advanced_settings__selector_section}> <Cell.SectionTitle>{this.props.title}</Cell.SectionTitle> - <SelectorCell - key={'auto'} - selected={this.props.value === undefined} - onSelect={this.props.onSelect}> - {messages.pgettext('advanced-settings-view', 'Automatic')} - </SelectorCell> {this.props.values.map((item, i) => ( <SelectorCell key={i} @@ -316,9 +328,9 @@ class Selector<T> extends Component<ISelectorProps<T>> { } interface ISelectorCell<T> { - value?: T; + value: T; selected: boolean; - onSelect: (value?: T) => void; + onSelect: (value: T) => void; children?: React.ReactText; } diff --git a/gui/src/renderer/redux/settings/reducers.ts b/gui/src/renderer/redux/settings/reducers.ts index e2565ec0e7..7933fd3384 100644 --- a/gui/src/renderer/redux/settings/reducers.ts +++ b/gui/src/renderer/redux/settings/reducers.ts @@ -48,7 +48,7 @@ export interface ISettingsReduxState { relayLocations: IRelayLocationRedux[]; allowLan: boolean; enableIpv6: boolean; - bridgeState?: BridgeState; + bridgeState: BridgeState; blockWhenDisconnected: boolean; openVpn: { mssfix?: number; @@ -72,7 +72,7 @@ const initialState: ISettingsReduxState = { relayLocations: [], allowLan: false, enableIpv6: true, - bridgeState: undefined, + bridgeState: 'auto', blockWhenDisconnected: false, openVpn: {}, }; @@ -136,7 +136,7 @@ export default function( case 'UPDATE_BRIDGE_STATE': return { ...state, - bridgeState: action.bridgeState === 'auto' ? undefined : action.bridgeState, + bridgeState: action.bridgeState, }; default: |
