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}
Create Data
null} inputProps={{ style: { fontSize: 11, fontFamily: 'Nunito Sans, sans-serif', } }} InputLabelProps={{ style: { fontSize: 11, fontFamily: 'Nunito Sans, sans-serif', color: '#7e8085', } }} > {/* {periode.map((option) => ( {option.label} ))} */}
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) => ( {option.label} ))} */}
{/*
{`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)} />
) })}
) })}
); } }