Feature selector (#4074)
* WIP * ParityBar verification * import from index.js * i18n expansion & tests * Features component * Adapt language selector to use features * Add features to settings view * typo * Convert logging * Fix earlier merge issues resulting in test failures * Lint failure fixes (new rules) * Fix additional listing rules * Re-add FormattedMessage (missing after merge), fix tests * Fix loader overrides * grumble: split item rendering (& test) * grumble: allow enable/disable while testing (default on) * grumble: move LanguageSelector below Features * grumble: don't pass visiblity prop (& update tests) * grumble: missing observable (onClick misbehaving) * grumble: don't reset to defaults per session * Fix to single store instance
This commit is contained in:
@@ -14,20 +14,23 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import React, { Component } from 'react';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { MenuItem } from 'material-ui';
|
||||
import { observer } from 'mobx-react';
|
||||
import React, { Component } from 'react';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import { LocaleStore } from '~/i18n';
|
||||
import { FeaturesStore, FEATURES } from '../Features';
|
||||
|
||||
import Select from '../Form/Select';
|
||||
import { LocaleStore } from '../../i18n';
|
||||
|
||||
@observer
|
||||
export default class LanguageSelector extends Component {
|
||||
features = FeaturesStore.get();
|
||||
store = LocaleStore.get();
|
||||
|
||||
render () {
|
||||
if (!this.store.isDevelopment) {
|
||||
if (!this.features.active[FEATURES.LANGUAGE]) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -70,6 +73,6 @@ export default class LanguageSelector extends Component {
|
||||
}
|
||||
|
||||
onChange = (event, index, locale) => {
|
||||
this.store.setLocale(locale);
|
||||
this.store.setLocale(locale || event.target.value);
|
||||
}
|
||||
}
|
||||
|
||||
69
js/src/ui/LanguageSelector/langugeSelector.spec.js
Normal file
69
js/src/ui/LanguageSelector/langugeSelector.spec.js
Normal file
@@ -0,0 +1,69 @@
|
||||
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import { shallow } from 'enzyme';
|
||||
import React from 'react';
|
||||
import sinon from 'sinon';
|
||||
|
||||
import { LocaleStore } from '~/i18n';
|
||||
|
||||
import LanguageSelector from './';
|
||||
|
||||
let component;
|
||||
|
||||
function render (props = {}) {
|
||||
component = shallow(
|
||||
<LanguageSelector { ...props } />
|
||||
);
|
||||
|
||||
return component;
|
||||
}
|
||||
|
||||
describe('LanguageSelector', () => {
|
||||
it('renders defaults', () => {
|
||||
expect(render()).to.be.ok;
|
||||
});
|
||||
|
||||
describe('Select', () => {
|
||||
let select;
|
||||
let localeStore;
|
||||
|
||||
beforeEach(() => {
|
||||
localeStore = LocaleStore.get();
|
||||
sinon.stub(localeStore, 'setLocale');
|
||||
|
||||
render();
|
||||
select = component.find('Select');
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
localeStore.setLocale.restore();
|
||||
});
|
||||
|
||||
it('renders the Select', () => {
|
||||
expect(select).to.have.length(1);
|
||||
});
|
||||
|
||||
it('has locale items', () => {
|
||||
expect(select.find('MenuItem').length > 0).to.be.true;
|
||||
});
|
||||
|
||||
it('calls localeStore.setLocale when changed', () => {
|
||||
select.simulate('change', { target: { value: 'de' } });
|
||||
expect(localeStore.setLocale).to.have.been.calledWith('de');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user