2017-02-20 18:15:36 +02:00
|
|
|
import React from 'react';
|
|
|
|
import { connect } from 'react-redux';
|
|
|
|
import { Switch, Route } from 'react-router-dom';
|
|
|
|
import PropTypes from '@root/prop-types';
|
|
|
|
import Redirect from '@components/redirect';
|
|
|
|
import Section from '@components/section';
|
|
|
|
import SummarySection from './summary';
|
|
|
|
import InstancesSection from './instances';
|
|
|
|
import MetricsSection from './metrics';
|
|
|
|
import NetworksSection from './networks';
|
|
|
|
import TagsMetadataSection from './tags-metadata';
|
|
|
|
import ActivityFeedSection from './activity-feed';
|
|
|
|
import ServiceManifestSection from './service-manifest';
|
|
|
|
import FirewallSection from './firewall';
|
2017-01-03 00:32:29 +02:00
|
|
|
|
|
|
|
const SectionComponents = {
|
2017-02-20 18:15:36 +02:00
|
|
|
summary: SummarySection,
|
|
|
|
instances: InstancesSection,
|
|
|
|
metrics: MetricsSection,
|
|
|
|
networks: NetworksSection,
|
|
|
|
'tags-metadata': TagsMetadataSection,
|
|
|
|
'activity-feed': ActivityFeedSection,
|
|
|
|
'service-manifest': ServiceManifestSection,
|
|
|
|
firewall: FirewallSection
|
2017-01-03 00:32:29 +02:00
|
|
|
};
|
|
|
|
|
2017-02-20 18:15:36 +02:00
|
|
|
import {
|
2017-01-03 00:32:29 +02:00
|
|
|
orgByIdSelector,
|
|
|
|
serviceSectionsSelector,
|
|
|
|
projectByIdSelector,
|
|
|
|
serviceByIdSelector
|
2017-02-20 18:15:36 +02:00
|
|
|
} from '@state/selectors';
|
2017-01-03 00:32:29 +02:00
|
|
|
|
|
|
|
const Service = ({
|
|
|
|
org = {},
|
|
|
|
project = {},
|
|
|
|
sections = [],
|
|
|
|
service = {}
|
|
|
|
}) => {
|
|
|
|
const pathname = ({
|
|
|
|
org,
|
|
|
|
project,
|
|
|
|
service,
|
|
|
|
section
|
|
|
|
}) => (
|
|
|
|
`/${org}/projects/${project}/services/${service}/${section}`
|
|
|
|
);
|
|
|
|
|
2017-01-03 01:17:12 +02:00
|
|
|
const redirectHref = pathname({
|
|
|
|
org: org.id,
|
|
|
|
project: project.id,
|
|
|
|
service: service.id,
|
|
|
|
section: 'summary'
|
|
|
|
});
|
|
|
|
|
|
|
|
const navLinks = sections.map((name) => ({
|
2017-01-03 00:32:29 +02:00
|
|
|
pathname: pathname({
|
|
|
|
org: org.id,
|
|
|
|
project: project.id,
|
|
|
|
service: service.id,
|
|
|
|
section: name
|
|
|
|
}),
|
|
|
|
name
|
|
|
|
}));
|
|
|
|
|
2017-01-03 01:17:12 +02:00
|
|
|
const nameLinks = [{
|
|
|
|
pathname: `/${org.id}`,
|
|
|
|
name: org.name
|
|
|
|
}, {
|
|
|
|
pathname: `/${org.id}/projects/${project.id}`,
|
|
|
|
name: project.name
|
|
|
|
}, {
|
|
|
|
pathname: redirectHref,
|
|
|
|
name: service.name
|
|
|
|
}];
|
|
|
|
|
2017-01-03 00:32:29 +02:00
|
|
|
const navMatches = sections.map((name) => (
|
2017-02-06 20:27:10 +02:00
|
|
|
<Route
|
2017-01-03 00:32:29 +02:00
|
|
|
component={SectionComponents[name]}
|
|
|
|
key={name}
|
2017-02-06 20:27:10 +02:00
|
|
|
path={`/:org/projects/:projectId/services/:serviceId/${name}`}
|
2017-01-03 00:32:29 +02:00
|
|
|
/>
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
|
|
const missMatch = !sections.length ? null : (
|
2017-02-06 20:27:10 +02:00
|
|
|
<Route component={Redirect(redirectHref)} />
|
2017-01-03 00:32:29 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
return (
|
2017-01-03 01:17:12 +02:00
|
|
|
<Section links={navLinks} name={nameLinks}>
|
2017-02-06 20:27:10 +02:00
|
|
|
<Switch>
|
|
|
|
{navMatches}
|
|
|
|
{missMatch}
|
|
|
|
</Switch>
|
2017-01-03 00:32:29 +02:00
|
|
|
</Section>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
Service.propTypes = {
|
|
|
|
org: PropTypes.org,
|
|
|
|
project: PropTypes.project,
|
|
|
|
sections: PropTypes.sections,
|
|
|
|
service: PropTypes.service
|
|
|
|
};
|
|
|
|
|
|
|
|
const mapStateToProps = (state, {
|
2017-02-07 11:55:18 +02:00
|
|
|
match = {
|
|
|
|
params: {}
|
|
|
|
}
|
2017-01-03 00:32:29 +02:00
|
|
|
}) => ({
|
2017-02-06 20:27:10 +02:00
|
|
|
org: orgByIdSelector(match.params.org)(state),
|
|
|
|
project: projectByIdSelector(match.params.projectId)(state),
|
2017-01-03 00:32:29 +02:00
|
|
|
sections: serviceSectionsSelector(state),
|
2017-02-06 20:27:10 +02:00
|
|
|
service: serviceByIdSelector(match.params.serviceId)(state)
|
2017-01-03 00:32:29 +02:00
|
|
|
});
|
|
|
|
|
2017-02-20 18:15:36 +02:00
|
|
|
export default connect(
|
2017-01-03 00:32:29 +02:00
|
|
|
mapStateToProps
|
|
|
|
)(Service);
|