import React, { Component } from 'react';
import { TextField, Divider, Typography, Checkbox, withStyles, Collapse, Snackbar } from '@material-ui/core';
import api from '../../../api';
import AddIcon from '@material-ui/icons/Add';
import RemoveIcon from '@material-ui/icons/Remove';
import { DatePicker } from "@material-ui/pickers";
import format from "date-fns/format";
import localeID from "date-fns/locale/id"
import * as R from 'ramda'
import Images from '../../../assets/Images';
import MuiAlert from '@material-ui/lab/Alert';
import Constant from '../../../library/Constant';
const CustomCheckbox = withStyles({
root: {
color: '#51c6ea',
'&$checked': {
color: '#51c6ea',
},
padding: 5
},
checked: {},
})((props) => );
const Alert = withStyles({
})((props) => );
export default class AddRole extends Component {
constructor(props) {
super(props)
this.state = {
paramsId: this.props.data,
tempData: null,
menuData: null,
privileges: [],
checked: false,
selectedIndex: 0,
roleName: '',
startDate: null,
endDate: null,
date: new Date(),
errorRoleName: false,
errorStartDate: false,
errorEndDate: false,
msgErrorRN: '',
msgErrorSD: '',
msgErrorED: '',
application: [],
setting: [],
alert: false,
tipeAlert: '',
messageAlert: ''
}
}
handleChecked() {
this.setState({ checked: !this.state.checked })
}
componentDidMount() {
this.getMenu()
if (this.props.type === 'edit') {
//
} else {
let date = format(new Date, 'yyyy-MM-dd')
// console.log(date);
this.setState({
startDate: date,
endDate: date
})
}
}
handleChange(e, type) {
let data = this.state
let isDate = type !== '' ? true : false
if (isDate && type === 'start_date') {
this.setState({
...data, startDate: format(e, 'yyyy-MM-dd'), endDate: null,
errorRoleName: false,
errorStartDate: false,
errorEndDate: false,
msgErrorRN: '',
msgErrorSD: '',
msgErrorED: '',
})
} else if (isDate && type === 'end_date') {
this.setState({
...data, endDate: format(e, 'yyyy-MM-dd'),
errorRoleName: false,
errorStartDate: false,
errorEndDate: false,
msgErrorRN: '',
msgErrorSD: '',
msgErrorED: '',
})
} else {
this.setState({
...data, [e.target.name]: e.target.value,
errorRoleName: false,
errorStartDate: false,
errorEndDate: false,
msgErrorRN: '',
msgErrorSD: '',
msgErrorED: '',
})
}
}
validasi() {
if (R.isEmpty(this.state.roleName)) {
this.setState({ errorRoleName: true, msgErrorRN: 'Role Cannot be Empty' })
} else if (R.isNil(this.state.startDate)) {
this.setState({ errorStartDate: true, msgErrorSD: 'Valid From Cannot be Empty' })
} else if (R.isNil(this.state.endDate)) {
this.setState({ errorEndDate: true, msgErrorED: 'Valid To Cannot be Empty' })
} else if (this.state.privileges.length < 1) {
this.setState({ alert: true, messageAlert: 'You Must Choose the Access Rights', tipeAlert: 'warning' })
} else {
this.addRole()
}
}
addRole() {
// let startDate = format(this.state.tempData.start_date, 'yyyy-MM-dd')
// let endDate = format(this.state.tempData.end_date, 'yyyy-MM-dd')
let payload = {
"role_name": this.state.roleName,
"start_date": this.state.startDate,
"end_date": this.state.endDate,
"privileges": this.state.privileges
}
// console.log(payload)
api.create().addRole(payload).then((response) => {
// console.log(response)
if (response.data) {
if (response.ok) {
if (response.data.status === 'success') {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'success' })
setTimeout(() => {
this.props.onClickClose()
// this.props.refresh()
window.location.reload();
}, 750);
} 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' })
}
})
}
parseChildren(val) {
let data = Object.assign([], val)
data = data.sort((a, b) => a.menu_id - b.menu_id).map((i) => {
return {
menu_id: i.menu_id,
label: i.menu_name,
sub_menu: this.parseChildren(i.sub_menu),
collapse: false,
reference: i.reference
}
})
return data
}
getMenu() {
api.create().getMenu().then((response) => {
if (response.data) {
if (response.ok) {
if (response.data.status === 'success') {
let app = null
let set = null
response.data.data.map((item) => {
if (item.menu_name === "Application") {
app = this.parseChildren(item.sub_menu)
return app
} else {
set = this.parseChildren(item.sub_menu)
return set
}
})
// console.log(app)
this.setState({ application: app, setting: set, isLoad: true }, () => console.log(this.state.application))
// this.setState({ menuData: response.data.data })
} 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' })
}
})
}
handleItemChecked(item) {
let indexID = this.state.privileges.findIndex((val) => val.menu_id === item.menu_id)
return indexID === -1 ? false : true
}
handleItemClick(item) {
let indexID = this.state.privileges.findIndex((val) => val.menu_id === item.menu_id)
let privileges = this.state.privileges
if (indexID === -1) {
privileges.push({
menu_id: item.menu_id,
button_id: [1, 2, 3, 4, 5]
})
if (item.sub_menu.length > 0) {
item.sub_menu.map((items,indexs) => {
let indexIDs = this.state.privileges.findIndex((val) => val.menu_id === items.menu_id)
if (indexIDs === -1) {
privileges.push({
menu_id: items.menu_id,
button_id: [1,2,3,4,5]
})
}
})
}
if (item.reference !== null && item.reference !== 13 && item.reference !== 1) {
let indexIDapp = this.state.application.findIndex((val) => val.menu_id === item.reference)
let indexIDset = this.state.setting.findIndex((val) => val.menu_id === item.reference)
let indexIDref = this.state.privileges.findIndex((val) => val.menu_id === item.reference)
let indexIDs = indexIDapp == -1? indexIDset : indexIDapp
let total = 0
let array = indexIDapp == -1? this.state.setting : this.state.application
array[indexIDs].sub_menu.map((items,indexs) => {
let indexIDsub = this.state.privileges.findIndex((val) => val.menu_id === items.menu_id)
if (indexIDsub !== -1) {
total += 1
}
})
if (indexIDref == -1) {
privileges.push({
menu_id: item.reference,
button_id: [1,2,3,4,5]
})
} else {
if (total < 1) {
privileges.splice(indexIDref, 1)
}
}
}
} else {
privileges.splice(indexID, 1)
if (item.sub_menu.length > 0) {
item.sub_menu.map((items,indexs) => {
let indexIDs = this.state.privileges.findIndex((val) => val.menu_id === items.menu_id)
privileges.splice(indexIDs, 1)
})
}
if (item.reference !== null && item.reference !== 13 && item.reference !== 1) {
let indexIDapp = this.state.application.findIndex((val) => val.menu_id === item.reference)
let indexIDset = this.state.setting.findIndex((val) => val.menu_id === item.reference)
let indexIDref = this.state.privileges.findIndex((val) => val.menu_id === item.reference)
let indexIDs = indexIDapp == -1? indexIDset : indexIDapp
let total = 0
let array = indexIDapp == -1? this.state.setting : this.state.application
array[indexIDs].sub_menu.map((items,indexs) => {
let indexIDsub = this.state.privileges.findIndex((val) => val.menu_id === items.menu_id)
if (indexIDsub !== -1) {
total += 1
}
})
if (indexIDref == -1) {
privileges.push({
menu_id: item.reference,
button_id: [1,2,3,4,5]
})
} else {
if (total < 1) {
privileges.splice(indexIDref, 1)
}
}
}
}
this.setState({ privileges }, () => {
// console.log(this.state.privileges)
})
}
handleSubItemChecked(item, index) {
let indexID = this.state.privileges.findIndex((val) => val.menu_id === item.menu_id)
let value = false
if (indexID === -1) {
value = false
} else {
let indexButtonID = this.state.privileges[indexID].button_id.findIndex((val) => val === index)
if (indexButtonID === -1) {
value = false
} else {
value = true
}
}
return indexID === -1 ? value : value
}
handleSubItemClick(item, index) {
let indexID = this.state.privileges.findIndex((val) => val.menu_id === item.menu_id)
let indexButtonID = this.state.privileges[indexID].button_id.findIndex((val) => val === index)
let privileges = this.state.privileges
let button_id = privileges[indexID].button_id
if (indexButtonID === -1) {
button_id.push(index)
if (item.sub_menu.length > 0) {
item.sub_menu.map((items,indexs) => {
let subIndexID = privileges.findIndex((val) => val.menu_id === items.menu_id)
if (subIndexID === -1) {
// console.log('masuk pa eko', subIndexID)
privileges.push({
menu_id: items.menu_id,
button_id: [index]
})
} else {
let subIndexButtonID = privileges[subIndexID].button_id.findIndex((val) => val === index)
let subButton_id = privileges[subIndexID].button_id
if(subIndexButtonID === -1) {
subButton_id.push(index)
}
}
})
}
if (item.reference !== null && item.reference !== 13 && item.reference !== 1) {
let refIndexID = privileges.findIndex((val) => val.menu_id === item.reference)
if (refIndexID !== -1) {
let refIndexButtonID = privileges[refIndexID].button_id.findIndex((val) => val === index)
let refButton_id = privileges[refIndexID].button_id
if (refIndexButtonID === -1) {
refButton_id.push(index)
}
privileges[refIndexID].button_id = refButton_id
}
}
} else {
button_id.splice(indexButtonID, 1)
if (item.sub_menu.length > 0) {
item.sub_menu.map((items,indexs) => {
let subIndexID = privileges.findIndex((val) => val.menu_id === items.menu_id)
if (subIndexID !== -1) {
let subIndexButtonID = privileges[subIndexID].button_id.findIndex((val) => val === index)
let subButton_id = privileges[subIndexID].button_id
if (subIndexButtonID !== -1) {
subButton_id.splice(subIndexButtonID, 1)
privileges[subIndexID].button_id = subButton_id
if (privileges[subIndexID].button_id.length < 1) {
privileges.splice(subIndexID, 1)
}
}
}
})
}
if (item.reference !== null && item.reference !== 13 && item.reference !== 1) {
let refIndexID = privileges.findIndex((val) => val.menu_id === item.reference)
if (refIndexID !== -1) {
let refIndexButtonID = privileges[refIndexID].button_id.findIndex((val) => val === index)
let refButton_id = privileges[refIndexID].button_id
let indexIDapp = this.state.application.findIndex((val) => val.menu_id === item.reference)
let indexIDset = this.state.setting.findIndex((val) => val.menu_id === item.reference)
let indexIDs = indexIDapp == -1? indexIDset : indexIDapp
let array = indexIDapp == -1? this.state.setting : this.state.application
let splicer = 0
array[indexIDs].sub_menu.map((refItem, refIndex) => {
let subIndexID = privileges.findIndex((val) => val.menu_id === refItem.menu_id)
if (subIndexID !== -1) {
let subIndexButtonID = privileges[subIndexID].button_id.findIndex((val) => val === index)
if (subIndexButtonID !== -1) {
splicer += 1
}
}
})
if (refIndexButtonID !== -1 && splicer < 1) {
refButton_id.splice(refIndexButtonID, 1)
}
privileges[refIndexID].button_id = refButton_id
}
}
}
privileges[indexID].button_id = button_id.sort((a,b) => a-b)
if (button_id.length === 0) {
privileges.splice(indexID, 1)
}
this.setState({ privileges: privileges.sort((a,b) => a.menu_id-b.menu_id) })
}
handleDate(item) {
let value = format(item, 'dd MMMM yyyy')
return value
}
handleCollapse(item) {
let arr = this.state.application
let index = arr.findIndex((val) => val.label === item.label)
arr[index].collapse = !arr[index].collapse
this.setState({ ...this.state.application, application: arr })
}
handleCollapseSetting(item) {
let arr = this.state.setting
let index = arr.findIndex((val) => val.label === item.label)
arr[index].collapse = !arr[index].collapse
this.setState({ ...this.state.setting, setting: arr })
}
closeAlert() {
this.setState({ alert: false })
}
render() {
return (
this.closeAlert()}>
this.closeAlert()} severity={this.state.tipeAlert}>
{this.state.messageAlert}
null}
inputProps={{
style: {
fontSize: 11,
fontFamily: 'Nunito Sans, sans-serif',
}
}}
InputLabelProps={{
style: {
fontSize: 11,
fontFamily: 'Nunito Sans, sans-serif',
color: '#7e8085',
}
}}
>
{/* {periode.map((option) => (
))} */}
this.handleChange(e, '')}
inputProps={{
style: {
fontSize: 11,
fontFamily: 'Nunito Sans, sans-serif',
}
}}
InputLabelProps={{
style: {
fontSize: 11,
fontFamily: 'Nunito Sans, sans-serif',
color: '#7e8085',
}
}}
// defaultValue="Default Value"
// helperText="Some important text"
/>
this.handleChange(e, 'start_date')}
KeyboardButtonProps={{
'aria-label': 'change date',
}}
inputProps={{
style: {
fontSize: 11,
fontFamily: 'Nunito Sans, sans-serif',
}
}}
InputLabelProps={{
style: {
fontSize: 11,
color: '#7e8085',
fontFamily: 'Nunito Sans, sans-serif',
}
}}
style={{ padding: 0, margin: 0, width: '100%' }}
/>
this.handleChange(e, 'end_date')}
minDate={this.state.startDate}
KeyboardButtonProps={{
'aria-label': 'change date',
}}
inputProps={{
style: {
fontSize: 11,
fontFamily: 'Nunito Sans, sans-serif',
}
}}
InputLabelProps={{
style: {
fontSize: 11,
color: '#7e8085',
fontFamily: 'Nunito Sans, sans-serif',
}
}}
style={{ padding: 0, margin: 0, width: '100%' }}
/>
{/* {periode.map((option) => (
))} */}
{/*
{`Dibuat: `}
{`Diubah: `}
*/}
Access Rights
Authorization Module
View
Create
Edit
Delete
Download
{this.state.application.map((item, index) => {
return (
{item.sub_menu.length > 0 &&
this.handleCollapse(item)} style={{ marginRight: 2, marginLeft: -22 }}>
{item.collapse ? : }
}
this.handleItemClick(item)}
/>
{item.label}
this.handleSubItemClick(item, 1)}
/>
this.handleSubItemClick(item, 2)}
/>
this.handleSubItemClick(item, 3)}
/>
this.handleSubItemClick(item, 4)}
/>
this.handleSubItemClick(item, 5)}
/>
{item.sub_menu.length > 0 && item.sub_menu.map((items, indexs) => {
return (
this.handleItemClick(items)}
/>
{items.label}
this.handleSubItemClick(items, 1)}
/>
this.handleSubItemClick(items, 2)}
/>
this.handleSubItemClick(items, 3)}
/>
this.handleSubItemClick(items, 4)}
/>
this.handleSubItemClick(items, 5)}
/>
)
})}
)
})}
{this.state.setting.map((item, index) => {
return (
{item.menu_id !== 23 &&
{item.sub_menu.length > 0 &&
this.handleCollapseSetting(item)} style={{ marginRight: 2, marginLeft: -22 }}>
{item.collapse ? : }
}
this.handleItemClick(item)}
/>
{item.label}
this.handleSubItemClick(item, 1)}
/>
this.handleSubItemClick(item, 2)}
/>
this.handleSubItemClick(item, 3)}
/>
this.handleSubItemClick(item, 4)}
/>
this.handleSubItemClick(item, 5)}
/>
}
{item.sub_menu.length > 0 && item.sub_menu.map((items, indexs) => {
return (
this.handleItemClick(items)}
/>
{items.label}
this.handleSubItemClick(items, 1)}
/>
this.handleSubItemClick(items, 2)}
/>
this.handleSubItemClick(items, 3)}
/>
this.handleSubItemClick(items, 4)}
/>
this.handleSubItemClick(items, 5)}
/>
)
})}
)
})}
);
}
}