1 import * as React from 'react';
3 import Button from '@material-ui/core/Button';
4 import TextField from '@material-ui/core/TextField';
5 import Dialog from '@material-ui/core/Dialog';
6 import DialogActions from '@material-ui/core/DialogActions';
7 import DialogContent from '@material-ui/core/DialogContent';
8 import DialogContentText from '@material-ui/core/DialogContentText';
9 import DialogTitle from '@material-ui/core/DialogTitle';
11 import { IDispatcher, connect, Connect } from '../../../../framework/src/flux/connect';
14 addToRequiredNetworkElementsAsyncActionCreator,
15 removeFromRequiredNetworkElementsAsyncActionCreator
16 } from '../actions/requiredNetworkElementsActions';
18 import { unmountNetworkElementAsyncActionCreator, mountNetworkElementAsyncActionCreator } from '../actions/mountedNetworkElementsActions';
19 import { RequiredNetworkElementType } from '../models/requiredNetworkElements';
21 export enum EditNetworkElementDialogMode {
23 UnknownNetworkElementToRequiredNetworkElements = "unknownNetworkElementToRequiredNetworkElements",
24 RequiredNetworkElementToUnknownNetworkElements = "requiredNetworkElementToUnknownNetworkElements",
25 MountNetworkElementToRequiredNetworkElements = "mountNetworkElementToRequiredNetworkElements",
26 MountNetworkElementToUnknonwNetworkElements = "mountNetworkElementToRequiredUnknownElements",
27 MountNetworkElement = "mountNetworkElement",
28 UnmountNetworkElement = "unmountNetworkElement",
31 const mapDispatch = (dispatcher: IDispatcher) => ({
32 addToRequiredNetworkElements: (element: RequiredNetworkElementType) => {
33 dispatcher.dispatch(addToRequiredNetworkElementsAsyncActionCreator(element));
35 removeFromRequiredNetworkElements: (element: RequiredNetworkElementType) => {
36 dispatcher.dispatch(removeFromRequiredNetworkElementsAsyncActionCreator(element));
38 mountNetworkElement: (element: RequiredNetworkElementType) => {
39 dispatcher.dispatch(mountNetworkElementAsyncActionCreator(element));
41 mountAndRquireNetworkElement: (element: RequiredNetworkElementType) => {
42 dispatcher.dispatch(addToRequiredNetworkElementsAsyncActionCreator(element));
43 dispatcher.dispatch(mountNetworkElementAsyncActionCreator(element));
45 unmountNetworkElement: (element: RequiredNetworkElementType) => {
46 dispatcher.dispatch(unmountNetworkElementAsyncActionCreator(element && element.mountId));
51 type DialogSettings = {
53 dialogDescription: string,
54 applyButtonText: string,
55 cancelButtonText: string,
56 enableMountIdEditor: boolean,
57 enableUsernameEditor: boolean,
58 enableExtendedEditor: boolean,
61 const settings: { [key: string]: DialogSettings } = {
62 [EditNetworkElementDialogMode.None]: {
64 dialogDescription: "",
67 enableMountIdEditor: false,
68 enableUsernameEditor: false,
69 enableExtendedEditor: false,
71 [EditNetworkElementDialogMode.UnknownNetworkElementToRequiredNetworkElements] : {
72 dialogTitle: "Add to required network elements" ,
73 dialogDescription: "Create a new NetworkElement in planning database as clone of existing real NetworkElement." ,
74 applyButtonText: "Add to required network elements" ,
75 cancelButtonText: "Cancel",
76 enableMountIdEditor: false,
77 enableUsernameEditor: true,
78 enableExtendedEditor: false,
80 [EditNetworkElementDialogMode.RequiredNetworkElementToUnknownNetworkElements]: {
81 dialogTitle: "Remove from required network elements",
82 dialogDescription: "Do you really want to remove the required element:",
83 applyButtonText: "Remove network element",
84 cancelButtonText: "Cancel",
85 enableMountIdEditor: false,
86 enableUsernameEditor: false,
87 enableExtendedEditor: false,
89 [EditNetworkElementDialogMode.MountNetworkElementToUnknonwNetworkElements]: {
90 dialogTitle: "Mount to unknown network elements",
91 dialogDescription: "Mount this network element:",
92 applyButtonText: "Mount network element",
93 cancelButtonText: "Cancel",
94 enableMountIdEditor: true,
95 enableUsernameEditor: true,
96 enableExtendedEditor: true,
98 [EditNetworkElementDialogMode.MountNetworkElementToRequiredNetworkElements]: {
99 dialogTitle: "Mount to required network elements",
100 dialogDescription: "Mount this network element:",
101 applyButtonText: "Mount network element",
102 cancelButtonText: "Cancel",
103 enableMountIdEditor: true,
104 enableUsernameEditor: true,
105 enableExtendedEditor: true,
107 [EditNetworkElementDialogMode.MountNetworkElement]: {
108 dialogTitle: "Mount network element",
109 dialogDescription: "mount this network element:",
110 applyButtonText: "mount network element",
111 cancelButtonText: "Cancel",
112 enableMountIdEditor: false,
113 enableUsernameEditor: false,
114 enableExtendedEditor: false,
116 [EditNetworkElementDialogMode.UnmountNetworkElement]: {
117 dialogTitle: "Unmount network element",
118 dialogDescription: "unmount this network element:",
119 applyButtonText: "Unmount network element",
120 cancelButtonText: "Cancel",
121 enableMountIdEditor: false,
122 enableUsernameEditor: false,
123 enableExtendedEditor: false,
127 type EditNetworkElementDialogComponentProps = Connect<undefined,typeof mapDispatch> & {
128 mode: EditNetworkElementDialogMode;
129 initialNetworkElement: RequiredNetworkElementType;
133 type EditNetworkElementDialogComponentState = RequiredNetworkElementType & {
137 class EditNetworkElementDialogComponent extends React.Component<EditNetworkElementDialogComponentProps, EditNetworkElementDialogComponentState> {
138 constructor(props: EditNetworkElementDialogComponentProps) {
142 mountId: this.props.initialNetworkElement.mountId,
143 host: this.props.initialNetworkElement.host,
144 port: this.props.initialNetworkElement.port,
145 password: this.props.initialNetworkElement.password,
146 username: this.props.initialNetworkElement.username,
151 render(): JSX.Element {
152 const setting = settings[this.props.mode];
154 <Dialog open={ this.props.mode !== EditNetworkElementDialogMode.None }>
155 <DialogTitle id="form-dialog-title">{ setting.dialogTitle }</DialogTitle>
158 { setting.dialogDescription }
160 <TextField disabled={ !setting.enableMountIdEditor } spellCheck={false} autoFocus margin="dense" id="name" label="Name" type="text" fullWidth value={ this.state.mountId } onChange={(event)=>{ this.setState({mountId: event.target.value}); } } />
161 <TextField disabled={ !setting.enableMountIdEditor } spellCheck={false} margin="dense" id="ipaddress" label="IP address" type="text" fullWidth value={ this.state.host } onChange={(event)=>{ this.setState({host: event.target.value}); } }/>
162 <TextField disabled={ !setting.enableMountIdEditor } spellCheck={false} margin="dense" id="netconfport" label="NetConf port" type="number" fullWidth value={ this.state.port.toString() } onChange={(event)=>{ this.setState({port: +event.target.value}); } }/>
163 { setting.enableUsernameEditor && <TextField disabled={ !setting.enableUsernameEditor } spellCheck={ false } margin="dense" id="username" label="Username" type="text" fullWidth value={ this.state.username } onChange={ (event) => { this.setState({ username: event.target.value }); } } /> || null }
164 { setting.enableUsernameEditor && <TextField disabled={ !setting.enableUsernameEditor } spellCheck={ false } margin="dense" id="password" label="Password" type="password" fullWidth value={ this.state.password } onChange={ (event) => { this.setState({ password: event.target.value }); } } /> || null }
167 <Button onClick={ (event) => {
169 mountId: this.state.mountId,
170 host: this.state.host,
171 port: this.state.port,
172 username: this.state.username,
173 password: this.state.password
175 event.preventDefault();
176 event.stopPropagation();
177 } } > { setting.applyButtonText } </Button>
178 <Button onClick={ (event) => {
180 event.preventDefault();
181 event.stopPropagation();
182 } } color="secondary"> { setting.cancelButtonText } </Button>
188 private onApply = (element: RequiredNetworkElementType) => {
189 this.props.onClose && this.props.onClose();
190 switch (this.props.mode) {
191 case EditNetworkElementDialogMode.UnknownNetworkElementToRequiredNetworkElements:
192 element && this.props.addToRequiredNetworkElements(element);
194 case EditNetworkElementDialogMode.RequiredNetworkElementToUnknownNetworkElements:
195 element && this.props.removeFromRequiredNetworkElements(element);
197 case EditNetworkElementDialogMode.MountNetworkElementToUnknonwNetworkElements:
198 element && this.props.mountNetworkElement(element);
200 case EditNetworkElementDialogMode.MountNetworkElementToRequiredNetworkElements:
201 element && this.props.mountAndRquireNetworkElement(element);
203 case EditNetworkElementDialogMode.MountNetworkElement:
204 element && this.props.mountNetworkElement(element);
206 case EditNetworkElementDialogMode.UnmountNetworkElement:
207 element && this.props.unmountNetworkElement(element);
212 private onCancel = () => {
213 this.props.onClose && this.props.onClose();
216 static getDerivedStateFromProps(props: EditNetworkElementDialogComponentProps, state: EditNetworkElementDialogComponentState & { _initialNetworkElement: RequiredNetworkElementType }): EditNetworkElementDialogComponentState & { _initialNetworkElement: RequiredNetworkElementType } {
217 if (props.initialNetworkElement !== state._initialNetworkElement) {
220 ...props.initialNetworkElement,
221 _initialNetworkElement: props.initialNetworkElement,
228 export const EditNetworkElementDialog = connect(undefined, mapDispatch)(EditNetworkElementDialogComponent);
229 export default EditNetworkElementDialog;