2023-10-12 08:05:49 +00:00
|
|
|
import React, { useState, useEffect, useCallback } from 'react';
|
2023-10-17 09:01:49 +00:00
|
|
|
import { useLocation } from 'react-router-dom';
|
2023-10-13 08:59:12 +00:00
|
|
|
import SbItem from './SbItem'
|
|
|
|
|
import {SbContainer} from './Sb.style'
|
2023-10-12 08:05:49 +00:00
|
|
|
import Row from 'react-bootstrap/Row';
|
|
|
|
|
import Col from 'react-bootstrap/Col';
|
|
|
|
|
import * as EgovNet from 'api/egovFetch';
|
|
|
|
|
|
|
|
|
|
function CodeViewer(props) {
|
2023-10-17 09:01:49 +00:00
|
|
|
const [docCode, setDocCode] = useState(props.docCode);
|
|
|
|
|
const [docName, setDocName] = useState(props.docName);
|
2023-10-16 09:00:12 +00:00
|
|
|
const [codeTree, setCodeTree] = useState();
|
|
|
|
|
const [docSummary, setDocSummary] = useState();
|
|
|
|
|
const [docDetail, setDocDetail] = useState();
|
|
|
|
|
|
2023-10-12 08:05:49 +00:00
|
|
|
console.group("viewer");
|
|
|
|
|
console.log("[Start] viewer ------------------------------");
|
|
|
|
|
console.log("viewer [props] : ", props);
|
|
|
|
|
const location = useLocation();
|
|
|
|
|
console.log("viewer [location] : ", location);
|
2023-10-16 09:00:12 +00:00
|
|
|
console.log("viewer [docCode] : ", docCode);
|
2023-10-12 08:05:49 +00:00
|
|
|
|
2023-10-17 09:01:49 +00:00
|
|
|
const updateDocCode = useCallback((docCode, docName)=>{
|
|
|
|
|
setDocCode(docCode);
|
|
|
|
|
setDocName(docName);
|
|
|
|
|
getCodeDetailInfo(docCode);
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const getCodeTree = useCallback(()=>{
|
|
|
|
|
EgovNet.requestFetch(
|
|
|
|
|
'/standardCode/getCodeTree.do',
|
|
|
|
|
{
|
|
|
|
|
method: "POST",
|
|
|
|
|
headers: {
|
|
|
|
|
'Content-type': 'application/json'
|
|
|
|
|
},
|
|
|
|
|
body: JSON.stringify({})
|
|
|
|
|
},
|
2023-10-12 08:05:49 +00:00
|
|
|
(resp) => {
|
2023-10-13 08:59:12 +00:00
|
|
|
const menuData = resp.result.codeTree;
|
|
|
|
|
// 코드 목록 트리 구성
|
|
|
|
|
// https://garve32.tistory.com/52 참고
|
|
|
|
|
const nest = (menuData, parent_seq = null, link = 'parent_seq') =>
|
|
|
|
|
menuData.filter(item => item[link] === parent_seq)
|
|
|
|
|
.map(item => ({ ...item, childrens: nest(menuData, item.seq) }));
|
|
|
|
|
const tree = nest(menuData);
|
|
|
|
|
let treeTag = [];
|
|
|
|
|
if(tree.length>0){
|
|
|
|
|
treeTag.push(
|
|
|
|
|
<SbContainer>
|
2023-10-17 09:01:49 +00:00
|
|
|
{tree.map((subItem) =>
|
|
|
|
|
<SbItem item={subItem} updateDocCode={updateDocCode} />
|
2023-10-13 08:59:12 +00:00
|
|
|
)}
|
|
|
|
|
</SbContainer>
|
|
|
|
|
)
|
|
|
|
|
}else{
|
|
|
|
|
treeTag.push(<div>검색된 결과가 없습니다.</div>); // 코드 목록 초기값
|
|
|
|
|
}
|
|
|
|
|
setCodeTree(treeTag);
|
2023-10-17 09:01:49 +00:00
|
|
|
},
|
|
|
|
|
function (resp) {
|
|
|
|
|
console.log("err response : ", resp);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
})
|
2023-10-13 08:59:12 +00:00
|
|
|
|
2023-10-17 09:01:49 +00:00
|
|
|
const getCodeDetailInfo = useCallback((docCode) => {
|
|
|
|
|
console.groupCollapsed("EgovMain.getCodeDetailInfo()");
|
|
|
|
|
EgovNet.requestFetch(
|
|
|
|
|
'/standardCode/getCodeDetailInfo.do',
|
|
|
|
|
{
|
|
|
|
|
method: "POST",
|
|
|
|
|
headers: {
|
|
|
|
|
'Content-type': 'application/json'
|
|
|
|
|
},
|
|
|
|
|
body: JSON.stringify({
|
|
|
|
|
docCode: docCode
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
(resp) => {
|
2023-10-13 08:59:12 +00:00
|
|
|
// 목차 구성
|
|
|
|
|
let summaryTag = [];
|
|
|
|
|
// 문서 전문 구성
|
|
|
|
|
let detailTag = [];
|
|
|
|
|
if(resp.result.document.length>0){
|
|
|
|
|
resp.result.document.forEach(function (item, index){
|
2023-10-17 09:01:49 +00:00
|
|
|
if(item.full_content.includes(item.group_title)){
|
|
|
|
|
summaryTag.push(
|
|
|
|
|
<div><p href="#" onClick={() => {
|
|
|
|
|
document.location.hash="#"+item.cont_type_cd;
|
|
|
|
|
}}>{item.group_title}</p></div>
|
|
|
|
|
)
|
|
|
|
|
}
|
2023-10-13 08:59:12 +00:00
|
|
|
detailTag.push(
|
2023-10-17 09:01:49 +00:00
|
|
|
<div id={item.cont_type_cd} dangerouslySetInnerHTML={ {__html: item.full_content} }></div>
|
2023-10-13 08:59:12 +00:00
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
}else{
|
|
|
|
|
summaryTag.push(<li key="0">검색된 결과가 없습니다.</li>);
|
|
|
|
|
}
|
|
|
|
|
setDocSummary(summaryTag);
|
|
|
|
|
setDocDetail(detailTag);
|
2023-10-12 08:05:49 +00:00
|
|
|
},
|
|
|
|
|
function (resp) {
|
|
|
|
|
console.log("err response : ", resp);
|
|
|
|
|
}
|
|
|
|
|
);
|
2023-10-17 09:01:49 +00:00
|
|
|
console.groupEnd("EgovMain.getCodeDetailInfo()");
|
2023-10-12 08:05:49 +00:00
|
|
|
},[]);
|
|
|
|
|
|
2023-10-16 09:00:12 +00:00
|
|
|
|
2023-10-12 08:05:49 +00:00
|
|
|
useEffect(() => {
|
2023-10-17 09:01:49 +00:00
|
|
|
getCodeDetailInfo();
|
|
|
|
|
}, []);
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
getCodeTree();
|
|
|
|
|
}, []);
|
2023-10-12 08:05:49 +00:00
|
|
|
|
|
|
|
|
console.log("------------------------------viewer [End]");
|
|
|
|
|
console.groupEnd("viewer");
|
|
|
|
|
return (
|
2023-10-18 06:44:11 +00:00
|
|
|
<Row className="mx-0">
|
2023-10-17 09:01:49 +00:00
|
|
|
<Col xs={12} className="border-bottom">
|
|
|
|
|
<Row>
|
|
|
|
|
<Col xs={3}></Col>
|
|
|
|
|
<Col xs={9}>{docCode} {docName}</Col>
|
|
|
|
|
</Row>
|
|
|
|
|
</Col>
|
|
|
|
|
<Col xs={3} className="border-end viewerDiv">
|
2023-10-13 08:59:12 +00:00
|
|
|
{codeTree}
|
|
|
|
|
</Col>
|
2023-10-17 09:01:49 +00:00
|
|
|
<Col xs={3} className="border-end viewerDiv">
|
2023-10-13 08:59:12 +00:00
|
|
|
{docSummary}
|
|
|
|
|
</Col>
|
2023-10-17 09:01:49 +00:00
|
|
|
<Col xs={6} className="viewerDiv">
|
2023-10-13 08:59:12 +00:00
|
|
|
{docDetail}
|
|
|
|
|
</Col>
|
|
|
|
|
</Row>
|
2023-10-12 08:05:49 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-16 09:00:12 +00:00
|
|
|
|
2023-10-12 08:05:49 +00:00
|
|
|
export default CodeViewer;
|