diff --git a/src/pages/users/dialogs/edit-user.js b/src/pages/users/dialogs/edit-user.js
new file mode 100644
index 0000000..97fdc20
--- /dev/null
+++ b/src/pages/users/dialogs/edit-user.js
@@ -0,0 +1,136 @@
+/**
+ * This file is part of VILLASweb.
+ *
+ * VILLASweb is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * VILLASweb is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with VILLASweb. If not, see .
+ ******************************************************************************/
+
+import React from 'react';
+import { Form, Col } from 'react-bootstrap';
+import Dialog from '../../../common/dialogs/dialog';
+import NotificationsDataManager from "../../../common/data-managers/notifications-data-manager";
+import NotificationsFactory from "../../../common/data-managers/notifications-factory";
+
+class EditUserDialog extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ username: '',
+ mail: '',
+ role: '',
+ active: '',
+ password: "",
+ confirmPassword: "",
+ oldPassword: "",
+ }
+ }
+
+ onClose(canceled) {
+ if (canceled === false) {
+
+ let user = {}
+ user.id = this.props.user.id;
+
+ if (this.state.username != null && this.state.username !== this.props.user.username){
+ user.username = this.state.username
+ }
+
+ if (this.state.mail != null && this.state.mail !== this.props.user.mail){
+ user.mail = this.state.mail
+ }
+
+ if (this.state.role != null && this.state.role !== this.props.user.role){
+ user.role = this.state.role
+ }
+
+ if (this.state.active != null && this.state.active !== this.props.user.active){
+ user.active = this.state.active
+ }
+
+ if (this.state.password !== '' && this.state.oldPassword !== '' && this.state.password === this.state.confirmPassword) {
+ user.password = this.state.password;
+ user.oldpassword = this.state.oldPassword
+ } else if (this.state.password !== '' && this.state.password !== this.state.confirmPassword){
+ NotificationsDataManager.addNotification(NotificationsFactory.UPDATE_ERROR("New password not correctly confirmed"))
+ }
+
+ this.props.onClose(user);
+
+ } else {
+ this.props.onClose();
+ }
+ }
+
+ handleChange(e) {
+ this.setState({ [e.target.id]: e.target.value });
+ }
+
+ resetState() {
+ this.setState({
+ username: this.props.user.username,
+ mail: this.props.user.mail,
+ role: this.props.user.role,
+ password: "",
+ confirmPassword: "",
+ oldPassword: "",
+ });
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
+
+export default EditUserDialog;
diff --git a/src/pages/users/dialogs/new-user.js b/src/pages/users/dialogs/new-user.js
new file mode 100644
index 0000000..4addc41
--- /dev/null
+++ b/src/pages/users/dialogs/new-user.js
@@ -0,0 +1,108 @@
+/**
+ * This file is part of VILLASweb.
+ *
+ * VILLASweb is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * VILLASweb is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with VILLASweb. If not, see .
+ ******************************************************************************/
+
+import React from 'react';
+import { Form, Col } from 'react-bootstrap';
+import Dialog from '../../../common/dialogs/dialog';
+
+class NewUserDialog extends React.Component {
+ valid = false;
+
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ username: '',
+ mail: '',
+ role: 'User',
+ password: '',
+ };
+ }
+
+ onClose(canceled) {
+ if (canceled === false) {
+ if (this.valid) {
+ this.props.onClose(this.state);
+ }
+ } else {
+ this.props.onClose();
+ }
+ }
+
+ handleChange(e) {
+ this.setState({ [e.target.id]: e.target.value });
+
+ // check all controls
+ let username = this.state.username !== '' && this.state.username.length >= 3;
+ let password = this.state.password !== '';
+ let role = this.state.role !== '';
+ let mail = this.state.mail !== '';
+
+ this.valid = username && password && role && mail;
+ }
+
+ resetState() {
+ this.setState({
+ username: '',
+ mail: '',
+ role: 'User',
+ password: '',
+ });
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
+
+export default NewUserDialog;
diff --git a/src/pages/users/dialogs/users-to-scenario.js b/src/pages/users/dialogs/users-to-scenario.js
new file mode 100644
index 0000000..cd19e3d
--- /dev/null
+++ b/src/pages/users/dialogs/users-to-scenario.js
@@ -0,0 +1,70 @@
+/**
+ * This file is part of VILLASweb.
+ *
+ * VILLASweb is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * VILLASweb is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with VILLASweb. If not, see .
+ ******************************************************************************/
+
+import React from 'react';
+import { Table } from 'react-bootstrap';
+import Dialog from '../../../common/dialogs/dialog';
+
+class UsersToScenarioDialog extends React.Component {
+ valid = true;
+
+ onClose(canceled) {
+ if (this.props.onClose != null) {
+ this.props.onClose(canceled);
+ }
+ };
+
+ renderRow(value, key) {
+ return (