138 lines
4.5 KiB
JavaScript

import React, { useState } from "react"
import PropTypes from "prop-types"
import { List } from "immutable"
import { Button, Modal } from "react-bootstrap"
import Toggle from "react-bootstrap-toggle";
export const UserList = props => (
<div>
<h2 className="hidden-xs">Users</h2>
<h3 className="visible-xs">Users</h3>
<table className="table">
<thead>
<tr className="active">
<th>#</th>
<th>Name</th>
<th>Activated</th>
<th>Admin</th>
<th>Polochon URL</th>
<th>Polochon token</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{props.users.map((el, index) =>
<User key={index} data={el} updateUser={props.updateUser}/>)}
</tbody>
</table>
</div>
);
UserList.propTypes = {
users: PropTypes.PropTypes.instanceOf(List),
updateUser: PropTypes.func,
};
const User = function(props) {
const polochonConfig = props.data.get("RawConfig").get("polochon");
const polochonUrl = polochonConfig ? polochonConfig.get("url") : "-";
const polochonToken = polochonConfig ? polochonConfig.get("token") : "-";
return (
<tr>
<td>{props.data.get("id")}</td>
<td>{props.data.get("Name")}</td>
<td><UserActivationStatus activated={props.data.get("Activated")}/></td>
<td><UserAdminStatus admin={props.data.get("Admin")}/></td>
<td>{polochonUrl}</td>
<td>{polochonToken}</td>
<td>
<UserEdit
data={props.data}
updateUser={props.updateUser}
polochonUrl={polochonUrl}
polochonToken={polochonToken}
/>
</td>
</tr>
);
}
User.propTypes = {
data: PropTypes.object,
updateUser: PropTypes.func,
};
const UserAdminStatus = props => (
<span className={props.admin ? "fa fa-check" : "fa fa-times"}></span>
);
UserAdminStatus.propTypes = { admin: PropTypes.bool.isRequired };
const UserActivationStatus = props => (
<span className={props.activated ? "fa fa-check" : "fa fa-times text-danger"}></span>
);
UserActivationStatus.propTypes = { activated: PropTypes.bool.isRequired };
function UserEdit(props) {
const [modal, setModal] = useState(false);
const [admin, setAdmin] = useState(props.data.get("Admin"));
const [activated, setActivated] = useState(props.data.get("Activated"));
const [url, setUrl] = useState(props.polochonUrl);
const [token, setToken] = useState(props.polochonToken);
const handleSubmit = function(e) {
if (e) { e.preventDefault(); }
props.updateUser({
userId: props.data.get("id"),
admin: admin,
activated: activated,
polochonUrl: url,
polochonToken: token,
});
setModal(false);
};
return (
<span>
<span className="fa fa-pencil clickable" onClick={() => setModal(true)}></span>
<Modal show={modal} onHide={() => setModal(false)}>
<Modal.Header closeButton>
<Modal.Title>
<i className="fa fa-pencil"></i>
&nbsp; Edit user - {props.data.get("Name")}
</Modal.Title>
</Modal.Header>
<Modal.Body bsClass="modal-body admin-edit-user-modal">
<form className="form-horizontal" onSubmit={(ev) => handleSubmit(ev)}>
<div className="form-group">
<label>Account status</label>
<Toggle className="pull-right" on="Activated" off="Deactivated" active={activated} onClick={() => setActivated(!activated)}
/>
</div>
<div className="form-group">
<label>Admin status</label>
<Toggle className="pull-right" on="Admin" off="User" active={admin} onClick={() => setAdmin(!admin)} />
</div>
<div className="form-group">
<label className="control-label">Polochon URL</label>
<input className="form-control" value={url} onChange={(e) => setUrl(e.target.value)}/>
</div>
<div className="form-group">
<label className="control-label">Polochon token</label>
<input className="form-control" value={token} onChange={(e) => setToken(e.target.value)} />
</div>
</form>
</Modal.Body>
<Modal.Footer>
<Button bsStyle="success" onClick={handleSubmit}>Apply</Button>
<Button onClick={() => setModal(false)}>Close</Button>
</Modal.Footer>
</Modal>
</span>
);
}
UserEdit.propTypes = {
data: PropTypes.object,
updateUser: PropTypes.func,
polochonUrl: PropTypes.string,
polochonToken: PropTypes.string,
};