EditUser.js 42.3 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
            listCompany: [],
            selectedIndex: 0,
            errorFullname: false,
            errorEmail: false,
            errorRoleName: false,
            errorStartDate: false,
            errorEndDate: false,
Riri Novita's avatar
Riri Novita committed
57
            errorNotification: false,
d.arizona's avatar
d.arizona committed
58 59 60 61 62
            msgErrorFN: '',
            msgErrorEM: '',
            msgErrorRN: '',
            msgErrorSD: '',
            msgErrorED: '',
Riri Novita's avatar
Riri Novita committed
63
            msgErrorNotification: '',
a.bairuha's avatar
a.bairuha committed
64 65
            alert: false,
            tipeAlert: '',
Riri Novita's avatar
Riri Novita committed
66 67 68 69 70 71 72 73 74 75 76 77
            messageAlert: '',
            notification: null,
            listNotification: [
                {
                    "id": 0,
                    "value": "No"
                },
                {
                    "id": 1,
                    "value": "Yes"
                }
            ],
d.arizona's avatar
d.arizona committed
78 79 80 81
        }
    }

    handleChecked() {
Deni Rinaldi's avatar
Deni Rinaldi committed
82
        this.setState({ checked: !this.state.checked })
d.arizona's avatar
d.arizona committed
83
    }
Deni Rinaldi's avatar
Deni Rinaldi committed
84

d.arizona's avatar
d.arizona committed
85
    componentDidMount() {
d.arizona's avatar
d.arizona committed
86
        this.getDetailUser()
d.arizona's avatar
d.arizona committed
87
        this.getPerusahaan()
d.arizona's avatar
d.arizona committed
88 89
    }

d.arizona's avatar
d.arizona committed
90
    handleChange(e, type) {
d.arizona's avatar
d.arizona committed
91
        let data = this.state
d.arizona's avatar
d.arizona committed
92
        let isDate = type !== '' ? true : false
d.arizona's avatar
d.arizona committed
93
        if (isDate && type === 'start_date') {
Deni Rinaldi's avatar
Deni Rinaldi committed
94 95
            this.setState({
                ...data, tempData: { ...this.state.tempData, start_date: format(e, 'yyyy-MM-dd'), end_date: null },
d.arizona's avatar
d.arizona committed
96
                errorFullname: false,
Deni Rinaldi's avatar
Deni Rinaldi committed
97
                errorEmail: false,
d.arizona's avatar
d.arizona committed
98 99 100
                errorRoleName: false,
                errorStartDate: false,
                errorEndDate: false,
Riri Novita's avatar
Riri Novita committed
101
                errorNotification: false,
d.arizona's avatar
d.arizona committed
102 103
                msgErrorFN: '',
                msgErrorEM: '',
d.arizona's avatar
d.arizona committed
104 105 106
                msgErrorRN: '',
                msgErrorSD: '',
                msgErrorED: '',
Riri Novita's avatar
Riri Novita committed
107
                msgErrorNotification: '',
d.arizona's avatar
d.arizona committed
108
            })
d.arizona's avatar
d.arizona committed
109
        } else if (isDate && type === 'end_date') {
Deni Rinaldi's avatar
Deni Rinaldi committed
110 111
            this.setState({
                ...data, tempData: { ...this.state.tempData, end_date: format(e, 'yyyy-MM-dd') },
d.arizona's avatar
d.arizona committed
112
                errorFullname: false,
Deni Rinaldi's avatar
Deni Rinaldi committed
113
                errorEmail: false,
d.arizona's avatar
d.arizona committed
114 115 116
                errorRoleName: false,
                errorStartDate: false,
                errorEndDate: false,
Riri Novita's avatar
Riri Novita committed
117
                errorNotification: false,
d.arizona's avatar
d.arizona committed
118 119
                msgErrorFN: '',
                msgErrorEM: '',
d.arizona's avatar
d.arizona committed
120 121 122
                msgErrorRN: '',
                msgErrorSD: '',
                msgErrorED: '',
Riri Novita's avatar
Riri Novita committed
123
                msgErrorNotification: '',
d.arizona's avatar
d.arizona committed
124 125
            })
        } else {
Deni Rinaldi's avatar
Deni Rinaldi committed
126 127
            this.setState({
                ...data, tempData: { ...this.state.tempData, [e.target.name]: e.target.value },
d.arizona's avatar
d.arizona committed
128
                errorFullname: false,
Deni Rinaldi's avatar
Deni Rinaldi committed
129
                errorEmail: false,
d.arizona's avatar
d.arizona committed
130 131 132
                errorRoleName: false,
                errorStartDate: false,
                errorEndDate: false,
Riri Novita's avatar
Riri Novita committed
133
                errorNotification: false,
d.arizona's avatar
d.arizona committed
134 135
                msgErrorFN: '',
                msgErrorEM: '',
d.arizona's avatar
d.arizona committed
136 137
                msgErrorRN: '',
                msgErrorSD: '',
d.arizona's avatar
d.arizona committed
138
                msgErrorED: '',
Riri Novita's avatar
Riri Novita committed
139
                msgErrorNotification: '',
d.arizona's avatar
d.arizona committed
140 141
            })
        }
d.arizona's avatar
d.arizona committed
142 143
    }

a.bairuha's avatar
a.bairuha committed
144
    clearError() {
d.arizona's avatar
d.arizona committed
145 146 147 148 149 150 151 152 153
        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) {
Riri Novita's avatar
Riri Novita committed
154
                    item.children.map((items, indexs) => {
d.arizona's avatar
d.arizona committed
155 156 157 158 159 160 161 162 163 164 165 166
                        handlePushChild(items)
                    })
                }
            }
        }

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

        let uniqueCompany = company.filter((val, id, array) => {
Riri Novita's avatar
Riri Novita committed
167
            return array.indexOf(val) == id;
d.arizona's avatar
d.arizona committed
168
        });
Riri Novita's avatar
Riri Novita committed
169
        company = this.state.role == null ? [] : this.state.role.role_id === 1 ? uniqueCompany : []
d.arizona's avatar
d.arizona committed
170
        // console.log(uniqueCompany)
Riri Novita's avatar
Riri Novita committed
171

a.bairuha's avatar
a.bairuha committed
172 173 174 175 176 177
        this.setState({
            errorFullname: false,
            errorEmail: false,
            errorRoleName: false,
            errorStartDate: false,
            errorEndDate: false,
Riri Novita's avatar
Riri Novita committed
178
            errorNotification: false,
a.bairuha's avatar
a.bairuha committed
179 180 181 182 183
            msgErrorFN: '',
            msgErrorEM: '',
            msgErrorRN: '',
            msgErrorSD: '',
            msgErrorED: '',
Riri Novita's avatar
Riri Novita committed
184
            msgErrorNotification: '',
d.arizona's avatar
d.arizona committed
185
            company
a.bairuha's avatar
a.bairuha committed
186 187 188
        })
    }

d.arizona's avatar
d.arizona committed
189 190
    getDetailUser() {
        api.create().getDetailUser(this.state.paramsId).then((response) => {
Riri Novita's avatar
Riri Novita committed
191
            // console.log(response);
a.bairuha's avatar
a.bairuha committed
192 193 194
            if (response.data) {
                if (response.ok) {
                    if (response.data.status === 'success') {
Riri Novita's avatar
Riri Novita committed
195 196 197
                        let index = this.state.listNotification.findIndex((val) => val.id === response.data.data.mail_notif)
                        this.setState({ tempData: response.data.data, company: response.data.data.company, notification: index === -1 ? null : this.state.listNotification[index] }, () =>
                            this.getRole(response.data.data.role_id))
a.bairuha's avatar
a.bairuha committed
198
                    } else {
a.bairuha's avatar
a.bairuha committed
199
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
d.arizona's avatar
d.arizona committed
200
                            if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
a.bairuha's avatar
a.bairuha committed
201 202 203 204 205 206
                                setTimeout(() => {
                                    localStorage.removeItem(Constant.TOKEN)
                                    window.location.reload();
                                }, 1000);
                            }
                        })
a.bairuha's avatar
a.bairuha committed
207 208 209 210
                    }
                } else {
                    this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
                }
d.arizona's avatar
d.arizona committed
211
            } else {
a.bairuha's avatar
a.bairuha committed
212
                this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
d.arizona's avatar
d.arizona committed
213 214 215 216
            }
        })
    }

a.bairuha's avatar
a.bairuha committed
217 218 219 220 221
    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
222
    validasi() {
a.bairuha's avatar
a.bairuha committed
223 224 225
        var isEmail = this.isEmail(this.state.tempData.email)
        // console.log(this.state.tempData)

d.arizona's avatar
d.arizona committed
226
        if (R.isEmpty(this.state.tempData.fullname)) {
d.arizona's avatar
d.arizona committed
227
            this.setState({ errorFullname: true, msgErrorFN: 'Full Name Cannot be Empty' })
d.arizona's avatar
d.arizona committed
228
        } else if (R.isEmpty(this.state.tempData.email)) {
d.arizona's avatar
d.arizona committed
229
            this.setState({ errorEmail: true, msgErrorEM: 'Email Cannot be Empty' })
a.bairuha's avatar
a.bairuha committed
230
        } else if (!isEmail) {
d.arizona's avatar
d.arizona committed
231
            this.setState({ errorEmail: true, msgErrorEM: 'Please enter a valid email address' })
a.bairuha's avatar
a.bairuha committed
232
        } else if (R.isNil(this.state.role)) {
d.arizona's avatar
d.arizona committed
233
            this.setState({ errorRoleName: true, msgErrorRN: 'Role Cannot be Empty' })
d.arizona's avatar
d.arizona committed
234
        } else if (R.isNil(this.state.tempData.start_date)) {
d.arizona's avatar
d.arizona committed
235
            this.setState({ errorStartDate: true, msgErrorSD: 'Valid From Cannot be Empty' })
d.arizona's avatar
d.arizona committed
236
        } else if (R.isNil(this.state.tempData.end_date)) {
d.arizona's avatar
d.arizona committed
237
            this.setState({ errorEndDate: true, msgErrorED: 'Valid To Cannot be Empty' })
d.arizona's avatar
d.arizona committed
238 239
        } else if (this.state.company.length < 1) {
            this.setState({ alert: true, messageAlert: 'Authorization company cannot be empty', tipeAlert: 'warning' })
Riri Novita's avatar
Riri Novita committed
240 241
        } else if (R.isNil(this.state.notification)) {
            this.setState({ errorNotification: true, msgErrorNotification: 'Email Notification Maintenance Cannot be Empty' })
Deni Rinaldi's avatar
Deni Rinaldi committed
242
        }
d.arizona's avatar
d.arizona committed
243 244 245 246 247 248
        // else if (this.state.privileges.length < 1) {
        //     alert('Hak Akses belum di pilih !!')
        // } 
        else {
            this.updateUser()
        }
d.arizona's avatar
d.arizona committed
249
    }
d.arizona's avatar
d.arizona committed
250

Riri Novita's avatar
Riri Novita committed
251
    updateUser() {
d.arizona's avatar
d.arizona committed
252
        let payload = {
d.arizona's avatar
d.arizona committed
253 254 255 256 257 258
            "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,
Riri Novita's avatar
Riri Novita committed
259 260
            "end_date": this.state.tempData.end_date,
            "mail_notif": this.state.notification.id
d.arizona's avatar
d.arizona committed
261
        }
Deni Rinaldi's avatar
Deni Rinaldi committed
262
        this.props.updateUser(payload)
d.arizona's avatar
d.arizona committed
263 264
    }

265
    getRole(id) {
266
        api.create().getRoleActive().then((response) => {
a.bairuha's avatar
a.bairuha committed
267 268 269 270 271 272 273 274 275 276 277 278 279 280
            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
281

282
                        let index = roleData.findIndex((val) => val.role_id === id)
Deni Rinaldi's avatar
Deni Rinaldi committed
283
                        // console.log(index)
a.bairuha's avatar
a.bairuha committed
284
                        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
285
                    } else {
a.bairuha's avatar
a.bairuha committed
286
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
d.arizona's avatar
d.arizona committed
287
                            if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
a.bairuha's avatar
a.bairuha committed
288 289 290 291 292 293
                                setTimeout(() => {
                                    localStorage.removeItem(Constant.TOKEN)
                                    window.location.reload();
                                }, 1000);
                            }
                        })
a.bairuha's avatar
a.bairuha committed
294 295 296 297
                    }
                } else {
                    this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
                }
d.arizona's avatar
d.arizona committed
298
            } else {
a.bairuha's avatar
a.bairuha committed
299
                this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
d.arizona's avatar
d.arizona committed
300
            }
d.arizona's avatar
d.arizona committed
301
        })
d.arizona's avatar
d.arizona committed
302 303
    }

d.arizona's avatar
d.arizona committed
304 305
    getPerusahaan() {
        api.create().getPerusahaanHierarki().then((response) => {
Deni Rinaldi's avatar
Deni Rinaldi committed
306
            if (response.data) {
a.bairuha's avatar
a.bairuha committed
307 308
                if (response.ok) {
                    if (response.data.status === 'success') {
Riri Novita's avatar
Riri Novita committed
309 310
                        let dataBaru = response.data.data.map((item, index) => {
                            return { ...item, check: false }
d.arizona's avatar
d.arizona committed
311 312
                        })
                        this.setState({ listCompany: dataBaru })
a.bairuha's avatar
a.bairuha committed
313
                    } else {
a.bairuha's avatar
a.bairuha committed
314
                        this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
d.arizona's avatar
d.arizona committed
315
                            if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
a.bairuha's avatar
a.bairuha committed
316 317 318 319 320 321
                                setTimeout(() => {
                                    localStorage.removeItem(Constant.TOKEN)
                                    window.location.reload();
                                }, 1000);
                            }
                        })
a.bairuha's avatar
a.bairuha committed
322 323 324
                    }
                } else {
                    this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
Deni Rinaldi's avatar
Deni Rinaldi committed
325 326
                }
            } else {
a.bairuha's avatar
a.bairuha committed
327
                this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
d.arizona's avatar
d.arizona committed
328 329 330 331 332
            }
        })
    }

    handleItemChecked(item) {
d.arizona's avatar
d.arizona committed
333
        let indexID = this.state.company.findIndex((val) => val === item.id)
d.arizona's avatar
d.arizona committed
334
        return indexID === -1 ? false : true
d.arizona's avatar
d.arizona committed
335 336 337
    }

    handleItemClick(item) {
d.arizona's avatar
d.arizona committed
338
        let indexID = this.state.company.findIndex((val) => val === item.id)
d.arizona's avatar
d.arizona committed
339
        let company = this.state.company
d.arizona's avatar
d.arizona committed
340 341 342 343 344 345 346
        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) {
Riri Novita's avatar
Riri Novita committed
347
                    item.children.map((items, indexs) => {
d.arizona's avatar
d.arizona committed
348 349
                        handlePushChild(items)
                    })
d.arizona's avatar
d.arizona committed
350 351
                }
            }
d.arizona's avatar
d.arizona committed
352
        }
d.arizona's avatar
d.arizona committed
353

d.arizona's avatar
d.arizona committed
354 355 356 357 358
        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
359 360
            if (item.children !== null) {
                if (item.children.length > 0) {
Riri Novita's avatar
Riri Novita committed
361
                    item.children.map((items, indexs) => {
d.arizona's avatar
d.arizona committed
362
                        handleSpliceChild(items)
d.arizona's avatar
d.arizona committed
363 364 365
                    })
                }
            }
d.arizona's avatar
d.arizona committed
366 367 368 369 370 371
        }

        if (indexID === -1) {
            company.push(item.id)
            if (item.children !== null) {
                if (item.children.length > 0) {
Riri Novita's avatar
Riri Novita committed
372
                    item.children.map((items, indexs) => {
d.arizona's avatar
d.arizona committed
373 374
                        handlePushChild(items)
                    })
d.arizona's avatar
d.arizona committed
375 376 377
                }
            }

d.arizona's avatar
d.arizona committed
378 379
        } else {
            company.splice(indexID, 1)
d.arizona's avatar
d.arizona committed
380 381
            if (item.children !== null) {
                if (item.children.length > 0) {
Riri Novita's avatar
Riri Novita committed
382
                    item.children.map((items, indexs) => {
d.arizona's avatar
d.arizona committed
383
                        handleSpliceChild(items)
d.arizona's avatar
d.arizona committed
384
                    })
d.arizona's avatar
d.arizona committed
385 386
                }
            }
d.arizona's avatar
d.arizona committed
387
        }
Riri Novita's avatar
Riri Novita committed
388

d.arizona's avatar
d.arizona committed
389
        // console.log(company)
Riri Novita's avatar
Riri Novita committed
390
        this.setState({ company })
d.arizona's avatar
d.arizona committed
391
    }
d.arizona's avatar
d.arizona committed
392

Deni Rinaldi's avatar
Deni Rinaldi committed
393 394 395 396 397
    renderChildren = (item, pad) => {
        let padding = null
        if (pad !== undefined) {
            padding = pad
        } else {
d.arizona's avatar
d.arizona committed
398
            padding = 30
Deni Rinaldi's avatar
Deni Rinaldi committed
399
        }
d.arizona's avatar
d.arizona committed
400
        return (
a.bairuha's avatar
a.bairuha committed
401 402 403 404 405 406 407
            <div>
                {item.children.length > 0 && (
                    <ul>
                        {item.children.map((data, index) => {
                            return (
                                // <li>
                                <Collapse key={index} timeout="auto" unmountOnExit in={item.collapse}>
Riri Novita's avatar
Riri Novita committed
408
                                    <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
409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434
                                        {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
435
                                        </span>
a.bairuha's avatar
a.bairuha committed
436 437
                                        <Typography style={{ fontSize: 12 }}>{titleCase(data.company_name)}</Typography>
                                    </div>
d.arizona's avatar
d.arizona committed
438
                                    {!R.isNil(data.children) && this.renderChildren(data, padding + 30)}
a.bairuha's avatar
a.bairuha committed
439 440 441 442 443 444 445
                                </Collapse>
                                // </li>
                            )
                        })}
                    </ul>
                )}
            </div>
d.arizona's avatar
d.arizona committed
446 447 448
        )
    }

d.arizona's avatar
d.arizona committed
449
    handleCollapse(item) {
Deni Rinaldi's avatar
Deni Rinaldi committed
450
        let path = this.searchIt({ children: this.state.listCompany }, item.id)
d.arizona's avatar
d.arizona committed
451 452
        let listCompany = this.state.listCompany
        let arrayPath = []
d.arizona's avatar
d.arizona committed
453

d.arizona's avatar
d.arizona committed
454 455
        if (path.length > 1) {
            arrayPath = path.split('-');
Deni Rinaldi's avatar
Deni Rinaldi committed
456
            arrayPath = arrayPath.map((item) => { return item })
d.arizona's avatar
d.arizona committed
457 458 459
        } else {
            arrayPath.push(path)
        }
d.arizona's avatar
d.arizona committed
460

d.arizona's avatar
d.arizona committed
461 462
        let pathSelect = null
        if (arrayPath.length == 1) {
Deni Rinaldi's avatar
Deni Rinaldi committed
463
            pathSelect = listCompany[arrayPath[0]]
d.arizona's avatar
d.arizona committed
464
        } else if (arrayPath.length == 2) {
Deni Rinaldi's avatar
Deni Rinaldi committed
465
            pathSelect = listCompany[arrayPath[0]].children[arrayPath[1]]
d.arizona's avatar
d.arizona committed
466
        } else if (arrayPath.length == 3) {
Deni Rinaldi's avatar
Deni Rinaldi committed
467
            pathSelect = listCompany[arrayPath[0]].children[arrayPath[1]].children[arrayPath[2]]
d.arizona's avatar
d.arizona committed
468
        } else if (arrayPath.length == 4) {
Deni Rinaldi's avatar
Deni Rinaldi committed
469
            pathSelect = listCompany[arrayPath[0]].children[arrayPath[1]].children[arrayPath[2]].children[arrayPath[3]]
d.arizona's avatar
d.arizona committed
470
        } else if (arrayPath.length == 5) {
Deni Rinaldi's avatar
Deni Rinaldi committed
471
            pathSelect = listCompany[arrayPath[0]].children[arrayPath[1]].children[arrayPath[2]].children[arrayPath[3]].children[arrayPath[4]]
d.arizona's avatar
d.arizona committed
472
        } else if (arrayPath.length == 6) {
Deni Rinaldi's avatar
Deni Rinaldi committed
473
            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
474
        } else if (arrayPath.length == 7) {
Deni Rinaldi's avatar
Deni Rinaldi committed
475
            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
476
        }
d.arizona's avatar
d.arizona committed
477

d.arizona's avatar
d.arizona committed
478 479
        pathSelect.collapse = !pathSelect.collapse
        // console.log(pathSelect.collapse)
Deni Rinaldi's avatar
Deni Rinaldi committed
480
        this.setState({ listCompany }, () => console.log(pathSelect))
d.arizona's avatar
d.arizona committed
481
    }
d.arizona's avatar
d.arizona committed
482 483

    searchIt = (node, search, path = '', position = 0) => {
Deni Rinaldi's avatar
Deni Rinaldi committed
484 485
        if (node.id && node.id === search) { return path !== '' ? `${path}-${position}` : position; }
        if (!node.children) { return false }
d.arizona's avatar
d.arizona committed
486
        const index = node.children.findIndex((x) => x.id && x.id === search);
d.arizona's avatar
d.arizona committed
487
        if (index >= 0) {
Deni Rinaldi's avatar
Deni Rinaldi committed
488
            return path !== '' ? `${path}-${index}` : index;
d.arizona's avatar
d.arizona committed
489
        }
d.arizona's avatar
d.arizona committed
490
        for (let i = 0; i < node.children.length; i++) {
Deni Rinaldi's avatar
Deni Rinaldi committed
491 492 493 494
            const result = this.searchIt(node.children[i], search, path !== '' ? `${path}-${i}` : i, i);
            if (result) {
                return result;
            }
d.arizona's avatar
d.arizona committed
495 496 497 498
        }
        return false;
    };

a.bairuha's avatar
a.bairuha committed
499
    closeAlert() {
Riri Novita's avatar
Riri Novita committed
500
        this.setState({ alert: false })
a.bairuha's avatar
a.bairuha committed
501 502
    }

d.arizona's avatar
d.arizona committed
503 504 505
    render() {
        return (
            <div className="test app-popup-show">
a.bairuha's avatar
a.bairuha committed
506 507 508 509 510
                <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
511
                <div className="popup-content background-white border-radius" style={{ borderRadius: 8 }}>
512
                    <div className="popup-panel grid grid-2x main-color" style={{ height: 64, borderTopRightRadius: 8, borderTopLeftRadius: 8 }}>
d.arizona's avatar
d.arizona committed
513 514
                        <div className="col-1" style={{ maxWidth: "inherit", display: 'flex', alignItems: 'center' }}>
                            <div className="popup-title">
d.arizona's avatar
d.arizona committed
515
                                <span style={{ color: '#fff', fontSize: 16, fontWeight: 'bold' }}>Edit Data</span>
d.arizona's avatar
d.arizona committed
516 517 518 519 520 521 522 523
                            </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
524
                                <img src={Images.close} />
d.arizona's avatar
d.arizona committed
525 526 527 528 529 530
                            </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
531
                            <div className="">
d.arizona's avatar
d.arizona committed
532 533 534 535 536 537 538
                                <TextField
                                    style={{ width: '100%' }}
                                    id="id"
                                    label="ID"
                                    disabled
                                    // id="outlined-read-only-input"
                                    variant="filled"
Deni Rinaldi's avatar
Deni Rinaldi committed
539
                                    value={this.state.tempData === null ? '' : this.state.tempData.user_id}
d.arizona's avatar
d.arizona committed
540
                                    onChange={(e) => null}
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',
                                        }
                                    }}
d.arizona's avatar
d.arizona committed
554 555 556 557 558 559 560 561 562 563 564
                                >
                                    {/* {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
565 566
                            <div className="">
                                <TextField
Deni Rinaldi's avatar
Deni Rinaldi committed
567 568 569
                                    style={{ width: '100%', marginTop: 7 }}
                                    id="fullname"
                                    name="fullname"
d.arizona's avatar
d.arizona committed
570
                                    label="Full Name"
Deni Rinaldi's avatar
Deni Rinaldi committed
571 572 573 574 575
                                    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
576 577 578 579 580 581 582 583 584 585 586 587 588
                                    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
589 590 591 592 593 594 595
                                />
                            </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
596 597
                            <div className="margin-bottom-20px">
                                <TextField
Deni Rinaldi's avatar
Deni Rinaldi committed
598 599 600 601 602 603 604 605
                                    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
606 607 608 609 610 611 612 613 614 615 616 617 618
                                    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
619 620 621
                                />
                            </div>
                        </div>
d.arizona's avatar
d.arizona committed
622 623 624 625 626 627

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

Riri Novita's avatar
Riri Novita committed
631 632 633 634 635
                                    renderInput={(params) => <TextField
                                        {...params}
                                        label="Role"
                                        margin="normal"
                                        style={{ marginTop: 7 }}
a.bairuha's avatar
a.bairuha committed
636 637 638 639 640 641 642 643 644 645 646
                                        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' } }}
Riri Novita's avatar
Riri Novita committed
647
                                    />}
d.arizona's avatar
d.arizona committed
648 649 650 651
                                    value={this.state.role}
                                />
                            </div>
                        </div>
d.arizona's avatar
d.arizona committed
652 653 654 655 656
                    </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
657 658 659
                                <DatePicker
                                    margin="normal"
                                    id="startDate"
660
                                    label="Valid From"
d.arizona's avatar
d.arizona committed
661
                                    format="dd-MM-yyyy"
d.arizona's avatar
d.arizona committed
662
                                    value={this.state.tempData === null ? null : this.state.tempData.start_date}
d.arizona's avatar
d.arizona committed
663 664 665 666 667 668
                                    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
669 670 671 672 673 674 675 676 677 678 679 680 681
                                    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
682
                                    style={{ padding: 0, margin: 0, width: '100%' }}
d.arizona's avatar
d.arizona committed
683 684 685
                                />
                            </div>
                        </div>
d.arizona's avatar
d.arizona committed
686

d.arizona's avatar
d.arizona committed
687 688
                        <div className="column-2">
                            <div className="margin-bottom-20px">
d.arizona's avatar
d.arizona committed
689 690 691
                                <DatePicker
                                    margin="normal"
                                    id="endDate"
692
                                    label="Valid To"
d.arizona's avatar
d.arizona committed
693
                                    format="dd-MM-yyyy"
d.arizona's avatar
d.arizona committed
694
                                    value={this.state.tempData === null ? null : this.state.tempData.end_date}
d.arizona's avatar
d.arizona committed
695 696
                                    error={this.state.errorEndDate}
                                    helperText={this.state.msgErrorED}
d.arizona's avatar
d.arizona committed
697
                                    minDate={this.state.tempData === null ? null : this.state.tempData.start_date}
d.arizona's avatar
d.arizona committed
698 699 700 701
                                    onChange={(e) => this.handleChange(e, 'end_date')}
                                    KeyboardButtonProps={{
                                        'aria-label': 'change date',
                                    }}
a.bairuha's avatar
a.bairuha committed
702 703 704 705 706 707 708 709 710 711 712 713 714
                                    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
715
                                    style={{ padding: 0, margin: 0, width: '100%' }}
d.arizona's avatar
d.arizona committed
716 717 718 719 720
                                />
                            </div>
                        </div>
                    </div>

Riri Novita's avatar
Riri Novita committed
721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752
                    <div className="grid grid-2x grid-mobile-none gap-15px" style={{ paddingLeft: 20, paddingRight: 20 }}>
                        <div className="column-1">
                            <div className="margin-top-10px" style={{ padding: 10, borderRadius: 5 }}>
                                <Autocomplete
                                    debug
                                    id="tipe"
                                    options={this.state.listNotification}
                                    getOptionLabel={(option) => option.value}
                                    value={this.state.notification}
                                    onChange={(event, newInputValue) => this.setState({ notification: newInputValue }, () => this.clearError())}
                                    renderInput={(params) =>
                                        <TextField
                                            {...params}
                                            label="Email Notification Maintenance"
                                            margin="normal"
                                            style={{ marginTop: 7 }}
                                            InputProps={{ ...params.InputProps, style: { fontSize: 11 } }}
                                            InputLabelProps={{ style: { fontSize: 11, color: '#7e8085' } }}
                                            error={this.state.errorNotification}
                                            helperText={this.state.msgErrorNotification}
                                        />
                                    }

                                />
                            </div>
                        </div>

                        <div className="column-2">

                        </div>
                    </div>

d.arizona's avatar
d.arizona committed
753 754 755 756 757 758 759 760 761 762
                    <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
763
                                    value={this.state.tempData === null ? '' : this.state.tempData.status}
a.bairuha's avatar
a.bairuha committed
764 765 766 767 768 769 770 771 772 773 774 775 776
                                    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
777 778 779 780 781 782 783 784 785
                                >
                                    {/* {periode.map((option) => (
                                        <MenuItem key={option.value} value={option.value}>
                                            {option.label}
                                        </MenuItem>
                                    ))} */}
                                </TextField>
                            </div>
                        </div>
d.arizona's avatar
d.arizona committed
786 787 788 789 790 791 792 793 794 795 796

                        <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
797
                                    value={this.state.tempData === null ? '' : this.state.tempData.is_expired}
a.bairuha's avatar
a.bairuha committed
798 799 800 801 802 803 804 805 806 807 808 809 810
                                    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
811 812 813 814 815 816 817 818 819
                                >
                                    {/* {periode.map((option) => (
                                        <MenuItem key={option.value} value={option.value}>
                                            {option.label}
                                        </MenuItem>
                                    ))} */}
                                </TextField>
                            </div>
                        </div>
d.arizona's avatar
d.arizona committed
820
                    </div>
a.bairuha's avatar
a.bairuha committed
821
                    <div style={{ flexDirection: 'column', display: 'flex', paddingLeft: 30, paddingRight: 30 }}>
syadziy's avatar
syadziy committed
822 823
                        <Typography style={{ fontSize: 11 }}>{`Created By  : ${this.state.tempData === null ? '' : (this.state.tempData.created === null ? '-' : this.state.tempData.created)}`}</Typography>
                        <Typography style={{ fontSize: 11 }}>{`Updated By  : ${this.state.tempData === null ? '' : (this.state.tempData.updated === null ? '-' : this.state.tempData.updated)}`}</Typography>
d.arizona's avatar
d.arizona committed
824
                    </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
825 826
                    <Divider style={{ margin: 20 }} />
                    <div style={{ paddingLeft: 20, paddingRight: 20 }}>
d.arizona's avatar
d.arizona committed
827
                        <h5>Authorization Company</h5>
Deni Rinaldi's avatar
Deni Rinaldi committed
828 829 830
                        <div style={{ paddingLeft: 10, overflow: 'scroll', height: '25vh' }}>
                            {this.state.listCompany.map((item, index) => {
                                return (
d.arizona's avatar
d.arizona committed
831
                                    <div>
d.arizona's avatar
d.arizona committed
832 833
                                        {/* <ul>
                                            <li> */}
Deni Rinaldi's avatar
Deni Rinaldi committed
834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858
                                        <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
859
                                        </ul> */}
d.arizona's avatar
d.arizona committed
860 861 862 863
                                    </div>
                                )
                            })}
                        </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
864

d.arizona's avatar
d.arizona committed
865 866 867
                    </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
868 869
                            <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
870
                                    <span style={{ color: '#354960', fontSize: 11 }}>Cancel</span>
d.arizona's avatar
d.arizona committed
871 872
                                </div>
                            </button>
d.arizona's avatar
d.arizona committed
873
                        </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
874
                        <div className="column-2" style={{ display: 'flex', justifyContent: 'flex-end', alignItems: 'center' }}>
d.arizona's avatar
d.arizona committed
875 876
                            <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
877
                                    <span style={{ color: '#fff', fontSize: 11 }}>Save</span>
d.arizona's avatar
d.arizona committed
878 879
                                </div>
                            </button>
d.arizona's avatar
d.arizona committed
880 881 882 883 884 885 886
                        </div>
                    </div>
                </div>
            </div>
        );
    }
}