import React, { Component } from "react";
import { createMuiTheme, MuiThemeProvider } from '@material-ui/core/styles';
import SearchIcon from '@material-ui/icons/Search';
import Images from "../../../assets/Images";
import MUIDataTable, {TableBodyCell} from "mui-datatables";
import AddUser from './AddUser';
import EditUser from './EditUser'
import api from "../../../api";
import { titleCase } from "../../../library/Utils";
import { InputAdornment, Snackbar, InputBase } from "@material-ui/core";
import MuiAlert from '@material-ui/lab/Alert';
import UploadFile from "../../../library/Upload";
import { withStyles } from '@material-ui/core/styles';
import { ExcelRenderer } from 'react-excel-renderer';
import ReactTooltip from "react-tooltip";
import PopUpFailedSave from "../../../library/PopUpFailedSave";
import Constant from "../../../library/Constant";
import { css } from "@emotion/core";
import PropagateLoader from "react-spinners/PropagateLoader"
import Tooltip from '@material-ui/core/Tooltip';
const LightTooltip = withStyles((theme) => ({
tooltip: {
backgroundColor: theme.palette.common.white,
color: 'rgba(0, 0, 0, 0.87)',
boxShadow: theme.shadows[1],
fontSize: 11,
},
}))(Tooltip);
const override = css`
display: block;
margin: 0 auto;
border-color: red;
`;
var ct = require("../../../library/CustomTable");
const getMuiTheme = () => createMuiTheme(ct.customTable());
const options = ct.customOptions();
const Alert = withStyles({
})((props) => );
export default class UserRole extends Component {
constructor(props) {
super(props)
this.state = {
listUser: [],
indexData: {},
add: false,
edit: false,
popupDel: false,
visibleUser: true,
buttonError: false,
alert: false,
tipeAlert: '',
messageAlert: '',
buttonCreate: false,
buttonEdit: false,
buttonDelete: false,
load: false,
judul: '',
loading: false
}
}
componentDidMount() {
this.daskdkas()
this.getUser()
this.getPermission()
}
async daskdkas() {
let res = await localStorage.getItem(Constant.TOKEN)
// console.log(res)
}
closeEdit() {
this.setState({ edit: false })
}
closeAdd() {
this.setState({ add: false })
}
getUser() {
this.setState({loading: true})
api.create().getUser().then((response) => {
if (response.data) {
if (response.ok) {
if (response.data.status === 'success') {
// console.log(response.data);
let data = response.data.data
let listData = data.sort((a, b) => a.user_id - b.user_id).map((item, index) => {
return [index, item.user_id, item.fullname === null ? '-' : item.fullname, item.email, item.role_name, item.totalCompany, item.status]
})
this.setState({ listUser: listData }, () => {
setTimeout(() => {
this.setState({loading: false})
}, 2000);
})
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning', loading: false }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' }, () => {
this.setState({loading: false})
})
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' }, () => {
this.setState({loading: false})
})
}
})
}
getPermission() {
let payload = {
menu: "user"
}
api.create().getPermission(payload).then(response => {
// console.log(response)
if (response.data) {
if (response.data.status === "success") {
this.setState({
buttonCreate: response.data.data.create,
buttonEdit: response.data.data.edit,
buttonDelete: response.data.data.delete,
load: true
})
} else {
this.setState({ load: true })
}
}
})
}
searchUser() {
this.setState({loading: true})
let payload = {
"keyword": this.state.search
}
api.create().searchUser(payload).then((response) => {
if (response.data) {
if (response.ok) {
if (response.data.status === 'success') {
let data = response.data.data
let listData = data.sort((a, b) => a.user_id - b.user_id).map((item, index) => {
return [index, item.user_id, item.fullname == null ? '-' : item.fullname, item.email, item.role_name, item.totalCompany, item.status]
})
this.setState({ listUser: listData }, () => {
setTimeout(() => {
this.setState({loading: false})
}, 1500);
})
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' }, () => {
this.setState({loading: false})
})
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' }, () => {
this.setState({loading: false})
})
}
})
}
fileHandler = (event) => {
let fileObj = event
ExcelRenderer(fileObj, (err, resp) => {
if (err) {
// console.log(err);
}
else {
// let judul = resp.rows[0]
let isi = resp.rows.slice(3)
let payload = []
// console.log(isi)
isi.map((item, index) => {
if (item.length > 0) {
payload.push({
id: index + 1,
fullname: item[0] == undefined? '' : item[0],
email: item[1] == undefined? '' : item[1],
role: item[2] == undefined? '' : item[2],
start_date: item[3] == undefined? '' : item[3],
end_date: item[4] == undefined? '' : item[4],
})
}
})
let body = {
user: payload
}
// console.log(resp.rows[1])
this.setState({ payload: body, rows: [], judul: resp.rows[1][0] })
}
});
}
deleteUser() {
let data = this.state.rowData
api.create().deleteUser(data[1]).then((response) => {
this.setState({popupDel: false})
if (response.data) {
if (response.ok) {
if (response.data.status == 'success') {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'success' })
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
this.getUser()
})
}
checkUpload(){
api.create().checkUploadUser(this.state.payload).then(response => {
// console.log(response);
if (response.data) {
if (response.ok) {
if (response.data.status === "success") {
let dataRow = response.data.data.map((item, index) => {
return [
index + 1,
item.fullname,
item.email,
item.role,
item.start_date,
item.end_date,
item.error
]
})
let columns = [
"Data",
{
name: "Full Name",
options: {
customBodyRender: (val, tableMeta) => {
let check = null
if (tableMeta.rowData[6] != null) {
check = tableMeta.rowData[6].findIndex((val) => val.field.includes('fullname'))
if (check > -1) {
this.setState({ buttonError: true })
// console.log('masuk')
}
}
return (
{tableMeta.rowData[6] != null && check > -1 ?
-1 ? "red" : 'black' }}>{val == ''? 'Empty' : val}
:
-1 ? "red" : 'black' }}>{val == ''? 'Empty' : val}
}
);
}
}},
{
name: "Email",
options: {
customBodyRender: (val, tableMeta) => {
// console.log(tableMeta)
let check = null
if (tableMeta.rowData[6] != null) {
check = tableMeta.rowData[6].findIndex((val) => val.field.includes('email'))
if (check > -1) {
this.setState({ buttonError: true })
}
}
return (
{tableMeta.rowData[6] != null && check > -1 ?
-1 ? "red" : 'black' }}>{val == ''? 'Empty' : val}
:
-1 ? "red" : 'black' }}>{val == ''? 'Empty' : val}
}
);
}
}
},
{
name: "Role",
options: {
customBodyRender: (val, tableMeta) => {
let check = null
if (tableMeta.rowData[6] != null) {
check = tableMeta.rowData[6].findIndex((val) => val.field.includes('role'))
if (check > -1) {
this.setState({ buttonError: true })
// console.log(tableMeta.rowData[6])
}
}
return (
{tableMeta.rowData[6] != null && check > -1 ?
-1 ? "red" : 'black' }}>{val == ''? 'Empty' : val}
:
-1 ? "red" : 'black' }}>{val == ''? 'Empty' : val}
}
);
}
}
},
{
name: "Valid From",
options: {
customBodyRender: (val, tableMeta) => {
let check = null
if (tableMeta.rowData[6] != null) {
check = tableMeta.rowData[6].findIndex((val) => val.field.includes('start_date'))
if (check > -1) {
this.setState({ buttonError: true })
// console.log('masuk')
}
}
return (
{tableMeta.rowData[6] != null && check > -1 ?
-1 ? "red" : 'black' }}>{val == ''? 'Empty' : val}
:
-1 ? "red" : 'black' }}>{val == ''? 'Empty' : val}
}
);
}
}
},
{
name: "Valid To",
options: {
customBodyRender: (val, tableMeta) => {
let check = null
if (tableMeta.rowData[6] != null) {
check = tableMeta.rowData[6].findIndex((val) => val.field.includes('end_date'))
if (check > -1) {
this.setState({ buttonError: true })
// console.log('masuk')
}
}
return (
{tableMeta.rowData[6] != null && check > -1 ?
-1 ? "red" : 'black' }}>{val == ''? 'Empty' : val}
:
-1 ? "red" : 'black' }}>{val == ''? 'Empty' : val}
}
);
}
}
},
{
name: "",
options: {
display: false
}
}
]
this.setState({
dataLoaded: true,
cols: columns,
rows: dataRow,
visibleUpload: false,
visibleUser: false
}, () => console.log(dataRow));
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
})
}
downloadFile = async () => {
let res = await fetch(
`${process.env.REACT_APP_URL_MAIN_BE}/public/attachment/download_file?fileName=UserTemplate&&fileType=xlsx`
)
res = await res.blob()
// console.log(res)
if (res.size > 0) {
let url = window.URL.createObjectURL(res);
let a = document.createElement('a');
a.href = url;
a.download = 'User Template.xlsx';
a.click();
}
}
downloadDataTables = async () => {
let res = await fetch(`${process.env.REACT_APP_URL_MAIN_BE}/public/user/export_user`)
res = await res.blob()
// console.log(res)
if (res.size > 0) {
let url = window.URL.createObjectURL(res);
let a = document.createElement('a');
a.href = url;
a.download = 'User.xlsx';
a.click();
}
}
updateUser(payload) {
api.create().updateUser(payload).then((response) => {
// console.log(response.data.message)
// console.log(response.data.status)
if (response.data) {
if (response.ok) {
if (response.data.status === 'success') {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'success' }, () => {
this.closeEdit()
window.location.reload();
})
// this.getUser()
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
})
}
createUser(payload) {
// console.log('Mode Create')
api.create().createUser(payload).then((response) => {
// console.log(response.data)
// if (String(response.data.status).toLocaleUpperCase === 'Success' || String(response.data.status).toLocaleUpperCase === 'success') {
if (response.data) {
if (response.ok) {
if (response.data.status === 'success') {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'success', add: false }, () => {
window.location.reload();
})
// this.getUser()
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
// } else {
// alert(response.data.message)
// this.props.onClickClose()
// this.props.refresh()
// }
})
}
_handleKeyDown(e) {
if (e.key === 'Enter') {
if (this.state.search.length > 0) {
this.searchUser()
} else {
this.getUser()
}
}
}
uploadUser() {
// console.log(JSON.stringify(this.state.payload))
api.create().uploadUser(this.state.payload).then(response => {
this.setState({buttonError: false})
// console.log(JSON.stringify(response))
if (response.data) {
if (response.ok) {
if (response.data.status === "success") {
this.getUser()
this.setState({ visibleUser: true, alert: true, messageAlert: response.data.message, tipeAlert: 'success', payload: [], rows: [], judul: '' })
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
})
}
closeAlert() {
this.setState({ alert: false })
}
render() {
const columns = [{
name: "Action",
options: {
filter: false,
customBodyRender: (val, tableMeta) => {
return (
);
}
}
}, {
name: "ID",
options: {
// filter: false,
customBodyRender: (val, tableMeta) => {
return (
{titleCase(val)}
);
}
}
}, {
name: "Full Name",
options: {
customBodyRender: (val, tableMeta) => {
return (
{titleCase(val)}
);
}
}
}, {
name: "Email",
options: {
customBodyRender: (val, tableMeta) => {
return (
{val}
);
}
}
}, {
name: "Role",
options: {
customBodyRender: (val, tableMeta) => {
return (
{titleCase(val)}
);
}
}
}, {
name: "Company",
options: {
customBodyRender: (val, tableMeta) => {
return (
{titleCase(val)}
);
}
}
}, {
name: "Status",
options: {
customBodyRender: (val, tableMeta) => {
return (
{titleCase(val)}
);
}
}
}]
const loadingComponent = (
);
return (
{/*
*/}
this.closeAlert()}>
this.closeAlert()} severity={this.state.tipeAlert}>
{this.state.messageAlert}
{this.state.visibleUser ?
{this.state.load && (
{/*
{
this.setState({ search: e.target.value }, () => {
if (this.state.search.length > 0) {
this.searchUser()
} else {
this.getUser()
}
});
}}
onKeyDown={(e) => this._handleKeyDown(e)}
style={{ width: '100%', borderBottomWidth: 0, borderBottomColor: 'red' }}
InputProps={{
style: { fontFamily: 'nunito', borderBottomColor: 'white' },
startAdornment: (
),
}}
/>
*/}
{/*
{
this.setState({ search: e.target.value }, () => {
if (this.state.search.length > 0) {
this.searchUser()
} else {
this.getUser()
}
});
}}
inputProps={{ 'aria-label': 'naked' }}
/>
*/}
{/*
*/}
)}
{this.state.loading && loadingComponent}
:
{this.state.dataLoaded && (
)}
}
{this.state.add && (
)}
{this.state.edit && (
)}
{this.state.popupDel && (
Delete {titleCase(this.state.rowData[2])} ?
//
//
//
//

//
//
//
// Delete {titleCase(this.state.rowData[2])} ?
//
// {/*
// {`Please try again later.`}
// */}
//
//
//
//
//
//
//
)}
{this.state.popupError && (
this.setState({ popupError: false })} />
)}
{this.state.visibleUpload && (
{
this.fileHandler(dt)
this.setState({ uploadStatus: 'idle', percentage: '0' })
}}
onUpload={() => {
String(this.state.judul).includes("MASTER") && String(this.state.judul).includes("DATA") && String(this.state.judul).includes("USER") ?
this.checkUpload() :
this.setState({ alert: true, messageAlert: "Invalid Template", tipeAlert: 'warning' })
}}
/>
)}
);
}
}