Browse Source

laanc 비행구역 관제권포함 유무 api연결 및 reducer 생성

pull/2/head
junh_eee(이준희) 11 months ago
parent
commit
c4a98b5468
  1. 15
      src/components/laanc/LaancAreaMap.js
  2. 29
      src/components/map/mapbox/draw/LaancDrawControl.js
  3. 15
      src/modules/basis/flight/actions/basisFlightAction.ts
  4. 5
      src/modules/basis/flight/apis/basisFlightApi.ts
  5. 13
      src/modules/basis/flight/models/basisFlightModel.ts
  6. 22
      src/modules/basis/flight/reducers/basisFlightReducer.ts
  7. 14
      src/modules/basis/flight/sagas/basisFlightSaga.ts

15
src/components/laanc/LaancAreaMap.js

@ -9,7 +9,8 @@ import { Card, CardBody } from 'reactstrap';
import { initFlightBas } from '../../modules/basis/flight/models/basisFlightModel';
import {
AREA_COORDINATE_LIST_SAVE,
FLIGHT_PLAN_AREA_BUFFER_LIST
FLIGHT_PLAN_AREA_BUFFER_LIST,
FLIGHT_PLAN_AREA_INAIRAREA
} from '../../modules/basis/flight/actions/basisFlightAction';
import {
drawTypeChangeAction,
@ -45,6 +46,7 @@ export default function LaancAreaMap({
const dispatch = useDispatch();
const mapControl = useSelector(state => state.controlMapReducer);
const { areaCoordList } = useSelector(state => state.flightState);
const { inAirArea } = useSelector(state => state.flightState);
const [mapObject, setMapObject] = useState();
const [isMapLoad, setIsMapLoad] = useState(false);
@ -75,6 +77,10 @@ export default function LaancAreaMap({
setMode(mapControl.drawType);
}, [mapControl.drawType]);
// useEffect(() => {
// console.log(inAirArea, '--inairARea');
// }, [inAirArea]);
useEffect(() => {
if (areaCoordList && mapObject) {
if (
@ -280,18 +286,17 @@ export default function LaancAreaMap({
...area,
bufferZone: areaInfo.bufferZone,
areaType: areaInfo.areaType,
coordList: coordList,
inAirArea: areaInfo.inAirArea
coordList: coordList
};
});
sessionStorage.setItem('inAirArea', JSON.stringify(areaList[0].inAirArea));
if (areaInfo.areaType === 'LINE' || areaInfo.areaType === 'POLYGON') {
dispatch(FLIGHT_PLAN_AREA_BUFFER_LIST.request(areaList));
} else {
setMapAreaCoordList(areaList);
}
dispatch(FLIGHT_PLAN_AREA_INAIRAREA.request(areaList));
};
const handlerConfirm = areaList => {

29
src/components/map/mapbox/draw/LaancDrawControl.js

@ -3,7 +3,6 @@ import { InfoModal } from '../../../modal/InfoModal';
import { useDispatch, useSelector } from 'react-redux';
import {
CalculateDistance,
handlerGetCircleCoord,
handlerGetHtmlContent,
handlerGetMidPoint,
handlerRemoveAllMarker,
@ -13,6 +12,7 @@ import {
import { drawTypeChangeAction } from '../../../../modules/control/map/actions/controlMapActions';
import MapboxDraw from '@mapbox/mapbox-gl-draw';
import { CircleMode } from 'mapbox-gl-draw-circle';
import axios from '../../../../modules/utils/customAxiosUtil';
export const LaancDrawControl = props => {
const dispatch = useDispatch();
@ -21,12 +21,9 @@ export const LaancDrawControl = props => {
const drawObj = props.drawObj;
const mapObject = props.mapObject;
// const [drawObjId, setDrawObjId] = useState();
const [bufferId, setBufferId] = useState();
const [isDrawDone, setIsDrawDone] = useState(false);
// const [inAirArea, setInAirArea] = useState(false);
let inAirArea = 'N';
const [alertModal, setAlertModal] = useState({
isOpen: false,
@ -79,15 +76,6 @@ export const LaancDrawControl = props => {
const handlerCustomOnClick = (state, e) => {
console.log('click');
const features = mapObject.queryRenderedFeatures(e.point, {
layers: ['maine']
});
if (features.length > 0) {
inAirArea = 'Y';
// setInAirArea(true);
// console.log(features, '>>>>>관제권?');
}
const type = handlerReturnMode(drawObj.getMode());
const obj = state[type?.toLowerCase()];
@ -135,8 +123,6 @@ export const LaancDrawControl = props => {
radius: obj.properties.radiusInKm * 1000,
id: obj.id
};
// 임시 데이터(circle 관제권 유무 판별 여기서 해줘야 함)
drawObj.setFeatureProperty(obj.id, 'inAirArea', 'N');
drawObj.setFeatureProperty(data.id, 'id', mode);
handlerCreateOneMarker([0, -10], data.coord, data.radius, data.id);
@ -146,7 +132,6 @@ export const LaancDrawControl = props => {
const length = state.currentVertexPosition;
if (obj.coordinates.length > 0) {
drawObj?.setFeatureProperty(obj.id, 'id', mode);
drawObj?.setFeatureProperty(obj.id, 'inAirArea', inAirArea);
// dbl클릭이 click 두번으로 인식돼서, 마지막 값을 없애버리기로 함
if (mode === 'LINE') {
@ -186,8 +171,7 @@ export const LaancDrawControl = props => {
}
const data = {
coord: obj.coordinates,
id: obj.id,
inAirArea: inAirArea
id: obj.id
};
handlerAbnormalityCheck(data, mode);
}
@ -251,7 +235,7 @@ export const LaancDrawControl = props => {
? data.coord
: null;
const datas = { coord: initCoord, mode: mode, inAirArea: inAirArea };
const datas = { coord: initCoord, mode: mode };
handlerSaveAreaInfo(datas);
};
@ -321,8 +305,7 @@ export const LaancDrawControl = props => {
const areaInfo = {
coordinates: [],
bufferZone: 0,
areaType: '',
inAirArea: 'N'
areaType: ''
};
const bufferZone = data.mode === 'POLYGON' ? 0 : 100;
@ -342,7 +325,6 @@ export const LaancDrawControl = props => {
areaInfo.coordinates = prePath;
areaInfo.bufferZone = bufferZone;
areaInfo.inAirArea = inAirArea;
if (areaInfo.areaType === 'CIRCLE') {
const obj = drawObj.getAll().features;
const feature = obj.filter(o => o.properties.id === 'CIRCLE');
@ -354,12 +336,13 @@ export const LaancDrawControl = props => {
areaInfo.coordinates = [point];
areaInfo.bufferZone = feature[0].properties.radiusInKm * 1000;
}
props.handlerCoordinates(areaInfo);
setIsDrawDone(true);
const viewCoordObj = drawObj
.getAll()
.features.filter(o => o.properties?.inAirArea);
.features.filter(o => o.properties.id !== 'BUFFER');
props.setViewCoordObj(viewCoordObj);

15
src/modules/basis/flight/actions/basisFlightAction.ts

@ -97,6 +97,11 @@ const FLIGHT_WEATHER_REQUEST = 'control/gp/FLIGHT_WEATHER_REQUEST';
const FLIGHT_WEATHER_SUCCESS = 'control/gp/FLIGHT_WEATHER_SUCCESS';
const FLIGHT_WEATHER_FAILURE = 'control/gp/FLIGHT_WEATHER_FAILURE';
// 관제권 유무
const AREA_INAIRAREA_REQUEST = 'basis/flight/plan/area/INAIRAREA_REQUEST';
const AREA_INAIRAREA_SUCCESS = 'basis/flight/plan/area/INAIRAREA_SUCCESS';
const AREA_INAIRAREA_FAILURE = 'basis/flight/plan/area/INAIRAREA_FAILURE';
// 비행계획서 조회(승인)
const FLIGHT_APRV_LIST_REQUEST =
'basis/flight/aprv/list/FLIGHT_APRV_LIST_REQUEST';
@ -246,6 +251,13 @@ export const FLIGHT_PLAN_AREA_BUFFER_LIST = createAsyncAction(
AREA_BUFFER_LIST_FAILURE
)<FlightPlanAreaDataList, FlightPlanAreaDataList, AxiosError>();
// 관제권 포함 유무
export const FLIGHT_PLAN_AREA_INAIRAREA = createAsyncAction(
AREA_INAIRAREA_REQUEST,
AREA_INAIRAREA_SUCCESS,
AREA_INAIRAREA_FAILURE
)<FlightPlanAreaDataList, boolean, AxiosError>();
// 비행계획서 조회(승인)
export const FLIGHT_APRV_LIST = createAsyncAction(
FLIGHT_APRV_LIST_REQUEST,
@ -305,7 +317,8 @@ const actions = {
FLIGHT_APRV_PROC,
SEARCH_AREA,
FLIGHT_SCHEDULE_LIST,
FlightweatherAction
FlightweatherAction,
FLIGHT_PLAN_AREA_INAIRAREA
};
export type FlightAction = ActionType<typeof actions>;

5
src/modules/basis/flight/apis/basisFlightApi.ts

@ -82,5 +82,10 @@ export const flightPlanAPI = {
},
scheduleList: async (date: string) => {
return await axios.get(`api/bas/flight/schedule?searchDate=${date}`);
},
inAirArea: async (data: FlightPlanAreaDataList) => {
const res = await axios.post(`api/bas/flight/airspace/contains`, data);
return res.data.result;
}
};

13
src/modules/basis/flight/models/basisFlightModel.ts

@ -21,6 +21,7 @@ export interface FlightState {
selectGroup: SelectGroupData | undefined;
listSelect: ListGroupData | undefined;
aprvSelect: ListGroupData | undefined;
inAirArea: boolean | undefined;
}
export interface weatherData {
serviceKey: string;
@ -124,7 +125,6 @@ export interface FlightPlanAreaData {
updateDt?: string;
coordList?: FlightPlanAreaCoordDataList | undefined;
bufferCoordList?: FlightPlanAreaCoordDataList | undefined;
inAirArea: boolean;
// docState: string,
}
@ -249,6 +249,7 @@ export const initFlight = {
page: 1,
total: 0,
conut: 0,
inAirArea: false,
selectGroup: {
cstmrSno: 0,
groupId: '',
@ -325,8 +326,7 @@ export const initFlight = {
createUserId: '',
createDt: ''
}
],
inAirArea: false
]
}
],
@ -395,6 +395,7 @@ export const initFlight = {
export const initFlightBas = {
page: 1,
total: 0,
inAirArea: false,
plan: {
planSno: 0,
groupId: '',
@ -476,8 +477,7 @@ export const initFlightBas = {
createDt: '',
updateUserId: '',
updateDt: '',
coordList: undefined,
inAirArea: false
coordList: undefined
},
coord: {
planAreaCoordSno: 0,
@ -539,8 +539,7 @@ export const initFlightBas = {
createUserId: '',
createDt: ''
}
],
inAirArea: false
]
}
],
pilotList: [

22
src/modules/basis/flight/reducers/basisFlightReducer.ts

@ -124,19 +124,7 @@ export const flightReducer = createReducer<FlightState, Actions.FlightAction>(
.handleAction(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
if (draft.areaCoordList) {
if (draft.areaCoordList.length > 0) {
// const inAirArea = draft.areaCoordList[0].inAirArea;
const inAirArea = sessionStorage.getItem('inAirArea') as string;
if (inAirArea.includes('N')) {
draft.areaCoordList[0] = { ...data[0], inAirArea: false };
} else {
draft.areaCoordList[0] = { ...data[0], inAirArea: true };
}
// draft.areaCoordList[0] = { ...data[0], inAirArea };
// draft.areaCoordList[0] = { ...data[0] };
}
}
draft.areaCoordList = data;
})
)
//비행구역설정 날씨 API
@ -175,4 +163,12 @@ export const flightReducer = createReducer<FlightState, Actions.FlightAction>(
const data = action.payload;
draft.scheduleList = data;
})
)
// 관제권 포함 유무
.handleAction(Actions.FLIGHT_PLAN_AREA_INAIRAREA.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.inAirArea = data;
})
);

14
src/modules/basis/flight/sagas/basisFlightSaga.ts

@ -433,6 +433,19 @@ function* searchAreaSaga(
}
}
// 관제권 유무
function* inAirAreaSaga(
action: ActionType<typeof Actions.FLIGHT_PLAN_AREA_INAIRAREA.request>
) {
try {
const data = action.payload;
const res = yield call(Apis.flightPlanAPI.inAirArea, data);
yield put(Actions.FLIGHT_PLAN_AREA_INAIRAREA.success(res));
} catch (error) {
yield put(Actions.FLIGHT_PLAN_AREA_INAIRAREA.failure(error));
}
}
export function* flightSaga() {
yield takeEvery(Actions.PUBLIC_AREA_LIST.request, listAreaSaga);
// yield takeEvery(Actions.FLIGHT_PLAN_AREA.request, createFlightPlanArea);
@ -449,4 +462,5 @@ export function* flightSaga() {
yield takeEvery(Actions.SEARCH_AREA.request, searchAreaSaga);
yield takeEvery(Actions.FLIGHT_SCHEDULE_LIST.request, scheduleListSaga);
yield takeEvery(Actions.FlightweatherAction.request, WeatherSaga);
yield takeEvery(Actions.FLIGHT_PLAN_AREA_INAIRAREA.request, inAirAreaSaga);
}

Loading…
Cancel
Save