blob: ffdd19aabf34138e5e2969ecd58c076ec10c2c1a [file] [log] [blame]
svishnevd3886bb2018-01-08 15:21:46 +02001/*!
2 * Copyright © 2016-2017 European Support Limited
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing
14 * permissions and limitations under the License.
15 */
16
17
18 /**
19 * Feature toggling decorator
20 * usage:
21 *
22 * @featureToggle('FeatureName')
23 * class Example extends React.Component {
24 * render() {
25 * return (<div>test feature</div>);
26 * }
27 * }
28 *
29 * OR
30 *
31 * const TestFeature = () => (<div>test feature</div>)
32 * export default featureToggle('FeatureName')(TestFeature)
33 *
34 */
35
36import React from 'react';
37import PropTypes from 'prop-types';
38import {connect} from 'react-redux';
39
40export const FeatureComponent = ({features = [], featureName, InnerComponent}) => {
41 return !!features.find(el => el.name === featureName && el.active) ? <InnerComponent/> : null;
42};
43
44FeatureComponent.propTypes = {
45 features: PropTypes.array,
46 featureName: PropTypes.string.isRequired
47};
48
49
50export default function featureToggle(featureName) {
51 return (InnerComponent) => {
52 return connect(({features}) => {return {features, featureName, InnerComponent};})(FeatureComponent);
53 };
54}
55