173 lines
5.0 KiB
JavaScript
173 lines
5.0 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 className="table-responsive my-2">
|
|
<table className="table table-striped">
|
|
<thead className="table-secondary">
|
|
<tr>
|
|
<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>
|
|
Edit user - {props.data.get("Name")}
|
|
</Modal.Title>
|
|
</Modal.Header>
|
|
<Modal.Body bsPrefix="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}
|
|
offstyle="danger"
|
|
handlestyle="secondary"
|
|
onClick={() => setActivated(!activated)}
|
|
/>
|
|
</div>
|
|
<div className="form-group">
|
|
<label>Admin status</label>
|
|
<Toggle
|
|
className="pull-right"
|
|
on="Admin"
|
|
off="User"
|
|
active={admin}
|
|
offstyle="info"
|
|
handlestyle="secondary"
|
|
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 variant="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
|
|
};
|