diff --git a/src/components/crud/grid/GridDatatable.js b/src/components/crud/grid/GridDatatable.js index 6f79440c..58aa1171 100644 --- a/src/components/crud/grid/GridDatatable.js +++ b/src/components/crud/grid/GridDatatable.js @@ -6,15 +6,6 @@ import { EMPTY_MESSAGE } from '@src/configs/msgConst'; // DataTable lib 참고 // https://react-data-table-component.netlify.app/?path=/docs/api-props--page export const GridDatabase = props => { - // useEffect(() => { - // const tableBody = document.querySelector('.rdt_TableBody').childNodes; - - // for (let i = 0; i < tableBody.length; i++) { - // const el = document.querySelector(`#row-${i}`); - // el.firstChild.id = 'expandableRows'; - // } - // }, [props.data]); - return props[`${props.handlerPageChange ? 'total' : 'count'}`] <= 0 ? (

{EMPTY_MESSAGE}

@@ -33,13 +24,16 @@ export const GridDatabase = props => { subHeader={false} columns={props.columns} responsive={true} + expandRow={props.expandRow} sortIcon={} + expandOnRowClicked={props.expandOnRowClicked} className='react-dataTable pal-dateTable' paginationDefaultPage={props.page || 1} // defaultSortField='invoiceId' // paginationDefaultPage={currentPage} // paginationComponent={CustomPagination} data={props.data} + expandableRowExpanded={props.expandableRowExpanded} paginationServer={ props.pagination && props.handlerPageChange ? true : false } diff --git a/src/components/flight/FlightApprovalsTable.js b/src/components/flight/FlightApprovalsTable.js index 631269a3..878f3271 100644 --- a/src/components/flight/FlightApprovalsTable.js +++ b/src/components/flight/FlightApprovalsTable.js @@ -4,12 +4,28 @@ import { Card, Button } from '@component/ui'; import { GridDatabase } from '@src/components/crud/grid/GridDatatable'; import dayjs from 'dayjs'; import { openModal } from '@src/redux/features/comn/message/messageSlice'; +import DataTable from 'react-data-table-component'; +import { FaAngleDown, FaAngleUp } from 'react-icons/fa'; export default function FlightApprovalsTable(props) { const dispatch = useDispatch(); const { laancAprvList, laancElev } = useSelector(state => state.laancState); + const [approvalCdValue, setApprovalCdValue] = useState({ + S: 0, + F: 0, + U: 0 + }); + const [expandedRows, setExpandedRows] = useState({}); + + const toggleRow = rowId => { + setExpandedRows({ + ...expandedRows, + [rowId]: !expandedRows[rowId] + }); + }; + const conditionalRowStyles = [ { when: row => row.areaList[0].approvalCd === 'F', @@ -25,6 +41,21 @@ export default function FlightApprovalsTable(props) { } ]; + const infoRowStyles = [ + { + when: row => row.approvalCd === 'F', + classNames: ['flight-not-approval-row'] + }, + { + when: row => row.approvalCd === 'S', + classNames: ['flight-approval-row'] + }, + { + when: row => row.planAreaSno === props.selected, + classNames: ['flight-approval-row-click'] + } + ]; + const columns = [ { name: '신청번호', @@ -117,25 +148,22 @@ export default function FlightApprovalsTable(props) { ); } + }, + { + name: '더보기', + selector: row => row.areaList, + center: true, + width: '120px', + cell: row => + row.areaList.length > 1 ? ( + + ) : ( + '-' + ) } - // { - // name: '더보기', - // selector: row => row.areaList, - // center: true, - // width: '120px', - // cell: row => { - // return row.areaList.length > 1 ? ( - // - // ) : ( - // '-' - // ); - // } - // } ]; const handlerOpenModal = (approval, fltElev, fltElevMax) => { @@ -168,100 +196,139 @@ export default function FlightApprovalsTable(props) { } }; + const nestedColumns = [ + { + selector: row => row.applyNo, + center: true, + cell: row => { + return '240503-0001'; + } + }, + { + selector: row => row.applyDt, + center: true, + cell: row => { + return dayjs(row.applyDt).format('YYYY-MM-DD'); + } + }, + { + selector: row => row.zoneNo, + center: true, + sortable: true, + width: '80px', + cell: row => { + return row.zoneNo + '번'; + } + }, + { + selector: row => row.lat, + center: true, + sortable: true, + cell: row => { + return `${row.lat.toFixed(5)}/${row.lon.toFixed(5)}`; + } + }, + { + selector: row => row.bufferZone, + center: true, + sortable: true, + cell: row => { + return row.bufferZone; + } + }, + { + selector: row => row.fltElev, + center: true, + sortable: true, + cell: row => { + return row.fltElev; + } + }, + { + selector: row => row.approvalCd, + center: true, + sortable: true, + cell: row => { + return row.approvalCd === 'U' + ? '비대상' + : row.approvalCd === 'S' + ? '승인' + : '미승인'; + } + }, + { + selector: row => row.approvalCd, + cell: row => { + return ( + + ); + } + } + ]; + + const handleInRowClick = row => { + props.handlerDetail(row); + }; + const handleRowClick = row => { + props.handlerDetail(row.areaList[0]); + // 여기에 클릭 이벤트를 처리하는 코드를 작성하세요. + }; + const FlightInfoComponent = ({ data }) => { return ( <> - {data.areaList?.map((area, index) => ( -
{ - props.handlerDetail(area); - }} - key={Math.random()} - > -
-
-
- 비행구역 {index + 1}번 -
-
-
-
중심좌표(위/경도)
-
- {area.lat.toFixed(5)}/{area.lon.toFixed(5)} -
-
-
-
반경(m)
-
{area.bufferZone}
-
-
-
고도(m)
-
{area.fltElev}
-
-
-
검토결과
-
- {area.approvalCd === 'U' - ? '비대상' - : area.approvalCd === 'S' - ? '승인' - : '미승인'} -
-
-
-
사유보기
-
- -
-
-
-
- ))} +
+ +
); }; - // const customStyles = { - // rows: { - // style: { - // minHeight: '70px' - // } - // }, - // header: { - // style: { - // width: '20px' - // } - // }, - // cells: { - // style: { - // width: '10px' - // } - // } - // }; + const formatDate = dateString => { + const date = new Date(dateString); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + return `${year} 년 ${month} 월 ${day} 일`; + }; + + useEffect(() => { + resApprovalCd(); + }, [laancAprvList]); - const handleRowClick = row => { - props.handlerDetail(row.areaList[0]); - // 여기에 클릭 이벤트를 처리하는 코드를 작성하세요. + const resApprovalCd = () => { + let approvalCdValue = { S: 0, F: 0, U: 0 }; + + laancAprvList?.map(item => { + item.areaList.map(area => { + if (area.approvalCd === 'S') { + approvalCdValue.S += 1; + } else if (area.approvalCd === 'F') { + approvalCdValue.F += 1; + } else { + approvalCdValue.U += 1; + } + }); + }); + + setApprovalCdValue({ + F: approvalCdValue.F, + S: approvalCdValue.S, + U: approvalCdValue.U + }); }; return ( @@ -269,15 +336,16 @@ export default function FlightApprovalsTable(props) {

비행승인 신청 검토결과 목록

- {props.startDate} 총 {laancAprvList?.length} 건 결과 + {formatDate(props.startDate)} 총{' '} + {approvalCdValue.S + approvalCdValue.F + approvalCdValue.U}건
    -
  • 승인 10건
  • -
  • 미승인 10건
  • -
  • 비대상 10건
  • +
  • 승인 {approvalCdValue.S}건
  • +
  • 미승인 {approvalCdValue.F}건
  • +
  • 비대상 {approvalCdValue.U}건
@@ -295,8 +363,12 @@ export default function FlightApprovalsTable(props) { pagination={true} // customStyles={customStyles} conditionalRowStyles={conditionalRowStyles} - // FlightInfoComponent={FlightInfoComponent} + FlightInfoComponent={FlightInfoComponent} handleRowClick={handleRowClick} + expandableRowExpanded={row => + expandedRows[row.applyNo] || false + } + paginationPerPage={20} /> ) : (