Browse Source

[redux-toolkit] store 경로 변경 및 modules 삭제

master
junh_eee(이준희) 7 months ago
parent
commit
dfc40defad
  1. BIN
      README.md
  2. 4
      src/@core/layouts/HorizontalLayout.js
  3. 4
      src/@core/layouts/VerticalLayout.js
  4. 4
      src/@core/layouts/components/layout-wrapper/index.js
  5. 2
      src/@core/layouts/components/menu/vertical-menu/index.js
  6. 4
      src/@core/layouts/components/navbar/NavbarUser.js
  7. 6
      src/@core/layouts/components/navbar/UserDropdown.js
  8. 8
      src/components/account/find/AccountFindPassword.js
  9. 8
      src/components/account/find/AccountFindUserId.js
  10. 6
      src/components/account/login/AccountLogin.js
  11. 6
      src/components/account/mypage/AccountMypagePwForm.js
  12. 6
      src/components/account/register/AccountRegisterForm.js
  13. 6
      src/components/account/register/AccountRegisterTerm.js
  14. 2
      src/components/analysis/history/AnalysisHistoryGrid.js
  15. 2
      src/components/analysis/simulation/AnalysisSimuationInfo.js
  16. 2
      src/components/basis/flight/schedule/FlightScheduleGrid.js
  17. 2
      src/components/basis/flight/schedule/FlightScheduleSearch.js
  18. 2
      src/components/dashboard/DashboardGroupList.js
  19. 2
      src/components/dashboard/DroneFlightSchedule.js
  20. 8
      src/components/laanc/LaancQr.js
  21. 4
      src/components/laanc/list/LaancDetail.js
  22. 8
      src/components/laanc/list/LaancGrid.js
  23. 4
      src/components/laanc/list/LaancSearch.js
  24. 12
      src/components/laanc/map/FlightArea.js
  25. 14
      src/components/laanc/map/LaancAreaMap.js
  26. 8
      src/components/laanc/map/LaancDrawControl.js
  27. 4
      src/components/laanc/map/LaancMapSearch.js
  28. 8
      src/components/laanc/step/LaancStep1.js
  29. 6
      src/components/laanc/step/LaancStep2.js
  30. 2
      src/components/laanc/step/LaancStep3.js
  31. 4
      src/components/map/mapbox/MapBoxMap.js
  32. 12
      src/components/map/mapbox/dron/DronMarker.js
  33. 6
      src/components/map/mapbox/dron/DronToast.js
  34. 2
      src/components/map/mapbox/feature/FeatureAirZone.js
  35. 4
      src/components/message/MessageErrorModal.js
  36. 4
      src/components/message/MessageInfoModal.js
  37. 4
      src/components/message/MessageModal.js
  38. 4
      src/components/websocket/WebsocketClient.js
  39. 8
      src/containers/account/mypage/AccountMypageContainer.js
  40. 12
      src/containers/analysis/history/AnalysisHistoryContainer.js
  41. 4
      src/containers/analysis/history/AnalysisHistoryDetailContainer.js
  42. 6
      src/containers/analysis/simulator/AnalysisSimulationContainer.js
  43. 2
      src/containers/basis/BasisContainer.js
  44. 8
      src/containers/basis/dron/BasisDronContainer.js
  45. 19
      src/containers/basis/dron/BasisDronDetailContainer.js
  46. 6
      src/containers/basis/dron/BasisIdntfContainer.js
  47. 4
      src/containers/basis/flight/plan/WeatherContainer.js
  48. 8
      src/containers/basis/group/BasisGroupApprovalContainer.js
  49. 7
      src/containers/basis/group/BasisGroupContainer.js
  50. 4
      src/containers/basis/group/BasisGroupDetailContainer.js
  51. 4
      src/containers/basis/group/BasisGroupDetailJoinContainer.js
  52. 7
      src/containers/basis/group/BasisGroupUsersContainer.js
  53. 6
      src/containers/cstmrService/faq/FaqContainer.js
  54. 8
      src/containers/cstmrService/inquiry/AdminInquiryContainer.js
  55. 8
      src/containers/cstmrService/inquiry/UserInquiryContainer.js
  56. 4
      src/containers/laanc/LaancContainer.js
  57. 8
      src/containers/laanc/LaancPlanContainer.js
  58. 4
      src/containers/main/dash/MainDashContainer.js
  59. 4
      src/containers/statistics/AbnormalSituationContainer.js
  60. 4
      src/containers/statistics/FlightContainer.js
  61. 4
      src/containers/statistics/FlightResultContainer.js
  62. 2
      src/index.js
  63. 161
      src/modules/NAMING.md
  64. 55
      src/modules/_sample/actions/index.ts
  65. 14
      src/modules/_sample/apis/index.ts
  66. 5
      src/modules/_sample/index.ts
  67. 30
      src/modules/_sample/models/index.ts
  68. 15
      src/modules/_sample/reducers/index.ts
  69. 21
      src/modules/_sample/sagas/index.ts
  70. 123
      src/modules/account/auth/actions/index.ts
  71. 47
      src/modules/account/auth/apis/index.ts
  72. 5
      src/modules/account/auth/index.ts
  73. 179
      src/modules/account/auth/models/index.ts
  74. 87
      src/modules/account/auth/reducers/index.ts
  75. 302
      src/modules/account/auth/sagas/index.ts
  76. 55
      src/modules/account/find/actions/index.ts
  77. 31
      src/modules/account/find/apis/index.ts
  78. 5
      src/modules/account/find/index.ts
  79. 12
      src/modules/account/find/models/index.ts
  80. 36
      src/modules/account/find/reducers/index.ts
  81. 61
      src/modules/account/find/sagas/index.ts
  82. 40
      src/modules/account/register/actions/index.ts
  83. 36
      src/modules/account/register/apis/index.ts
  84. 5
      src/modules/account/register/index.ts
  85. 54
      src/modules/account/register/models/index.ts
  86. 22
      src/modules/account/register/reducers/index.ts
  87. 51
      src/modules/account/register/sagas/index.ts
  88. 66
      src/modules/analysis/history/actions/index.ts
  89. 19
      src/modules/analysis/history/apis/index.ts
  90. 5
      src/modules/analysis/history/index.ts
  91. 80
      src/modules/analysis/history/models/index.ts
  92. 51
      src/modules/analysis/history/reducers/index.ts
  93. 71
      src/modules/analysis/history/sagas/index.ts
  94. 72
      src/modules/analysis/simulation/actions/index.ts
  95. 28
      src/modules/analysis/simulation/apis/index.ts
  96. 5
      src/modules/analysis/simulation/index.ts
  97. 78
      src/modules/analysis/simulation/models/index.ts
  98. 59
      src/modules/analysis/simulation/reducers/index.ts
  99. 86
      src/modules/analysis/simulation/sagas/index.ts
  100. 145
      src/modules/basis/drone/actions/index.ts
  101. Some files were not shown because too many files have changed in this diff Show More

BIN
README.md

Binary file not shown.

4
src/@core/layouts/HorizontalLayout.js

@ -6,7 +6,7 @@ import { Link } from 'react-router-dom';
import {
clientHandlerContentWidth,
clientHandlerMenuHidden
} from '../../_redux/features/layout/layoutSlice';
} from '../../redux/features/layout/layoutSlice';
// ** Third Party Components
import classnames from 'classnames';
@ -30,7 +30,7 @@ import { useNavbarType } from '@hooks/useNavbarType';
import { useFooterType } from '@hooks/useFooterType';
import { useNavbarColor } from '@hooks/useNavbarColor';
import { useSelector, useDispatch } from '@src/_redux/store';
import { useSelector, useDispatch } from '@src/redux/store';
// ** Styles
import '@styles/base/core/menu/menu-types/horizontal-menu.scss';

4
src/@core/layouts/VerticalLayout.js

@ -3,12 +3,12 @@ import { useState, useEffect } from 'react';
import { useLocation } from 'react-router-dom';
// ** Store & Actions
import { useSelector, useDispatch } from '@src/_redux/store';
import { useSelector, useDispatch } from '@src/redux/store';
import {
clientHandlerMenuCollapsed,
clientHandlerContentWidth,
clientHandlerMenuHidden
} from '../../_redux/features/layout/layoutSlice';
} from '../../redux/features/layout/layoutSlice';
// ** Third Party Components
import classnames from 'classnames';

4
src/@core/layouts/components/layout-wrapper/index.js

@ -5,12 +5,12 @@ import { Fragment, useEffect } from 'react';
import classnames from 'classnames';
// ** Store & Actions
import { useSelector, useDispatch } from '@src/_redux/store';
import { useSelector, useDispatch } from '@src/redux/store';
import {
clientHandlerContentWidth,
clientHandlerMenuCollapsed,
clientHandlerMenuHidden
} from '@src/_redux/features/layout/layoutSlice';
} from '@src/redux/features/layout/layoutSlice';
// ** Styles
import 'animate.css/animate.css';

2
src/@core/layouts/components/menu/vertical-menu/index.js

@ -15,7 +15,7 @@ import statistics from '@src/navigation/statistics';
// ** Third Party Components
import classnames from 'classnames';
import PerfectScrollbar from 'react-perfect-scrollbar';
import { useSelector } from '@src/_redux/store';
import { useSelector } from '@src/redux/store';
// ** Vertical Menu Components
import VerticalMenuHeader from './VerticalMenuHeader';

4
src/@core/layouts/components/navbar/NavbarUser.js

@ -2,10 +2,10 @@
import { Fragment } from 'react';
// ** Third Party Components
import { Menu, Moon, Sun } from 'react-feather';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { Nav, NavItem, NavLink } from '@component/ui';
import UserDropdown from './UserDropdown';
import { clientDispatchTopMenu } from '@src/_redux/features/layout/layoutSlice';
import { clientDispatchTopMenu } from '@src/redux/features/layout/layoutSlice';
const NavbarUser = props => {
// ** Props

6
src/@core/layouts/components/navbar/UserDropdown.js

@ -8,7 +8,7 @@ import { isUserLoggedIn } from '@utils';
import { useEffect, useState } from 'react';
import { Power, User } from 'react-feather';
// ** Store & Actions
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { Link, useHistory } from 'react-router-dom';
// ** Third Party Components
import {
@ -17,12 +17,12 @@ import {
DropdownToggle,
UncontrolledDropdown
} from '@component/ui';
import { setLogout } from '@src/_redux/features/account/auth/authThunk';
import { setLogout } from '@src/redux/features/account/auth/authThunk';
import {
COOKIE_ACCESS_TOKEN,
COOKIE_REFRESH_TOKEN,
cookieStorage
} from '@src/modules/account/auth/service/cookie';
} from '@src/utility/authService/cookie';
const UserDropdown = () => {
// ** Store Vars

8
src/components/account/find/AccountFindPassword.js

@ -1,4 +1,4 @@
import { useDispatch } from '@src/_redux/store';
import { useDispatch } from '@src/redux/store';
import { useState, useEffect } from 'react';
import {
InputGroup,
@ -16,12 +16,12 @@ import {
} from '@component/ui';
import { User, Lock } from 'react-feather';
import '../../../assets/css/custom.css';
import { confirmCrtfyhp } from '@src/_redux/features/account/register/registerThunk';
import { confirmCrtfyhp } from '@src/redux/features/account/register/registerThunk';
import {
sendCrtfyhpForPw,
updateUserPw
} from '@src/_redux/features/account/find/findThunk';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
} from '@src/redux/features/account/find/findThunk';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_CRTFYHP, MODAL_BODY, MODAL_HEADER } from '@src/configs/msgConst';
export const AccountFindPassword = props => {

8
src/components/account/find/AccountFindUserId.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useState, useEffect } from 'react';
import {
InputGroup,
@ -16,12 +16,12 @@ import {
} from '@component/ui';
import { User } from 'react-feather';
import { confirmCrtfyhp } from '@src/_redux/features/account/register/registerThunk';
import { confirmCrtfyhp } from '@src/redux/features/account/register/registerThunk';
import {
findUserId,
sendCrtfyhpForId
} from '@src/_redux/features/account/find/findThunk';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
} from '@src/redux/features/account/find/findThunk';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_CRTFYHP, MODAL_BODY, MODAL_HEADER } from '@src/configs/msgConst';
export const AccountFindUserId = props => {

6
src/components/account/login/AccountLogin.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import {
Button,
Form,
@ -12,8 +12,8 @@ import { Mail, Lock } from 'react-feather';
import { Link } from 'react-router-dom';
import { useEffect, useState } from 'react';
import kacLogo from '../../../assets/images/logo/kac_logo.svg';
import { setLogin } from '@src/_redux/features/account/auth/authThunk';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
import { setLogin } from '@src/redux/features/account/auth/authThunk';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_HEADER, MODAL_BODY } from '@src/configs/msgConst';
export const AccountLogin = ({ history }) => {

6
src/components/account/mypage/AccountMypagePwForm.js

@ -1,5 +1,5 @@
// ** React Imports
import { useSelector, useDispatch } from '@src/_redux/store';
import { useSelector, useDispatch } from '@src/redux/store';
import { useState, useEffect } from 'react';
import {
Card,
@ -16,8 +16,8 @@ import { useHistory } from 'react-router-dom';
import {
checkUserPw,
updateUserPw
} from '@src/_redux/features/account/auth/authThunk';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
} from '@src/redux/features/account/auth/authThunk';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_HEADER } from '@src/configs/msgConst';
const AccountMypagePwForm = ({ activeTab }) => {

6
src/components/account/register/AccountRegisterForm.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import * as yup from 'yup';
import { Fragment, useEffect, useState } from 'react';
import classnames from 'classnames';
@ -18,8 +18,8 @@ import {
import {
confirmCrtfyhp,
sendCrtfyhp
} from '@src/_redux/features/account/register/registerThunk';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
} from '@src/redux/features/account/register/registerThunk';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_CRTFYHP, MODAL_BODY, MODAL_HEADER } from '@src/configs/msgConst';
export const AccountRegisterForm = ({

6
src/components/account/register/AccountRegisterTerm.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useEffect, useState } from 'react';
import {
Row,
@ -11,8 +11,8 @@ import {
Button,
FormGroup
} from '@component/ui';
import { getTermsList } from '@src/_redux/features/account/register/registerThunk';
import { clientAgreeTerms } from '@src/_redux/features/account/register/registerSlice';
import { getTermsList } from '@src/redux/features/account/register/registerThunk';
import { clientAgreeTerms } from '@src/redux/features/account/register/registerSlice';
export const AccountRegisterTerm = ({ stepper, type, movePage }) => {
const dispatch = useDispatch();

2
src/components/analysis/history/AnalysisHistoryGrid.js

@ -1,7 +1,7 @@
import { GridDatabase } from '../../../components/crud/grid/GridDatatable';
import { Card, Spinner } from '@component/ui';
import { ExcelExportButton } from '../../crud/excel/ExcelExportButton';
import { useSelector } from '@src/_redux/store';
import { useSelector } from '@src/redux/store';
export const AnalysisHistoryGrid = props => {
const { loading } = useSelector(state => state.layoutState);

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

@ -1,6 +1,6 @@
import dayjs from 'dayjs';
import { useEffect, useState, useRef, useCallback } from 'react';
import { useSelector } from '@src/_redux/store';
import { useSelector } from '@src/redux/store';
import { Spinner } from '@component/ui';
export const AnalysisSimulationInfo = props => {

2
src/components/basis/flight/schedule/FlightScheduleGrid.js

@ -2,7 +2,7 @@ import { useRef, useState } from 'react';
import { GridDatabase } from '@src/components/crud/grid/GridDatatable';
import { Row, Col, Card, Spinner } from '@component/ui';
import FlightScheduleRealTime from './FlightScheduleRealTime';
import { useSelector } from '@src/_redux/store';
import { useSelector } from '@src/redux/store';
import dayjs from 'dayjs';
/**

2
src/components/basis/flight/schedule/FlightScheduleSearch.js

@ -3,7 +3,7 @@ import { useEffect, useState } from 'react';
import { Row, Col, Card, CardBody, Button } from '@component/ui';
import { Search, Calendar } from 'react-feather';
import Flatpickr from 'react-flatpickr';
import { flightScheduleList } from '../../../../_redux/features/laanc/laancThunk';
import { flightScheduleList } from '../../../../redux/features/laanc/laancThunk';
import { useDispatch } from 'react-redux';
import useInterval from '@src/utility/hooks/useInterval';

2
src/components/dashboard/DashboardGroupList.js

@ -1,8 +1,8 @@
import { Plus } from 'react-feather';
import { Card, CardBody, CardHeader, CardTitle } from '@component/ui';
import { GridDatabase } from '../../components/crud/grid/GridDatatable';
import { EDateType } from '../../modules/main/dash/models/mainDashModel.ts';
import { IoIosArrowRoundDown, IoIosArrowRoundUp } from 'react-icons/io';
import { EDateType } from '@src/redux/features/dashboard/dashboardState';
const titles = {
dailyFlightPlan: '일일 비행계획 현황',

2
src/components/dashboard/DroneFlightSchedule.js

@ -1,4 +1,4 @@
import { useSelector } from '@src/_redux/store';
import { useSelector } from '@src/redux/store';
import { Plus } from 'react-feather';
import {
Card,

8
src/components/laanc/LaancQr.js

@ -1,9 +1,9 @@
import { useEffect, useState, useRef } from 'react';
import { ModalHeader, ModalBody, ModalFooter, Button } from '@component/ui';
import axios from '../../modules/utils/customAxiosUtil';
import { checkLaancTsQr } from '@src/_redux/features/laanc/laancThunk';
import { useDispatch, useSelector } from '@src/_redux/store';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
import axios from '@src/utility/customAxiosUtil';
import { checkLaancTsQr } from '@src/redux/features/laanc/laancThunk';
import { useDispatch, useSelector } from '@src/redux/store';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_BODY, MODAL_CRTFYHP, MODAL_HEADER } from '@src/configs/msgConst';
// 이제 handleUserEvent는 300ms 동안 추가 호출이 없을 때만 실행됩니다.

4
src/components/laanc/list/LaancDetail.js

@ -1,5 +1,5 @@
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import {
Row,
Col,
@ -12,7 +12,7 @@ import {
Input
} from '@component/ui';
import FlightArea from '../map/FlightArea';
import { getTermsList } from '@src/_redux/features/account/register/registerThunk';
import { getTermsList } from '@src/redux/features/account/register/registerThunk';
export default function LaancDetail({ data, handlerLaancClose }) {
const dispatch = useDispatch();

8
src/components/laanc/list/LaancGrid.js

@ -1,5 +1,5 @@
import { useEffect, useState } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { pdfjs } from 'react-pdf';
import { GridDatabase } from '@src/components/crud/grid/GridDatatable';
import { Row, Col, Card, Spinner, Modal, Button } from '@component/ui';
@ -7,13 +7,13 @@ import dayjs from 'dayjs';
import {
AreaBufferList,
getLaancDetail
} from '@src/_redux/features/laanc/laancThunk';
} from '@src/redux/features/laanc/laancThunk';
import {
clientInitApprovalDetail,
clientSaveAreaCoordinateList
} from '@src/_redux/features/laanc/laancSlice';
import { clientDrawTypeChange } from '@src/_redux/features/control/map/mapSlice';
} from '@src/redux/features/laanc/laancSlice';
import { clientDrawTypeChange } from '@src/redux/features/control/map/mapSlice';
import { HOST } from '../../../configs/constants';
import LaancDetail from './LaancDetail';
pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;

4
src/components/laanc/list/LaancSearch.js

@ -3,8 +3,8 @@ import { Row, Col, Card, CardBody, Button } from '@component/ui';
import { Search, Calendar } from 'react-feather';
import Flatpickr from 'react-flatpickr';
import dayjs from 'dayjs';
import { laancAprvList } from '@src/_redux/features/laanc/laancThunk';
import { useDispatch, useSelector } from '@src/_redux/store';
import { laancAprvList } from '@src/redux/features/laanc/laancThunk';
import { useDispatch, useSelector } from '@src/redux/store';
function LaancSearch({ isSearch }) {
const dispatch = useDispatch();

12
src/components/laanc/map/FlightArea.js

@ -1,5 +1,5 @@
import { useEffect, useRef, useState, lazy, Suspense } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import {
Button,
Modal,
@ -34,20 +34,20 @@ import {
import {
clientSaveAreaCoordinateList,
clientSaveAreaDetailList
} from '../../../_redux/features/laanc/laancSlice';
} from '../../../redux/features/laanc/laancSlice';
import {
clientMapInit,
clientDrawTypeChange
} from '@src/_redux/features/control/map/mapSlice';
import { clientAltitudeData } from '@src/_redux/features/laanc/laancSlice';
} from '@src/redux/features/control/map/mapSlice';
import { clientAltitudeData } from '@src/redux/features/laanc/laancSlice';
// geojson
import gimpo from '../../map/geojson/gimpoAirportAirArea.json';
import threebox from 'threebox-plugin';
import { initFlightBasState } from '@src/_redux/features/laanc/laancState';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
import { initFlightBasState } from '@src/redux/features/laanc/laancState';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
const LaancAreaMap = lazy(() => import('./LaancAreaMap'));

14
src/components/laanc/map/LaancAreaMap.js

@ -4,13 +4,13 @@ import mapboxgl from 'mapbox-gl';
import threebox from 'threebox-plugin';
import MapboxLanguage from '@mapbox/mapbox-gl-language';
import { MAPBOX_TOKEN } from '../../../configs/constants';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { Card, CardBody } from '@component/ui';
import { initFlightBasState } from '../../../modules/laanc/models';
import { checkLaancValidArea } from '../../../_redux/features/laanc/laancThunk';
import { AreaBufferList } from '../../../_redux/features/laanc/laancThunk';
import { clientSaveAreaCoordinateList } from '@src/_redux/features/laanc/laancSlice';
import { clientMapInit } from '@src/_redux/features/control/map/mapSlice';
import { initFlightBasState } from '@src/redux/features/laanc/laancState';
import { checkLaancValidArea } from '../../../redux/features/laanc/laancThunk';
import { AreaBufferList } from '../../../redux/features/laanc/laancThunk';
import { clientSaveAreaCoordinateList } from '@src/redux/features/laanc/laancSlice';
import { clientMapInit } from '@src/redux/features/control/map/mapSlice';
import {
FormattingCoord,
handlerFitBounds,
@ -18,7 +18,7 @@ import {
handlerCreateAirSpace
} from '../../../utility/MapUtils';
import gimpo from '../../map/geojson/gimpoAirportAirArea.json';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_HEADER } from '@src/configs/msgConst';
const LaancMapSearch = lazy(() => import('./LaancMapSearch'));

8
src/components/laanc/map/LaancDrawControl.js

@ -1,5 +1,5 @@
import { useEffect, useRef, useState, lazy, Suspense } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import {
CalculateDistance,
handlerCreateGroupMarker,
@ -9,18 +9,18 @@ import {
handlerRemoveGroupMarker,
handlerReturnMode
} from '../../../utility/MapUtils';
import { clientDrawTypeChange } from '@src/_redux/features/control/map/mapSlice';
import { clientDrawTypeChange } from '@src/redux/features/control/map/mapSlice';
import MapboxDraw from '@mapbox/mapbox-gl-draw';
import {
CircleMode,
DirectMode,
SimpleSelectMode
} from 'mapbox-gl-draw-circle';
import axios from '../../../modules/utils/customAxiosUtil';
import axios from '@src/utility/customAxiosUtil';
import createSupplementaryPointsForCircle from 'mapbox-gl-draw-circle/lib/utils/create_supplementary_points_circle';
import createSupplementaryPoints from 'mapbox-gl-draw-circle/node_modules/@mapbox/mapbox-gl-draw/src/lib/create_supplementary_points';
import Constants from 'mapbox-gl-draw-circle/node_modules/@mapbox/mapbox-gl-draw/src/constants';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_BODY, MODAL_HEADER } from '@src/configs/msgConst';
export default function LaancDrawControl(props) {

4
src/components/laanc/map/LaancMapSearch.js

@ -6,8 +6,8 @@ import {
} from '@component/ui';
import { Search } from 'react-feather';
import { useState } from 'react';
import { getFlightSearchArea } from '@src/_redux/features/laanc/laancThunk';
import { useDispatch, useSelector } from '@src/_redux/store';
import { getFlightSearchArea } from '@src/redux/features/laanc/laancThunk';
import { useDispatch, useSelector } from '@src/redux/store';
export default function LaancMapSearch({ mapObject }) {
const dispatch = useDispatch();

8
src/components/laanc/step/LaancStep1.js

@ -1,6 +1,6 @@
import { useEffect, useState, useRef, lazy, Suspense } from 'react';
import { useLocation } from 'react-router-dom';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import Flatpickr from 'react-flatpickr';
import '@styles/react/libs/flatpickr/flatpickr.scss';
import {
@ -8,9 +8,9 @@ import {
checkLaancValidArea,
AreaBufferList,
laancAltitudeData
} from '@src/_redux/features/laanc/laancThunk';
} from '@src/redux/features/laanc/laancThunk';
import { AlertCircle, Info } from 'react-feather';
import axios from '../../../modules/utils/customAxiosUtil';
import axios from '@src/utility/customAxiosUtil';
import dayjs from 'dayjs';
import {
Row,
@ -25,7 +25,7 @@ import {
Modal,
Popover
} from '@component/ui';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_BODY, MODAL_HEADER } from '@src/configs/msgConst';
const LaancModal = lazy(() => import('../LaancModal'));

6
src/components/laanc/step/LaancStep2.js

@ -1,5 +1,5 @@
import React, { useEffect, useState, lazy, Suspense } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import '@styles/react/libs/flatpickr/flatpickr.scss';
import { CheckCircle } from 'react-feather';
import {
@ -16,8 +16,8 @@ import {
Input,
CustomInput
} from '@component/ui';
import { createLaancFlight } from '@src/_redux/features/laanc/laancThunk';
import { getTermsList } from '@src/_redux/features/account/register/registerThunk';
import { createLaancFlight } from '@src/redux/features/laanc/laancThunk';
import { getTermsList } from '@src/redux/features/account/register/registerThunk';
const FlightArea = lazy(() => import('../map/FlightArea'));

2
src/components/laanc/step/LaancStep3.js

@ -1,5 +1,5 @@
import React, { useState, lazy, Suspense } from 'react';
import { useSelector } from '@src/_redux/store';
import { useSelector } from '@src/redux/store';
import { Document, Page, pdfjs } from 'react-pdf';
import {
Row,

4
src/components/map/mapbox/MapBoxMap.js

@ -6,7 +6,7 @@ import {
lazy,
Suspense
} from 'react';
import { useSelector, useDispatch } from '@src/_redux/store';
import { useSelector, useDispatch } from '@src/redux/store';
import {
Button,
Modal,
@ -34,7 +34,7 @@ import gimPoGrid from '../../../components/map/geojson/airportAirArea.json';
// 김포 선형 공역
import flatGimpo from '../../map/geojson/flatGimpoAirportAirArea.json';
import { clientMapInit } from '@src/_redux/features/control/map/mapSlice';
import { clientMapInit } from '@src/redux/features/control/map/mapSlice';
let gridCoords = [];
let altitudeMarker = [];

12
src/components/map/mapbox/dron/DronMarker.js

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { shallowEqual } from 'react-redux';
import '../../../../assets/css/custom.css';
import FlightIcon from '../../../../assets/images/airplan_org.svg';
@ -10,14 +10,14 @@ import DronUamIcon from '../../../../assets/images/uam_icon.png';
import {
controlDt,
getFlightPlan
} from '@src/_redux/features/control/gp/gpThunk';
import { getHistory } from '@src/_redux/features/control/gp/gpThunk';
import { ClientcontrolGpCountInit } from '@src/_redux/features/control/gp/gpSlice';
} from '@src/redux/features/control/gp/gpThunk';
import { getHistory } from '@src/redux/features/control/gp/gpThunk';
import { ClientcontrolGpCountInit } from '@src/redux/features/control/gp/gpSlice';
import {
clientObjectClick,
clientObjectUnClick
} from '@src/_redux/features/control/map/mapSlice';
import { getJoinGroupList } from '@src/_redux/features/basis/group/groupThunk';
} from '@src/redux/features/control/map/mapSlice';
import { getJoinGroupList } from '@src/redux/features/basis/group/groupThunk';
export const DronMarker = props => {
const dispatch = useDispatch();

6
src/components/map/mapbox/dron/DronToast.js

@ -1,14 +1,14 @@
import { useEffect, useState } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import useAudio from '../../../../utility/hooks/useAudio';
import warning from '../../../../assets/sounds/warning.mp3';
import { toast } from 'react-toastify';
import { Fragment } from 'react';
import { clientObjectClick } from '@src/_redux/features/control/map/mapSlice';
import { clientObjectClick } from '@src/redux/features/control/map/mapSlice';
import {
controlDt,
getFlightPlan
} from '@src/_redux/features/control/gp/gpThunk';
} from '@src/redux/features/control/gp/gpThunk';
import Avatar from '../../../../@core/components/avatar';
import { Info } from 'react-feather';

2
src/components/map/mapbox/feature/FeatureAirZone.js

@ -2,7 +2,7 @@ import '../../../../assets/css/custom.css';
import { useEffect } from 'react';
import geoJson from '../../geojson/airArea.json';
import * as turf from '@turf/turf';
import { useSelector } from '@src/_redux/store';
import { useSelector } from '@src/redux/store';
// 격자 공역 Source
const airPort = [

4
src/components/message/MessageErrorModal.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import {
Button,
Modal,
@ -6,7 +6,7 @@ import {
ModalBody,
ModalFooter
} from '@component/ui';
import { isNoError } from '@src/_redux/features/comn/message/messageSlice';
import { isNoError } from '@src/redux/features/comn/message/messageSlice';
export const MessageErrorModal = props => {
const dispatch = useDispatch();

4
src/components/message/MessageInfoModal.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import {
Button,
Modal,
@ -7,7 +7,7 @@ import {
ModalFooter
} from '@component/ui';
import { useHistory } from 'react-router-dom';
import { isNoMessage } from '@src/_redux/features/comn/message/messageSlice';
import { isNoMessage } from '@src/redux/features/comn/message/messageSlice';
export const MessageInfoModal = props => {
const dispatch = useDispatch();

4
src/components/message/MessageModal.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import {
Button,
Modal,
@ -7,7 +7,7 @@ import {
ModalFooter
} from '@component/ui';
import { useHistory } from 'react-router-dom';
import { closeModal } from '@src/_redux/features/comn/message/messageSlice';
import { closeModal } from '@src/redux/features/comn/message/messageSlice';
export const MessageModal = () => {
const dispatch = useDispatch();

4
src/components/websocket/WebsocketClient.js

@ -1,9 +1,9 @@
import React, { useEffect, useState, useRef } from 'react';
import { VscLoading } from 'react-icons/vsc';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useHistory } from 'react-router-dom';
import { WS_HOST } from '../../configs/constants';
import { getControlGp } from '@src/_redux/features/control/gp/gpThunk';
import { getControlGp } from '@src/redux/features/control/gp/gpThunk';
const WebsocketClient = () => {
const dispatch = useDispatch();
const history = useHistory();

8
src/containers/account/mypage/AccountMypageContainer.js

@ -1,6 +1,6 @@
// ** React Imports
import { useState, useEffect } from 'react';
import { useSelector, useDispatch } from '@src/_redux/store';
import { useSelector, useDispatch } from '@src/redux/store';
// ** Third Party Components
import { User, Lock } from 'react-feather';
import { Nav, NavItem, NavLink } from '@component/ui';
@ -11,13 +11,13 @@ import { ConfirmModal } from '../../../components/modal/ConfirmModal';
import {
confirmCrtfyhp,
sendCrtfyhp
} from '@src/_redux/features/account/register/registerThunk';
} from '@src/redux/features/account/register/registerThunk';
import {
getUserPage,
updateUser,
deleteUser
} from '@src/_redux/features/account/auth/authThunk';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
} from '@src/redux/features/account/auth/authThunk';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_CRTFYHP, MODAL_HEADER, MODAL_BODY } from '@src/configs/msgConst';
// ** Function to toggle tabs

12
src/containers/analysis/history/AnalysisHistoryContainer.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { shallowEqual } from 'react-redux';
import dayjs from 'dayjs';
import { useEffect, useState } from 'react';
@ -6,17 +6,17 @@ import { Link } from 'react-router-dom';
import { AnalysisHistoryGrid } from '../../../components/analysis/history/AnalysisHistoryGrid';
import { AnalysisHistorySearch } from '../../../components/analysis/history/AnalysisHistorySearch';
import { CustomMainLayout } from '../../../components/layout/CustomMainLayout';
import { clientSelectHstryGroup } from '@src/_redux/features/analysis/history/historySlice';
import { getHstryList } from '@src/_redux/features/analysis/history/historyThunk';
import { clientSelectHstryGroup } from '@src/redux/features/analysis/history/historySlice';
import { getHstryList } from '@src/redux/features/analysis/history/historyThunk';
import FlightPlanGroupGrid from '../../../components/basis/flight/plan/FlightPlanGroupGrid';
import { Col, Row } from '@component/ui';
import { clientRoupSelect } from '@src/_redux/features/laanc/laancSlice';
import { clientRoupSelect } from '@src/redux/features/laanc/laancSlice';
import { MessageErrorModal } from '../../../components/message/MessageErrorModal';
import {
getGroupList,
getJoinGroupList
} from '@src/_redux/features/basis/group/groupThunk';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
} from '@src/redux/features/basis/group/groupThunk';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_BODY, MODAL_HEADER } from '@src/configs/msgConst';
export const AnalysisHistoryContainer = props => {

4
src/containers/analysis/history/AnalysisHistoryDetailContainer.js

@ -1,6 +1,6 @@
import dayjs from 'dayjs';
import { useEffect } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useParams } from 'react-router-dom';
import { AnalysisHistoryDetailGrid } from '../../../components/analysis/history/AnalysisHistoryDetailGrid';
import { AnalysisHistoryDetailStatic } from '../../../components/analysis/history/AnalysisHistoryDetailStatic';
@ -8,7 +8,7 @@ import { CustomDetailLayout } from '../../../components/layout/CustomDetailLayou
import {
getHstryDetail,
getHstryLog
} from '@src/_redux/features/analysis/history/historyThunk';
} from '@src/redux/features/analysis/history/historyThunk';
export const AnalysisHistoryDetailContainer = () => {
// 비행이력 목록
const { log } = useSelector(state => state.historyState);

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

@ -1,6 +1,6 @@
import dayjs from 'dayjs';
import { useEffect, useState, useCallback, useRef } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { AnalysisSimulationDetail } from '../../../components/analysis/simulation/AnalysisSimulationDetail';
import { AnalysisSimulationMenu } from '../../../components/analysis/simulation/AnalysisSimulationMenu';
import { AnalysisSimulationReport } from '../../../components/analysis/simulation/AnalysisSimulationReport';
@ -13,8 +13,8 @@ import {
getSmltLog,
getSmltDetail,
getSmltStcs
} from '@src/_redux/features/analysis/simulation/simulationThunk';
import { setLogout } from '@src/_redux/features/account/auth/authThunk';
} from '@src/redux/features/analysis/simulation/simulationThunk';
import { setLogout } from '@src/redux/features/account/auth/authThunk';
let playCount = 0;
let playCounts = 0;

2
src/containers/basis/BasisContainer.js

@ -1,4 +1,4 @@
import { useSelector } from '@src/_redux/store';
import { useSelector } from '@src/redux/store';
import { shallowEqual } from 'react-redux';
import { CustomMainLayout } from '../../components/layout/CustomMainLayout';
import { BasisGroupGrid } from '../../components/basis/BasisGroupGrid';

8
src/containers/basis/dron/BasisDronContainer.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { shallowEqual } from 'react-redux';
import { useEffect, useState } from 'react';
import { useHistory, Link } from 'react-router-dom';
@ -7,15 +7,15 @@ import { GET_ARCTFT_TYPE_CD } from '../../../utility/CondeUtil';
import { GET_WGHT_TYPE_CD } from '../../../utility/CondeUtil';
import { BasisContainer } from '../BasisContainer';
import { BasisDataGrid } from '../../../components/basis/BasisDataGrid';
import { getDroneList } from '@src/_redux/features/basis/drone/droneThunk';
import { getDroneList } from '@src/redux/features/basis/drone/droneThunk';
import {
clientResetIdntf,
clientSelectGroup
} from '@src/_redux/features/basis/drone/droneSlice';
} from '@src/redux/features/basis/drone/droneSlice';
import {
getGroupList,
getJoinGroupList
} from '@src/_redux/features/basis/group/groupThunk';
} from '@src/redux/features/basis/group/groupThunk';
export const BasisDronContainer = ({ history, user }) => {
const dispatch = useDispatch();

19
src/containers/basis/dron/BasisDronDetailContainer.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useEffect, useState } from 'react';
import { Col, Row } from '../../../components/ui/index';
import { Button } from '@component/ui';
@ -9,17 +9,17 @@ import { yupResolver } from '@hookform/resolvers/yup';
import { BasisDronForm } from '../../../components/basis/dron/BasisDronForm';
import { BasisDronImage } from '../../../components/basis/dron/BasisDronImage';
import { droneAPI } from '../../../modules/basis/drone/apis';
import { IMG_PATH } from '../../../configs/constants';
import { clientResetIdntf } from '@src/_redux/features/basis/drone/droneSlice';
import { clientResetIdntf } from '@src/redux/features/basis/drone/droneSlice';
import {
createDrone,
deleteDrone,
getDroneDetail,
updateDrone
} from '@src/_redux/features/basis/drone/droneThunk';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
updateDrone,
uploadFile
} from '@src/redux/features/basis/drone/droneThunk';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
export const BasisDronDetailContainer = props => {
const titleName = ' 기체 관리';
@ -202,9 +202,10 @@ export const BasisDronDetailContainer = props => {
// 이미지 저장
const saveFileAPI = async file => {
const fileName = await droneAPI.uploadFile(file);
setImageUrl(fileName);
setImg(IMG_PATH + fileName);
const tt = await dispatch(uploadFile(file));
console.log(tt, '---fileSave');
// setImageUrl(fileName);
// setImg(IMG_PATH + fileName);
};
// 기체 상세정보 요청

6
src/containers/basis/dron/BasisIdntfContainer.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useEffect, useState } from 'react';
import { Card, CardBody, Col, Row } from '@component/ui';
import { BasisIdntfForm } from '../../../components/basis/dron/BasisIdntform';
@ -6,8 +6,8 @@ import {
createIdntf,
deleteIdntf,
getIdntfList
} from '@src/_redux/features/basis/drone/droneThunk';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
} from '@src/redux/features/basis/drone/droneThunk';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_BODY, MODAL_HEADER } from '@src/configs/msgConst';
export const BasisIdntfContainer = props => {
const dispatch = useDispatch();

4
src/containers/basis/flight/plan/WeatherContainer.js

@ -1,5 +1,5 @@
import { useEffect, useState } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import dayjs from 'dayjs';
import { Compass } from 'react-feather';
import { Spinner } from '@component/ui';
@ -9,7 +9,7 @@ import {
AfterTomorrowWeahter
} from '../../../../components/laanc/map/TodayWeather';
import dfsxyconv from '../../../../utility/dfsxyconv';
import { getWeatherData } from '../../../../_redux/features/laanc/laancThunk';
import { getWeatherData } from '../../../../redux/features/laanc/laancThunk';
export default function WeatherContainer({ mapAreaCoordList }) {
const [dayData, setdayData] = useState({});

8
src/containers/basis/group/BasisGroupApprovalContainer.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useEffect, useState } from 'react';
import { Button } from '@component/ui';
import { BasisGroupApprovalSearch } from '../../../components/basis/group/BasisGroupApprovalSearch';
@ -10,9 +10,9 @@ import {
getGroupList,
getJoinGroupList,
updateAprv
} from '@src/_redux/features/basis/group/groupThunk';
import { clientSelectAprvGroup } from '@src/_redux/features/basis/group/groupSlice';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
} from '@src/redux/features/basis/group/groupThunk';
import { clientSelectAprvGroup } from '@src/redux/features/basis/group/groupSlice';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
export const BasisGroupApprovalContainer = ({ user }) => {
const dispatch = useDispatch();

7
src/containers/basis/group/BasisGroupContainer.js

@ -1,16 +1,15 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useEffect, useState } from 'react';
import { Link, useHistory } from 'react-router-dom';
import { Link } from 'react-router-dom';
import { Button } from '@component/ui';
import { CustomMainLayout } from '../../../components/layout/CustomMainLayout';
import { ConfirmModal } from '../../../components/modal/ConfirmModal';
import * as Actions from '../../../modules/basis/group/actions';
import { BasisGroupGrid } from '../../../components/basis/BasisGroupGrid';
import {
getJoinGroupList,
getMyGroupList,
leaveGroup
} from '@src/_redux/features/basis/group/groupThunk';
} from '@src/redux/features/basis/group/groupThunk';
export const BasisGroupContainer = ({ history, user }) => {
const dispatch = useDispatch();

4
src/containers/basis/group/BasisGroupDetailContainer.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useEffect, useState } from 'react';
import { useParams } from 'react-router-dom';
import { BasisGroupForm } from '../../../components/basis/group/BaisGroupForm';
@ -10,7 +10,7 @@ import {
deleteGroup,
getGroupDetail,
updateGroup
} from '@src/_redux/features/basis/group/groupThunk';
} from '@src/redux/features/basis/group/groupThunk';
export const BasisGroupDetailContainer = ({ user }) => {
const dispatch = useDispatch();

4
src/containers/basis/group/BasisGroupDetailJoinContainer.js

@ -1,4 +1,4 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useEffect, useState } from 'react';
import { Button } from '@component/ui';
import { BasisGroupDetailJoinSearch } from '../../../components/basis/group/BasisGroupDetailJoinSearch';
@ -8,7 +8,7 @@ import { BasisGroupGrid } from '../../../components/basis/BasisGroupGrid';
import {
getAvailGroupList,
joinGroup
} from '@src/_redux/features/basis/group/groupThunk';
} from '@src/redux/features/basis/group/groupThunk';
export const BasisGroupDetailJoinContainer = ({ user }) => {
const dispatch = useDispatch();

7
src/containers/basis/group/BasisGroupUsersContainer.js

@ -1,9 +1,8 @@
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useEffect, useState } from 'react';
import { Button } from '@component/ui';
import { BasisGroupUsersSearch } from '../../../components/basis/group/BasisGroupUsersSearch';
import { ConfirmModal } from '../../../components/modal/ConfirmModal';
import * as Actions from '../../../modules/basis/group/actions';
import { BasisContainer } from '../BasisContainer';
import { BasisDataGrid } from '../../../components/basis/BasisDataGrid';
import {
@ -12,8 +11,8 @@ import {
getJoinGroupList,
getUserList,
updateUserAccess
} from '@src/_redux/features/basis/group/groupThunk';
import { clientSelectUserGroup } from '@src/_redux/features/basis/group/groupSlice';
} from '@src/redux/features/basis/group/groupThunk';
import { clientSelectUserGroup } from '@src/redux/features/basis/group/groupSlice';
export const BasisGroupUsersContainer = ({ user }) => {
const dispatch = useDispatch();

6
src/containers/cstmrService/faq/FaqContainer.js

@ -1,14 +1,14 @@
import { useCallback, useEffect, useLayoutEffect, useState } from 'react';
import { useSelector, useDispatch } from '@src/_redux/store';
import { useSelector, useDispatch } from '@src/redux/store';
import { TabContent, TabPane, Button } from '@component/ui';
import AppCollapse from '@core@components/app-collapse';
import * as Actions from '../../../_redux/features/customerService/faq/faqThunk';
import * as Actions from '../../../redux/features/customerService/faq/faqThunk';
import FaqSearchBox from '../../../components/cstmrService/faq/FaqSearchBox';
import FaqForm from '../../../components/cstmrService/faq/FaqForm';
import FaqTab from '../../../components/cstmrService/faq/FaqTab';
import { ConfirmModal } from '../../../components/modal/ConfirmModal';
import { MODAL_BODY, MODAL_HEADER } from '@src/configs/msgConst';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
const tabList = [
{
title: '전체',

8
src/containers/cstmrService/inquiry/AdminInquiryContainer.js

@ -1,18 +1,18 @@
import { useEffect, useState, useCallback } from 'react';
import { useSelector, useDispatch } from '@src/_redux/store';
import { useSelector, useDispatch } from '@src/redux/store';
import { Col, Row } from '@component/ui';
import {
getAdminQnaDetail,
getAdminQnaList,
setQnaAdminAnswer
} from '@src/_redux/features/customerService/qna/qnaThunk';
import { clientAdminDetailInital } from '@src/_redux/features/customerService/qna/qnaSlice';
} from '@src/redux/features/customerService/qna/qnaThunk';
import { clientAdminDetailInital } from '@src/redux/features/customerService/qna/qnaSlice';
import QnaSearchBox from '../../../components/cstmrService/inquiry/QnaSearchBox';
import QnaGrid from '../../../components/cstmrService/inquiry/QnaGrid';
import QnaDetail from '../../../components/cstmrService/inquiry/QnaDetail';
import { ConfirmModal } from '../../../components/modal/ConfirmModal';
import { HOST } from '@src/configs/constants';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
const initalSearch = {
category: '',

8
src/containers/cstmrService/inquiry/UserInquiryContainer.js

@ -1,7 +1,7 @@
import { Fragment, useCallback, useEffect, useRef, useState } from 'react';
import { Button, Badge } from '@component/ui';
import AppCollapse from '@core@components/app-collapse';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import dayjs from 'dayjs';
import {
deleteQnaUser,
@ -9,11 +9,11 @@ import {
getUserQnaList,
setUserQna,
updateUserQna
} from '@src/_redux/features/customerService/qna/qnaThunk';
import { clientUserDetailInital } from '@src/_redux/features/customerService/qna/qnaSlice';
} from '@src/redux/features/customerService/qna/qnaThunk';
import { clientUserDetailInital } from '@src/redux/features/customerService/qna/qnaSlice';
import InquiryWrite from '../../../components/cstmrService/inquiry/InquiryWrite';
import { ConfirmModal } from '../../../components/modal/ConfirmModal';
import { openModal } from '@src/_redux/features/comn/message/messageSlice';
import { openModal } from '@src/redux/features/comn/message/messageSlice';
import { MODAL_BODY, MODAL_HEADER } from '@src/configs/msgConst';
export default function UserInquiryContainer({ memberName }) {

4
src/containers/laanc/LaancContainer.js

@ -6,8 +6,8 @@ import { CustomMainLayout } from '../../components/layout/CustomMainLayout';
import {
clientInitLaanc,
clientInitAreaDetailInitial
} from '@src/_redux/features/laanc/laancSlice';
import { clientDrawTypeChange } from '@src/_redux/features/control/map/mapSlice';
} from '@src/redux/features/laanc/laancSlice';
import { clientDrawTypeChange } from '@src/redux/features/control/map/mapSlice';
import { Link } from 'react-router-dom';
const LaancPlanContainer = lazy(() => import('./LaancPlanContainer'));
const LaancSearch = lazy(() =>

8
src/containers/laanc/LaancPlanContainer.js

@ -1,9 +1,9 @@
import { lazy, useEffect, useState, Suspense } from 'react';
import { initFlightBasState } from '@src/_redux/features/laanc/laancState';
import { initFlightBasState } from '@src/redux/features/laanc/laancState';
import { Modal } from '@component/ui';
import { clientInitAreaDetailInitial } from '../../modules/laanc/actions';
import { useDispatch, useSelector } from '@src/_redux/store';
import { clientDrawTypeChange } from '@src/_redux/features/control/map/mapSlice';
import { useDispatch, useSelector } from '@src/redux/store';
import { clientDrawTypeChange } from '@src/redux/features/control/map/mapSlice';
import { clientInitAreaDetailInitial } from '@src/redux/features/laanc/laancSlice';
const LaancStep1 = lazy(() => import('../../components/laanc/step/LaancStep1'));
const LaancStep2 = lazy(() => import('../../components/laanc/step/LaancStep2'));

4
src/containers/main/dash/MainDashContainer.js

@ -1,5 +1,5 @@
import { useEffect, useState } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import { useHistory } from 'react-router-dom';
import dayjs from 'dayjs';
import { Col, Row } from '@component/ui';
@ -7,7 +7,7 @@ import DroneFlightSchedule from '../../../components/dashboard/DroneFlightSchedu
import { DashboardGroupList } from '../../../components/dashboard/DashboardGroupList';
import { DashboardStcsArea } from '../../../components/dashboard/DashboardStcsArea';
import { DashboardStcsDay } from '../../../components/dashboard/DashboardStcsDay';
import * as Actions from '../../../_redux/features/dashboard/dashboardThunk';
import * as Actions from '../../../redux/features/dashboard/dashboardThunk';
import { MessageErrorModal } from '../../../components/message/MessageErrorModal';
export const MainDashContainer = ({ history, user }) => {

4
src/containers/statistics/AbnormalSituationContainer.js

@ -1,10 +1,10 @@
import { CustomMainLayout } from '../../components/layout/CustomMainLayout';
import { useCallback, useEffect, useState } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import {
getAbnormalSearch,
getAbnormalStatistics
} from '@src/_redux/features/statistics/statisticsThunk';
} from '@src/redux/features/statistics/statisticsThunk';
import StatisticsSearch from '../../components/statistics/StatisticsSearch';
import StatisticsTotal from '../../components/statistics/StatisticsTotal';

4
src/containers/statistics/FlightContainer.js

@ -1,12 +1,12 @@
import { CustomMainLayout } from '../../components/layout/CustomMainLayout';
import { useCallback, useEffect, useState } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import StatisticsTotal from '../../components/statistics/StatisticsTotal';
import StatisticsSearch from '../../components/statistics/StatisticsSearch';
import {
getFlightStatistics,
getFlightSearch
} from '@src/_redux/features/statistics/statisticsThunk';
} from '@src/redux/features/statistics/statisticsThunk';
export default function FlightContainer() {
const dispatch = useDispatch();

4
src/containers/statistics/FlightResultContainer.js

@ -1,10 +1,10 @@
import { CustomMainLayout } from '../../components/layout/CustomMainLayout';
import { useCallback, useEffect, useState } from 'react';
import { useDispatch, useSelector } from '@src/_redux/store';
import { useDispatch, useSelector } from '@src/redux/store';
import {
getResultSearch,
getResultStatistics
} from '@src/_redux/features/statistics/statisticsThunk';
} from '@src/redux/features/statistics/statisticsThunk';
import StatisticsTotal from '../../components/statistics/StatisticsTotal';
import StatisticsSearch from '../../components/statistics/StatisticsSearch';

2
src/index.js

@ -7,7 +7,7 @@ import { HelmetProvider } from 'react-helmet-async';
// ** Redux Imports
import { Provider } from 'react-redux';
import { store } from '@src/_redux/store';
import { store } from '@src/redux/store';
// ** Toast & ThemeColors Context
import { ToastContainer } from 'react-toastify';

161
src/modules/NAMING.md

@ -1,161 +0,0 @@
## REDUX NAMING
```bash
📦 module
┣ 📂 _sample
┃ ┣ 📂 actions Action 타입, 함수
┃ ┣ 📂 apis Api
┃ ┣ 📂 models interface, Type
┃ ┣ 📂 reducers Reducer 함수
┃ ┣ 📂 sagas Saga 함수
┃ ┣ 📜 index.ts
// 폴더에는 index.ts 파일 하나만 작성한다.
```
<br>
## 📂 actions
> Action 타입
- 대문자와 \_를 사용하여 상수 형태로 작성한다.
- 구분자는 소문자로 작성한다.
- 동사를 먼저 작성한다.
- 비동기 요청 액션이 아닐 땐 `CLIENT_` 로 시작한다.
> > 기본 규칙
>
> - 목록 조회 `GET_[주체]_LIST`
> - 상세 조회 `GET_[주체]_DETAIL`
> - 생성/추가 `CREATE_[주체]`
> - 수정/변경 `UPDATE_[주체]`
> - 삭제 `DELETE_[주체]`
>
> > 동사
>
> - SET, FIND, SEND, CHECK, REGISTER, CONFIRM ...
>
> > 명사
>
> - LIST, DETAIL, LOG, APPROVAL ...
```bash
// 드론 목록
const GET_DRONE_LIST_REQUEST = 'sample/GET_DRONE_LIST_REQUEST';
// 지도 타입
const CLIENT_MAPTYPE = 'sample/CLIENT_MAPTYPE';
```
<br>
> Action 함수
- 카멜케이스를 사용하여 작성한다.
- 작성한 Action 타입을 참고하여 작성한다.
```bash
export const getDroneList = createAsyncAction(
GET_DRONE_LIST_REQUEST,
GET_DRONE_LIST_SUCCESS,
GET_DRONE_LIST_FAILURE
)();
export const clientMapType = createAction(CLIENT_MAPTYPE)();
```
<br>
## 📂 apis
- 변수명은 [주체] + API로 작성한다.
- api는 Action 함수명과 동일하게 작성한다.
- 특별한 경우가 아니면 return은 즉시 해준다.
```bash
export const sampleAPI = {
getDroneList: async () => {
return await axios.get('api/bas/dron/list....');
}
}
```
<br>
## 📂 models
- 모든 interface는 파스칼케이스를 사용하되, 약자인 I를 붙여서 작성한다.
- Rq, Rs interface의 경우 I + Action명 + Rq or Rs로 작성한다.
- 초기값의 경우 변수명을 init + [주체]로 작성한다.
- 초기값의 interface는 State로 끝나도록 작성한다.
```bash
export const initSample: ISampleState = {
droneList: undefined,
droneCount: 0
}
export interface ISampleState {
droneList: IDrone[] | undefined;
droneCount: number | 0;
}
export interface IDrone {
groupId: string;
arcrftSno: number;
....
}
export interface IUpdateDroneRq {
...
}
```
<br>
## 📂 reducers
- Reducer 함수는 카멜케이스를 사용하여 [주체] + Reducer 로 작성한다.
```bash
export const sampleReducer = createReducer<ISampleState, Actions.SampleActions>(
initSample
).handleAction(Actions.getDroneList.success, (state, action) =>
produce(state, draft => {})
);
```
<br>
## 📂 sagas
- Saga 함수는 카멜케이스를 사용하여 Action 함수 + Saga 로 작성한다.
```bash
function* getDroneListSaga(
action: ActionType<typeof Actions.getDroneList.request>
) {
try {
} catch (error: any) {}
}
```
- export 함수는 카멜케이스를 사용하여 [주체] + Saga 로 작성한다.
```bash
export function* sampleSaga() {
yield takeEvery(Actions.getDroneList.request, getDroneListSaga);
}
```
<br>
## 📜 index.ts
```bash
export * from './actions';
export * from './apis';
export * from './models';
export * from './reducers';
export * from './sagas';
```

55
src/modules/_sample/actions/index.ts

@ -1,55 +0,0 @@
import { createAsyncAction, ActionType, createAction } from 'typesafe-actions';
/**
* [Action ]
* _를 .
* .
* .
* CLIENT_ .
*
*
* - GET_[]_LIST
* - GET_[]_DETAIL
* / - CREATE_[]
* / - UPDATE_[]
* - DELETE_[]
*
* []
* SET, FIND, SEND, CHECK, REGISTER ...
* []
* LIST, DETAIL, LOG, APPROVAL ...
*
*
* [Action ]
* .
* Action . (Ex. GET_DRONE_LIST_REQUEST -> getDroneList)
*
*/
// 드론 목록
const GET_DRONE_LIST_REQUEST = 'sample/GET_DRONE_LIST_REQUEST';
const GET_DRONE_LIST_SUCCESS = 'sample/GET_DRONE_LIST_SUCCESS';
const GET_DRONE_LIST_FAILURE = 'sample/GET_DRONE_LIST_FAILURE';
// 지도 타입
const CLIENT_MAPTYPE = 'sample/CLIENT_MAPTYPE';
// 비행 이력 목록
const GET_HISTORY_LIST_REQUEST = 'sample/HISTORY_LIST_REQUEST';
// 비행 이력 상세 목록
const GET_HISTORY_LOG_REQUEST = 'sample/HISTORY_LOG_REQUEST';
export const getDroneList = createAsyncAction(
GET_DRONE_LIST_REQUEST,
GET_DRONE_LIST_SUCCESS,
GET_DRONE_LIST_FAILURE
)();
export const clientMapType = createAction(CLIENT_MAPTYPE)();
const actions = {
getDroneList
};
export type SampleActions = ActionType<typeof actions>;

14
src/modules/_sample/apis/index.ts

@ -1,14 +0,0 @@
import axios from '../../utils/customAxiosUtil';
/**
* + API로 .
* api는 Action .
* return은 .
*/
export const sampleAPI = {
// 드론 목록 조회
getDroneList: async () => {
return await axios.get('api/bas/dron/list...');
}
};

5
src/modules/_sample/index.ts

@ -1,5 +0,0 @@
export * from './actions';
export * from './apis';
export * from './models';
export * from './reducers';
export * from './sagas';

30
src/modules/_sample/models/index.ts

@ -1,30 +0,0 @@
/**
* interface는 .
* Interface는 I를 .
* Rq, Rs interface의 Action명 + Rq or Rs를 .
*
* init + .
* interface는 State로 .
*/
export const initSample: ISampleState = {
droneList: undefined,
droneCount: 0
};
export interface ISampleState {
droneList: IDrone[] | undefined;
droneCount: number | 0;
}
export interface IDrone {
groupId: string;
arcrftSno: number;
arcrftHght: number;
arcrftLngth: number;
arcrftModelNm: string;
arcrftTypeCd: string;
arcrftWdth: number;
}
export interface IUpdateDroneRq {}

15
src/modules/_sample/reducers/index.ts

@ -1,15 +0,0 @@
import { createReducer } from 'typesafe-actions';
import produce from 'immer';
import { ISampleState, initSample } from '../models';
import * as Actions from '../actions';
/**
* Reducer .
*/
export const sampleReducer = createReducer<ISampleState, Actions.SampleActions>(
initSample
).handleAction(Actions.getDroneList.success, (state, action) =>
produce(state, draft => {})
);

21
src/modules/_sample/sagas/index.ts

@ -1,21 +0,0 @@
import { ActionType } from 'typesafe-actions';
import * as Actions from '../actions';
import { takeEvery } from 'redux-saga/effects';
/**
* saga Action + Saga로 .
*/
function* getDroneListSaga(
action: ActionType<typeof Actions.getDroneList.request>
) {
try {
} catch (error: any) {}
}
/**
* export saga .
*/
export function* sampleSaga() {
yield takeEvery(Actions.getDroneList.request, getDroneListSaga);
}

123
src/modules/account/auth/actions/index.ts

@ -1,123 +0,0 @@
import { AxiosError } from 'axios';
import { ActionType, createAsyncAction } from 'typesafe-actions';
import {
TokenAccount,
ISetLoginRq,
IUpdateUserPwRq,
ISetLoginRs,
IUpdateUserPwRs,
ICheckAuthencationRs,
IGetUserPageRs,
IUpdateUserRs,
IUpdateUserRq,
ICheckUserPwRs
} from '../models';
// 로그인
const SET_LOGIN_REQUEST = 'auth/SET_LOGIN_REQUEST';
const SET_LOGIN_SUCCESS = 'auth/SET_LOGIN_SUCCESS';
const SET_LOGIN_FAILURE = 'auth/SET_LOGIN_FAILURE';
// 인증 확인
const CHECK_AUTHENCATION_REQUEST = 'auth/CHECK_AUTHENCATION_REQUEST';
const CHECK_AUTHENCATION_SUCCESS = 'auth/CHECK_AUTHENCATION_SUCCESS';
const CHECK_AUTHENCATION_FAILURE = 'auth/CHECK_AUTHENCATION_FAILURE';
// 로그아웃
const SET_LOGOUT_REQUEST = 'auth/SET_LOGOUT_REQUEST';
const SET_LOGOUT_SUCCESS = 'auth/SET_LOGOUT_SUCCESS';
const SET_LOGOUT_FAILURE = 'auth/SET_LOGOUT_FAILURE';
// 마이페이지 조회
const GET_USER_PAGE_REQUEST = 'auth/GET_USER_PAGE_REQUEST';
const GET_USER_PAGE_SUCCESS = 'auth/GET_USER_PAGE_SUCCESS';
const GET_USER_PAGE_FAILURE = 'auth/GET_USER_PAGE_FAILURE';
// 마이페이지 수정
const UPDATE_USER_REQUEST = 'auth/UPDATE_USER_REQUEST';
const UPDATE_USER_SUCCESS = 'auth/UPDATE_USER_SUCCESS';
const UPDATE_USER_FAILURE = 'auth/UPDATE_USER_FAILURE';
// 회원 탈퇴
const DELETE_USER_REQUEST = 'auth/DELETE_USER_REQUEST';
const DELETE_USER_SUCCESS = 'auth/DELETE_USER_SUCCESS';
const DELETE_USER_FAILURE = 'auth/DELETE_USER_FAILURE';
// 기존 비밀번호 체크
const CHECK_USERPW_REQUEST = 'auth/CHECK_USERPW_REQUEST';
const CHECK_USERPW_SUCCESS = 'auth/CHECK_USERPW_SUCCESS';
const CHECK_USERPW_FAILURE = 'auth/CHECK_USERPW_FAILURE';
// 비밀번호 변경
const UPDATE_USERPW_REQUEST = 'auth/UPDATE_USERPW_REQUEST';
const UPDATE_USERPW_SUCCESS = 'auth/UPDATE_USERPW_SUCCESS';
const UPDATE_USERPW_FAILURE = 'auth/UPDATE_USERPW_FAILURE';
export const setLogin = createAsyncAction(
SET_LOGIN_REQUEST,
SET_LOGIN_SUCCESS,
SET_LOGIN_FAILURE
)<ISetLoginRq, ISetLoginRs, string>();
export const checkAuthencation = createAsyncAction(
CHECK_AUTHENCATION_REQUEST,
CHECK_AUTHENCATION_SUCCESS,
CHECK_AUTHENCATION_FAILURE
)<void, { isLogin: boolean; user?: ICheckAuthencationRs }, AxiosError>();
export const setLogout = createAsyncAction(
SET_LOGOUT_REQUEST,
SET_LOGOUT_SUCCESS,
SET_LOGOUT_FAILURE
)<void, void, AxiosError>();
// 사용안함?
// export const refresh = createAsyncAction(
// SET_LOGOUT_REQUEST,
// SET_LOGOUT_SUCCESS,
// SET_LOGOUT_FAILURE
// )<TokenAccount, ISetLoginRs, AxiosError>();
export const getUserPage = createAsyncAction(
GET_USER_PAGE_REQUEST,
GET_USER_PAGE_SUCCESS,
GET_USER_PAGE_FAILURE
)<number, IGetUserPageRs, AxiosError>();
export const updateUser = createAsyncAction(
UPDATE_USER_REQUEST,
UPDATE_USER_SUCCESS,
UPDATE_USER_FAILURE
)<IUpdateUserRq, IUpdateUserRs, AxiosError>();
export const deleteUser = createAsyncAction(
DELETE_USER_REQUEST,
DELETE_USER_SUCCESS,
DELETE_USER_FAILURE
)<number, void, AxiosError>();
export const checkUserPw = createAsyncAction(
CHECK_USERPW_REQUEST,
CHECK_USERPW_SUCCESS,
CHECK_USERPW_FAILURE
)<string, ICheckUserPwRs, AxiosError>();
export const updateUserPw = createAsyncAction(
UPDATE_USERPW_REQUEST,
UPDATE_USERPW_SUCCESS,
UPDATE_USERPW_FAILURE
)<IUpdateUserPwRq, IUpdateUserPwRs, AxiosError>();
const actions = {
setLogin,
checkAuthencation,
setLogout,
// refresh,
updateUser,
getUserPage,
updateUserPw,
deleteUser,
checkUserPw
};
export type AuthAction = ActionType<typeof actions>;

47
src/modules/account/auth/apis/index.ts

@ -1,47 +0,0 @@
import axios from '../../../utils/customAxiosUtil';
import {
ISetLoginRq,
TokenAccount,
IUpdateUserPwRq,
IUpdateUserRq
} from '../models';
export const authAPI = {
// 로그인
setLogin: async (data: ISetLoginRq) => {
return await axios.post('api/acnt/jwt/login', data);
},
// 로그아웃
setLogout: (id: number) => {
return axios.get(`api/acnt/jwt/logout/${id}`);
},
// 토큰 재발급
refreshToken: (data: TokenAccount) => {
return axios.post('api/acnt/jwt/refresh', data);
},
// 로그인한 회원정보 조회
getUserProfile: async (id: number) => {
return await axios.get(`api/acnt/jwt/profile/${id}`);
},
// 회원정보 조회
getUserPage: async (id: number) => {
return await axios.get(`api/acnt/cstmr/profile/${id}`);
},
// 회원정보 수정
updateUser: async (data: IUpdateUserRq) => {
const res = await axios.put('api/acnt/cstmr/profile/update', data);
return res;
},
// 회원 탈퇴
deletedata: async (id: number) => {
return await axios.post(`api/acnt/cstmr/profile/delete/${id}`);
},
// 기존 비밀번호 확인
checkUserPw: async (userPswd: string) => {
return await axios.post('api/acnt/cstmr/profile/pwcheck', { userPswd });
},
// 비밀번호 변경
updateUserPw: async (data: IUpdateUserPwRq) => {
return await axios.post('api/acnt/cstmr/profile/pswdupdate', data);
}
};

5
src/modules/account/auth/index.ts

@ -1,5 +0,0 @@
export * from './actions';
export * from './apis';
export * from './models';
export * from './reducers';
export * from './sagas';

179
src/modules/account/auth/models/index.ts

@ -1,179 +0,0 @@
export const initUserPage: IUserPageState = {
userPage: undefined,
result: undefined
};
export interface IUserPageState {
userPage?: IGetUserPageRs | undefined;
result: boolean | undefined;
}
export interface IAuthState {
pageLoading: boolean;
isRefresh: boolean;
isLogin?: boolean;
message: string;
user?: ICheckAuthencationRs;
UserPw?: IUpdateUserPwRq;
}
export const initAuth: IAuthState = {
pageLoading: false,
isRefresh: false,
isLogin: undefined,
message: '',
user: undefined,
UserPw: undefined
};
// login
export interface ISetLoginRq {
userId: string;
userPswd: string;
}
export interface ISetLoginRs {
accessToken: string;
refreshToken: string;
userId: string;
userNm: string;
cstmrSno: number;
auth: string;
brthdyDate: string;
clncd: string;
hpno: string;
email: string;
}
// check
export interface ICheckAuthencationRs {
authId: string;
cptAuthCode: string;
cstmrSno: number;
memberName: string;
siteCode: string;
userId: string;
}
// userPage
export interface IGetUserPageRs {
memberName: string;
birthdyDate: string;
genderCd: string;
cntryCd: string;
email: string;
hpno: string;
userId: string;
updateDt: string;
cptAuthCode: string;
}
// updateUser
export interface IUpdateUserRq {
cstmrSno: number;
email: string;
hpno: string;
updateUserId: string;
}
export interface IUpdateUserRs {
cstmrSno: number;
ipinCi: string;
joinCrtfyCd: string;
cntryCd: string;
genderCd: string;
memberName: string;
brthdyDate: string;
email: string;
hpno: string;
clncd: string;
updateDt: string;
updateUserId: string;
}
// checkUserPw
export interface ICheckUserPwRs {
result: boolean;
errorMessage?: string;
errorCode?: string;
}
// updateUserPw
export interface IUpdateUserPwRq {
newPswd: string;
newPswdConfirm: string;
}
export interface IUpdateUserPwRs {
authId: string;
cptAuthCode: string;
cstmrDivCd: string;
cstmrSno: number;
cstmrStatusCd: string;
joinDt: string;
joinIp: string;
pswdUpdtDt: string;
rfrshToken: string;
siteCode: string;
userId: string;
userPswd: string;
}
// token decode
export interface IDecodeToken {
auth: string;
cptAuthCode: string;
cstmrSno: number;
exp: number;
group: IDecodeTokenGroup[];
iat: number;
sub: string;
userId: string;
userNm: string;
}
interface IDecodeTokenGroup {
groupId: string;
groupAuthCd: string;
}
// ---------------------------------------------------
export interface TokenAccount {
cstmrSno: number;
refreshToken: string | null;
}
// export interface MyPageFormData {
// data: IGetUserPageRs | undefined;
// }
// export interface ILoginData {
// accessToken: string;
// refreshToken: string;
// expires_in: number;
// exp: string;
// scope: string | string[];
// jti: string;
// userId: string;
// cstmrSno: number;
// auth: string;
// encodedInfo: string | null;
// }
// export interface IGetUserPageRs {
// memberName: string;
// birthdyDate: string;
// genderCd: string;
// cntryCd: string;
// email: string;
// hpno: string;
// userId: string;
// updateDt: string;
// cptAuthCode: string;
// // cstmrSno: string;
// }
// export interface UserPwCheck {
// result: string;
// }

87
src/modules/account/auth/reducers/index.ts

@ -1,87 +0,0 @@
// base
import produce from 'immer';
import { createReducer } from 'typesafe-actions';
import * as Actions from '../actions';
import {
IUserPageState,
IGetUserPageRs,
initUserPage,
IAuthState,
initAuth
} from '../models';
export const authReducer = createReducer<IAuthState, Actions.AuthAction>(
initAuth
)
.handleAction(Actions.setLogin.success, (state, action) =>
produce(state, draft => {
draft.isLogin = true;
// draft.user = action.payload;
})
)
.handleAction(Actions.setLogin.request, (state, action) =>
produce(state, draft => {
draft.isLogin = false;
draft.message = '';
})
)
.handleAction(Actions.setLogin.failure, (state, action) =>
produce(state, draft => {
draft.isLogin = false;
draft.message = action.payload;
})
)
.handleAction(Actions.checkAuthencation.success, (state, action) =>
produce(state, draft => {
const { isLogin, user } = action.payload;
draft.isRefresh = false;
draft.isLogin = isLogin;
draft.user = user;
})
)
// .handleAction(Actions.refresh.request, (state, action) =>
// produce(state, draft => {
// draft.isRefresh = true;
// })
// )
// .handleAction(Actions.refresh.success, (state, action) =>
// produce(state, draft => {
// // draft.user = action.payload;
// })
// )
.handleAction(Actions.setLogout.success, state =>
produce(state, draft => {
draft.isLogin = false;
draft.user = undefined;
})
)
.handleAction(Actions.deleteUser.success, state =>
produce(state, draft => {
draft.isLogin = false;
draft.user = undefined;
})
);
export const userPageReducer = createReducer<
IUserPageState,
Actions.AuthAction
>(initUserPage)
.handleAction(Actions.getUserPage.success, (state, action) =>
produce(state, draft => {
const data: IGetUserPageRs = action.payload;
draft.userPage = data;
})
)
.handleAction(Actions.checkUserPw.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.result = data.result;
})
);
// .handleAction(Actions.updateUserPw.success, (state, action) =>
// produce(state, draft => {
// const data = action.payload;
// draft.userPwPage = data;
// })
// );

302
src/modules/account/auth/sagas/index.ts

@ -1,302 +0,0 @@
// base
import { replace } from 'connected-react-router';
import decode from 'jwt-decode';
import { call, put, takeEvery } from 'redux-saga/effects';
// packages
import { ActionType } from 'typesafe-actions';
// modules
import { ERROR_MESSAGE, SAVE_MESSAGE } from '../../../../configs/constants';
import * as Actions from '../actions';
import { authAPI } from '../apis';
import { ICheckUserPwRs, IDecodeToken } from '../models';
import {
cookieStorage,
COOKIE_ACCESS_TOKEN,
COOKIE_REFRESH_TOKEN
} from '../service/cookie';
import * as MessageActions from '../../../comn/message/actions/comnMessageAction';
function* setLoginSaga(action: ActionType<typeof Actions.setLogin.request>) {
const param = action.payload;
try {
const { data, errorCode } = yield call(authAPI.setLogin, param);
if (errorCode == '-101') {
throw '계정 정보를 찾을 수 없습니다. 다시 확인해 주세요.';
} else if (errorCode == '-102') {
throw '비밀번호가 잘못되었습니다. 다시 확인해 주세요.';
} else if (errorCode == '-103') {
throw '계정 정보가 사용할 수 없는 상태입니다. 다시 확인해 주세요.';
}
// access_token 세팅
cookieStorage.setCookie(COOKIE_ACCESS_TOKEN, data.accessToken);
cookieStorage.setCookie(COOKIE_REFRESH_TOKEN, data.refreshToken);
const user = yield call(authAPI.getUserProfile, data.cstmrSno);
// if (data.userId) {
// cookieStorage.setCookie('SAVE_USR_ID', data.userId);
// } else {
// cookieStorage.removeCookie('SAVE_USR_ID');
// }
yield put(
Actions.setLogin.success({
...user.data
})
);
} catch (error: any) {
yield put(Actions.setLogin.failure(error));
// message.error(error);
}
}
// function* refreshTokenSaga(action: ActionType<typeof Actions.refresh.request>) {
// const param = action.payload;
// cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN);
// cookieStorage.removeCookie(COOKIE_REFRESH_TOKEN);
// try {
// const { data, errorCode } = yield call(authAPI.refreshToken, param);
// console.log('token>>>', data);
// // access_token 세팅
// cookieStorage.setCookie(COOKIE_ACCESS_TOKEN, data.accessToken);
// cookieStorage.setCookie(COOKIE_REFRESH_TOKEN, data.refreshToken);
// const user = yield call(authAPI.getUserProfile, data.cstmrSno);
// yield put(Actions.checkAuthencation.success({ ...user.data }));
// } catch (error: any) {
// yield put(Actions.checkAuthencation.failure(error));
// }
// }
function* checkSaga() {
try {
const accessToken = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN);
if (!accessToken) {
yield put(
Actions.checkAuthencation.success({
isLogin: false
})
);
return;
}
const decodedToken = decode<IDecodeToken>(accessToken);
const { data } = yield call(authAPI.getUserProfile, decodedToken.cstmrSno);
//token 셋팅
cookieStorage.setCookie(COOKIE_ACCESS_TOKEN, accessToken);
// storageService.session.setItem(STORAGE_SESSION_ICT, user.icToken);
yield put(
Actions.checkAuthencation.success({
isLogin: true,
user: data
})
);
} catch (error: any) {
cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN);
yield put(Actions.checkAuthencation.failure(error));
}
}
function* setLogoutSaga() {
const accessToken = cookieStorage.getCookie(COOKIE_ACCESS_TOKEN);
try {
if (accessToken) {
const decodedToken = decode<IDecodeToken>(accessToken);
const res = yield call(authAPI.setLogout, decodedToken.cstmrSno);
if (res.data == 'SUCCESS') {
location.href = '/account/login';
}
}
// yield put(Actions.setLogout.success());
cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN);
cookieStorage.removeCookie(COOKIE_REFRESH_TOKEN);
yield put(replace('/'));
} catch (error: any) {
yield put(Actions.setLogout.failure(error));
}
}
function* getUserPageSaga(
action: ActionType<typeof Actions.getUserPage.request>
) {
try {
const controlId = action.payload;
const { data } = yield call(authAPI.getUserPage, controlId);
yield put(Actions.getUserPage.success(data));
} catch (error: any) {
yield put(Actions.getUserPage.failure(error));
}
}
function* deleteUserSaga(
action: ActionType<typeof Actions.deleteUser.request>
) {
try {
const controlId = action.payload;
const { data } = yield call(authAPI.deletedata, controlId);
if (data.result === true) {
yield put(
MessageActions.IS_MESSAGE({
messageCode: SAVE_MESSAGE.code,
message: '탈퇴가 완료되었습니다',
isHistoryBack: false,
isRefresh: true
})
);
//location.href = '/account/login';
cookieStorage.removeCookie(COOKIE_ACCESS_TOKEN);
cookieStorage.removeCookie(COOKIE_REFRESH_TOKEN);
yield put(replace('/'));
// yield put(Actions.deleteUser.success(data));;
}
// yield put(Actions.setLogout.success());
} catch (error: any) {
yield put(Actions.setLogout.failure(error));
}
}
function* updateUserSaga(
action: ActionType<typeof Actions.updateUser.request>
) {
const param = action.payload;
try {
const { data, errorCode } = yield call(authAPI.updateUser, param);
yield put(Actions.updateUserPw.success(data));
if (data.errorCode === '-1') {
yield put(
MessageActions.IS_ERROR({
errorCode: ERROR_MESSAGE.code,
errorMessage: ERROR_MESSAGE.message,
isHistoryBack: false,
isRefresh: false
})
);
} else {
yield put(
MessageActions.IS_MESSAGE({
messageCode: SAVE_MESSAGE.code,
message: SAVE_MESSAGE.message,
isHistoryBack: false,
isRefresh: false
})
);
}
} catch (error: any) {
yield put(
MessageActions.IS_ERROR({
errorCode: ERROR_MESSAGE.code,
errorMessage: '처리 중 에러입니다.',
isHistoryBack: false,
isRefresh: false
})
);
}
}
function* checkupdateUserPwSaga(
action: ActionType<typeof Actions.checkUserPw.request>
) {
const controlId = action.payload;
try {
const { data }: { data: ICheckUserPwRs } = yield call(
authAPI.checkUserPw,
controlId
);
yield put(Actions.checkUserPw.success(data));
if (data.errorCode === '-1') {
yield put(
MessageActions.IS_ERROR({
errorCode: ERROR_MESSAGE.code,
errorMessage: '기존 비밀번호가 일치하지 않습니다.',
isHistoryBack: false,
isRefresh: false
})
);
} else {
yield put(
MessageActions.IS_MESSAGE({
messageCode: SAVE_MESSAGE.code,
message: '확인이 완료되었습니다.',
isHistoryBack: false,
isRefresh: false
})
);
}
} catch (error: any) {
yield put(
MessageActions.IS_ERROR({
errorCode: ERROR_MESSAGE.code,
errorMessage: '처리 중 에러입니다.',
isHistoryBack: false,
isRefresh: false
})
);
}
}
function* updateUserPwSaga(
action: ActionType<typeof Actions.updateUserPw.request>
) {
const param = action.payload;
try {
const { data, errorCode } = yield call(authAPI.updateUserPw, param);
//yield put(Actions.updateUserPw.success(data));
if (data.errorCode === '-1') {
yield put(
MessageActions.IS_ERROR({
errorCode: ERROR_MESSAGE.code,
errorMessage: '기존 비밀번호가 일치하지 않습니다.',
isHistoryBack: false,
isRefresh: false
})
);
} else {
yield put(
MessageActions.IS_MESSAGE({
messageCode: SAVE_MESSAGE.code,
message: SAVE_MESSAGE.message,
isHistoryBack: true,
isRefresh: true
})
);
}
} catch (error: any) {
yield put(
MessageActions.IS_ERROR({
errorCode: ERROR_MESSAGE.code,
errorMessage: '처리 중 에러입니다.',
isHistoryBack: false,
isRefresh: false
})
);
}
}
export function* authSaga() {
yield takeEvery(Actions.setLogin.request, setLoginSaga);
yield takeEvery(Actions.setLogout.request, setLogoutSaga);
yield takeEvery(Actions.checkAuthencation.request, checkSaga);
yield takeEvery(Actions.getUserPage.request, getUserPageSaga);
yield takeEvery(Actions.updateUser.request, updateUserSaga);
yield takeEvery(Actions.deleteUser.request, deleteUserSaga);
yield takeEvery(Actions.checkUserPw.request, checkupdateUserPwSaga);
yield takeEvery(Actions.updateUserPw.request, updateUserPwSaga);
}

55
src/modules/account/find/actions/index.ts

@ -1,55 +0,0 @@
import { AxiosError } from 'axios';
import { ActionType, createAsyncAction } from 'typesafe-actions';
// 아이디 찾기 인증번호 발송
const SEND_FORID_REQUEST = 'find/SEND_FORID_REQUEST';
const SEND_FORID_SUCCESS = 'find/SEND_FORID_SUCCESS';
const SEND_FORID_FAILURE = 'find/SEND_FORID_FAILURE';
// 아이디 찾기
const FIND_USERID_REQUEST = 'find/FIND_USERID_REQUEST';
const FIND_USERID_SUCCESS = 'find/FIND_USERID_SUCCESS';
const FIND_USERID_FAILURE = 'find/FIND_USERID_FAILURE';
// 비밀번호 찾기 인증번호 발송
const SEND_FORPW_REQUEST = 'find/SEND_FORPW_REQUEST';
const SEND_FORPW_SUCCESS = 'find/SEND_FORPW_SUCCESS';
const SEND_FORPW_FAILURE = 'find/SEND_FORPW_FAILURE';
// 비밀번호 변경
const UPDATE_USERPW_REQUEST = 'find/UPDATE_USERPW_REQUEST';
const UPDATE_USERPW_SUCCESS = 'find/UPDATE_USERPW_SUCCESS';
const UPDATE_USERPW_FAILURE = 'find/UPDATE_USERPW_FAILURE';
export const sendForId = createAsyncAction(
SEND_FORID_REQUEST,
SEND_FORID_SUCCESS,
SEND_FORID_FAILURE
)<{ memberName: string; hpno: string }, string, AxiosError>();
export const findUserId = createAsyncAction(
FIND_USERID_REQUEST,
FIND_USERID_SUCCESS,
FIND_USERID_FAILURE
)<{ memberName: string; hpno: string }, string, AxiosError>();
export const sendForPw = createAsyncAction(
SEND_FORPW_REQUEST,
SEND_FORPW_SUCCESS,
SEND_FORPW_FAILURE
)<{ userId: string; hpno: string }, string, AxiosError>();
export const updateUserPw = createAsyncAction(
UPDATE_USERPW_REQUEST,
UPDATE_USERPW_SUCCESS,
UPDATE_USERPW_FAILURE
)<{ userId: string; hpno: string; newPw: string }, string, AxiosError>();
const actions = {
sendForId,
findUserId,
sendForPw,
updateUserPw
};
export type FindAction = ActionType<typeof actions>;

31
src/modules/account/find/apis/index.ts

@ -1,31 +0,0 @@
import axios from '../../../utils/customAxiosUtil';
export const findAPI = {
// 아이디 찾기 인증번호 발송
sendForId: async param => {
return await axios.get(
`api/acnt/crtfyhp/find/sendForId?memberName=${param.memberName}&hpno=${param.hpno}`
);
},
// 아이디 찾기
getUserId: async param => {
return await axios.get(
`api/acnt/crtfyhp/find/findUserId?memberName=${param.memberName}&hpno=${param.hpno}`
);
},
// 비밀번호 찾기 인증번호 발송
sendForPw: async param => {
return await axios.get(
`api/acnt/crtfyhp/find/sendForPw?userId=${param.userId}&hpno=${param.hpno}`
);
},
// 비밀번호 변경
updatePw: async param => {
return await axios.get(
`api/acnt/crtfyhp/find/updatePw?userId=${param.userId}&hpno=${param.hpno}&newPw=${param.newPw}`
);
}
};

5
src/modules/account/find/index.ts

@ -1,5 +0,0 @@
export * from './actions';
export * from './apis';
export * from './models';
export * from './reducers';
export * from './sagas';

12
src/modules/account/find/models/index.ts

@ -1,12 +0,0 @@
export interface IFindState {
idResult: string | undefined;
userId: string | undefined;
pwResult: string | undefined;
udResult: string | undefined;
}
export const initFind: IFindState = {
idResult: undefined,
userId: undefined,
pwResult: undefined,
udResult: undefined
};

36
src/modules/account/find/reducers/index.ts

@ -1,36 +0,0 @@
// base
import produce from 'immer';
import { createReducer } from 'typesafe-actions';
// action
import * as Actions from '../actions';
import { IFindState, initFind } from '../models';
export const findReducer = createReducer<IFindState, Actions.FindAction>(
initFind
)
.handleAction(Actions.sendForId.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.idResult = data;
})
)
.handleAction(Actions.findUserId.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.userId = data;
})
)
.handleAction(Actions.sendForPw.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.pwResult = data;
})
)
.handleAction(Actions.updateUserPw.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.udResult = data;
})
);

61
src/modules/account/find/sagas/index.ts

@ -1,61 +0,0 @@
import { call, put, takeEvery } from 'redux-saga/effects';
// packages
import { ActionType } from 'typesafe-actions';
// modules
import * as Actions from '../actions';
import { findAPI } from '../apis';
function* sendForIdSaga(action: ActionType<typeof Actions.sendForId.request>) {
try {
const { memberName, hpno } = action.payload;
const res = yield call(findAPI.sendForId, { memberName, hpno });
yield put(Actions.sendForId.success(res));
} catch (error: any) {
yield put(Actions.sendForId.failure(error));
}
}
function* findUserIdSaga(
action: ActionType<typeof Actions.findUserId.request>
) {
try {
const { memberName, hpno } = action.payload;
const res = yield call(findAPI.getUserId, { memberName, hpno });
yield put(Actions.findUserId.success(res));
} catch (error: any) {
yield put(Actions.findUserId.failure(error));
}
}
function* sendForPwSaga(action: ActionType<typeof Actions.sendForPw.request>) {
try {
const { userId, hpno } = action.payload;
const res = yield call(findAPI.sendForPw, { userId, hpno });
yield put(Actions.sendForPw.success(res));
} catch (error: any) {
yield put(Actions.sendForPw.failure(error));
}
}
function* updateUserPwSaga(
action: ActionType<typeof Actions.updateUserPw.request>
) {
try {
const { userId, hpno, newPw } = action.payload;
const res = yield call(findAPI.updatePw, { userId, hpno, newPw });
yield put(Actions.updateUserPw.success(res));
} catch (error: any) {
yield put(Actions.updateUserPw.failure(error));
}
}
export function* findSaga() {
yield takeEvery(Actions.sendForId.request, sendForIdSaga);
yield takeEvery(Actions.findUserId.request, findUserIdSaga);
yield takeEvery(Actions.sendForPw.request, sendForPwSaga);
yield takeEvery(Actions.updateUserPw.request, updateUserPwSaga);
}

40
src/modules/account/register/actions/index.ts

@ -1,40 +0,0 @@
import { AxiosError } from 'axios';
import { createAsyncAction, ActionType, createAction } from 'typesafe-actions';
import { DefaultSearchModel } from '../../../models/ComnModel';
import { IGetTermsListRs, IRegisterRq, IAgreeTerms } from '../models';
// 회원가입
const REGISTER_REQUEST = 'account/register/REGISTER_REQUEST';
const REGISTER_SUCCESS = 'account/register/REGISTER_SUCCESS';
const REGISTER_FAILURE = 'account/register/REGISTER_FAILURE';
// 약관 리스트
const GET_TERMS_LIST_REQUEST = 'account/terms/GET_TERMS_LIST_REQUEST';
const GET_TERMS_LIST_SUCCESS = 'account/terms/GET_TERMS_LIST_SUCCESS';
const GET_TERMS_LIST_FAILURE = 'account/terms/GET_TERMS_LIST_FAILURE';
// 사용자가 체크한 약관 목록
const CLIENT_AGREE_TERMS = 'account/terms/CLIENT_AGREE_TERMS';
export const register = createAsyncAction(
REGISTER_REQUEST,
REGISTER_SUCCESS,
REGISTER_FAILURE
)<IRegisterRq, string, AxiosError>();
export const getTermsList = createAsyncAction(
GET_TERMS_LIST_REQUEST,
GET_TERMS_LIST_SUCCESS,
GET_TERMS_LIST_FAILURE
)<DefaultSearchModel, IGetTermsListRs[], AxiosError>();
export const clientAgreeTerms =
createAction(CLIENT_AGREE_TERMS)<IAgreeTerms[]>();
const actions = {
register,
getTermsList,
clientAgreeTerms
};
export type AccountAction = ActionType<typeof actions>;

36
src/modules/account/register/apis/index.ts

@ -1,36 +0,0 @@
import axios from '../../../utils/customAxiosUtil';
import qs from 'qs';
import { IRegisterRq } from '../models';
import { DefaultSearchModel } from '../../../models/ComnModel';
import { ACCOUNT } from '../../../../configs/constants';
export const accountAPI = {
// 회원가입
register: async (data: IRegisterRq) => {
const param = {
...data.data,
...ACCOUNT,
terms: data.agreeTerms
};
return await axios.post('api/acnt/cstmr/register', param);
},
// 약관 목록
getTemrsList: async (param: DefaultSearchModel) => {
const queryString = qs.stringify(param, {
addQueryPrefix: true,
arrayFormat: 'repeat'
});
return await axios.get(`api/acnt/terms/list` + queryString);
},
// 인증번호 발송
sendCrtfyhp: async (hpno: string) => {
return await axios.get(`api/acnt/crtfyhp/register/send?hpno=${hpno}`);
},
// 인증번호 확인
confirmCrtfyhp: async (hpno: string, crtfyNo: string) => {
return await axios.get(
`api/acnt/crtfyhp/register/confirm?hpno=${hpno}&crtfyNo=${crtfyNo}`
);
}
};

5
src/modules/account/register/index.ts

@ -1,5 +0,0 @@
export * from './actions';
export * from './apis';
export * from './models';
export * from './reducers';
export * from './sagas';

54
src/modules/account/register/models/index.ts

@ -1,54 +0,0 @@
export const initAccount: IAccountState = {
data: undefined,
agreeTerms: undefined,
termsList: undefined,
errCode: undefined
};
export interface IAccountState {
data: IRegisterData | undefined;
agreeTerms: IAgreeTerms[] | undefined;
termsList: IGetTermsListRs[] | undefined;
errCode: string | undefined;
}
export interface IRegisterRq {
data: IRegisterData | undefined;
agreeTerms: IAgreeTerms[] | undefined;
}
export interface IRegisterData {
cstrmDivCd: string;
cstrmStatusCd: string;
userId: string;
authId: string;
siteCode: string;
memberDivCd: string;
userPswd: string;
ipinDi: string;
ipinCi: string;
joinCrtfyCd: string;
cntryCd: string;
genderCd: string;
memberName: string;
brthdyDate: string;
email: string;
hpno: string;
clncd: string;
}
export interface IAgreeTerms {
termsSno: number;
agreeYn: string;
}
export interface IGetTermsListRs {
termsSno: number;
siteCd: string;
estbshDate: string;
termsCtgryCd: string;
langDivCd: string;
termsTitleNm: string;
termsCn: string;
simpleCn: string;
}

22
src/modules/account/register/reducers/index.ts

@ -1,22 +0,0 @@
import { createReducer } from 'typesafe-actions';
import produce from 'immer';
import * as Actions from '../actions';
import { initAccount, IAccountState } from '../models';
export const accountReducer = createReducer<
IAccountState,
Actions.AccountAction
>(initAccount)
.handleAction(Actions.clientAgreeTerms, (state, action) =>
produce(state, draft => {
const res = action.payload;
draft.agreeTerms = res;
})
)
.handleAction(Actions.getTermsList.success, (state, action) =>
produce(state, draft => {
const res = action.payload;
draft.termsList = res;
})
);

51
src/modules/account/register/sagas/index.ts

@ -1,51 +0,0 @@
import { call, put, takeEvery } from '@redux-saga/core/effects';
import { ActionType } from 'typesafe-actions';
import * as Actions from '../actions';
import * as Apis from '../apis';
import * as Models from '../models';
function* registerSaga(action: ActionType<typeof Actions.register.request>) {
try {
const { data, agreeTerms } = action.payload;
const res = yield call(Apis.accountAPI.register, { data, agreeTerms });
const resData = res.data;
if (resData.errrCode > 0) {
yield put(Actions.register.success(resData));
} else {
yield put(Actions.register.failure(resData));
}
} catch (error: any) {
yield put(Actions.register.failure(error));
// yield put(Actions.createNoticeAction.failure(error));
}
}
function* getTermsListSaga(
action: ActionType<typeof Actions.getTermsList.request>
) {
try {
const { langDivCd, siteCd, termsCtgryCd } = action.payload;
const res = yield call(Apis.accountAPI.getTemrsList, {
langDivCd,
siteCd,
termsCtgryCd
});
const resData: Models.IGetTermsListRs[] = res.data;
yield put(Actions.getTermsList.success(resData));
} catch (error: any) {
yield put(Actions.getTermsList.failure(error));
// yield put(Actions.createNoticeAction.failure(error));
}
}
export function* accountSaga() {
yield takeEvery(Actions.register.request, registerSaga);
yield takeEvery(Actions.getTermsList.request, getTermsListSaga);
}

66
src/modules/analysis/history/actions/index.ts

@ -1,66 +0,0 @@
import { AxiosError } from 'axios';
import { createAsyncAction, ActionType, createAction } from 'typesafe-actions';
import {
IGetHstryDetailRs,
IGetHstryListRs,
IGetHstryLogRs,
IHistoryState
} from '../models';
// 비행 이력 현황 목록
const GET_HSTRY_LIST_REQUEST = 'anls/hstry/GET_HSTRY_LIST_REQUEST';
const GET_HSTRY_LIST_SUCCESS = 'anls/hstry/GET_HSTRY_LIST_SUCCESS';
const GET_HSTRY_LIST_FAILURE = 'anls/hstry/GET_HSTRY_LIST_FAILURE';
// 비행 이력 로그
const GET_HSTRY_LOG_REQUEST = 'anls/hstry/GET_HSTRY_LOG_REQUEST';
const GET_HSTRY_LOG_SUCCESS = 'anls/hstry/GET_HSTRY_LOG_SUCCESS';
const GET_HSTRY_LOG_FAILURE = 'anls/hstry/GET_HSTRY_LOG_FAILURE';
// 비행 이력 상세
const GET_HSTRY_DETAIL_REQUEST = 'anls/hstry/GET_HSTRY_DETAIL_REQUEST';
const GET_HSTRY_DETAIL_SUCCESS = 'anls/hstry/GET_HSTRY_DETAIL_SUCCESS';
const GET_HSTRY_DETAIL_FAILURE = 'anls/hstry/GET_HSTRY_DETAIL_FAILURE';
// 검색 조건 저장
const CLIENT_SEARCH_PARAM = 'anls/hstry/CLIENT_SEARCH_PARAM';
// 그룹 선택 시 검색 데이터 저장
const CLIENT_SELECT_HSTRY_GROUP = 'anls/hstry/CLIENT_SELECT_HSTRY_GROUP';
export const getHstryList = createAsyncAction(
GET_HSTRY_LIST_REQUEST,
GET_HSTRY_LIST_SUCCESS,
GET_HSTRY_LIST_FAILURE
)<
IHistoryState,
{ data: IGetHstryListRs[]; count: number; total: number },
AxiosError
>();
export const getHstryLog = createAsyncAction(
GET_HSTRY_LOG_REQUEST,
GET_HSTRY_LOG_SUCCESS,
GET_HSTRY_LOG_FAILURE
)<string, { log: IGetHstryLogRs[] }, AxiosError>();
export const getHstryDetail = createAsyncAction(
GET_HSTRY_DETAIL_REQUEST,
GET_HSTRY_DETAIL_SUCCESS,
GET_HSTRY_DETAIL_FAILURE
)<string, { detail: IGetHstryDetailRs }, AxiosError>();
export const clientSearchParam =
createAction(CLIENT_SEARCH_PARAM)<{ searchParams: string }>();
export const clientSelectHstryGroup = createAction(CLIENT_SELECT_HSTRY_GROUP)();
const actions = {
getHstryList,
getHstryLog,
getHstryDetail,
clientSearchParam,
clientSelectHstryGroup
};
export type AnalysisHistoryAction = ActionType<typeof actions>;

19
src/modules/analysis/history/apis/index.ts

@ -1,19 +0,0 @@
import axios from '../../../utils/customAxiosUtil';
import qs from 'qs';
export const historyAPI = {
getHstryList: async (data: string, page: number) => {
const queryString = qs.stringify(data, {
addQueryPrefix: true,
arrayFormat: 'repeat'
});
return await axios.get(`/api/anls/hstry/list${queryString}&page=${page}`);
},
getHstryLog: async (id: string) => {
return await axios.get(`/api/anls/hstry/log/${id}`);
},
getHstryDetail: async (id: string) => {
return await axios.get(`/api/anls/hstry/detail/${id}`);
}
};

5
src/modules/analysis/history/index.ts

@ -1,5 +0,0 @@
export * from './actions';
export * from './apis';
export * from './models';
export * from './reducers';
export * from './sagas';

80
src/modules/analysis/history/models/index.ts

@ -1,80 +0,0 @@
export const initHistory: IHistoryState = {
data: undefined,
detail: undefined,
log: undefined,
count: 0,
searchParams: '',
arrSpeed: undefined,
arrElev: undefined,
page: 1,
total: 0,
id: undefined
};
export interface IHistoryState {
data: IGetHstryListRs[] | undefined;
detail: IGetHstryDetailRs | undefined;
log: IGetHstryLogRs[] | undefined;
count: number | 0;
searchParams: string;
arrSpeed: number[] | undefined;
arrElev: number[] | undefined;
page: number | 1;
total: number | 0;
id: string | undefined;
}
export interface IGetHstryListRs {
cntrlId: string;
idntfNum: string;
cntrlStDt: Date;
cntrlEndDt: Date;
ttlTime: number;
ttlDstnc: number;
avrgSpeed: number;
bttrCnsmptn: number;
area1: string;
area2: string;
area3: string;
landNm?: string;
landNum: string;
stArea: string;
}
export interface IGetHstryDetailRs {
cntrlId: string;
idntfNum: string;
statusCd: string;
objectTypeCd: string;
cntrlStDt: Date;
cntrlEndDt: Date;
ttlTime: number;
ttlDstnc: number;
ttlDstncType: string;
avrgSpped: number;
bttrCnsmptn: number;
endTypeCd: string;
createDt: Date;
updateDt: Date;
}
export interface IGetHstryLogRs {
hstrySno: number;
cntrlId: string;
idntfNum: string;
trmnlId: string;
mssgTypeCd: string;
statusCd: string;
lat: number;
lon: number;
speed: number;
speedType: string;
heading: number;
elev: number;
elevType: string;
mvDstnc: number;
bttrLvl: number;
bttrVltg: number;
trmnlRcvDt: Date;
srvrRcvDt: Date;
}

51
src/modules/analysis/history/reducers/index.ts

@ -1,51 +0,0 @@
import { createReducer } from 'typesafe-actions';
import produce from 'immer';
import * as Actions from '../actions';
import { initHistory, IHistoryState } from '../models';
export const historyReducer = createReducer<
IHistoryState,
Actions.AnalysisHistoryAction
>(initHistory)
.handleAction(Actions.clientSearchParam, (state, action) =>
produce(state, draft => {
const { searchParams } = action.payload;
draft.searchParams = searchParams;
})
)
.handleAction(Actions.getHstryList.request, (state, action) =>
produce(state, draft => {
const { searchParams, page } = action.payload;
draft.searchParams = searchParams;
draft.page = page;
})
)
.handleAction(Actions.getHstryList.success, (state, action) =>
produce(state, draft => {
const { data, count, total } = action.payload;
draft.data = data;
draft.count = count;
draft.total = total;
})
)
.handleAction(Actions.getHstryDetail.success, (state, action) =>
produce(state, draft => {
const { detail } = action.payload;
draft.detail = detail;
})
)
.handleAction(Actions.getHstryLog.success, (state, action) =>
produce(state, draft => {
const { log } = action.payload;
draft.log = log;
})
)
.handleAction(Actions.clientSelectHstryGroup, (state, action) =>
produce(state, draft => {
draft.data = initHistory.data;
draft.count = initHistory.count;
draft.total = initHistory.total;
})
);

71
src/modules/analysis/history/sagas/index.ts

@ -1,71 +0,0 @@
import { call, put, takeEvery } from '@redux-saga/core/effects';
import { ActionType } from 'typesafe-actions';
import * as Actions from '../actions';
import { historyAPI } from '../apis';
function* getHstryListSaga(
action: ActionType<typeof Actions.getHstryList.request>
) {
try {
const { searchParams, page } = action.payload;
const res = yield call(historyAPI.getHstryList, searchParams, page);
const {
data: { items, total },
count
} = res;
yield put(
Actions.getHstryList.success({
data: items,
count,
total
})
);
} catch (error: any) {
yield put(Actions.getHstryList.failure(error));
}
}
function* getHstryLogSaga(
action: ActionType<typeof Actions.getHstryLog.request>
) {
try {
const id = action.payload;
const res = yield call(historyAPI.getHstryLog, id);
const { data } = res;
yield put(
Actions.getHstryLog.success({
log: data
})
);
} catch (error: any) {
yield put(Actions.getHstryLog.failure(error));
}
}
function* getHstryDetailSaga(
action: ActionType<typeof Actions.getHstryDetail.request>
) {
try {
const id = action.payload;
const res = yield call(historyAPI.getHstryDetail, id);
yield put(Actions.getHstryLog.request(id));
const { data } = res;
yield put(
Actions.getHstryDetail.success({
detail: data
})
);
} catch (error: any) {
yield put(Actions.getHstryDetail.failure(error));
}
}
export function* analysisHistorySaga() {
yield takeEvery(Actions.getHstryList.request, getHstryListSaga);
yield takeEvery(Actions.getHstryDetail.request, getHstryDetailSaga);
yield takeEvery(Actions.getHstryLog.request, getHstryLogSaga);
}

72
src/modules/analysis/simulation/actions/index.ts

@ -1,72 +0,0 @@
import { AxiosError } from 'axios';
import { ActionType, createAction, createAsyncAction } from 'typesafe-actions';
import {
AnalysisSimulatorData,
AnalysisSimulatorLogData,
AnalysisSimulatorState,
AnalysisSimulatorStcsData
} from '../models';
// 시뮬레이션 목록
const GET_SMLT_LIST_REQUEST = 'anls/smlt/GET_SMLT_LIST_REQUEST';
const GET_SMLT_LIST_SUCCESS = 'anls/smlt/GET_SMLT_LIST_SUCCESS';
const GET_SMLT_LIST_FAILURE = 'anls/smlt/GET_SMLT_LIST_FAILURE';
// 시뮬레이션 상세 로그 목록
const GET_SMLT_LOG_REQUEST = 'anls/smlt/GET_SMLT_LOG_REQUEST';
const GET_SMLT_LOG_SUCCESS = 'anls/smlt/GET_SMLT_LOG_SUCCESS';
const GET_SMLT_LOG_FAILURE = 'anls/smlt/GET_SMLT_LOG_FAILURE';
// 시뮬레이션 상세 정보
const GET_SMLT_DETAIL_REQUEST = 'anls/smlt/GET_SMLT_DETAIL_REQUEST';
const GET_SMLT_DETAIL_SUCCESS = 'anls/smlt/GET_SMLT_DETAIL_SUCCESS';
const GET_SMLT_DETAIL_FAILURE = 'anls/smlt/GET_SMLT_DETAIL_FAILURE';
// 시뮬레이션 분 단위 통계 정보
const GET_SMLT_STCS_REQUEST = 'anls/smlt/GET_SMLT_STCS_REQUEST';
const GET_SMLT_STCS_SUCCESS = 'anls/smlt/GET_SMLT_STCS_SUCCESS';
const GET_SMLT_STCS_FAILURE = 'anls/smlt/GET_SMLT_STCS_FAILURE';
// 검색 조건 저장
const CLIENT_SEARCH_PARAM = 'anls/smlt/CLIENT_SEARCH_PARAM';
export const getSmltList = createAsyncAction(
GET_SMLT_LIST_REQUEST,
GET_SMLT_LIST_SUCCESS,
GET_SMLT_LIST_FAILURE
)<
AnalysisSimulatorState,
{ data: AnalysisSimulatorData[]; count: number; total: number; page: number },
AxiosError
>();
export const getSmltLog = createAsyncAction(
GET_SMLT_LOG_REQUEST,
GET_SMLT_LOG_SUCCESS,
GET_SMLT_LOG_FAILURE
)<string, { log: AnalysisSimulatorLogData[] }, AxiosError>();
export const getSmltDetail = createAsyncAction(
GET_SMLT_DETAIL_REQUEST,
GET_SMLT_DETAIL_SUCCESS,
GET_SMLT_DETAIL_FAILURE
)<string, { data: AnalysisSimulatorData }, AxiosError>();
export const getSmltStcs = createAsyncAction(
GET_SMLT_STCS_REQUEST,
GET_SMLT_STCS_SUCCESS,
GET_SMLT_STCS_FAILURE
)<string, { data: AnalysisSimulatorStcsData[]; count: number }, AxiosError>();
export const clientSearchParam =
createAction(CLIENT_SEARCH_PARAM)<{ searchParams: string }>();
const actions = {
getSmltList,
getSmltDetail,
getSmltLog,
getSmltStcs,
clientSearchParam
};
export type AnalysisSimulatorAction = ActionType<typeof actions>;

28
src/modules/analysis/simulation/apis/index.ts

@ -1,28 +0,0 @@
import qs from 'qs';
import axios from '../../../utils/customAxiosUtil';
export const analysisSimulator = {
//비행 현황 목록
getSmltList: async (data: string, page: number) => {
const queryString = qs.stringify(data, {
addQueryPrefix: true,
arrayFormat: 'repeat'
});
return await axios.get(`/api/anls/smlt/list${queryString}&page=${page}`);
},
// 비행 이력 데이터 조회
getSmltLog: async (id: string) => {
return await axios.get(`/api/anls/smlt/hist/${id}`);
},
//비행 상세 데이터 조회
getSmltDetail: async (id: string) => {
return await axios.get(`/api/anls/smlt/detail/${id}`);
},
//비행 통계 데이터 조회
getSmltStcs: async (id: string) => {
return await axios.get(`/api/anls/smlt/stcs/${id}`);
}
};

5
src/modules/analysis/simulation/index.ts

@ -1,5 +0,0 @@
export * from './actions';
export * from './apis';
export * from './models';
export * from './reducers';
export * from './sagas';

78
src/modules/analysis/simulation/models/index.ts

@ -1,78 +0,0 @@
export interface AnalysisSimulatorState {
list: AnalysisSimulatorData[] | undefined;
detail: AnalysisSimulatorData | undefined;
count: number | 0;
log: AnalysisSimulatorLogData[] | undefined;
searchParams: string;
stcsList: AnalysisSimulatorStcsData[] | undefined;
stcsCount: number | 0;
page: number | 1;
total: number | 0;
}
export interface AnalysisSimulatorData {
cntrlId: string;
idntfNum: string;
flghtStDt: Date;
flghtEndDt: Date;
cntrlStDt: Date;
cntrlEndDt: Date;
ttlTime: number;
ttlTimeType: string;
ttlDstnc: number;
ttlDstncType: string;
avrgSpeed: number;
avrgSpeedType: string;
bttrCnsmptn: number;
stArea: string;
endArea: string;
arcrftTypeCd: string;
prdctNum: string;
arcrftModelNm: string;
imageUrl: string;
}
export interface AnalysisSimulatorLogData {
hstrySno: number;
cntrlId: string;
trmnlId: string;
mssgTypeCd: string;
statusCd: string;
lat: number;
lon: number;
speed: number;
speedType: string;
heading: number;
elev: number;
elevType: string;
mvDstnc: number;
bttrLvl: number;
bttrVltg: number;
trmnlRcvDt: string;
srvrRcvDt: string;
}
export interface AnalysisSimulatorStcsData {
dateCd: string;
timeCd: string;
avrgSpeed: number;
speedType: string;
avrgElev: number;
elevType: string;
avrgMvDstnc: number;
mvDstncType: string;
minBttrLvl: number;
maxBttrLvl: number;
}
export const initialState: AnalysisSimulatorState = {
list: undefined,
detail: undefined,
count: 0,
log: undefined,
searchParams: '',
stcsList: undefined,
stcsCount: 0,
page: 1,
total: 0
};

59
src/modules/analysis/simulation/reducers/index.ts

@ -1,59 +0,0 @@
import produce from 'immer';
import { createReducer } from 'typesafe-actions';
import * as Actions from '../actions';
import { AnalysisSimulatorState, initialState } from '../models';
export const analysisSimulatorReducer = createReducer<
AnalysisSimulatorState,
Actions.AnalysisSimulatorAction
>(initialState)
.handleAction(Actions.clientSearchParam, (state, action) =>
produce(state, draft => {
const { searchParams } = action.payload;
draft.searchParams = searchParams;
})
)
.handleAction(Actions.getSmltList.success, (state, action) =>
produce(state, draft => {
const { data, count, total, page } = action.payload;
if (!state.list) {
draft.list = data;
} else {
if (page === 1) {
draft.list = data;
draft.page = page;
return;
}
draft.list = state.list?.concat(data);
}
draft.page = page;
draft.count = count;
draft.total = total;
})
)
.handleAction(Actions.getSmltDetail.success, (state, action) =>
produce(state, draft => {
const { data } = action.payload;
draft.detail = data;
})
)
.handleAction(Actions.getSmltStcs.success, (state, action) =>
produce(state, draft => {
const { data, count } = action.payload;
draft.stcsList = data;
draft.stcsCount = count;
})
)
.handleAction(Actions.getSmltLog.success, (state, action) =>
produce(state, draft => {
const { log } = action.payload;
const data = log.sort((p: any, n: any): any => {
const a = p.srvrRcvDt.replace(/[^0-9\.]+/g, '');
const b = n.srvrRcvDt.replace(/[^0-9\.]+/g, '');
return a - b;
});
draft.log = log;
})
);

86
src/modules/analysis/simulation/sagas/index.ts

@ -1,86 +0,0 @@
import { call, put, takeEvery } from '@redux-saga/core/effects';
import { ActionType } from 'typesafe-actions';
import * as Actions from '../actions';
import * as Apis from '../apis';
function* listSaga(action: ActionType<typeof Actions.getSmltList.request>) {
try {
const { searchParams, page } = action.payload;
const res = yield call(
Apis.analysisSimulator.getSmltList,
searchParams,
page
);
const {
data: { items, total },
count
} = res;
yield put(
Actions.getSmltList.success({
data: items,
count: count,
total,
page: res.data.page
})
);
} catch (error: any) {
yield put(Actions.getSmltList.failure(error));
}
}
function* detailSaga(action: ActionType<typeof Actions.getSmltDetail.request>) {
try {
const id = action.payload;
const res = yield call(Apis.analysisSimulator.getSmltDetail, id);
// yield put(Actions.getSmltLog.request(id));
const { data } = res;
yield put(
Actions.getSmltDetail.success({
data: data
})
);
} catch (error: any) {
yield put(Actions.getSmltDetail.failure(error));
}
}
function* stcsSaga(action: ActionType<typeof Actions.getSmltStcs.request>) {
try {
const id = action.payload;
const res = yield call(Apis.analysisSimulator.getSmltStcs, id);
// yield put(Actions.getSmltLog.request(id));
const { data, count } = res;
yield put(
Actions.getSmltStcs.success({
data: data,
count: count
})
);
} catch (error: any) {
yield put(Actions.getSmltDetail.failure(error));
}
}
function* logSaga(action: ActionType<typeof Actions.getSmltLog.request>) {
try {
const id = action.payload;
const res = yield call(Apis.analysisSimulator.getSmltLog, id);
const { data } = res;
yield put(
Actions.getSmltLog.success({
log: data
})
);
} catch (error: any) {
yield put(Actions.getSmltLog.failure(error));
}
}
export function* analysisSimulatorSaga() {
yield takeEvery(Actions.getSmltList.request, listSaga);
yield takeEvery(Actions.getSmltDetail.request, detailSaga);
yield takeEvery(Actions.getSmltStcs.request, stcsSaga);
yield takeEvery(Actions.getSmltLog.request, logSaga);
}

145
src/modules/basis/drone/actions/index.ts

@ -1,145 +0,0 @@
import { AxiosError } from 'axios';
import { createAsyncAction, ActionType, createAction } from 'typesafe-actions';
import {
IDrone,
ISelectGroup,
IIdntf,
IUpdateIdntfRq,
ICreateDroneRq,
IUpdateDroneRq,
ICreateIdntfRq
} from '../models';
// 드론 목록 조회
const GET_DRONE_LIST_REQUEST = 'basis/drone/GET_DRONE_LIST_REQUEST';
const GET_DRONE_LIST_SUCCESS = 'basis/drone/GET_DRONE_LIST_SUCCESS';
const GET_DRONE_LIST_FAILURE = 'basis/drone/GET_DRONE_LIST_FAILURE';
// 드론 상세 조회
const GET_DRONE_DETAIL_REQUEST = 'basis/drone/GET_DRONE_DETAIL_REQUEST';
const GET_DRONE_DETAIL_SUCCESS = 'basis/drone/GET_DRONE_DETAIL_SUCCESS';
const GET_DRONE_DETAIL_FAILURE = 'basis/drone/GET_DRONE_DETAIL_FAILURE';
// 드론 생성
const CREATE_DRONE_REQUEST = 'basis/drone/CREATE_DRONE_REQUEST';
const CREATE_DRONE_SUCCESS = 'basis/drone/CREATE_DRONE_SUCCESS';
const CREATE_DRONE_FAILURE = 'basis/drone/CREATE_DRONE_FAILURE';
// 드론 수정
const UPDATE_DRONE_REQUEST = 'basis/drone/UPDATE_DRONE_REQUEST';
const UPDATE_DRONE_SUCCESS = 'basis/drone/UPDATE_DRONE_SUCCESS';
const UPDATE_DRONE_FAILURE = 'basis/drone/UPDATE_DRONE_FAILURE';
// 드론 삭제
const DELETE_DRONE_REQUEST = 'basis/drone/DELETE_DRONE_REQUEST';
const DELETE_DRONE_SUCCESS = 'basis/drone/DELETE_DRONE_SUCCESS';
const DELETE_DRONE_FAILURE = 'basis/drone/DELETE_DRONE_FAILURE';
// 식별장치 조회
const GET_IDNTF_LIST_REQUEST = 'basis/idntf/GET_IDNTF_LIST_REQUEST';
const GET_IDNTF_LIST_SUCCESS = 'basis/idntf/GET_IDNTF_LIST_SUCCESS';
const GET_IDNTF_LIST_FAILURE = 'basis/idntf/GET_IDNTF_LIST_FAILURE';
// 식별장치 생성
const CREATE_IDNTF_REQUEST = 'basis/idntf/CREATE_IDNTF_REQUEST';
const CREATE_IDNTF_SUCCESS = 'basis/idntf/CREATE_IDNTF_SUCCESS';
const CREATE_IDNTF_FAILURE = 'basis/idntf/CREATE_IDNTF_FAILURE';
// 식별장치 수정
const UPDATE_IDNTF_REQUEST = 'basis/idntf/UPDATE_IDNTF_REQUEST';
const UPDATE_IDNTF_SUCCESS = 'basis/idntf/UPDATE_IDNTF_SUCCESS';
const UPDATE_IDNTF_FAILURE = 'basis/idntf/UPDATE_IDNTF_FAILURE';
//식별장치 삭제
const DELETE_IDNTF_REQUEST = 'basis/idntf/DELETE_IDNTF_REQUEST';
const DELETE_IDNTF_SUCCESS = 'basis/idntf/DELETE_IDNTF_SUCCESS';
const DELETE_IDNTF_FAILURE = 'basis/idntf/DELETE_IDNTF_FAILURE';
// 드론 탭에서 그룹 선택
const CLIENT_SELECT_GROUP = 'basis/drone/CLIENT_SELECT_GROUP';
const CLIENT_RESET_IDNTF = 'basis/idntf/CLIENT_RESET_IDNTF';
export const getDroneList = createAsyncAction(
GET_DRONE_LIST_REQUEST,
GET_DRONE_LIST_SUCCESS,
GET_DRONE_LIST_FAILURE
)<string, { data: IDrone[]; total: number }, AxiosError>();
export const getDroneDetail = createAsyncAction(
GET_DRONE_DETAIL_REQUEST,
GET_DRONE_DETAIL_SUCCESS,
GET_DRONE_DETAIL_FAILURE
)<number, IDrone, AxiosError>();
export const createDrone = createAsyncAction(
CREATE_DRONE_REQUEST,
CREATE_DRONE_SUCCESS,
CREATE_DRONE_FAILURE
)<ICreateDroneRq, string, AxiosError>();
export const updateDrone = createAsyncAction(
UPDATE_DRONE_REQUEST,
UPDATE_DRONE_SUCCESS,
UPDATE_DRONE_FAILURE
)<IUpdateDroneRq, string, AxiosError>();
export const deleteDrone = createAsyncAction(
DELETE_DRONE_REQUEST,
DELETE_DRONE_SUCCESS,
DELETE_DRONE_FAILURE
)<number, string, AxiosError>();
export const getIdntfList = createAsyncAction(
GET_IDNTF_LIST_REQUEST,
GET_IDNTF_LIST_SUCCESS,
GET_IDNTF_LIST_FAILURE
)<number, { data: IIdntf[]; count: number }, AxiosError>();
export const createIdntf = createAsyncAction(
CREATE_IDNTF_REQUEST,
CREATE_IDNTF_SUCCESS,
CREATE_IDNTF_FAILURE
)<
{ mode: string; data: ICreateIdntfRq[]; arcrftSno: number },
string,
AxiosError
>();
export const updateIdntf = createAsyncAction(
UPDATE_IDNTF_REQUEST,
UPDATE_IDNTF_SUCCESS,
UPDATE_IDNTF_FAILURE
)<
{ mode: string; data: IUpdateIdntfRq[]; arcrftSno: number },
string,
AxiosError
>();
export const deleteIdntf = createAsyncAction(
DELETE_IDNTF_REQUEST,
DELETE_IDNTF_SUCCESS,
DELETE_IDNTF_FAILURE
)<string, string, AxiosError>();
export const clientSelectGroup =
createAction(CLIENT_SELECT_GROUP)<ISelectGroup>();
export const clientResetIdntf = createAction(CLIENT_RESET_IDNTF)();
const actions = {
getDroneList,
getDroneDetail,
createDrone,
updateDrone,
deleteDrone,
getIdntfList,
createIdntf,
updateIdntf,
deleteIdntf,
clientResetIdntf,
clientSelectGroup
};
export type DronAction = ActionType<typeof actions>;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save