AddRole.js 47.9 KB
Newer Older
d.arizona's avatar
d.arizona committed
1
import React, { Component } from 'react';
a.bairuha's avatar
a.bairuha committed
2
import { TextField, Divider, Typography, Checkbox, withStyles, Collapse, Snackbar } from '@material-ui/core';
d.arizona's avatar
d.arizona committed
3
import api from '../../../api';
d.arizona's avatar
d.arizona committed
4 5
import AddIcon from '@material-ui/icons/Add';
import RemoveIcon from '@material-ui/icons/Remove';
Deni Rinaldi's avatar
Deni Rinaldi committed
6
import { DatePicker } from "@material-ui/pickers";
d.arizona's avatar
d.arizona committed
7 8
import format from "date-fns/format";
import localeID from "date-fns/locale/id"
d.arizona's avatar
d.arizona committed
9
import * as R from 'ramda'
d.arizona's avatar
d.arizona committed
10
import Images from '../../../assets/Images';
a.bairuha's avatar
a.bairuha committed
11
import MuiAlert from '@material-ui/lab/Alert';
a.bairuha's avatar
a.bairuha committed
12
import Constant from '../../../library/Constant';
d.arizona's avatar
d.arizona committed
13 14 15 16

const CustomCheckbox = withStyles({
    root: {
        color: '#51c6ea',
Deni Rinaldi's avatar
Deni Rinaldi committed
17 18 19 20
        '&$checked': {
            color: '#51c6ea',
        },
        padding: 5
d.arizona's avatar
d.arizona committed
21 22
    },
    checked: {},
Deni Rinaldi's avatar
Deni Rinaldi committed
23
})((props) => <Checkbox color="default" {...props} />);
d.arizona's avatar
d.arizona committed
24

a.bairuha's avatar
a.bairuha committed
25 26 27
const Alert = withStyles({
})((props) => <MuiAlert elevation={6} variant="filled" {...props} />);

d.arizona's avatar
d.arizona committed
28
export default class AddRole extends Component {
Deni Rinaldi's avatar
Deni Rinaldi committed
29

d.arizona's avatar
d.arizona committed
30 31 32 33 34 35 36
    constructor(props) {
        super(props)
        this.state = {
            paramsId: this.props.data,
            tempData: null,
            menuData: null,
            privileges: [],
d.arizona's avatar
d.arizona committed
37 38 39 40 41
            checked: false,
            selectedIndex: 0,
            roleName: '',
            startDate: null,
            endDate: null,
d.arizona's avatar
d.arizona committed
42 43 44 45 46 47 48
            date: new Date(),
            errorRoleName: false,
            errorStartDate: false,
            errorEndDate: false,
            msgErrorRN: '',
            msgErrorSD: '',
            msgErrorED: '',
Deni Rinaldi's avatar
Deni Rinaldi committed
49 50
            application: [],
            setting: [],
a.bairuha's avatar
a.bairuha committed
51 52 53
            alert: false,
            tipeAlert: '',
            messageAlert: ''
d.arizona's avatar
d.arizona committed
54 55 56 57
        }
    }

    handleChecked() {
Deni Rinaldi's avatar
Deni Rinaldi committed
58
        this.setState({ checked: !this.state.checked })
d.arizona's avatar
d.arizona committed
59
    }
Deni Rinaldi's avatar
Deni Rinaldi committed
60

d.arizona's avatar
d.arizona committed
61 62
    componentDidMount() {
        this.getMenu()
a.bairuha's avatar
a.bairuha committed
63 64 65 66
        if (this.props.type === 'edit') {
            //
        } else {
            let date = format(new Date, 'yyyy-MM-dd')
Deni Rinaldi's avatar
Deni Rinaldi committed
67
            // console.log(date);
a.bairuha's avatar
a.bairuha committed
68 69 70 71 72
            this.setState({
                startDate: date,
                endDate: date
            })
        }
d.arizona's avatar
d.arizona committed
73 74
    }

d.arizona's avatar
d.arizona committed
75
    handleChange(e, type) {
d.arizona's avatar
d.arizona committed
76
        let data = this.state
Deni Rinaldi's avatar
Deni Rinaldi committed
77
        let isDate = type !== '' ? true : false
d.arizona's avatar
d.arizona committed
78
        if (isDate && type === 'start_date') {
Deni Rinaldi's avatar
Deni Rinaldi committed
79 80
            this.setState({
                ...data, startDate: format(e, 'yyyy-MM-dd'), endDate: null,
d.arizona's avatar
d.arizona committed
81 82 83 84 85 86 87
                errorRoleName: false,
                errorStartDate: false,
                errorEndDate: false,
                msgErrorRN: '',
                msgErrorSD: '',
                msgErrorED: '',
            })
d.arizona's avatar
d.arizona committed
88
        } else if (isDate && type === 'end_date') {
Deni Rinaldi's avatar
Deni Rinaldi committed
89 90
            this.setState({
                ...data, endDate: format(e, 'yyyy-MM-dd'),
d.arizona's avatar
d.arizona committed
91 92 93 94 95 96 97
                errorRoleName: false,
                errorStartDate: false,
                errorEndDate: false,
                msgErrorRN: '',
                msgErrorSD: '',
                msgErrorED: '',
            })
d.arizona's avatar
d.arizona committed
98
        } else {
Deni Rinaldi's avatar
Deni Rinaldi committed
99 100
            this.setState({
                ...data, [e.target.name]: e.target.value,
d.arizona's avatar
d.arizona committed
101 102 103 104 105 106 107
                errorRoleName: false,
                errorStartDate: false,
                errorEndDate: false,
                msgErrorRN: '',
                msgErrorSD: '',
                msgErrorED: '',
            })
d.arizona's avatar
d.arizona committed
108
        }
Deni Rinaldi's avatar
Deni Rinaldi committed
109

d.arizona's avatar
d.arizona committed
110 111
    }

d.arizona's avatar
d.arizona committed
112 113
    validasi() {
        if (R.isEmpty(this.state.roleName)) {
d.arizona's avatar
d.arizona committed
114
            this.setState({ errorRoleName: true, msgErrorRN: 'Role Cannot be Empty' })
d.arizona's avatar
d.arizona committed
115
        } else if (R.isNil(this.state.startDate)) {
d.arizona's avatar
d.arizona committed
116
            this.setState({ errorStartDate: true, msgErrorSD: 'Valid From Cannot be Empty' })
d.arizona's avatar
d.arizona committed
117
        } else if (R.isNil(this.state.endDate)) {
d.arizona's avatar
d.arizona committed
118
            this.setState({ errorEndDate: true, msgErrorED: 'Valid To Cannot be Empty' })
Deni Rinaldi's avatar
Deni Rinaldi committed
119
        } else if (this.state.privileges.length < 1) {
d.arizona's avatar
d.arizona committed
120
            this.setState({ alert: true, messageAlert: 'You Must Choose the Access Rights', tipeAlert: 'warning' })
d.arizona's avatar
d.arizona committed
121 122 123 124 125 126
        } else {
            this.addRole()
        }
    }

    addRole() {
d.arizona's avatar
d.arizona committed
127 128
        // let startDate = format(this.state.tempData.start_date, 'yyyy-MM-dd')
        // let endDate = format(this.state.tempData.end_date, 'yyyy-MM-dd')
d.arizona's avatar
d.arizona committed
129
        let payload = {
d.arizona's avatar
d.arizona committed
130 131 132 133
            "role_name": this.state.roleName,
            "start_date": this.state.startDate,
            "end_date": this.state.endDate,
            "privileges": this.state.privileges
d.arizona's avatar
d.arizona committed
134
        }
d.arizona's avatar
d.arizona committed
135 136
        // console.log(payload)
        api.create().addRole(payload).then((response) => {
Deni Rinaldi's avatar
Deni Rinaldi committed
137
            // console.log(response)
a.bairuha's avatar
a.bairuha committed
138 139 140 141
            if (response.data) {
                if (response.ok) {
                    if (response.data.status === 'success') {
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'success' })
d.arizona's avatar
d.arizona committed
142 143 144
                        setTimeout(() => {
                            this.props.onClickClose()
                            this.props.refresh()
d.arizona's avatar
d.arizona committed
145
                            window.location.reload();
d.arizona's avatar
d.arizona committed
146
                        }, 750);
a.bairuha's avatar
a.bairuha committed
147
                    } else {
a.bairuha's avatar
a.bairuha committed
148
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
a.bairuha's avatar
a.bairuha committed
149
                            if (response.data.message.includes("Someone Logged In")) {
a.bairuha's avatar
a.bairuha committed
150 151 152 153 154 155
                                setTimeout(() => {
                                    localStorage.removeItem(Constant.TOKEN)
                                    window.location.reload();
                                }, 1000);
                            }
                        })
a.bairuha's avatar
a.bairuha committed
156 157 158 159
                    }
                } else {
                    this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
                }
d.arizona's avatar
d.arizona committed
160
            } else {
a.bairuha's avatar
a.bairuha committed
161
                this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
d.arizona's avatar
d.arizona committed
162 163
            }
        })
d.arizona's avatar
d.arizona committed
164 165
    }

Deni Rinaldi's avatar
Deni Rinaldi committed
166 167 168 169 170 171 172
    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),
d.arizona's avatar
d.arizona committed
173 174
                collapse: false,
                reference: i.reference
Deni Rinaldi's avatar
Deni Rinaldi committed
175 176 177 178 179
            }
        })
        return data
    }

d.arizona's avatar
d.arizona committed
180 181
    getMenu() {
        api.create().getMenu().then((response) => {
a.bairuha's avatar
a.bairuha committed
182 183 184 185 186 187 188 189 190 191 192 193 194 195
            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
                            }
                        })
Deni Rinaldi's avatar
Deni Rinaldi committed
196
                        // console.log(app)
a.bairuha's avatar
a.bairuha committed
197 198
                        this.setState({ application: app, setting: set, isLoad: true }, () => console.log(this.state.application))
                        // this.setState({ menuData: response.data.data })
Deni Rinaldi's avatar
Deni Rinaldi committed
199
                    } else {
a.bairuha's avatar
a.bairuha committed
200
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
a.bairuha's avatar
a.bairuha committed
201
                            if (response.data.message.includes("Someone Logged In")) {
a.bairuha's avatar
a.bairuha committed
202 203 204 205 206 207
                                setTimeout(() => {
                                    localStorage.removeItem(Constant.TOKEN)
                                    window.location.reload();
                                }, 1000);
                            }
                        })
Deni Rinaldi's avatar
Deni Rinaldi committed
208
                    }
a.bairuha's avatar
a.bairuha committed
209 210 211
                } else {
                    this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
                }
d.arizona's avatar
d.arizona committed
212
            } else {
a.bairuha's avatar
a.bairuha committed
213
                this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
d.arizona's avatar
d.arizona committed
214 215 216 217 218
            }
        })
    }

    handleItemChecked(item) {
d.arizona's avatar
d.arizona committed
219
        let indexID = this.state.privileges.findIndex((val) => val.menu_id === item.menu_id)
Deni Rinaldi's avatar
Deni Rinaldi committed
220
        return indexID === -1 ? false : true
d.arizona's avatar
d.arizona committed
221 222 223
    }

    handleItemClick(item) {
d.arizona's avatar
d.arizona committed
224
        let indexID = this.state.privileges.findIndex((val) => val.menu_id === item.menu_id)
d.arizona's avatar
d.arizona committed
225
        let privileges = this.state.privileges
d.arizona's avatar
d.arizona committed
226
        if (indexID === -1) {
d.arizona's avatar
d.arizona committed
227 228
            privileges.push({
                menu_id: item.menu_id,
d.arizona's avatar
d.arizona committed
229
                button_id: [1, 2, 3, 4]
d.arizona's avatar
d.arizona committed
230
            })
d.arizona's avatar
d.arizona committed
231 232 233 234 235 236
            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,
d.arizona's avatar
d.arizona committed
237
                           button_id: [1,2,3,4]
d.arizona's avatar
d.arizona committed
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258
                       })
                   }
                })
            }
            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,
d.arizona's avatar
d.arizona committed
259
                        button_id: [1,2,3,4]
d.arizona's avatar
d.arizona committed
260 261 262 263 264 265 266
                    })
                } else {
                    if (total < 1) {
                        privileges.splice(indexIDref, 1)
                    }
                }
            }
d.arizona's avatar
d.arizona committed
267
        } else {
Deni Rinaldi's avatar
Deni Rinaldi committed
268
            privileges.splice(indexID, 1)
d.arizona's avatar
d.arizona committed
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
            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,
d.arizona's avatar
d.arizona committed
293
                        button_id: [1,2,3,4]
d.arizona's avatar
d.arizona committed
294 295 296 297 298 299 300
                    })
                } else {
                    if (total < 1) {
                        privileges.splice(indexIDref, 1)
                    }
                }
            }
d.arizona's avatar
d.arizona committed
301
        }
d.arizona's avatar
d.arizona committed
302
        this.setState({ privileges }, () => {
Deni Rinaldi's avatar
Deni Rinaldi committed
303
            // console.log(this.state.privileges)
d.arizona's avatar
d.arizona committed
304
        })
d.arizona's avatar
d.arizona committed
305 306 307
    }

    handleSubItemChecked(item, index) {
d.arizona's avatar
d.arizona committed
308
        let indexID = this.state.privileges.findIndex((val) => val.menu_id === item.menu_id)
d.arizona's avatar
d.arizona committed
309
        let value = false
d.arizona's avatar
d.arizona committed
310
        if (indexID === -1) {
d.arizona's avatar
d.arizona committed
311 312
            value = false
        } else {
d.arizona's avatar
d.arizona committed
313 314
            let indexButtonID = this.state.privileges[indexID].button_id.findIndex((val) => val === index)
            if (indexButtonID === -1) {
d.arizona's avatar
d.arizona committed
315 316 317 318 319
                value = false
            } else {
                value = true
            }
        }
Deni Rinaldi's avatar
Deni Rinaldi committed
320
        return indexID === -1 ? value : value
d.arizona's avatar
d.arizona committed
321 322 323
    }

    handleSubItemClick(item, index) {
d.arizona's avatar
d.arizona committed
324 325
        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)
d.arizona's avatar
d.arizona committed
326 327
        let privileges = this.state.privileges
        let button_id = privileges[indexID].button_id
d.arizona's avatar
d.arizona committed
328
        
d.arizona's avatar
d.arizona committed
329
        if (indexButtonID === -1) {
d.arizona's avatar
d.arizona committed
330
            button_id.push(index)
d.arizona's avatar
d.arizona committed
331 332 333 334
            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) {
Deni Rinaldi's avatar
Deni Rinaldi committed
335
                        // console.log('masuk pa eko', subIndexID)
d.arizona's avatar
d.arizona committed
336 337 338 339 340 341
                        privileges.push({
                            menu_id: items.menu_id,
                            button_id: [index]
                        })
                    } else {
                        let subIndexButtonID = privileges[subIndexID].button_id.findIndex((val) => val === index)
d.arizona's avatar
d.arizona committed
342 343
                        let subButton_id = privileges[subIndexID].button_id
                        if(subIndexButtonID === -1) {
d.arizona's avatar
d.arizona committed
344 345 346 347 348
                            subButton_id.push(index)
                        }
                    }
                })
            }
d.arizona's avatar
d.arizona committed
349 350 351 352 353 354 355 356 357 358 359
            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
                }
            }
d.arizona's avatar
d.arizona committed
360
        } else {
Deni Rinaldi's avatar
Deni Rinaldi committed
361
            button_id.splice(indexButtonID, 1)
d.arizona's avatar
d.arizona committed
362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402
            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
                }
            }
d.arizona's avatar
d.arizona committed
403
        }
d.arizona's avatar
d.arizona committed
404
        privileges[indexID].button_id = button_id.sort((a,b) => a-b)
d.arizona's avatar
d.arizona committed
405
        if (button_id.length === 0) {
Deni Rinaldi's avatar
Deni Rinaldi committed
406
            privileges.splice(indexID, 1)
d.arizona's avatar
d.arizona committed
407
        }
d.arizona's avatar
d.arizona committed
408
        this.setState({ privileges: privileges.sort((a,b) => a.menu_id-b.menu_id) })
d.arizona's avatar
d.arizona committed
409 410
    }

d.arizona's avatar
d.arizona committed
411 412 413 414 415
    handleDate(item) {
        let value = format(item, 'dd MMMM yyyy')
        return value
    }

Deni Rinaldi's avatar
Deni Rinaldi committed
416 417 418 419 420 421 422 423 424 425 426 427 428
    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 })
    }
a.bairuha's avatar
a.bairuha committed
429 430 431 432

    closeAlert() {
      this.setState({ alert: false })
    }
Deni Rinaldi's avatar
Deni Rinaldi committed
433
    
d.arizona's avatar
d.arizona committed
434 435
    render() {
        return (
d.arizona's avatar
d.arizona committed
436
            <div className="test app-popup-show">
a.bairuha's avatar
a.bairuha committed
437 438 439 440 441
                <Snackbar open={this.state.alert} autoHideDuration={6000} onClose={() => this.closeAlert()}>
                    <Alert onClose={() => this.closeAlert()} severity={this.state.tipeAlert}>
                        {this.state.messageAlert}
                    </Alert>
                </Snackbar>
Deni Rinaldi's avatar
Deni Rinaldi committed
442 443
                <div className="popup-content-middle background-white border-radius" style={{ borderRadius: 8 }}>
                    <div className="popup-panel grid grid-2x main-color" style={{ height: 64, borderTopRightRadius: 8, borderTopLeftRadius: 8 }}>
d.arizona's avatar
d.arizona committed
444 445
                        <div className="col-1" style={{ maxWidth: "inherit", display: 'flex', alignItems: 'center' }}>
                            <div className="popup-title">
d.arizona's avatar
d.arizona committed
446
                                <span style={{ color: '#fff', fontSize: 16, fontWeight: 'bold' }}>Create Data</span>
d.arizona's avatar
d.arizona committed
447 448 449 450 451 452 453 454
                            </div>
                        </div>
                        <div className="col-2 content-right" style={{ maxWidth: "inherit", alignSelf: 'center' }}>
                            <button
                                type="button"
                                className="btn btn-circle btn-white"
                                onClick={() => this.props.onClickClose()}
                            >
Deni Rinaldi's avatar
Deni Rinaldi committed
455
                                <img src={Images.close} />
d.arizona's avatar
d.arizona committed
456 457 458 459
                            </button>
                        </div>
                    </div>

d.arizona's avatar
d.arizona committed
460
                    <div className="grid grid-2x grid-mobile-none gap-15px" style={{ padding: 20 }}>
d.arizona's avatar
d.arizona committed
461 462 463 464
                        <div className="column-1">
                            <div className="margin-bottom-20px">
                                <TextField
                                    style={{ width: '100%' }}
d.arizona's avatar
d.arizona committed
465 466 467 468 469
                                    id="id"
                                    label="ID"
                                    disabled
                                    // id="outlined-read-only-input"
                                    variant="filled"
d.arizona's avatar
d.arizona committed
470
                                    value={'-'}
d.arizona's avatar
d.arizona committed
471
                                    onChange={(e) => null}
a.bairuha's avatar
a.bairuha committed
472 473 474 475 476 477 478 479 480 481 482 483 484
                                    inputProps={{
                                        style: {
                                            fontSize: 11,
                                            fontFamily: 'Nunito Sans, sans-serif',
                                        }
                                    }}
                                    InputLabelProps={{
                                        style: {
                                            fontSize: 11,
                                            fontFamily: 'Nunito Sans, sans-serif',
                                            color: '#7e8085',
                                        }
                                    }}
d.arizona's avatar
d.arizona committed
485 486 487 488 489 490 491 492 493 494 495
                                >
                                    {/* {periode.map((option) => (
                                        <MenuItem key={option.value} value={option.value}>
                                            {option.label}
                                        </MenuItem>
                                    ))} */}
                                </TextField>
                            </div>
                        </div>

                        <div className="column-2">
d.arizona's avatar
d.arizona committed
496 497
                            <div className="margin-bottom-20px">
                                <TextField
Deni Rinaldi's avatar
Deni Rinaldi committed
498 499 500 501 502 503 504 505
                                    style={{ width: '100%', marginTop: 7 }}
                                    id="userRole"
                                    name="roleName"
                                    label="User Role"
                                    value={this.state.roleName}
                                    error={this.state.errorRoleName}
                                    helperText={this.state.msgErrorRN}
                                    onChange={(e) => this.handleChange(e, '')}
a.bairuha's avatar
a.bairuha committed
506 507 508 509 510 511 512 513 514 515 516 517 518
                                    inputProps={{
                                        style: {
                                            fontSize: 11,
                                            fontFamily: 'Nunito Sans, sans-serif',
                                        }
                                    }}
                                    InputLabelProps={{
                                        style: {
                                            fontSize: 11,
                                            fontFamily: 'Nunito Sans, sans-serif',
                                            color: '#7e8085',
                                        }
                                    }}
d.arizona's avatar
d.arizona committed
519 520 521 522 523 524 525 526 527 528
                                // defaultValue="Default Value"
                                // helperText="Some important text"
                                />
                            </div>
                        </div>
                    </div>

                    <div className="grid grid-2x grid-mobile-none gap-15px" style={{ paddingLeft: 20, paddingRight: 20 }}>
                        <div className="column-1">
                            <div className="margin-bottom-20px">
d.arizona's avatar
d.arizona committed
529
                                <DatePicker
Deni Rinaldi's avatar
Deni Rinaldi committed
530 531
                                    margin="normal"
                                    id="startDate"
532
                                    label="Valid From"
d.arizona's avatar
d.arizona committed
533
                                    format="dd-MM-yyyy"
Deni Rinaldi's avatar
Deni Rinaldi committed
534 535 536 537 538 539 540
                                    value={this.state.startDate}
                                    error={this.state.errorStartDate}
                                    helperText={this.state.msgErrorSD}
                                    onChange={(e) => this.handleChange(e, 'start_date')}
                                    KeyboardButtonProps={{
                                        'aria-label': 'change date',
                                    }}
a.bairuha's avatar
a.bairuha committed
541 542 543 544 545 546 547 548 549 550 551 552 553
                                    inputProps={{
                                        style: {
                                            fontSize: 11,
                                            fontFamily: 'Nunito Sans, sans-serif',
                                        }
                                    }}
                                    InputLabelProps={{
                                        style: {
                                            fontSize: 11,
                                            color: '#7e8085',
                                            fontFamily: 'Nunito Sans, sans-serif',
                                        }
                                    }}
Deni Rinaldi's avatar
Deni Rinaldi committed
554 555

                                    style={{ padding: 0, margin: 0, width: '100%' }}
d.arizona's avatar
d.arizona committed
556 557 558 559 560 561
                                />
                            </div>
                        </div>

                        <div className="column-2">
                            <div className="margin-bottom-20px">
d.arizona's avatar
d.arizona committed
562
                                <DatePicker
Deni Rinaldi's avatar
Deni Rinaldi committed
563 564
                                    margin="normal"
                                    id="endDate"
565
                                    label="Valid To"
d.arizona's avatar
d.arizona committed
566
                                    format="dd-MM-yyyy"
Deni Rinaldi's avatar
Deni Rinaldi committed
567 568 569 570 571 572 573 574
                                    value={this.state.endDate}
                                    error={this.state.errorEndDate}
                                    helperText={this.state.msgErrorED}
                                    onChange={(e) => this.handleChange(e, 'end_date')}
                                    minDate={this.state.startDate}
                                    KeyboardButtonProps={{
                                        'aria-label': 'change date',
                                    }}
a.bairuha's avatar
a.bairuha committed
575 576 577 578 579 580 581 582 583 584 585 586 587
                                    inputProps={{
                                        style: {
                                            fontSize: 11,
                                            fontFamily: 'Nunito Sans, sans-serif',
                                        }
                                    }}
                                    InputLabelProps={{
                                        style: {
                                            fontSize: 11,
                                            color: '#7e8085',
                                            fontFamily: 'Nunito Sans, sans-serif',
                                        }
                                    }}
Deni Rinaldi's avatar
Deni Rinaldi committed
588 589

                                    style={{ padding: 0, margin: 0, width: '100%' }}
d.arizona's avatar
d.arizona committed
590 591 592 593 594 595 596
                                />
                            </div>
                        </div>
                    </div>

                    <div className="grid grid-2x grid-mobile-none gap-15px" style={{ paddingLeft: 20, paddingRight: 20 }}>
                        <div className="column-1">
d.arizona's avatar
d.arizona committed
597 598 599
                            <div className="margin-bottom-20px">
                                <TextField
                                    style={{ width: '100%' }}
d.arizona's avatar
d.arizona committed
600 601 602 603 604
                                    id="status"
                                    label="Status"
                                    disabled
                                    // id="outlined-read-only-input"
                                    variant="filled"
d.arizona's avatar
d.arizona committed
605
                                    value={'Active'}
a.bairuha's avatar
a.bairuha committed
606 607 608 609 610 611 612 613 614 615 616 617 618 619

                                    inputProps={{
                                        style: {
                                            fontSize: 11,
                                            fontFamily: 'Nunito Sans, sans-serif',
                                        }
                                    }}
                                    InputLabelProps={{
                                        style: {
                                            fontSize: 11,
                                            color: '#7e8085',
                                            fontFamily: 'Nunito Sans, sans-serif',
                                        }
                                    }}
d.arizona's avatar
d.arizona committed
620 621 622 623 624 625 626 627 628 629
                                >
                                    {/* {periode.map((option) => (
                                        <MenuItem key={option.value} value={option.value}>
                                            {option.label}
                                        </MenuItem>
                                    ))} */}
                                </TextField>
                            </div>
                        </div>
                    </div>
d.arizona's avatar
d.arizona committed
630
                    {/* <div style={{ flexDirection: 'column', display: 'flex', paddingLeft: 20, paddingRight: 20 }}>
a.bairuha's avatar
a.bairuha committed
631 632
                        <Typography style={{ fontSize: 12 }}>{`Dibuat: `}</Typography>
                        <Typography style={{fontSize: 12}}>{`Diubah: `}</Typography>
d.arizona's avatar
d.arizona committed
633
                    </div> */}
Deni Rinaldi's avatar
Deni Rinaldi committed
634 635
                    <Divider style={{ margin: 20 }} />
                    <div style={{ paddingLeft: 20, paddingRight: 20 }}>
d.arizona's avatar
d.arizona committed
636
                        <h5>Access Rights</h5>
Deni Rinaldi's avatar
Deni Rinaldi committed
637
                        <div className="grid grid-2x grid-mobile-none gap-15px padding-top-5px padding-bottom-5px padding-left-10px padding-right-10px " style={{ backgroundColor: '#4b4b4b' }}>
d.arizona's avatar
d.arizona committed
638
                            <div className="column-1">
d.arizona's avatar
d.arizona committed
639
                                <Typography style={{ fontSize: 12, color: 'white' }}>Authorization Module</Typography>
d.arizona's avatar
d.arizona committed
640
                            </div>
d.arizona's avatar
d.arizona committed
641
                            <div className="column-2 grid grid-4x content-center grid-mobile-none gap-15px">
d.arizona's avatar
d.arizona committed
642
                                <div className="column-1">
d.arizona's avatar
d.arizona committed
643
                                    <Typography style={{ fontSize: 12, color: 'white' }}>View</Typography>
d.arizona's avatar
d.arizona committed
644 645
                                </div>
                                <div className="column-2">
d.arizona's avatar
d.arizona committed
646
                                    <Typography style={{ fontSize: 12, color: 'white' }}>Create</Typography>
d.arizona's avatar
d.arizona committed
647 648
                                </div>
                                <div className="column 3">
d.arizona's avatar
d.arizona committed
649
                                    <Typography style={{ fontSize: 12, color: 'white' }}>Edit</Typography>
d.arizona's avatar
d.arizona committed
650
                                </div>
d.arizona's avatar
d.arizona committed
651 652 653
                                <div className="column 4">
                                    <Typography style={{ fontSize: 12, color: 'white' }}>Delete</Typography>
                                </div>
d.arizona's avatar
d.arizona committed
654 655
                            </div>
                        </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673

                        <div style={{ height: '25vh', overflow: 'scroll' }}>
                            {this.state.application.map((item, index) => {
                                return (
                                    <div>
                                        <div className="grid grid-2x grid-mobile-none gap-15px padding-left-10px padding-right-10px">
                                            <div className="column-1" style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', justifyContent: 'flex-start', paddingLeft: 8 }}>
                                                {item.sub_menu.length > 0 && <span onClick={() => this.handleCollapse(item)} style={{ marginRight: 2, marginLeft: -22 }}>
                                                    {item.collapse ? <RemoveIcon color={'action'} fontSize={'small'} /> : <AddIcon color={'action'} fontSize={'small'} />}
                                                </span>}
                                                <span>
                                                    <CustomCheckbox
                                                        checked={this.handleItemChecked(item)}
                                                        onChange={() => this.handleItemClick(item)}
                                                    />
                                                </span>
                                                <Typography style={{ fontSize: 12, marginLeft: 5 }}>{item.label}</Typography>
                                            </div>
d.arizona's avatar
d.arizona committed
674
                                            <div className="column-2 grid grid-4x content-center grid-mobile-none gap-15px margin-left-10px">
Deni Rinaldi's avatar
Deni Rinaldi committed
675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697
                                                <div className="column-1">
                                                    <CustomCheckbox
                                                        disabled={!this.handleItemChecked(item)}
                                                        checked={this.handleSubItemChecked(item, 1)}
                                                        onChange={() => this.handleSubItemClick(item, 1)}
                                                    />
                                                </div>
                                                <div className="column-2">
                                                    <CustomCheckbox
                                                        // disabled
                                                        disabled={!this.handleItemChecked(item)}
                                                        checked={this.handleSubItemChecked(item, 2)}
                                                        onChange={() => this.handleSubItemClick(item, 2)}
                                                    />
                                                </div>
                                                <div className="column 3">
                                                    <CustomCheckbox
                                                        // disabled
                                                        disabled={!this.handleItemChecked(item)}
                                                        checked={this.handleSubItemChecked(item, 3)}
                                                        onChange={() => this.handleSubItemClick(item, 3)}
                                                    />
                                                </div>
d.arizona's avatar
d.arizona committed
698 699 700 701 702 703 704 705
                                                <div className="column 4">
                                                    <CustomCheckbox
                                                        // disabled
                                                        disabled={!this.handleItemChecked(item)}
                                                        checked={this.handleSubItemChecked(item, 4)}
                                                        onChange={() => this.handleSubItemClick(item, 4)}
                                                    />
                                                </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
706 707 708 709 710 711 712 713 714 715 716 717 718
                                            </div>
                                        </div>
                                        {item.sub_menu.length > 0 && item.sub_menu.map((items, indexs) => {
                                            return (
                                                <Collapse in={item.collapse} timeout="auto" unmountOnExit>
                                                    <div className="grid grid-2x grid-mobile-none gap-15px padding-left-10px padding-right-10px">
                                                        <div className="column-1" style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', paddingLeft: 30 }}>
                                                            <CustomCheckbox
                                                                checked={this.handleItemChecked(items)}
                                                                onChange={() => this.handleItemClick(items)}
                                                            />
                                                            <Typography style={{ fontSize: 12, maxWidth: '100%', marginLeft: 5 }}>{items.label}</Typography>
                                                        </div>
d.arizona's avatar
d.arizona committed
719
                                                        <div className="column-2 grid grid-4x content-center grid-mobile-none gap-15px margin-left-10px">
Deni Rinaldi's avatar
Deni Rinaldi committed
720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740
                                                            <div className="column-1">
                                                                <CustomCheckbox
                                                                    disabled={!this.handleItemChecked(items)}
                                                                    checked={this.handleSubItemChecked(items, 1)}
                                                                    onChange={() => this.handleSubItemClick(items, 1)}
                                                                />
                                                            </div>
                                                            <div className="column-2">
                                                                <CustomCheckbox
                                                                    disabled={!this.handleItemChecked(items)}
                                                                    checked={this.handleSubItemChecked(items, 2)}
                                                                    onChange={() => this.handleSubItemClick(items, 2)}
                                                                />
                                                            </div>
                                                            <div className="column 3">
                                                                <CustomCheckbox
                                                                    disabled={!this.handleItemChecked(items)}
                                                                    checked={this.handleSubItemChecked(items, 3)}
                                                                    onChange={() => this.handleSubItemClick(items, 3)}
                                                                />
                                                            </div>
d.arizona's avatar
d.arizona committed
741 742 743 744 745 746 747
                                                            <div className="column 4">
                                                                <CustomCheckbox
                                                                    disabled={!this.handleItemChecked(items)}
                                                                    checked={this.handleSubItemChecked(items, 4)}
                                                                    onChange={() => this.handleSubItemClick(items, 4)}
                                                                />
                                                            </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
748 749 750 751 752 753 754 755 756
                                                        </div>
                                                    </div>
                                                </Collapse>
                                            )
                                        })}
                                    </div>
                                )
                            })}
                            {this.state.setting.map((item, index) => {
d.arizona's avatar
d.arizona committed
757
                                return (
d.arizona's avatar
d.arizona committed
758
                                    <div>
d.arizona's avatar
d.arizona committed
759
                                        {item.menu_id !== 23 && <div className="grid grid-2x grid-mobile-none gap-15px padding-left-10px padding-right-10px">
Deni Rinaldi's avatar
Deni Rinaldi committed
760 761 762
                                            <div className="column-1" style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', justifyContent: 'flex-start', paddingLeft: 8 }}>
                                                {item.sub_menu.length > 0 && <span onClick={() => this.handleCollapseSetting(item)} style={{ marginRight: 2, marginLeft: -22 }}>
                                                    {item.collapse ? <RemoveIcon color={'action'} fontSize={'small'} /> : <AddIcon color={'action'} fontSize={'small'} />}
d.arizona's avatar
d.arizona committed
763 764
                                                </span>}
                                                <span>
Deni Rinaldi's avatar
Deni Rinaldi committed
765 766 767 768
                                                    <CustomCheckbox
                                                        checked={this.handleItemChecked(item)}
                                                        onChange={() => this.handleItemClick(item)}
                                                    />
d.arizona's avatar
d.arizona committed
769
                                                </span>
Deni Rinaldi's avatar
Deni Rinaldi committed
770
                                                <Typography style={{ fontSize: 12, marginLeft: 5 }}>{item.label}</Typography>
d.arizona's avatar
d.arizona committed
771
                                            </div>
d.arizona's avatar
d.arizona committed
772
                                            <div className="column-2 grid grid-4x content-center grid-mobile-none gap-15px margin-left-10px">
d.arizona's avatar
d.arizona committed
773 774 775 776
                                                <div className="column-1">
                                                    <CustomCheckbox
                                                        disabled={!this.handleItemChecked(item)}
                                                        checked={this.handleSubItemChecked(item, 1)}
Deni Rinaldi's avatar
Deni Rinaldi committed
777
                                                        onChange={() => this.handleSubItemClick(item, 1)}
d.arizona's avatar
d.arizona committed
778 779 780 781 782 783 784
                                                    />
                                                </div>
                                                <div className="column-2">
                                                    <CustomCheckbox
                                                        // disabled
                                                        disabled={!this.handleItemChecked(item)}
                                                        checked={this.handleSubItemChecked(item, 2)}
Deni Rinaldi's avatar
Deni Rinaldi committed
785
                                                        onChange={() => this.handleSubItemClick(item, 2)}
d.arizona's avatar
d.arizona committed
786 787 788 789 790 791 792
                                                    />
                                                </div>
                                                <div className="column 3">
                                                    <CustomCheckbox
                                                        // disabled
                                                        disabled={!this.handleItemChecked(item)}
                                                        checked={this.handleSubItemChecked(item, 3)}
Deni Rinaldi's avatar
Deni Rinaldi committed
793
                                                        onChange={() => this.handleSubItemClick(item, 3)}
d.arizona's avatar
d.arizona committed
794 795
                                                    />
                                                </div>
d.arizona's avatar
d.arizona committed
796 797 798 799 800 801 802 803
                                                <div className="column 4">
                                                    <CustomCheckbox
                                                        // disabled
                                                        disabled={!this.handleItemChecked(item)}
                                                        checked={this.handleSubItemChecked(item, 4)}
                                                        onChange={() => this.handleSubItemClick(item, 4)}
                                                    />
                                                </div>
d.arizona's avatar
d.arizona committed
804
                                            </div>
d.arizona's avatar
d.arizona committed
805
                                        </div>}
Deni Rinaldi's avatar
Deni Rinaldi committed
806 807 808
                                        {item.sub_menu.length > 0 && item.sub_menu.map((items, indexs) => {
                                            return (
                                                <Collapse in={item.collapse} timeout="auto" unmountOnExit>
d.arizona's avatar
d.arizona committed
809
                                                    <div className="grid grid-2x grid-mobile-none gap-15px padding-left-10px padding-right-10px">
Deni Rinaldi's avatar
Deni Rinaldi committed
810
                                                        <div className="column-1" style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', paddingLeft: 30 }}>
d.arizona's avatar
d.arizona committed
811 812 813 814
                                                            <CustomCheckbox
                                                                checked={this.handleItemChecked(items)}
                                                                onChange={() => this.handleItemClick(items)}
                                                            />
Deni Rinaldi's avatar
Deni Rinaldi committed
815
                                                            <Typography style={{ fontSize: 12, maxWidth: '100%', marginLeft: 5 }}>{items.label}</Typography>
d.arizona's avatar
d.arizona committed
816
                                                        </div>
d.arizona's avatar
d.arizona committed
817
                                                        <div className="column-2 grid grid-4x content-center grid-mobile-none gap-15px margin-left-10px">
d.arizona's avatar
d.arizona committed
818 819 820 821
                                                            <div className="column-1">
                                                                <CustomCheckbox
                                                                    disabled={!this.handleItemChecked(items)}
                                                                    checked={this.handleSubItemChecked(items, 1)}
Deni Rinaldi's avatar
Deni Rinaldi committed
822
                                                                    onChange={() => this.handleSubItemClick(items, 1)}
d.arizona's avatar
d.arizona committed
823 824 825 826 827 828
                                                                />
                                                            </div>
                                                            <div className="column-2">
                                                                <CustomCheckbox
                                                                    disabled={!this.handleItemChecked(items)}
                                                                    checked={this.handleSubItemChecked(items, 2)}
Deni Rinaldi's avatar
Deni Rinaldi committed
829
                                                                    onChange={() => this.handleSubItemClick(items, 2)}
d.arizona's avatar
d.arizona committed
830 831 832 833 834 835
                                                                />
                                                            </div>
                                                            <div className="column 3">
                                                                <CustomCheckbox
                                                                    disabled={!this.handleItemChecked(items)}
                                                                    checked={this.handleSubItemChecked(items, 3)}
Deni Rinaldi's avatar
Deni Rinaldi committed
836
                                                                    onChange={() => this.handleSubItemClick(items, 3)}
d.arizona's avatar
d.arizona committed
837 838
                                                                />
                                                            </div>
d.arizona's avatar
d.arizona committed
839 840 841 842 843 844 845
                                                            <div className="column 4">
                                                                <CustomCheckbox
                                                                    disabled={!this.handleItemChecked(items)}
                                                                    checked={this.handleSubItemChecked(items, 4)}
                                                                    onChange={() => this.handleSubItemClick(items, 4)}
                                                                />
                                                            </div>
d.arizona's avatar
d.arizona committed
846 847 848 849 850
                                                        </div>
                                                    </div>
                                                </Collapse>
                                            )
                                        })}
d.arizona's avatar
d.arizona committed
851 852 853 854
                                    </div>
                                )
                            })}
                        </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
855

d.arizona's avatar
d.arizona committed
856
                    </div>
d.arizona's avatar
d.arizona committed
857 858
                    <div className="border-top grid grid-2x" style={{ height: 56, backgroundColor: '#f5f5f5', paddingLeft: 20, paddingRight: 20 }}>
                        <div className="column-1" style={{ alignSelf: 'center' }}>
d.arizona's avatar
d.arizona committed
859 860 861 862 863
                            <button
                                type="button"
                                onClick={() => this.props.onClickClose()}
                            >
                                <div style={{ width: 102, height: 30, border: 'solid 1px #354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center' }}>
d.arizona's avatar
d.arizona committed
864
                                    <span style={{ color: '#354960', fontSize: 11 }}>Cancel</span>
d.arizona's avatar
d.arizona committed
865 866
                                </div>
                            </button>
Deni Rinaldi's avatar
Deni Rinaldi committed
867

d.arizona's avatar
d.arizona committed
868
                        </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
869
                        <div className="column-2" style={{ display: 'flex', justifyContent: 'flex-end', alignItems: 'center' }}>
d.arizona's avatar
d.arizona committed
870 871 872
                            <button
                                type="button"
                                onClick={() => this.validasi()}
Deni Rinaldi's avatar
Deni Rinaldi committed
873
                            >
d.arizona's avatar
d.arizona committed
874
                                <div style={{ width: 102, height: 30, backgroundColor: '#354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center' }}>
d.arizona's avatar
d.arizona committed
875
                                    <span style={{ color: '#fff', fontSize: 11 }}>Save</span>
d.arizona's avatar
d.arizona committed
876 877
                                </div>
                            </button>
d.arizona's avatar
d.arizona committed
878 879 880 881 882 883 884
                        </div>
                    </div>
                </div>
            </div>
        );
    }
}