EditUser.js 39.2 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 { titleCase } from '../../../library/Utils';
import Autocomplete from '@material-ui/lab/Autocomplete';
d.arizona's avatar
d.arizona committed
6 7 8 9
import { DatePicker } from '@material-ui/pickers';
import format from "date-fns/format";
import RemoveIcon from '@material-ui/icons/Remove';
import AddIcon from '@material-ui/icons/Add';
d.arizona's avatar
d.arizona committed
10
import * as R from 'ramda'
d.arizona's avatar
d.arizona committed
11
import Images from '../../../assets/Images';
a.bairuha's avatar
a.bairuha committed
12
import MuiAlert from '@material-ui/lab/Alert';
a.bairuha's avatar
a.bairuha committed
13
import Constant from '../../../library/Constant';
d.arizona's avatar
d.arizona committed
14 15 16 17

const CustomCheckbox = withStyles({
    root: {
        color: '#51c6ea',
Deni Rinaldi's avatar
Deni Rinaldi committed
18 19 20
        '&$checked': {
            color: '#51c6ea',
        },
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

Deni Rinaldi's avatar
Deni Rinaldi committed
25 26 27 28 29 30 31 32 33 34
const CustomCheckboxDisabled = withStyles({
    root: {
        color: '#d5d5d5',
        '&$checked': {
            color: '#d5d5d5',
        },
    },
    checked: {},
})((props) => <Checkbox color="default" {...props} />);

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

d.arizona's avatar
d.arizona committed
38
export default class EditUser extends Component {
Deni Rinaldi's avatar
Deni Rinaldi committed
39

d.arizona's avatar
d.arizona committed
40 41 42 43 44 45
    constructor(props) {
        super(props)
        this.state = {
            paramsId: this.props.data,
            tempData: null,
            menuData: null,
d.arizona's avatar
d.arizona committed
46 47 48 49
            checked: false,
            listRole: null,
            role: null,
            company: [],
d.arizona's avatar
d.arizona committed
50 51 52 53 54 55 56 57 58 59 60 61
            listCompany: [],
            selectedIndex: 0,
            errorFullname: false,
            errorEmail: false,
            errorRoleName: false,
            errorStartDate: false,
            errorEndDate: false,
            msgErrorFN: '',
            msgErrorEM: '',
            msgErrorRN: '',
            msgErrorSD: '',
            msgErrorED: '',
a.bairuha's avatar
a.bairuha committed
62 63 64
            alert: false,
            tipeAlert: '',
            messageAlert: ''
d.arizona's avatar
d.arizona committed
65 66 67 68
        }
    }

    handleChecked() {
Deni Rinaldi's avatar
Deni Rinaldi committed
69
        this.setState({ checked: !this.state.checked })
d.arizona's avatar
d.arizona committed
70
    }
Deni Rinaldi's avatar
Deni Rinaldi committed
71

d.arizona's avatar
d.arizona committed
72
    componentDidMount() {
d.arizona's avatar
d.arizona committed
73
        this.getDetailUser()
d.arizona's avatar
d.arizona committed
74
        this.getPerusahaan()
d.arizona's avatar
d.arizona committed
75 76
    }

d.arizona's avatar
d.arizona committed
77
    handleChange(e, type) {
d.arizona's avatar
d.arizona committed
78
        let data = this.state
d.arizona's avatar
d.arizona committed
79
        let isDate = type !== '' ? true : false
d.arizona's avatar
d.arizona committed
80
        if (isDate && type === 'start_date') {
Deni Rinaldi's avatar
Deni Rinaldi committed
81 82
            this.setState({
                ...data, tempData: { ...this.state.tempData, start_date: format(e, 'yyyy-MM-dd'), end_date: null },
d.arizona's avatar
d.arizona committed
83
                errorFullname: false,
Deni Rinaldi's avatar
Deni Rinaldi committed
84
                errorEmail: false,
d.arizona's avatar
d.arizona committed
85 86 87
                errorRoleName: false,
                errorStartDate: false,
                errorEndDate: false,
d.arizona's avatar
d.arizona committed
88 89
                msgErrorFN: '',
                msgErrorEM: '',
d.arizona's avatar
d.arizona committed
90 91 92 93
                msgErrorRN: '',
                msgErrorSD: '',
                msgErrorED: '',
            })
d.arizona's avatar
d.arizona committed
94
        } else if (isDate && type === 'end_date') {
Deni Rinaldi's avatar
Deni Rinaldi committed
95 96
            this.setState({
                ...data, tempData: { ...this.state.tempData, end_date: format(e, 'yyyy-MM-dd') },
d.arizona's avatar
d.arizona committed
97
                errorFullname: false,
Deni Rinaldi's avatar
Deni Rinaldi committed
98
                errorEmail: false,
d.arizona's avatar
d.arizona committed
99 100 101
                errorRoleName: false,
                errorStartDate: false,
                errorEndDate: false,
d.arizona's avatar
d.arizona committed
102 103
                msgErrorFN: '',
                msgErrorEM: '',
d.arizona's avatar
d.arizona committed
104 105 106 107 108
                msgErrorRN: '',
                msgErrorSD: '',
                msgErrorED: '',
            })
        } else {
Deni Rinaldi's avatar
Deni Rinaldi committed
109 110
            this.setState({
                ...data, tempData: { ...this.state.tempData, [e.target.name]: e.target.value },
d.arizona's avatar
d.arizona committed
111
                errorFullname: false,
Deni Rinaldi's avatar
Deni Rinaldi committed
112
                errorEmail: false,
d.arizona's avatar
d.arizona committed
113 114 115
                errorRoleName: false,
                errorStartDate: false,
                errorEndDate: false,
d.arizona's avatar
d.arizona committed
116 117
                msgErrorFN: '',
                msgErrorEM: '',
d.arizona's avatar
d.arizona committed
118 119
                msgErrorRN: '',
                msgErrorSD: '',
d.arizona's avatar
d.arizona committed
120
                msgErrorED: '',
d.arizona's avatar
d.arizona committed
121 122
            })
        }
d.arizona's avatar
d.arizona committed
123 124
    }

a.bairuha's avatar
a.bairuha committed
125
    clearError() {
d.arizona's avatar
d.arizona committed
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
        let listCompany = this.state.listCompany
        let company = this.state.company
        const handlePushChild = (item) => {
            let indexIDzz = company.findIndex((val) => val === item.id)
            if (indexIDzz === -1) {
                company.push(item.id)
            }
            if (item.children !== null) {
                if (item.children.length > 0) {
                    item.children.map((items,indexs) => {
                        handlePushChild(items)
                    })
                }
            }
        }

        listCompany.map((item, index) => {
            company.push(item.id)
            handlePushChild(item)
        })

        let uniqueCompany = company.filter((val, id, array) => {
            return array.indexOf(val) == id;  
        });
d.arizona's avatar
d.arizona committed
150
        company = this.state.role == null? [] : this.state.role.role_id === 1? uniqueCompany : []
d.arizona's avatar
d.arizona committed
151 152
        // console.log(uniqueCompany)
        
a.bairuha's avatar
a.bairuha committed
153 154 155 156 157 158 159 160 161 162 163
        this.setState({
            errorFullname: false,
            errorEmail: false,
            errorRoleName: false,
            errorStartDate: false,
            errorEndDate: false,
            msgErrorFN: '',
            msgErrorEM: '',
            msgErrorRN: '',
            msgErrorSD: '',
            msgErrorED: '',
d.arizona's avatar
d.arizona committed
164
            company
a.bairuha's avatar
a.bairuha committed
165 166 167
        })
    }

d.arizona's avatar
d.arizona committed
168 169
    getDetailUser() {
        api.create().getDetailUser(this.state.paramsId).then((response) => {
a.bairuha's avatar
a.bairuha committed
170 171 172
            if (response.data) {
                if (response.ok) {
                    if (response.data.status === 'success') {
173 174
                        this.setState({ tempData: response.data.data, company: response.data.data.company }, ()=> 
                        this.getRole(response.data.data.role_id))
Deni Rinaldi's avatar
Deni Rinaldi committed
175
                        // console.log(response.data.data)
a.bairuha's avatar
a.bairuha committed
176
                    } else {
a.bairuha's avatar
a.bairuha committed
177
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
a.bairuha's avatar
a.bairuha committed
178
                            if (response.data.message.includes("Someone Logged In")) {
a.bairuha's avatar
a.bairuha committed
179 180 181 182 183 184
                                setTimeout(() => {
                                    localStorage.removeItem(Constant.TOKEN)
                                    window.location.reload();
                                }, 1000);
                            }
                        })
a.bairuha's avatar
a.bairuha committed
185 186 187 188
                    }
                } else {
                    this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
                }
d.arizona's avatar
d.arizona committed
189
            } else {
a.bairuha's avatar
a.bairuha committed
190
                this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
d.arizona's avatar
d.arizona committed
191 192 193 194
            }
        })
    }

a.bairuha's avatar
a.bairuha committed
195 196 197 198 199
    isEmail(email) {
        const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        return re.test(String(email).toLowerCase());
    }

d.arizona's avatar
d.arizona committed
200
    validasi() {
a.bairuha's avatar
a.bairuha committed
201 202 203
        var isEmail = this.isEmail(this.state.tempData.email)
        // console.log(this.state.tempData)

d.arizona's avatar
d.arizona committed
204
        if (R.isEmpty(this.state.tempData.fullname)) {
d.arizona's avatar
d.arizona committed
205
            this.setState({ errorFullname: true, msgErrorFN: 'Full Name Cannot be Empty' })
d.arizona's avatar
d.arizona committed
206
        } else if (R.isEmpty(this.state.tempData.email)) {
d.arizona's avatar
d.arizona committed
207
            this.setState({ errorEmail: true, msgErrorEM: 'Email Cannot be Empty' })
a.bairuha's avatar
a.bairuha committed
208
        } else if (!isEmail) {
d.arizona's avatar
d.arizona committed
209
            this.setState({ errorEmail: true, msgErrorEM: 'Please enter a valid email address' })
a.bairuha's avatar
a.bairuha committed
210
        } else if (R.isNil(this.state.role)) {
d.arizona's avatar
d.arizona committed
211
            this.setState({ errorRoleName: true, msgErrorRN: 'Role Cannot be Empty' })
d.arizona's avatar
d.arizona committed
212
        } else if (R.isNil(this.state.tempData.start_date)) {
d.arizona's avatar
d.arizona committed
213
            this.setState({ errorStartDate: true, msgErrorSD: 'Valid From Cannot be Empty' })
d.arizona's avatar
d.arizona committed
214
        } else if (R.isNil(this.state.tempData.end_date)) {
d.arizona's avatar
d.arizona committed
215
            this.setState({ errorEndDate: true, msgErrorED: 'Valid To Cannot be Empty' })
d.arizona's avatar
d.arizona committed
216 217
        } else if (this.state.company.length < 1) {
            this.setState({ alert: true, messageAlert: 'Authorization company cannot be empty', tipeAlert: 'warning' })
Deni Rinaldi's avatar
Deni Rinaldi committed
218
        }
d.arizona's avatar
d.arizona committed
219 220 221 222 223 224
        // else if (this.state.privileges.length < 1) {
        //     alert('Hak Akses belum di pilih !!')
        // } 
        else {
            this.updateUser()
        }
d.arizona's avatar
d.arizona committed
225
    }
d.arizona's avatar
d.arizona committed
226

Deni Rinaldi's avatar
Deni Rinaldi committed
227
    updateUser(){
d.arizona's avatar
d.arizona committed
228
        let payload = {
d.arizona's avatar
d.arizona committed
229 230 231 232 233 234 235
            "user_id": this.state.tempData.user_id,
            "role_id": this.state.role.role_id,
            "email": this.state.tempData.email,
            "fullname": this.state.tempData.fullname,
            "company": this.state.company,
            "start_date": this.state.tempData.start_date,
            "end_date": this.state.tempData.end_date
d.arizona's avatar
d.arizona committed
236
        }
Deni Rinaldi's avatar
Deni Rinaldi committed
237
        this.props.updateUser(payload)
d.arizona's avatar
d.arizona committed
238 239
    }

240
    getRole(id) {
241
        api.create().getRoleActive().then((response) => {
a.bairuha's avatar
a.bairuha committed
242 243 244 245 246 247 248 249 250 251 252 253 254 255
            if (response.data) {
                if (response.ok) {
                    if (response.data.status === 'success') {
                        let data = response.data.data
                        let roleData = data.map((item) => {
                            return {
                                role_id: item.role_id,
                                role_name: item.role_name
                            }
                        })
                        let defaultProps = {
                            options: roleData,
                            getOptionLabel: (option) => titleCase(option.role_name),
                        };
d.arizona's avatar
d.arizona committed
256

257
                        let index = roleData.findIndex((val) => val.role_id === id)
Deni Rinaldi's avatar
Deni Rinaldi committed
258
                        // console.log(index)
a.bairuha's avatar
a.bairuha committed
259
                        this.setState({ listRole: defaultProps, role: index === -1 ? null : roleData[index], msgErrorRN: index === -1 ? 'Role has been Inactive' : '', errorRoleName: index === -1 ? true : false })
a.bairuha's avatar
a.bairuha committed
260
                    } else {
a.bairuha's avatar
a.bairuha committed
261
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
a.bairuha's avatar
a.bairuha committed
262
                            if (response.data.message.includes("Someone Logged In")) {
a.bairuha's avatar
a.bairuha committed
263 264 265 266 267 268
                                setTimeout(() => {
                                    localStorage.removeItem(Constant.TOKEN)
                                    window.location.reload();
                                }, 1000);
                            }
                        })
a.bairuha's avatar
a.bairuha committed
269 270 271 272
                    }
                } else {
                    this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
                }
d.arizona's avatar
d.arizona committed
273
            } else {
a.bairuha's avatar
a.bairuha committed
274
                this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
d.arizona's avatar
d.arizona committed
275
            }
d.arizona's avatar
d.arizona committed
276
        })
d.arizona's avatar
d.arizona committed
277 278
    }

d.arizona's avatar
d.arizona committed
279 280
    getPerusahaan() {
        api.create().getPerusahaanHierarki().then((response) => {
Deni Rinaldi's avatar
Deni Rinaldi committed
281
            if (response.data) {
a.bairuha's avatar
a.bairuha committed
282 283
                if (response.ok) {
                    if (response.data.status === 'success') {
d.arizona's avatar
d.arizona committed
284 285 286 287
                        let dataBaru = response.data.data.map((item,index) => {
                            return {...item, check: false}
                        })
                        this.setState({ listCompany: dataBaru })
a.bairuha's avatar
a.bairuha committed
288
                    } else {
a.bairuha's avatar
a.bairuha committed
289
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
a.bairuha's avatar
a.bairuha committed
290
                            if (response.data.message.includes("Someone Logged In")) {
a.bairuha's avatar
a.bairuha committed
291 292 293 294 295 296
                                setTimeout(() => {
                                    localStorage.removeItem(Constant.TOKEN)
                                    window.location.reload();
                                }, 1000);
                            }
                        })
a.bairuha's avatar
a.bairuha committed
297 298 299
                    }
                } else {
                    this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
Deni Rinaldi's avatar
Deni Rinaldi committed
300 301
                }
            } else {
a.bairuha's avatar
a.bairuha committed
302
                this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
d.arizona's avatar
d.arizona committed
303 304 305 306 307
            }
        })
    }

    handleItemChecked(item) {
d.arizona's avatar
d.arizona committed
308
        let indexID = this.state.company.findIndex((val) => val === item.id)
d.arizona's avatar
d.arizona committed
309
        return indexID === -1 ? false : true
d.arizona's avatar
d.arizona committed
310 311 312
    }

    handleItemClick(item) {
d.arizona's avatar
d.arizona committed
313
        let indexID = this.state.company.findIndex((val) => val === item.id)
d.arizona's avatar
d.arizona committed
314
        let company = this.state.company
d.arizona's avatar
d.arizona committed
315 316 317 318 319 320 321 322 323 324
        const handlePushChild = (item) => {
            let indexIDzz = company.findIndex((val) => val === item.id)
            if (indexIDzz === -1) {
                company.push(item.id)
            }
            if (item.children !== null) {
                if (item.children.length > 0) {
                    item.children.map((items,indexs) => {
                        handlePushChild(items)
                    })
d.arizona's avatar
d.arizona committed
325 326
                }
            }
d.arizona's avatar
d.arizona committed
327
        }
d.arizona's avatar
d.arizona committed
328

d.arizona's avatar
d.arizona committed
329 330 331 332 333
        const handleSpliceChild = (item) => {
            let indexIDzz = company.findIndex((val) => val === item.id)
            if (indexIDzz !== -1) {
                company.splice(indexIDzz, 1)
            }
d.arizona's avatar
d.arizona committed
334 335 336
            if (item.children !== null) {
                if (item.children.length > 0) {
                    item.children.map((items,indexs) => {
d.arizona's avatar
d.arizona committed
337
                        handleSpliceChild(items)
d.arizona's avatar
d.arizona committed
338 339 340
                    })
                }
            }
d.arizona's avatar
d.arizona committed
341 342 343 344 345 346 347 348 349
        }

        if (indexID === -1) {
            company.push(item.id)
            if (item.children !== null) {
                if (item.children.length > 0) {
                    item.children.map((items,indexs) => {
                        handlePushChild(items)
                    })
d.arizona's avatar
d.arizona committed
350 351 352
                }
            }

d.arizona's avatar
d.arizona committed
353 354
        } else {
            company.splice(indexID, 1)
d.arizona's avatar
d.arizona committed
355 356 357
            if (item.children !== null) {
                if (item.children.length > 0) {
                    item.children.map((items,indexs) => {
d.arizona's avatar
d.arizona committed
358
                        handleSpliceChild(items)
d.arizona's avatar
d.arizona committed
359
                    })
d.arizona's avatar
d.arizona committed
360 361
                }
            }
d.arizona's avatar
d.arizona committed
362
        }
d.arizona's avatar
d.arizona committed
363 364 365
        
        // console.log(company)
        this.setState({ company})
d.arizona's avatar
d.arizona committed
366
    }
d.arizona's avatar
d.arizona committed
367

Deni Rinaldi's avatar
Deni Rinaldi committed
368 369 370 371 372
    renderChildren = (item, pad) => {
        let padding = null
        if (pad !== undefined) {
            padding = pad
        } else {
d.arizona's avatar
d.arizona committed
373
            padding = 30
Deni Rinaldi's avatar
Deni Rinaldi committed
374
        }
d.arizona's avatar
d.arizona committed
375
        return (
a.bairuha's avatar
a.bairuha committed
376 377 378 379 380 381 382
            <div>
                {item.children.length > 0 && (
                    <ul>
                        {item.children.map((data, index) => {
                            return (
                                // <li>
                                <Collapse key={index} timeout="auto" unmountOnExit in={item.collapse}>
d.arizona's avatar
d.arizona committed
383
                                    <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', justifyContent: 'flex-start', paddingLeft: !R.isNil(data.children)? (data.children.length > 0? padding : padding + 30) : padding + 30}}>
a.bairuha's avatar
a.bairuha committed
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409
                                        {R.isNil(data.children) ?
                                            null
                                            :
                                            data.children.length < 1 ?
                                                null
                                                :
                                                <span onClick={() => this.handleCollapse(data)} style={{ marginLeft: 7, marginRight: 2 }}>
                                                    {data.collapse ? <RemoveIcon color={'action'} fontSize={'small'} /> : <AddIcon color={'action'} fontSize={'small'} />}
                                                </span>
                                        }
                                        <span>
                                            {this.state.role ? this.state.role.role_id === 1 ?
                                                <CustomCheckboxDisabled
                                                    disabled={true}
                                                    checked={true}
                                                // onChange={() => this.handleItemClick(item)}
                                                /> :
                                                <CustomCheckbox
                                                    checked={this.handleItemChecked(data)}
                                                    onChange={() => this.handleItemClick(data)}
                                                /> :
                                                <CustomCheckbox
                                                    checked={this.handleItemChecked(data)}
                                                    onChange={() => this.handleItemClick(data)}
                                                />
                                            }
Deni Rinaldi's avatar
Deni Rinaldi committed
410
                                        </span>
a.bairuha's avatar
a.bairuha committed
411 412
                                        <Typography style={{ fontSize: 12 }}>{titleCase(data.company_name)}</Typography>
                                    </div>
d.arizona's avatar
d.arizona committed
413
                                    {!R.isNil(data.children) && this.renderChildren(data, padding + 30)}
a.bairuha's avatar
a.bairuha committed
414 415 416 417 418 419 420
                                </Collapse>
                                // </li>
                            )
                        })}
                    </ul>
                )}
            </div>
d.arizona's avatar
d.arizona committed
421 422 423
        )
    }

d.arizona's avatar
d.arizona committed
424
    handleCollapse(item) {
Deni Rinaldi's avatar
Deni Rinaldi committed
425
        let path = this.searchIt({ children: this.state.listCompany }, item.id)
d.arizona's avatar
d.arizona committed
426 427
        let listCompany = this.state.listCompany
        let arrayPath = []
d.arizona's avatar
d.arizona committed
428

d.arizona's avatar
d.arizona committed
429 430
        if (path.length > 1) {
            arrayPath = path.split('-');
Deni Rinaldi's avatar
Deni Rinaldi committed
431
            arrayPath = arrayPath.map((item) => { return item })
d.arizona's avatar
d.arizona committed
432 433 434
        } else {
            arrayPath.push(path)
        }
d.arizona's avatar
d.arizona committed
435

d.arizona's avatar
d.arizona committed
436 437
        let pathSelect = null
        if (arrayPath.length == 1) {
Deni Rinaldi's avatar
Deni Rinaldi committed
438
            pathSelect = listCompany[arrayPath[0]]
d.arizona's avatar
d.arizona committed
439
        } else if (arrayPath.length == 2) {
Deni Rinaldi's avatar
Deni Rinaldi committed
440
            pathSelect = listCompany[arrayPath[0]].children[arrayPath[1]]
d.arizona's avatar
d.arizona committed
441
        } else if (arrayPath.length == 3) {
Deni Rinaldi's avatar
Deni Rinaldi committed
442
            pathSelect = listCompany[arrayPath[0]].children[arrayPath[1]].children[arrayPath[2]]
d.arizona's avatar
d.arizona committed
443
        } else if (arrayPath.length == 4) {
Deni Rinaldi's avatar
Deni Rinaldi committed
444
            pathSelect = listCompany[arrayPath[0]].children[arrayPath[1]].children[arrayPath[2]].children[arrayPath[3]]
d.arizona's avatar
d.arizona committed
445
        } else if (arrayPath.length == 5) {
Deni Rinaldi's avatar
Deni Rinaldi committed
446
            pathSelect = listCompany[arrayPath[0]].children[arrayPath[1]].children[arrayPath[2]].children[arrayPath[3]].children[arrayPath[4]]
d.arizona's avatar
d.arizona committed
447
        } else if (arrayPath.length == 6) {
Deni Rinaldi's avatar
Deni Rinaldi committed
448
            pathSelect = listCompany[arrayPath[0]].children[arrayPath[1]].children[arrayPath[2]].children[arrayPath[3]].children[arrayPath[4]].children[arrayPath[5]]
d.arizona's avatar
d.arizona committed
449
        } else if (arrayPath.length == 7) {
Deni Rinaldi's avatar
Deni Rinaldi committed
450
            pathSelect = listCompany[arrayPath[0]].children[arrayPath[1]].children[arrayPath[2]].children[arrayPath[3]].children[arrayPath[4]].children[arrayPath[5]].children[arrayPath[6]]
d.arizona's avatar
d.arizona committed
451
        }
d.arizona's avatar
d.arizona committed
452

d.arizona's avatar
d.arizona committed
453 454
        pathSelect.collapse = !pathSelect.collapse
        // console.log(pathSelect.collapse)
Deni Rinaldi's avatar
Deni Rinaldi committed
455
        this.setState({ listCompany }, () => console.log(pathSelect))
d.arizona's avatar
d.arizona committed
456
    }
d.arizona's avatar
d.arizona committed
457 458

    searchIt = (node, search, path = '', position = 0) => {
Deni Rinaldi's avatar
Deni Rinaldi committed
459 460
        if (node.id && node.id === search) { return path !== '' ? `${path}-${position}` : position; }
        if (!node.children) { return false }
d.arizona's avatar
d.arizona committed
461
        const index = node.children.findIndex((x) => x.id && x.id === search);
d.arizona's avatar
d.arizona committed
462
        if (index >= 0) {
Deni Rinaldi's avatar
Deni Rinaldi committed
463
            return path !== '' ? `${path}-${index}` : index;
d.arizona's avatar
d.arizona committed
464
        }
d.arizona's avatar
d.arizona committed
465
        for (let i = 0; i < node.children.length; i++) {
Deni Rinaldi's avatar
Deni Rinaldi committed
466 467 468 469
            const result = this.searchIt(node.children[i], search, path !== '' ? `${path}-${i}` : i, i);
            if (result) {
                return result;
            }
d.arizona's avatar
d.arizona committed
470 471 472 473
        }
        return false;
    };

a.bairuha's avatar
a.bairuha committed
474 475 476 477
    closeAlert() {
      this.setState({ alert: false })
    }

d.arizona's avatar
d.arizona committed
478 479 480
    render() {
        return (
            <div className="test app-popup-show">
a.bairuha's avatar
a.bairuha committed
481 482 483 484 485
                <Snackbar open={this.state.alert} autoHideDuration={6000} onClose={() => this.closeAlert()}>
                    <Alert onClose={() => this.closeAlert()} severity={this.state.tipeAlert}>
                        {this.state.messageAlert}
                    </Alert>
                </Snackbar>
d.arizona's avatar
d.arizona committed
486
                <div className="popup-content background-white border-radius" style={{ borderRadius: 8 }}>
487
                    <div className="popup-panel grid grid-2x main-color" style={{ height: 64, borderTopRightRadius: 8, borderTopLeftRadius: 8 }}>
d.arizona's avatar
d.arizona committed
488 489
                        <div className="col-1" style={{ maxWidth: "inherit", display: 'flex', alignItems: 'center' }}>
                            <div className="popup-title">
d.arizona's avatar
d.arizona committed
490
                                <span style={{ color: '#fff', fontSize: 16, fontWeight: 'bold' }}>Edit Data</span>
d.arizona's avatar
d.arizona committed
491 492 493 494 495 496 497 498
                            </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
499
                                <img src={Images.close} />
d.arizona's avatar
d.arizona committed
500 501 502 503 504 505
                            </button>
                        </div>
                    </div>

                    <div className="grid grid-2x grid-mobile-none gap-15px" style={{ padding: 20 }}>
                        <div className="column-1">
d.arizona's avatar
d.arizona committed
506
                            <div className="">
d.arizona's avatar
d.arizona committed
507 508 509 510 511 512 513
                                <TextField
                                    style={{ width: '100%' }}
                                    id="id"
                                    label="ID"
                                    disabled
                                    // id="outlined-read-only-input"
                                    variant="filled"
Deni Rinaldi's avatar
Deni Rinaldi committed
514
                                    value={this.state.tempData === null ? '' : this.state.tempData.user_id}
d.arizona's avatar
d.arizona committed
515
                                    onChange={(e) => null}
a.bairuha's avatar
a.bairuha committed
516 517 518 519 520 521 522 523 524 525 526 527 528
                                    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
529 530 531 532 533 534 535 536 537 538 539
                                >
                                    {/* {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
540 541
                            <div className="">
                                <TextField
Deni Rinaldi's avatar
Deni Rinaldi committed
542 543 544
                                    style={{ width: '100%', marginTop: 7 }}
                                    id="fullname"
                                    name="fullname"
d.arizona's avatar
d.arizona committed
545
                                    label="Full Name"
Deni Rinaldi's avatar
Deni Rinaldi committed
546 547 548 549 550
                                    value={this.state.tempData === null ? '' : this.state.tempData.fullname}
                                    onChange={(e) => this.handleChange(e, '')}
                                    // defaultValue="Default Value"
                                    error={this.state.errorFullname}
                                    helperText={this.state.msgErrorFN}
a.bairuha's avatar
a.bairuha committed
551 552 553 554 555 556 557 558 559 560 561 562 563
                                    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
564 565 566 567 568 569 570
                                />
                            </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
571 572
                            <div className="margin-bottom-20px">
                                <TextField
Deni Rinaldi's avatar
Deni Rinaldi committed
573 574 575 576 577 578 579 580
                                    style={{ width: '100%', marginTop: 7 }}
                                    id="email"
                                    name="email"
                                    label="Email"
                                    value={this.state.tempData === null ? '' : this.state.tempData.email}
                                    onChange={(e) => this.handleChange(e, '')}
                                    error={this.state.errorEmail}
                                    helperText={this.state.msgErrorEM}
a.bairuha's avatar
a.bairuha committed
581 582 583 584 585 586 587 588 589 590 591 592 593
                                    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
594 595 596
                                />
                            </div>
                        </div>
d.arizona's avatar
d.arizona committed
597 598 599 600 601 602

                        <div className="column-2">
                            <div className="margin-bottom-20px">
                                <Autocomplete
                                    {...this.state.listRole}
                                    id="role"
a.bairuha's avatar
a.bairuha committed
603
                                    onChange={(event, newInputValue) => this.setState({ role: newInputValue }, ()=> this.clearError())}
d.arizona's avatar
d.arizona committed
604
                                    debug
Deni Rinaldi's avatar
Deni Rinaldi committed
605

a.bairuha's avatar
a.bairuha committed
606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622
                                    renderInput={(params) => <TextField 
                                        {...params} 
                                        label="Role" 
                                        margin="normal" 
                                        style={{ marginTop: 7 }} 
                                        onChange={(e) => this.handleChange(e, '')}
                                        error={this.state.errorRoleName}
                                        helperText={this.state.msgErrorRN}
                                        InputLabelProps={{
                                            style: {
                                                fontSize: 11,
                                                fontFamily: 'Nunito Sans, sans-serif',
                                                color: '#7e8085'
                                            }
                                        }}
                                        InputProps={{ ...params.InputProps, style: { fontSize: 11, fontFamily: 'Nunito Sans, sans-serif' } }}
                                        />}
d.arizona's avatar
d.arizona committed
623 624 625 626
                                    value={this.state.role}
                                />
                            </div>
                        </div>
d.arizona's avatar
d.arizona committed
627 628 629 630 631
                    </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
632 633 634
                                <DatePicker
                                    margin="normal"
                                    id="startDate"
635
                                    label="Valid From"
d.arizona's avatar
d.arizona committed
636
                                    format="dd-MM-yyyy"
d.arizona's avatar
d.arizona committed
637
                                    value={this.state.tempData === null ? null : this.state.tempData.start_date}
d.arizona's avatar
d.arizona committed
638 639 640 641 642 643
                                    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
644 645 646 647 648 649 650 651 652 653 654 655 656
                                    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
657
                                    style={{ padding: 0, margin: 0, width: '100%' }}
d.arizona's avatar
d.arizona committed
658 659 660
                                />
                            </div>
                        </div>
d.arizona's avatar
d.arizona committed
661

d.arizona's avatar
d.arizona committed
662 663
                        <div className="column-2">
                            <div className="margin-bottom-20px">
d.arizona's avatar
d.arizona committed
664 665 666
                                <DatePicker
                                    margin="normal"
                                    id="endDate"
667
                                    label="Valid To"
d.arizona's avatar
d.arizona committed
668
                                    format="dd-MM-yyyy"
d.arizona's avatar
d.arizona committed
669
                                    value={this.state.tempData === null ? null : this.state.tempData.end_date}
d.arizona's avatar
d.arizona committed
670 671
                                    error={this.state.errorEndDate}
                                    helperText={this.state.msgErrorED}
d.arizona's avatar
d.arizona committed
672
                                    minDate={this.state.tempData === null ? null : this.state.tempData.start_date}
d.arizona's avatar
d.arizona committed
673 674 675 676
                                    onChange={(e) => this.handleChange(e, 'end_date')}
                                    KeyboardButtonProps={{
                                        'aria-label': 'change date',
                                    }}
a.bairuha's avatar
a.bairuha committed
677 678 679 680 681 682 683 684 685 686 687 688 689
                                    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
690
                                    style={{ padding: 0, margin: 0, width: '100%' }}
d.arizona's avatar
d.arizona committed
691 692 693 694 695 696 697 698 699 700 701 702 703 704 705
                                />
                            </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">
                                <TextField
                                    style={{ width: '100%' }}
                                    id="status"
                                    label="Status"
                                    disabled
                                    // id="outlined-read-only-input"
                                    variant="filled"
Deni Rinaldi's avatar
Deni Rinaldi committed
706
                                    value={this.state.tempData === null ? '' : this.state.tempData.status}
a.bairuha's avatar
a.bairuha committed
707 708 709 710 711 712 713 714 715 716 717 718 719
                                    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
720 721 722 723 724 725 726 727 728
                                >
                                    {/* {periode.map((option) => (
                                        <MenuItem key={option.value} value={option.value}>
                                            {option.label}
                                        </MenuItem>
                                    ))} */}
                                </TextField>
                            </div>
                        </div>
d.arizona's avatar
d.arizona committed
729 730 731 732 733 734 735 736 737 738 739

                        <div className="column-2">
                            <div className="margin-bottom-20px">
                                <TextField
                                    style={{ width: '100%' }}
                                    id="is_expired"
                                    name="is_expired"
                                    label="Expired"
                                    disabled
                                    // id="outlined-read-only-input"
                                    variant="filled"
Deni Rinaldi's avatar
Deni Rinaldi committed
740
                                    value={this.state.tempData === null ? '' : this.state.tempData.is_expired}
a.bairuha's avatar
a.bairuha committed
741 742 743 744 745 746 747 748 749 750 751 752 753
                                    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
754 755 756 757 758 759 760 761 762
                                >
                                    {/* {periode.map((option) => (
                                        <MenuItem key={option.value} value={option.value}>
                                            {option.label}
                                        </MenuItem>
                                    ))} */}
                                </TextField>
                            </div>
                        </div>
d.arizona's avatar
d.arizona committed
763
                    </div>
a.bairuha's avatar
a.bairuha committed
764
                    <div style={{ flexDirection: 'column', display: 'flex', paddingLeft: 30, paddingRight: 30 }}>
a.bairuha's avatar
a.bairuha committed
765 766
                        <Typography style={{ fontSize: 11 }}>{`Created By  : ${this.state.tempData === null ? '' : this.state.tempData.created}`}</Typography>
                        <Typography style={{ fontSize: 11 }}>{`Updated By  : ${this.state.tempData === null ? '' : this.state.tempData.updated}`}</Typography>
d.arizona's avatar
d.arizona committed
767
                    </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
768 769
                    <Divider style={{ margin: 20 }} />
                    <div style={{ paddingLeft: 20, paddingRight: 20 }}>
d.arizona's avatar
d.arizona committed
770
                        <h5>Authorization Company</h5>
Deni Rinaldi's avatar
Deni Rinaldi committed
771 772 773
                        <div style={{ paddingLeft: 10, overflow: 'scroll', height: '25vh' }}>
                            {this.state.listCompany.map((item, index) => {
                                return (
d.arizona's avatar
d.arizona committed
774
                                    <div>
d.arizona's avatar
d.arizona committed
775 776
                                        {/* <ul>
                                            <li> */}
Deni Rinaldi's avatar
Deni Rinaldi committed
777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801
                                        <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', justifyContent: 'flex-start' }}>
                                            {item.children.length > 0 && <span onClick={() => this.handleCollapse(item)} style={{ marginLeft: 7, marginRight: 2 }}>
                                                {item.collapse ? <RemoveIcon color={'action'} fontSize={'small'} /> : <AddIcon color={'action'} fontSize={'small'} />}
                                            </span>}
                                            <span>
                                                {this.state.role ? this.state.role.role_id === 1 ?
                                                    <CustomCheckboxDisabled
                                                        disabled={true}
                                                        checked={true}
                                                    // onChange={() => this.handleItemClick(item)}
                                                    /> :
                                                    <CustomCheckbox
                                                        checked={this.handleItemChecked(item)}
                                                        onChange={() => this.handleItemClick(item)}
                                                    /> :
                                                    <CustomCheckbox
                                                        checked={this.handleItemChecked(item)}
                                                        onChange={() => this.handleItemClick(item)}
                                                    />
                                                }
                                            </span>
                                            <Typography style={{ fontSize: 12 }}>{titleCase(item.company_name)}</Typography>
                                        </div>
                                        {!R.isNil(item.children) && this.renderChildren(item)}
                                        {/* </li>
d.arizona's avatar
d.arizona committed
802
                                        </ul> */}
d.arizona's avatar
d.arizona committed
803 804 805 806
                                    </div>
                                )
                            })}
                        </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
807

d.arizona's avatar
d.arizona committed
808 809 810
                    </div>
                    <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
811 812
                            <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
813
                                    <span style={{ color: '#354960', fontSize: 11 }}>Cancel</span>
d.arizona's avatar
d.arizona committed
814 815
                                </div>
                            </button>
d.arizona's avatar
d.arizona committed
816
                        </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
817
                        <div className="column-2" style={{ display: 'flex', justifyContent: 'flex-end', alignItems: 'center' }}>
d.arizona's avatar
d.arizona committed
818 819
                            <button onClick={() => this.validasi()}>
                                <div style={{ width: 102, height: 30, backgroundColor: '#354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center' }}>
d.arizona's avatar
d.arizona committed
820
                                    <span style={{ color: '#fff', fontSize: 11 }}>Save</span>
d.arizona's avatar
d.arizona committed
821 822
                                </div>
                            </button>
d.arizona's avatar
d.arizona committed
823 824 825 826 827 828 829
                        </div>
                    </div>
                </div>
            </div>
        );
    }
}