mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	feat(archive): make read-only view for feature item
This commit is contained in:
		
							parent
							
								
									a88f0da822
								
							
						
					
					
						commit
						b3734cde61
					
				@ -45,7 +45,7 @@ const prepare = (methods, dispatch) => {
 | 
				
			|||||||
    methods.onCancel = evt => {
 | 
					    methods.onCancel = evt => {
 | 
				
			||||||
        evt.preventDefault();
 | 
					        evt.preventDefault();
 | 
				
			||||||
        methods.clear();
 | 
					        methods.clear();
 | 
				
			||||||
        window.history.back();
 | 
					        hashHistory.push(`/features`);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    methods.addStrategy = v => {
 | 
					    methods.addStrategy = v => {
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					import React, { Component } from 'react';
 | 
				
			||||||
 | 
					import PropTypes from 'prop-types';
 | 
				
			||||||
 | 
					import StrategiesSection from './strategies-section-container';
 | 
				
			||||||
 | 
					import { Button, Icon } from 'react-mdl';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ViewFeatureComponent extends Component {
 | 
				
			||||||
 | 
					    // static displayName = `UpdateFeatureComponent-{getDisplayName(Component)}`;
 | 
				
			||||||
 | 
					    componentWillMount() {
 | 
				
			||||||
 | 
					        // TODO unwind this stuff
 | 
				
			||||||
 | 
					        if (this.props.initCallRequired === true) {
 | 
				
			||||||
 | 
					            this.props.init(this.props.input);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    render() {
 | 
				
			||||||
 | 
					        const { input, onCancel } = this.props;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const {
 | 
				
			||||||
 | 
					            name, // eslint-disable-line
 | 
				
			||||||
 | 
					        } = input;
 | 
				
			||||||
 | 
					        const configuredStrategies = input.strategies || [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return (
 | 
				
			||||||
 | 
					            <section style={{ padding: '16px' }}>
 | 
				
			||||||
 | 
					                <StrategiesSection configuredStrategies={configuredStrategies} />
 | 
				
			||||||
 | 
					                <br />
 | 
				
			||||||
 | 
					                <Button type="cancel" ripple raised onClick={onCancel} style={{ float: 'right' }}>
 | 
				
			||||||
 | 
					                    <Icon name="cancel" />    Cancel
 | 
				
			||||||
 | 
					                </Button>
 | 
				
			||||||
 | 
					            </section>
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ViewFeatureComponent.propTypes = {
 | 
				
			||||||
 | 
					    input: PropTypes.object,
 | 
				
			||||||
 | 
					    onCancel: PropTypes.func.isRequired,
 | 
				
			||||||
 | 
					    initCallRequired: PropTypes.bool,
 | 
				
			||||||
 | 
					    init: PropTypes.func,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default ViewFeatureComponent;
 | 
				
			||||||
@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					import { createMapper, createActions } from '../../input-helpers';
 | 
				
			||||||
 | 
					import ViewFeatureToggleComponent from './form-view-feature-component';
 | 
				
			||||||
 | 
					import { hashHistory } from 'react-router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const ID = 'view-feature-toggle';
 | 
				
			||||||
 | 
					function getId(props) {
 | 
				
			||||||
 | 
					    return [ID, props.featureToggle.name];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					// TODO: need to scope to the active featureToggle
 | 
				
			||||||
 | 
					// best is to emulate the "input-storage"?
 | 
				
			||||||
 | 
					const mapStateToProps = createMapper({
 | 
				
			||||||
 | 
					    id: getId,
 | 
				
			||||||
 | 
					    getDefault: (state, ownProps) => {
 | 
				
			||||||
 | 
					        ownProps.featureToggle.strategies.forEach((strategy, index) => {
 | 
				
			||||||
 | 
					            strategy.id = Math.round(Math.random() * 1000000 * (1 + index));
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return ownProps.featureToggle;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    prepare: props => {
 | 
				
			||||||
 | 
					        props.editmode = true;
 | 
				
			||||||
 | 
					        return props;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const prepare = methods => {
 | 
				
			||||||
 | 
					    methods.onCancel = evt => {
 | 
				
			||||||
 | 
					        evt.preventDefault();
 | 
				
			||||||
 | 
					        methods.clear();
 | 
				
			||||||
 | 
					        hashHistory.push(`/archive`);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    return methods;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const actions = createActions({
 | 
				
			||||||
 | 
					    id: getId,
 | 
				
			||||||
 | 
					    prepare,
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default connect(mapStateToProps, actions)(ViewFeatureToggleComponent);
 | 
				
			||||||
@ -5,7 +5,7 @@ import { Menu, MenuItem, IconButton } from 'react-mdl';
 | 
				
			|||||||
class AddStrategy extends React.Component {
 | 
					class AddStrategy extends React.Component {
 | 
				
			||||||
    static propTypes = {
 | 
					    static propTypes = {
 | 
				
			||||||
        strategies: PropTypes.array.isRequired,
 | 
					        strategies: PropTypes.array.isRequired,
 | 
				
			||||||
        addStrategy: PropTypes.func.isRequired,
 | 
					        addStrategy: PropTypes.func,
 | 
				
			||||||
        fetchStrategies: PropTypes.func.isRequired,
 | 
					        fetchStrategies: PropTypes.func.isRequired,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -9,9 +9,9 @@ class StrategiesList extends React.Component {
 | 
				
			|||||||
    static propTypes = {
 | 
					    static propTypes = {
 | 
				
			||||||
        strategies: PropTypes.array.isRequired,
 | 
					        strategies: PropTypes.array.isRequired,
 | 
				
			||||||
        configuredStrategies: PropTypes.array.isRequired,
 | 
					        configuredStrategies: PropTypes.array.isRequired,
 | 
				
			||||||
        updateStrategy: PropTypes.func.isRequired,
 | 
					        updateStrategy: PropTypes.func,
 | 
				
			||||||
        removeStrategy: PropTypes.func.isRequired,
 | 
					        removeStrategy: PropTypes.func,
 | 
				
			||||||
        moveStrategy: PropTypes.func.isRequired,
 | 
					        moveStrategy: PropTypes.func,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    render() {
 | 
					    render() {
 | 
				
			||||||
@ -27,8 +27,8 @@ class StrategiesList extends React.Component {
 | 
				
			|||||||
                key={strategy.id}
 | 
					                key={strategy.id}
 | 
				
			||||||
                strategy={strategy}
 | 
					                strategy={strategy}
 | 
				
			||||||
                moveStrategy={moveStrategy}
 | 
					                moveStrategy={moveStrategy}
 | 
				
			||||||
                removeStrategy={removeStrategy.bind(null, i)}
 | 
					                removeStrategy={removeStrategy ? removeStrategy.bind(null, i) : null}
 | 
				
			||||||
                updateStrategy={updateStrategy.bind(null, i)}
 | 
					                updateStrategy={updateStrategy ? updateStrategy.bind(null, i) : null}
 | 
				
			||||||
                strategyDefinition={strategies.find(s => s.name === strategy.name)}
 | 
					                strategyDefinition={strategies.find(s => s.name === strategy.name)}
 | 
				
			||||||
            />
 | 
					            />
 | 
				
			||||||
        ));
 | 
					        ));
 | 
				
			||||||
 | 
				
			|||||||
@ -8,9 +8,9 @@ import { HeaderTitle } from '../../common';
 | 
				
			|||||||
class StrategiesSectionComponent extends React.Component {
 | 
					class StrategiesSectionComponent extends React.Component {
 | 
				
			||||||
    static propTypes = {
 | 
					    static propTypes = {
 | 
				
			||||||
        strategies: PropTypes.array.isRequired,
 | 
					        strategies: PropTypes.array.isRequired,
 | 
				
			||||||
        addStrategy: PropTypes.func.isRequired,
 | 
					        addStrategy: PropTypes.func,
 | 
				
			||||||
        removeStrategy: PropTypes.func.isRequired,
 | 
					        removeStrategy: PropTypes.func,
 | 
				
			||||||
        updateStrategy: PropTypes.func.isRequired,
 | 
					        updateStrategy: PropTypes.func,
 | 
				
			||||||
        fetchStrategies: PropTypes.func.isRequired,
 | 
					        fetchStrategies: PropTypes.func.isRequired,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -47,9 +47,9 @@ class StrategyConfigure extends React.Component {
 | 
				
			|||||||
    static propTypes = {
 | 
					    static propTypes = {
 | 
				
			||||||
        strategy: PropTypes.object.isRequired,
 | 
					        strategy: PropTypes.object.isRequired,
 | 
				
			||||||
        strategyDefinition: PropTypes.object.isRequired,
 | 
					        strategyDefinition: PropTypes.object.isRequired,
 | 
				
			||||||
        updateStrategy: PropTypes.func.isRequired,
 | 
					        updateStrategy: PropTypes.func,
 | 
				
			||||||
        removeStrategy: PropTypes.func.isRequired,
 | 
					        removeStrategy: PropTypes.func,
 | 
				
			||||||
        moveStrategy: PropTypes.func.isRequired,
 | 
					        moveStrategy: PropTypes.func,
 | 
				
			||||||
        isDragging: PropTypes.bool.isRequired,
 | 
					        isDragging: PropTypes.bool.isRequired,
 | 
				
			||||||
        connectDragPreview: PropTypes.func.isRequired,
 | 
					        connectDragPreview: PropTypes.func.isRequired,
 | 
				
			||||||
        connectDragSource: PropTypes.func.isRequired,
 | 
					        connectDragSource: PropTypes.func.isRequired,
 | 
				
			||||||
@ -170,7 +170,11 @@ class StrategyConfigure extends React.Component {
 | 
				
			|||||||
                        <Link title="View strategy" to={`/strategies/view/${name}`} className={styles.editLink}>
 | 
					                        <Link title="View strategy" to={`/strategies/view/${name}`} className={styles.editLink}>
 | 
				
			||||||
                            <Icon name="link" />
 | 
					                            <Icon name="link" />
 | 
				
			||||||
                        </Link>
 | 
					                        </Link>
 | 
				
			||||||
                        <IconButton title="Remove strategy from toggle" name="delete" onClick={this.handleRemove} />
 | 
					                        {this.props.removeStrategy ? (
 | 
				
			||||||
 | 
					                            <IconButton title="Remove strategy from toggle" name="delete" onClick={this.handleRemove} />
 | 
				
			||||||
 | 
					                        ) : (
 | 
				
			||||||
 | 
					                            <span />
 | 
				
			||||||
 | 
					                        )}
 | 
				
			||||||
                        {connectDragSource(
 | 
					                        {connectDragSource(
 | 
				
			||||||
                            <span className={styles.reorderIcon}>
 | 
					                            <span className={styles.reorderIcon}>
 | 
				
			||||||
                                <Icon name="reorder" />
 | 
					                                <Icon name="reorder" />
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import { hashHistory, Link } from 'react-router';
 | 
				
			|||||||
import HistoryComponent from '../history/history-list-toggle-container';
 | 
					import HistoryComponent from '../history/history-list-toggle-container';
 | 
				
			||||||
import MetricComponent from './metric-container';
 | 
					import MetricComponent from './metric-container';
 | 
				
			||||||
import EditFeatureToggle from './form/form-update-feature-container';
 | 
					import EditFeatureToggle from './form/form-update-feature-container';
 | 
				
			||||||
 | 
					import ViewFeatureToggle from './form/form-view-feature-container';
 | 
				
			||||||
import { styles as commonStyles } from '../common';
 | 
					import { styles as commonStyles } from '../common';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TABS = {
 | 
					const TABS = {
 | 
				
			||||||
@ -49,7 +50,10 @@ export default class ViewFeatureToggleComponent extends React.Component {
 | 
				
			|||||||
        if (TABS[activeTab] === TABS.history) {
 | 
					        if (TABS[activeTab] === TABS.history) {
 | 
				
			||||||
            return <HistoryComponent toggleName={featureToggleName} />;
 | 
					            return <HistoryComponent toggleName={featureToggleName} />;
 | 
				
			||||||
        } else if (TABS[activeTab] === TABS.strategies) {
 | 
					        } else if (TABS[activeTab] === TABS.strategies) {
 | 
				
			||||||
            return <EditFeatureToggle featureToggle={featureToggle} />
 | 
					            if (this.isFeatureView) {
 | 
				
			||||||
 | 
					                return <EditFeatureToggle featureToggle={featureToggle} />
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return <ViewFeatureToggle featureToggle={featureToggle} />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            return <MetricComponent featureToggle={featureToggle} />;
 | 
					            return <MetricComponent featureToggle={featureToggle} />;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user