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

59 lines
2.4 KiB
JavaScript
Raw Normal View History

2023-10-13 08:59:12 +00:00
import {React, useState} from 'react'
2023-10-17 09:01:49 +00:00
import {SbTitle, SbSub} from './Sb.style'
2023-10-13 08:59:12 +00:00
import { FcFolder, FcOpenedFolder, FcFile } from 'react-icons/fc'
import { AiOutlinePlusSquare, AiOutlineMinusSquare } from 'react-icons/ai'
2023-10-18 09:10:44 +00:00
const SbItem = ({item, openDocCode, updateDocCode}) => {
const find = (array, openDocCode) => {
var result;
array.some(o => result = o.doc_code === openDocCode ? o : find(o.childrens || [], openDocCode));
return result;
};
const collapsedFlag = find(item.childrens, openDocCode) !== undefined;
// openDocCode === item.doc_code+' '+item.doc_code_name
const [collapsed, setCollapsed] = useState(collapsedFlag);
2023-10-13 08:59:12 +00:00
function toggleCollapse() {
setCollapsed(prevValue => !prevValue);
}
2023-10-19 01:08:35 +00:00
function changeOpenDoc(seq){
const prevOpenDoc = window.document.getElementsByClassName("openDoc")[0];
prevOpenDoc.className = prevOpenDoc.className.replace('openDoc', '');
const nextOpenDoc = window.document.getElementById("doc"+seq);
nextOpenDoc.className = nextOpenDoc.className+' openDoc';
2023-10-18 09:10:44 +00:00
}
2023-10-13 08:59:12 +00:00
2023-12-22 08:54:45 +00:00
if(item.group_yn==='Y'){
2023-10-13 08:59:12 +00:00
const icon1 = collapsed?<AiOutlinePlusSquare />:<AiOutlineMinusSquare />;
const icon2 = collapsed?<FcOpenedFolder />:<FcFolder />;
return (
<div>
<SbTitle depth={item.doc_level} onClick={toggleCollapse}>{icon1}{icon2}&nbsp;{(item.doc_level === 1?'':item.doc_code)+' '+item.doc_code_name}</SbTitle>
<SbSub isOpen={collapsed}>
{item.childrens.map((child) => (
2023-10-18 09:10:44 +00:00
<SbItem item={child} openDocCode={openDocCode} updateDocCode={updateDocCode} />
2023-10-13 08:59:12 +00:00
))}
</SbSub>
</div>
)
}else{
const icon = <FcFile />;
let errorCnt = null;
if(item.error_cnt != null && item.error_cnt >0){
errorCnt = <blockquote className="errorCnt">({item.error_cnt})</blockquote>;
}
2023-10-13 08:59:12 +00:00
return (
2023-10-19 01:08:35 +00:00
<SbTitle depth={item.doc_level} id={`doc${item.seq}`} className={item.doc_code === openDocCode?'openDoc':''}>
2023-10-17 09:01:49 +00:00
<a onClick={()=>{
2023-10-19 01:08:35 +00:00
changeOpenDoc(item.seq)
updateDocCode(item.doc_code)
}}>
{icon}&nbsp;{(item.doc_level === 1?'':item.doc_code)+' '+item.doc_code_name}
{errorCnt}
</a>
2023-10-13 08:59:12 +00:00
</SbTitle>
)
}
}
export default SbItem