mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	add tabs to client application view
This commit is contained in:
		
							parent
							
								
									986550887b
								
							
						
					
					
						commit
						f8e5a179f0
					
				@ -2,7 +2,12 @@
 | 
			
		||||
import React, { Component, PureComponent } from 'react';
 | 
			
		||||
 | 
			
		||||
import { Link } from 'react-router';
 | 
			
		||||
import { Grid, Cell, List, ListItem, ListItemContent, Textfield, Icon, ProgressBar } from 'react-mdl';
 | 
			
		||||
import {
 | 
			
		||||
    Grid, Cell,
 | 
			
		||||
    List, ListItem, ListItemContent,
 | 
			
		||||
    Textfield, Icon, ProgressBar,
 | 
			
		||||
    Tabs, Tab,
 | 
			
		||||
} from 'react-mdl';
 | 
			
		||||
import { HeaderTitle, ExternalIconLink } from '../common';
 | 
			
		||||
 | 
			
		||||
class StatefulTextfield extends Component {
 | 
			
		||||
@ -27,7 +32,12 @@ class StatefulTextfield extends Component {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class ClientStrategies extends PureComponent {
 | 
			
		||||
class ClientApplications extends PureComponent {
 | 
			
		||||
    constructor (props) {
 | 
			
		||||
        super(props);
 | 
			
		||||
        this.state = { activeTab: 0 };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    componentDidMount () {
 | 
			
		||||
        this.props.fetchApplication(this.props.appName);
 | 
			
		||||
    }
 | 
			
		||||
@ -51,80 +61,92 @@ class ClientStrategies extends PureComponent {
 | 
			
		||||
            color,
 | 
			
		||||
        } = application;
 | 
			
		||||
 | 
			
		||||
        const content = this.state.activeTab === 0 ? (
 | 
			
		||||
            <Grid>
 | 
			
		||||
                <Cell col={3}>
 | 
			
		||||
                    <h6> Toggles</h6>
 | 
			
		||||
                    <hr />
 | 
			
		||||
                    <List>
 | 
			
		||||
                    {seenToggles.map((name, i) =>
 | 
			
		||||
                        <ListItem key={i}>
 | 
			
		||||
                            <ListItemContent icon="check box">
 | 
			
		||||
                                <Link to={`/features/edit/${name}`}>
 | 
			
		||||
                                    {name}
 | 
			
		||||
                                </Link>
 | 
			
		||||
                            </ListItemContent>
 | 
			
		||||
                    </ListItem>)}
 | 
			
		||||
                    </List>
 | 
			
		||||
                </Cell>
 | 
			
		||||
                <Cell col={3}>
 | 
			
		||||
                    <h6>Implemented strategies</h6>
 | 
			
		||||
                    <hr />
 | 
			
		||||
                    <List>
 | 
			
		||||
                        {strategies.map((name, i) => (
 | 
			
		||||
                            <ListItem key={`${name}-${i}`}>
 | 
			
		||||
                                <ListItemContent icon="toc">
 | 
			
		||||
                                    <Link to={`/strategies/view/${name}`}>
 | 
			
		||||
                                        {name}
 | 
			
		||||
                                    </Link>
 | 
			
		||||
                                </ListItemContent>
 | 
			
		||||
                            </ListItem>
 | 
			
		||||
                        ))}
 | 
			
		||||
                    </List>
 | 
			
		||||
                </Cell>
 | 
			
		||||
                <Cell col={6}>
 | 
			
		||||
                    <h6>{instances.length} Instances connected</h6>
 | 
			
		||||
                    <hr />
 | 
			
		||||
                    <List>
 | 
			
		||||
                    {instances.map(({ instanceId, clientIp, lastSeen }, i) => (
 | 
			
		||||
                        <ListItem key={i} twoLine>
 | 
			
		||||
                            <ListItemContent
 | 
			
		||||
                                icon="timeline"
 | 
			
		||||
                                subtitle={
 | 
			
		||||
                                    <span>{clientIp} last seen at <small>{new Date(lastSeen).toLocaleString('nb-NO')}</small></span>
 | 
			
		||||
                                }>
 | 
			
		||||
                                {instanceId}
 | 
			
		||||
                            </ListItemContent>
 | 
			
		||||
                        </ListItem>
 | 
			
		||||
                    ))}
 | 
			
		||||
                    </List>
 | 
			
		||||
                </Cell>
 | 
			
		||||
            </Grid>) : (
 | 
			
		||||
            <Grid>
 | 
			
		||||
                <Cell col={12}>
 | 
			
		||||
                    <h5>Edit app meta data</h5>
 | 
			
		||||
                </Cell>
 | 
			
		||||
                <Cell col={6}>
 | 
			
		||||
                    <StatefulTextfield
 | 
			
		||||
                        value={url} label="URL" onBlur={(e) => storeApplicationMetaData(appName, 'url', e.target.value)} /><br />
 | 
			
		||||
                    <StatefulTextfield
 | 
			
		||||
                        value={description}
 | 
			
		||||
                        label="Description" rows={5} onBlur={(e) => storeApplicationMetaData(appName, 'description', e.target.value)} />
 | 
			
		||||
                </Cell>
 | 
			
		||||
                <Cell col={6}>
 | 
			
		||||
                    <StatefulTextfield
 | 
			
		||||
                        value={icon} label="Select icon" onBlur={(e) => storeApplicationMetaData(appName, 'icon', e.target.value)} />
 | 
			
		||||
                    <StatefulTextfield
 | 
			
		||||
                        value={color} label="Select color" onBlur={(e) => storeApplicationMetaData(appName, 'color', e.target.value)} />
 | 
			
		||||
                </Cell>
 | 
			
		||||
            </Grid>);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        return (
 | 
			
		||||
            <div>
 | 
			
		||||
                <HeaderTitle title={<span><Icon name={icon} /> {appName}</span>} subtitle={description}
 | 
			
		||||
                    actions={url && <ExternalIconLink url={url}>Visit site</ExternalIconLink>}
 | 
			
		||||
                />
 | 
			
		||||
                <Grid>
 | 
			
		||||
                    <Cell col={3}>
 | 
			
		||||
                        <h6> Toggles</h6>
 | 
			
		||||
                        <hr />
 | 
			
		||||
                        <List>
 | 
			
		||||
                        {seenToggles.map((name, i) =>
 | 
			
		||||
                            <ListItem key={i}>
 | 
			
		||||
                                <ListItemContent icon="check box">
 | 
			
		||||
                                    <Link to={`/features/edit/${name}`}>
 | 
			
		||||
                                        {name}
 | 
			
		||||
                                    </Link>
 | 
			
		||||
                                </ListItemContent>
 | 
			
		||||
                        </ListItem>)}
 | 
			
		||||
                        </List>
 | 
			
		||||
                    </Cell>
 | 
			
		||||
                    <Cell col={3}>
 | 
			
		||||
                        <h6>Implemented strategies</h6>
 | 
			
		||||
                        <hr />
 | 
			
		||||
                        <List>
 | 
			
		||||
                            {strategies.map((name, i) => (
 | 
			
		||||
                                <ListItem key={`${name}-${i}`}>
 | 
			
		||||
                                    <ListItemContent icon="toc">
 | 
			
		||||
                                        <Link to={`/strategies/view/${name}`}>
 | 
			
		||||
                                            {name}
 | 
			
		||||
                                        </Link>
 | 
			
		||||
                                    </ListItemContent>
 | 
			
		||||
                                </ListItem>
 | 
			
		||||
                            ))}
 | 
			
		||||
                        </List>
 | 
			
		||||
                    </Cell>
 | 
			
		||||
                    <Cell col={6}>
 | 
			
		||||
                        <h6>{instances.length} Instances connected</h6>
 | 
			
		||||
                        <hr />
 | 
			
		||||
                        <List>
 | 
			
		||||
                        {instances.map(({ instanceId, clientIp, lastSeen }, i) => (
 | 
			
		||||
                            <ListItem key={i} twoLine>
 | 
			
		||||
                                <ListItemContent
 | 
			
		||||
                                    icon="timeline"
 | 
			
		||||
                                    subtitle={
 | 
			
		||||
                                        <span>{clientIp} last seen at <small>{new Date(lastSeen).toLocaleString('nb-NO')}</small></span>
 | 
			
		||||
                                    }>
 | 
			
		||||
                                    {instanceId}
 | 
			
		||||
                                </ListItemContent>
 | 
			
		||||
                            </ListItem>
 | 
			
		||||
                        ))}
 | 
			
		||||
                        </List>
 | 
			
		||||
                    </Cell>
 | 
			
		||||
 | 
			
		||||
                    <Cell col={12}>
 | 
			
		||||
                        <h5>Edit app meta data</h5>
 | 
			
		||||
                    </Cell>
 | 
			
		||||
                    <Cell col={6}>
 | 
			
		||||
                        <StatefulTextfield
 | 
			
		||||
                            value={url} label="URL" onBlur={(e) => storeApplicationMetaData(appName, 'url', e.target.value)} /><br />
 | 
			
		||||
                        <StatefulTextfield
 | 
			
		||||
                            value={description}
 | 
			
		||||
                            label="Description" rows={5} onBlur={(e) => storeApplicationMetaData(appName, 'description', e.target.value)} />
 | 
			
		||||
                    </Cell>
 | 
			
		||||
                    <Cell col={6}>
 | 
			
		||||
                        <StatefulTextfield
 | 
			
		||||
                            value={icon} label="Select icon" onBlur={(e) => storeApplicationMetaData(appName, 'icon', e.target.value)} />
 | 
			
		||||
                        <StatefulTextfield
 | 
			
		||||
                            value={color} label="Select color" onBlur={(e) => storeApplicationMetaData(appName, 'color', e.target.value)} />
 | 
			
		||||
                    </Cell>
 | 
			
		||||
                </Grid>
 | 
			
		||||
                <Tabs activeTab={this.state.activeTab} onChange={(tabId) => this.setState({ activeTab: tabId })} ripple>
 | 
			
		||||
                    <Tab>Metrics</Tab>
 | 
			
		||||
                    <Tab>Edit</Tab>
 | 
			
		||||
                </Tabs>
 | 
			
		||||
 | 
			
		||||
               {content}
 | 
			
		||||
            </div>
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
export default ClientStrategies;
 | 
			
		||||
export default ClientApplications;
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,7 @@ export const AppsLinkList = ({ apps }) => (
 | 
			
		||||
 | 
			
		||||
export const HeaderTitle = ({ title, actions, subtitle }) => (
 | 
			
		||||
    <div style={{ display: 'flex', borderBottom: '1px solid #f1f1f1', marginBottom: '10px', padding: '16px 20px ' }}>
 | 
			
		||||
            <div style={{ flex: '1' }}>
 | 
			
		||||
            <div style={{ flex: '2' }}>
 | 
			
		||||
                <h6 style={{ margin: 0 }}>{title}</h6>
 | 
			
		||||
                {subtitle && <small>{subtitle}</small>}
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user