|
|
|
@ -1,100 +1,111 @@
|
|
|
|
|
import React, { useEffect, useMemo, useState } from 'react'; |
|
|
|
|
import Timeline from 'react-calendar-timeline' |
|
|
|
|
import 'react-calendar-timeline/lib/Timeline.css' |
|
|
|
|
import { USER_VERSION_GANTT_SEARCH, BASE_SIMPRO_LUMEN, BASE_URL_GANTT } from '../../../const/ApiConst'; |
|
|
|
|
import axios from "../../../const/interceptorApi" |
|
|
|
|
import { Fab, Action } from 'react-tiny-fab'; |
|
|
|
|
import 'react-tiny-fab/dist/styles.css'; |
|
|
|
|
import React, { useEffect, useMemo, useState } from "react"; |
|
|
|
|
import Timeline from "react-calendar-timeline"; |
|
|
|
|
import "react-calendar-timeline/lib/Timeline.css"; |
|
|
|
|
import { |
|
|
|
|
USER_VERSION_GANTT_SEARCH, |
|
|
|
|
BASE_SIMPRO_LUMEN, |
|
|
|
|
BASE_URL_GANTT, |
|
|
|
|
} from "../../../const/ApiConst"; |
|
|
|
|
import axios from "../../../const/interceptorApi"; |
|
|
|
|
import { Fab, Action } from "react-tiny-fab"; |
|
|
|
|
import "react-tiny-fab/dist/styles.css"; |
|
|
|
|
import { useHistory } from "react-router-dom"; |
|
|
|
|
|
|
|
|
|
const token = localStorage.getItem("token") |
|
|
|
|
const token = localStorage.getItem("token"); |
|
|
|
|
const userId = parseInt(localStorage.getItem("user_id")); |
|
|
|
|
const HEADER = { |
|
|
|
|
headers: { |
|
|
|
|
"Content-Type": "application/json", |
|
|
|
|
"Authorization": `Bearer ${token}` |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Authorization: `Bearer ${token}`, |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
let roCount = 0; |
|
|
|
|
|
|
|
|
|
const Gantt = (props) => { |
|
|
|
|
const versionGanttId = props.match.params ? props.match.params.id : 0; |
|
|
|
|
const idProject = props.match.params.project ? props.match.params.project : 0; |
|
|
|
|
const timestamp = props.match.params.timestamp ? props.match.params.timestamp : 0; |
|
|
|
|
const timestamp = props.match.params.timestamp |
|
|
|
|
? props.match.params.timestamp |
|
|
|
|
: 0; |
|
|
|
|
|
|
|
|
|
const [ro, setRo] = useState(1) |
|
|
|
|
const [listUserGant, setListUserGantt] = useState([]) |
|
|
|
|
const [ready, setReady] = useState(false) |
|
|
|
|
const [ro, setRo] = useState(1); |
|
|
|
|
const [listUserGant, setListUserGantt] = useState([]); |
|
|
|
|
const [ready, setReady] = useState(false); |
|
|
|
|
let history = useHistory(); |
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
document.getElementsByClassName("breadcrumb-item active").innerHTML = "Gantt Project"; |
|
|
|
|
document.getElementsByClassName("breadcrumb-item active").innerHTML = |
|
|
|
|
"Gantt Project"; |
|
|
|
|
getDataUserGantt(); |
|
|
|
|
}, []); |
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
cekPermission(); |
|
|
|
|
}, [listUserGant]) |
|
|
|
|
}, [listUserGant]); |
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
}, [ro]) |
|
|
|
|
useEffect(() => {}, [ro]); |
|
|
|
|
|
|
|
|
|
const getDataUserGantt = async () => { |
|
|
|
|
const payload = { |
|
|
|
|
"columns": [ |
|
|
|
|
{ "name": "version_gantt_id", "logic_operator": "=", "value": versionGanttId, "operator": "AND" } |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
columns: [ |
|
|
|
|
{ |
|
|
|
|
name: "version_gantt_id", |
|
|
|
|
logic_operator: "=", |
|
|
|
|
value: versionGanttId, |
|
|
|
|
operator: "AND", |
|
|
|
|
}, |
|
|
|
|
], |
|
|
|
|
}; |
|
|
|
|
const result = await axios |
|
|
|
|
.post(USER_VERSION_GANTT_SEARCH, payload, HEADER) |
|
|
|
|
.then(res => res) |
|
|
|
|
.then((res) => res) |
|
|
|
|
.catch((error) => error.response); |
|
|
|
|
|
|
|
|
|
if (result && result.status == 200) { |
|
|
|
|
setUserGantt(result.data.data); |
|
|
|
|
} else { |
|
|
|
|
cekPermission() |
|
|
|
|
} |
|
|
|
|
cekPermission(); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const setUserGantt = (data) => { |
|
|
|
|
let newTargetKeys = [] |
|
|
|
|
let newTargetKeys = []; |
|
|
|
|
data.map((val, index) => { |
|
|
|
|
newTargetKeys.push(val.user_id) |
|
|
|
|
newTargetKeys.push(val.user_id); |
|
|
|
|
}); |
|
|
|
|
setListUserGantt(newTargetKeys) |
|
|
|
|
} |
|
|
|
|
setListUserGantt(newTargetKeys); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const handleRedirect = () => { |
|
|
|
|
history.push("/dashboard-project/" + idProject + "/" + versionGanttId); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const cekPermission = () => { |
|
|
|
|
let check = listUserGant.includes(userId) |
|
|
|
|
let check = listUserGant.includes(userId); |
|
|
|
|
if (check) { |
|
|
|
|
setRo(0) |
|
|
|
|
setRo(0); |
|
|
|
|
} else { |
|
|
|
|
setRo(1) |
|
|
|
|
setRo(1); |
|
|
|
|
} |
|
|
|
|
if (roCount >= 1) { |
|
|
|
|
setReady(true) |
|
|
|
|
setReady(true); |
|
|
|
|
} |
|
|
|
|
roCount = roCount + 1; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
const RenderGantt = () => ( |
|
|
|
|
<iframe |
|
|
|
|
id="frame-gantt" |
|
|
|
|
src={`https://adw-gantt.ospro.id/edit-mode/index.html?base_url=${BASE_SIMPRO_LUMEN}&gantt_id=${versionGanttId}&proyek_id=${idProject}&token=${token}&ro=${ro}×tamp=${timestamp}`} |
|
|
|
|
src={`http://localhost:8444/adw-gantt/edit-mode/index.html?base_url=${BASE_SIMPRO_LUMEN}&gantt_id=${versionGanttId}&proyek_id=${idProject}&token=${token}&ro=${ro}×tamp=${timestamp}`} |
|
|
|
|
style={{ |
|
|
|
|
width: '100%', |
|
|
|
|
height: '95vh', |
|
|
|
|
width: "100%", |
|
|
|
|
height: "95vh", |
|
|
|
|
}} |
|
|
|
|
scrolling="no" |
|
|
|
|
frameBorder="0" |
|
|
|
|
allow="fullscreen" |
|
|
|
|
></iframe> |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<> |
|
|
|
@ -103,6 +114,6 @@ const Gantt = (props) => {
|
|
|
|
|
</div> |
|
|
|
|
</> |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
export default Gantt; |
|
|
|
|