2 * ============LICENSE_START========================================================================
3 * ONAP : ccsdk feature sdnr wt odlux
4 * =================================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
6 * =================================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software distributed under the License
13 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14 * or implied. See the License for the specific language governing permissions and limitations under
16 * ============LICENSE_END==========================================================================
18 import * as React from 'react';
19 import { WithStyles, withStyles, createStyles, Theme, Tooltip } from '@material-ui/core';
21 import AddIcon from '@material-ui/icons/Add';
22 import IconButton from '@material-ui/core/IconButton';
23 import EditIcon from '@material-ui/icons/Edit';
24 import DeleteIcon from '@material-ui/icons/Delete';
26 import { IApplicationStoreState } from '../../../../framework/src/store/applicationStore';
27 import connect, { IDispatcher, Connect } from '../../../../framework/src/flux/connect';
28 import MaterialTable, { MaterialTableCtorType, ColumnType } from '../../../../framework/src/components/material-table';
30 import { createAvaliableMediatorServersProperties, createAvaliableMediatorServersActions } from '../handlers/avaliableMediatorServersHandler';
32 import { MediatorServer } from '../models/mediatorServer';
33 import EditMediatorServerDialog, { EditMediatorServerDialogMode } from '../components/editMediatorServerDialog';
34 import { NavigateToApplication } from '../../../../framework/src/actions/navigationActions';
36 const MediatorServersTable = MaterialTable as MaterialTableCtorType<MediatorServer>;
38 const styles = (theme: Theme) => createStyles({
45 marginLeft: theme.spacing(1),
46 marginRight: theme.spacing(1),
51 const mapProps = (state: IApplicationStoreState) => ({
52 mediatorServersProperties: createAvaliableMediatorServersProperties(state),
55 const mapDispatch = (dispatcher: IDispatcher) => ({
56 mediatorServersActions: createAvaliableMediatorServersActions(dispatcher.dispatch),
57 selectMediatorServer: (mediatorServerId: string) => mediatorServerId && dispatcher.dispatch(new NavigateToApplication("mediator", mediatorServerId)),
60 const emptyMediatorServer: MediatorServer = {
66 type MediatorServerSelectionComponentProps = Connect<typeof mapProps, typeof mapDispatch> & WithStyles<typeof styles>;
68 type MediatorServerSelectionComponentState = {
69 mediatorServerToEdit: MediatorServer,
70 mediatorServerEditorMode: EditMediatorServerDialogMode
73 class MediatorServerSelectionComponent extends React.Component<MediatorServerSelectionComponentProps, MediatorServerSelectionComponentState> {
75 constructor(props: MediatorServerSelectionComponentProps) {
79 mediatorServerEditorMode: EditMediatorServerDialogMode.None,
80 mediatorServerToEdit: emptyMediatorServer,
85 const { classes } = this.props;
87 const addMediatorServerActionButton = {
88 icon: AddIcon, tooltip: 'Add', onClick: () => {
90 mediatorServerEditorMode: EditMediatorServerDialogMode.AddMediatorServer,
91 mediatorServerToEdit: emptyMediatorServer,
97 <MediatorServersTable stickyHeader title={"Mediator"} customActionButtons={[addMediatorServerActionButton]} idProperty={"id"}
98 {...this.props.mediatorServersActions} {...this.props.mediatorServersProperties} columns={[
99 { property: "name", title: "Name", type: ColumnType.text },
100 { property: "url", title: "Url", type: ColumnType.text },
102 property: "actions", title: "Actions", type: ColumnType.custom, customControl: ({ rowData }) => (
103 <div className={classes.spacer}>
104 <Tooltip title={"Edit"} ><IconButton className={classes.button} onClick={event => { this.onEditMediatorServer(event, rowData); }}><EditIcon /></IconButton></Tooltip>
105 <Tooltip title={"Remove"} ><IconButton className={classes.button} onClick={event => { this.onRemoveMediatorServer(event, rowData); }}><DeleteIcon /></IconButton></Tooltip>
109 ]} onHandleClick={this.onSelectMediatorServer} />
110 <EditMediatorServerDialog
111 mediatorServer={this.state.mediatorServerToEdit}
112 mode={this.state.mediatorServerEditorMode}
113 onClose={this.onCloseEditMediatorServerDialog} />
118 public componentDidMount() {
119 this.props.mediatorServersActions.onToggleFilter();
122 private onSelectMediatorServer = (event: React.MouseEvent<HTMLElement>, server: MediatorServer) => {
123 event.preventDefault();
124 event.stopPropagation();
125 this.props.selectMediatorServer(server && server.id);
129 private onEditMediatorServer = (event: React.MouseEvent<HTMLElement>, server: MediatorServer) => {
130 event.preventDefault();
131 event.stopPropagation();
133 mediatorServerEditorMode: EditMediatorServerDialogMode.EditMediatorServer,
134 mediatorServerToEdit: server,
138 private onRemoveMediatorServer = (event: React.MouseEvent<HTMLElement>, server: MediatorServer) => {
139 event.preventDefault();
140 event.stopPropagation();
142 mediatorServerEditorMode: EditMediatorServerDialogMode.RemoveMediatorServer,
143 mediatorServerToEdit: server,
147 private onCloseEditMediatorServerDialog = () => {
149 mediatorServerEditorMode: EditMediatorServerDialogMode.None,
150 mediatorServerToEdit: emptyMediatorServer,
156 export const MediatorServerSelection = withStyles(styles)(connect(mapProps, mapDispatch)(MediatorServerSelectionComponent));
157 export default MediatorServerSelection;