kcscDev/egovframe-template-simple-r.../src/pages/standardCode/viewer.js

109 lines
3.7 KiB
JavaScript
Raw Normal View History

2023-10-12 08:05:49 +00:00
import React, { useState, useEffect, useCallback } from 'react';
import { Link, 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) {
console.group("viewer");
console.log("[Start] viewer ------------------------------");
console.log("viewer [props] : ", props);
2023-10-13 08:59:12 +00:00
const docCode=props.docCode===undefined?'KDS 21 30 00':props.docCode;
2023-10-12 08:05:49 +00:00
const location = useLocation();
console.log("viewer [location] : ", location);
2023-10-13 08:59:12 +00:00
const [codeTree, setCodeTree] = useState();
const [docSummary, setDocSummary] = useState();
const [docDetail, setDocDetail] = useState();
2023-10-12 08:05:49 +00:00
const retrieveList = useCallback(() => {
console.groupCollapsed("EgovMain.retrieveList()");
2023-10-13 08:59:12 +00:00
2023-10-12 08:05:49 +00:00
const retrieveListURL = '/standardCode/viewer.do';
const requestOptions = {
method: "POST",
headers: {
'Content-type': 'application/json'
},
2023-10-13 08:59:12 +00:00
body: JSON.stringify({
docCode: docCode
})
2023-10-12 08:05:49 +00:00
}
EgovNet.requestFetch(retrieveListURL,
requestOptions,
(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>
{tree.map((subItem, index) =>
<SbItem item={subItem} key={index} />
)}
</SbContainer>
)
}else{
treeTag.push(<div>검색된 결과가 없습니다.</div>); // 코드 목록 초기값
}
setCodeTree(treeTag);
// 목차 구성
let summaryTag = [];
// 문서 전문 구성
let detailTag = [];
if(resp.result.document.length>0){
resp.result.document.forEach(function (item, index){
summaryTag.push(
<div>{item.group_title}</div>
)
detailTag.push(
<div dangerouslySetInnerHTML={ {__html: item.full_content} }></div>
)
})
}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);
}
);
console.groupEnd("EgovMain.retrieveList()");
},[]);
useEffect(() => {
retrieveList();
}, [retrieveList]);
console.log("------------------------------viewer [End]");
console.groupEnd("viewer");
return (
2023-10-13 08:59:12 +00:00
<Row>
<Col xs={3} className="border-end">
{codeTree}
</Col>
<Col xs={3} className="border-end">
{docSummary}
</Col>
<Col xs={6}>
{docDetail}
</Col>
</Row>
2023-10-12 08:05:49 +00:00
);
}
export default CodeViewer;