Browse Source

비행 시물레이션 주석

pull/1/head
박상현 10 months ago
parent
commit
1ed9d9e386
  1. 3
      src/components/analysis/simulation/AnalysisSimuationInfo.js
  2. 1
      src/components/analysis/simulation/AnalysisSimulationDetail.js
  3. 3
      src/components/analysis/simulation/AnalysisSimulationMap.js
  4. 4
      src/components/analysis/simulation/AnalysisSimulationMarker.js
  5. 3
      src/components/analysis/simulation/AnalysisSimulationPolyline.js
  6. 1
      src/components/analysis/simulation/AnalysisSimulationReport.js
  7. 2
      src/components/analysis/simulation/AnalysisSimulatorSlider.js
  8. 32
      src/containers/analysis/simulator/AnalysisSimulationContainer.js

3
src/components/analysis/simulation/AnalysisSimuationInfo.js

@ -6,8 +6,10 @@ import { Spinner } from 'reactstrap';
export const AnalysisSimulationInfo = props => { export const AnalysisSimulationInfo = props => {
const [target, setTarget] = useState(null); const [target, setTarget] = useState(null);
// 로딩 상태
const { loading } = useSelector(state => state.loadingReducer); const { loading } = useSelector(state => state.loadingReducer);
// 스크롤 끝 감지 데이터 추가
const onIntersect = useCallback( const onIntersect = useCallback(
([entry], observer) => { ([entry], observer) => {
if (entry.isIntersecting) { if (entry.isIntersecting) {
@ -19,6 +21,7 @@ export const AnalysisSimulationInfo = props => {
[props.handlerPageList] [props.handlerPageList]
); );
// 무한 스크롤
useEffect(() => { useEffect(() => {
let observer; let observer;
if (target) { if (target) {

1
src/components/analysis/simulation/AnalysisSimulationDetail.js

@ -11,6 +11,7 @@ import { ReactComponent as Simulation_icon } from '../../../assets/images/simula
import { IMG_PATH } from '../../../configs/constants'; import { IMG_PATH } from '../../../configs/constants';
import AnalysisSimulatorSlider from './AnalysisSimulatorSlider'; import AnalysisSimulatorSlider from './AnalysisSimulatorSlider';
export const AnalysisSimulationDetail = props => { export const AnalysisSimulationDetail = props => {
// 슬라이드 진행 방향
const [isRtl, setIsRtl] = useRTL(); const [isRtl, setIsRtl] = useRTL();
return ( return (

3
src/components/analysis/simulation/AnalysisSimulationMap.js

@ -9,12 +9,15 @@ import { Threebox } from 'threebox-plugin';
import gimPo from '../../map/geojson/gimpoAirportAirArea.json'; import gimPo from '../../map/geojson/gimpoAirportAirArea.json';
export const AnalysisSimulationMap = props => { export const AnalysisSimulationMap = props => {
// 지도
const mapContainer = useRef(null); const mapContainer = useRef(null);
// mabboxgl 지도 초기화
useEffect(() => { useEffect(() => {
mapBoxMapInit(); mapBoxMapInit();
}, []); }, []);
// mabboxgl 지도 초기화 함수
const mapBoxMapInit = () => { const mapBoxMapInit = () => {
mapboxgl.accessToken = MAPBOX_TOKEN; mapboxgl.accessToken = MAPBOX_TOKEN;

4
src/components/analysis/simulation/AnalysisSimulationMarker.js

@ -3,6 +3,7 @@ import DronIcon from '../../../assets/images/drone-marker-icon.png';
import mapboxgl from 'mapbox-gl'; import mapboxgl from 'mapbox-gl';
export const AnalysisSimulationMarker = props => { export const AnalysisSimulationMarker = props => {
// 마커 css
const el = document.createElement('div'); const el = document.createElement('div');
el.className = 'marker'; el.className = 'marker';
el.style.width = '30px'; el.style.width = '30px';
@ -10,6 +11,7 @@ export const AnalysisSimulationMarker = props => {
el.style.textAlign = 'center'; el.style.textAlign = 'center';
el.style.backgroundImage = `url(${DronIcon})`; el.style.backgroundImage = `url(${DronIcon})`;
// 마커 경로 담기
useEffect(() => { useEffect(() => {
if (props.selMarker && props.selMarker.setMap) { if (props.selMarker && props.selMarker.setMap) {
props.selMarker.setMap(null); props.selMarker.setMap(null);
@ -30,6 +32,7 @@ export const AnalysisSimulationMarker = props => {
} }
}, [props.data]); }, [props.data]);
// 매 초마다 경로 이동
useEffect(() => { useEffect(() => {
if (props.isPlay) { if (props.isPlay) {
if (props.marker) { if (props.marker) {
@ -47,6 +50,7 @@ export const AnalysisSimulationMarker = props => {
} }
}, [props.info]); }, [props.info]);
// 지도 드론 표출
const addMarkers = (position, id) => { const addMarkers = (position, id) => {
// 이미 지정된 마커 제거 // 이미 지정된 마커 제거
if (props.marker) { if (props.marker) {

3
src/components/analysis/simulation/AnalysisSimulationPolyline.js

@ -1,8 +1,10 @@
import { useEffect } from 'react'; import { useEffect } from 'react';
export const AnalysisSimulationPolyline = props => { export const AnalysisSimulationPolyline = props => {
// 폴리라인 경로 담는 변수
const polylinePath = []; const polylinePath = [];
// 기존 저장된 경로 삭제
useEffect(() => { useEffect(() => {
// 기존 폴리라인 삭제 처리 // 기존 폴리라인 삭제 처리
if (props.selPolyline && props.selPolyline.setMap) { if (props.selPolyline && props.selPolyline.setMap) {
@ -19,6 +21,7 @@ export const AnalysisSimulationPolyline = props => {
} }
}, [props.data]); }, [props.data]);
// 경로 그리기
const addPolyline = () => { const addPolyline = () => {
if (props.data && props.map) { if (props.data && props.map) {
props.data.forEach(item => { props.data.forEach(item => {

1
src/components/analysis/simulation/AnalysisSimulationReport.js

@ -5,6 +5,7 @@ import Flatpickr from 'react-flatpickr';
import { Button, Input, InputGroup } from 'reactstrap'; import { Button, Input, InputGroup } from 'reactstrap';
export const AnalysisSimulationReport = props => { export const AnalysisSimulationReport = props => {
// 식별번호
const [filterId, setFilterId] = useState(''); const [filterId, setFilterId] = useState('');
return ( return (

2
src/components/analysis/simulation/AnalysisSimulatorSlider.js

@ -24,6 +24,7 @@ const AnalysisSimulatorSlider = ({
return timeString; return timeString;
} }
// 슬라이더 값이 바뀔 때마다 실행되는 함수
const colorOptions = { const colorOptions = {
start: [playCount ? playCount : 0], start: [playCount ? playCount : 0],
// connect: true, // connect: true,
@ -64,7 +65,6 @@ const AnalysisSimulatorSlider = ({
direction direction
}; };
useEffect(() => {}, [playCount]);
return ( return (
<div className='simulation-slider'> <div className='simulation-slider'>
{/* <h5 className='my-2'>Default / Primary Color Slider</h5> */} {/* <h5 className='my-2'>Default / Primary Color Slider</h5> */}

32
src/containers/analysis/simulator/AnalysisSimulationContainer.js

@ -15,33 +15,47 @@ let playCount = 0;
let playCounts = 0; let playCounts = 0;
export const AnalysisSimulationContainer = props => { export const AnalysisSimulationContainer = props => {
// 슬라이드 모든 데이터
const { list, count, detail, searchParams, log, stcsList, stcsCount, page } = const { list, count, detail, searchParams, log, stcsList, stcsCount, page } =
useSelector(state => state.analysisSimulatorState); useSelector(state => state.analysisSimulatorState);
// 비행 시물레이션 데이터
const [oepnReportList, setOpenReportList] = useState(false); const [oepnReportList, setOpenReportList] = useState(false);
// 지도 객체
const [mapObject, setMapObject] = useState(null); const [mapObject, setMapObject] = useState(null);
// 비행 시물레이션 데이터 상세보기
const [openDetail, setOpenDetail] = useState(false); const [openDetail, setOpenDetail] = useState(false);
// 선택 마커
const [selMarker, setSelMarker] = useState(null); const [selMarker, setSelMarker] = useState(null);
// 좌표 정보
const [selPolyline, setSelPolyline] = useState(null); const [selPolyline, setSelPolyline] = useState(null);
// 슬라이드 재생 여부
const [isPlay, setIsPlay] = useState(false); const [isPlay, setIsPlay] = useState(false);
// 드론 정보
const [info, setInfo] = useState(null); const [info, setInfo] = useState(null);
// 슬라이드 시간
const [timeCd, setTimeCd] = useState(null); const [timeCd, setTimeCd] = useState(null);
// 슬라이드 카운터
const [sliderCount, setSliderCount] = useState(0); const [sliderCount, setSliderCount] = useState(0);
// 검색 텍스트
const [searchText, setSearchText] = useState(''); const [searchText, setSearchText] = useState('');
// 비행 pk 값
const [cntrlId, setCntrlId] = useState(''); const [cntrlId, setCntrlId] = useState('');
// 드론 마커
const [marker, setMarker] = useState(null); const [marker, setMarker] = useState(null);
// 카운터 초기값
const [sliderVal, setSliderVal] = useState({ const [sliderVal, setSliderVal] = useState({
maxVal: 0, maxVal: 0,
minVal: 0 minVal: 0
@ -49,6 +63,7 @@ export const AnalysisSimulationContainer = props => {
const dispatch = useDispatch(); const dispatch = useDispatch();
// 드론 갯수
const [dronLength, setDronLength] = useState(0); const [dronLength, setDronLength] = useState(0);
const [countArray, setCountArray] = useState([]); const [countArray, setCountArray] = useState([]);
@ -58,7 +73,7 @@ export const AnalysisSimulationContainer = props => {
search1: '' search1: ''
}); });
// 시뮬레이션 타이머 // 시뮬레이션 타이머 로직
useEffect(() => { useEffect(() => {
if (isPlay) { if (isPlay) {
const countCheck = log.map(item => const countCheck = log.map(item =>
@ -95,6 +110,7 @@ export const AnalysisSimulationContainer = props => {
} }
}, [isPlay, log]); }, [isPlay, log]);
//
useEffect(() => { useEffect(() => {
if (isPlay) { if (isPlay) {
setInfo({ ...log[playCount], playCount, playCounts }); setInfo({ ...log[playCount], playCount, playCounts });
@ -102,6 +118,7 @@ export const AnalysisSimulationContainer = props => {
} }
}, [stcsList]); }, [stcsList]);
// 검색 변경 헨들러
useEffect(() => { useEffect(() => {
if (oepnReportList) { if (oepnReportList) {
if (searchParams) { if (searchParams) {
@ -113,6 +130,8 @@ export const AnalysisSimulationContainer = props => {
} }
} }
}, [oepnReportList]); }, [oepnReportList]);
// 슬라이드 카운터 로직
useEffect(() => { useEffect(() => {
if (sliderCount && sliderCount > 0) { if (sliderCount && sliderCount > 0) {
let benear = countArray[0]; let benear = countArray[0];
@ -138,6 +157,7 @@ export const AnalysisSimulationContainer = props => {
} }
}, [sliderCount]); }, [sliderCount]);
// 슬라이드 카운터 초기화
useEffect(() => { useEffect(() => {
playCount = 0; playCount = 0;
playCounts = 0; playCounts = 0;
@ -163,6 +183,7 @@ export const AnalysisSimulationContainer = props => {
// let maxDate; // let maxDate;
}, [log]); }, [log]);
// 검색 헨들러
const handlerSearch = search1 => { const handlerSearch = search1 => {
setParams({ ...params, search1 }); setParams({ ...params, search1 });
dispatch( dispatch(
@ -178,10 +199,12 @@ export const AnalysisSimulationContainer = props => {
dispatch(Actions.log.request(id)); dispatch(Actions.log.request(id));
}; };
//
const handlerStcsSearch = id => { const handlerStcsSearch = id => {
dispatch(Actions.stcs.request(id)); dispatch(Actions.stcs.request(id));
}; };
// 검색
const handlerInput = (type, val) => { const handlerInput = (type, val) => {
if (type === 'search1') { if (type === 'search1') {
setParams({ ...params, search1: val }); setParams({ ...params, search1: val });
@ -197,6 +220,7 @@ export const AnalysisSimulationContainer = props => {
} }
}; };
// 상세보기
const handlerDetail = id => { const handlerDetail = id => {
// setOpenReportList(false); // setOpenReportList(false);
handlerDetailSearch(id); handlerDetailSearch(id);
@ -206,19 +230,25 @@ export const AnalysisSimulationContainer = props => {
setCntrlId(id); setCntrlId(id);
}; };
// 로그아웃
const handlerLogout = () => { const handlerLogout = () => {
dispatch(Action.logout.request()); dispatch(Action.logout.request());
}; };
// 비행 시물레이션 데이터 닫기
const handlerDetailClose = () => { const handlerDetailClose = () => {
setOpenDetail(false); setOpenDetail(false);
}; };
// 비행 시물레이션 데이터 호출
const handlerPageList = useCallback(() => { const handlerPageList = useCallback(() => {
dispatch( dispatch(
Actions.list.request({ searchParams: { ...params }, page: page + 1 }) Actions.list.request({ searchParams: { ...params }, page: page + 1 })
); );
}, [params, list, page]); }, [params, list, page]);
// 비행 시물레이션 데이터 모달 헨들러
const handlerOpenReportList = useCallback( const handlerOpenReportList = useCallback(
val => { val => {
setOpenReportList(val); setOpenReportList(val);

Loading…
Cancel
Save