diff --git a/package.json b/package.json index e03074a..6a829a4 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "react-bootstrap": "^2.5.0", "react-currency-format": "^1.1.0", "react-data-table-component": "^7.5.3", + "react-datepicker": "^4.8.0", "react-dom": "^18.2.0", "react-icons": "^4.4.0", "react-redux": "^8.0.2", diff --git a/src/Components/Catalogos/CatClientes.tsx b/src/Components/Catalogos/CatClientes.tsx index 78b53db..034bb22 100644 --- a/src/Components/Catalogos/CatClientes.tsx +++ b/src/Components/Catalogos/CatClientes.tsx @@ -5,7 +5,7 @@ import { IconContext } from 'react-icons' import { useDispatch, useSelector } from 'react-redux' import ICatClientes from '../../Interfaces/Catalogos/ICatClientes' import { RootState } from '../../store/store' -import { BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' +import { BsEraserFill, BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' import DSCatClientes from '../../Services/Catalogos/CatClientes.Services' import { updateCatClientes, deleteCatClientes } from '../../store/features/Catalogos/CatClientesSlice' @@ -89,6 +89,11 @@ export const CatClientes: FC = (props) => { setDeleteCatClientesDialog(false) } + const clearForm = () => { + setIDCliente(0) + setCliente('') + } + const saveInfo = () => { const data: ICatClientes = { id: IDCliente, @@ -159,9 +164,22 @@ export const CatClientes: FC = (props) => { No cliente - + + + +
diff --git a/src/Components/Catalogos/CatProveedores.tsx b/src/Components/Catalogos/CatProveedores.tsx index b72a6b3..40115c6 100644 --- a/src/Components/Catalogos/CatProveedores.tsx +++ b/src/Components/Catalogos/CatProveedores.tsx @@ -5,7 +5,7 @@ import { IconContext } from 'react-icons' import { useDispatch, useSelector } from 'react-redux' import ICatProveedores from '../../Interfaces/Catalogos/ICatProveedores' import { RootState } from '../../store/store' -import { BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' +import { BsEraserFill, BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' import DSCatProveedores from '../../Services/Catalogos/CatProveedores.Services' import { updateCatProveedores, deleteCatProveedores } from '../../store/features/Catalogos/CatProveedoresSlice' @@ -89,6 +89,11 @@ export const CatProveedores: FC = (props) => { setDeleteCatProveedoresDialog(false) } + const clearForm = () => { + setIDProveedor(0) + setProveedor('') + } + const saveInfo = () => { const data: ICatProveedores = { id: IDProveedor, @@ -165,6 +170,19 @@ export const CatProveedores: FC = (props) => { + + +
diff --git a/src/Components/Catalogos/CatServicios.tsx b/src/Components/Catalogos/CatServicios.tsx index 57b27ab..aa5f338 100644 --- a/src/Components/Catalogos/CatServicios.tsx +++ b/src/Components/Catalogos/CatServicios.tsx @@ -5,7 +5,7 @@ import { IconContext } from 'react-icons' import { useDispatch, useSelector } from 'react-redux' import ICatServicios from '../../Interfaces/Catalogos/ICatServicios' import { RootState } from '../../store/store' -import { BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' +import { BsEraserFill, BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' import DSCatServicios from '../../Services/Catalogos/CatServicios.Service' import { updateCatServicios, deleteCatServicios } from '../../store/features/Catalogos/CatServiciosSlice' @@ -89,6 +89,11 @@ export const CatServicios: FC = (props) => { setDeleteCatClientesDialog(false) } + const clearForm = () => { + setIDServicio(0) + setServicio('') + } + const saveInfo = () => { const data: ICatServicios = { id: IDServicio, @@ -154,7 +159,7 @@ export const CatServicios: FC = (props) => { }} > - Catalogo: Clientes + Catalogo: Servicios @@ -162,6 +167,19 @@ export const CatServicios: FC = (props) => { + + +
diff --git a/src/Components/Catalogos/CatUbicaciones.tsx b/src/Components/Catalogos/CatUbicaciones.tsx index a980801..377020b 100644 --- a/src/Components/Catalogos/CatUbicaciones.tsx +++ b/src/Components/Catalogos/CatUbicaciones.tsx @@ -4,7 +4,7 @@ import DataTable from 'react-data-table-component' import { IconContext } from 'react-icons' import { useDispatch, useSelector } from 'react-redux' import { RootState } from '../../store/store' -import { BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' +import { BsEraserFill, BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' import DSCatUbicaciones from '../../Services/Catalogos/CatUbicaciones.Services' import { updateCatUbicaciones, deleteCatUbicaciones } from '../../store/features/Catalogos/CatUbicacionesSlice' import ICatUbicaciones from '../../Interfaces/Catalogos/ICatUbicaciones' @@ -98,6 +98,12 @@ export const CatUbicaciones: FC = (props) => { setDeleteCatUbicacionesDialog(false) } + const clearForm = () => { + setIDUbicacion(0) + setUbicacion('') + setClasificacion(1) + } + const saveInfo = () => { const data: ICatUbicaciones = { id: IDUbicacion, @@ -176,8 +182,23 @@ export const CatUbicaciones: FC = (props) => { - Clasificacion - + + + + + Clasificacion + + { diff --git a/src/Components/Home/Home.tsx b/src/Components/Home/Home.tsx index a8c6536..e8c1d1a 100644 --- a/src/Components/Home/Home.tsx +++ b/src/Components/Home/Home.tsx @@ -8,6 +8,7 @@ import DSCatProveedores from '../../Services/Catalogos/CatProveedores.Services' import DSCatTipoUnidades from '../../Services/Catalogos/CatTipoUnidades.Services' import DSCatUbicaciones from '../../Services/Catalogos/CatUbicaciones.Services' import DSCatServicios from '../../Services/Catalogos/CatServicios.Service' +import DSOpStatusSecuence from '../../Services/Operaciones/OpViajes.Services' import { populateCatClientes } from '../../store/features/Catalogos/CatClientesSlice' import { populateCatProveedores } from '../../store/features/Catalogos/CatProveedoresSlice' import { populateCatTipoUnidades } from '../../store/features/Catalogos/CatTipoUnidadesSlice' @@ -15,6 +16,7 @@ import { populateCatUbicaciones } from '../../store/features/Catalogos/CatUbicac import { populateCatServicios } from '../../store/features/Catalogos/CatServiciosSlice' import { populateUserProfile } from '../../store/features/Auth/UserProfileSlice' import { populateMenuItems } from '../../store/features/Auth/MenuItemsSlice' +import { populateOpViajesEstatusSecuencia } from '../../store/features/Operaciones/OpViajes.Estatus.SecuenciaSlice' import Leyend from '../../images/leyend.png' interface IProps {} @@ -56,6 +58,12 @@ export const Home: FC = (props) => { dispatch(populateCatServicios(response.data)) }) .catch((e: Error) => {}) + + DSOpStatusSecuence.GetStatusSecuence() + .then((response) => { + dispatch(populateOpViajesEstatusSecuencia(response.data)) + }) + .catch((e: Error) => {}) } const validateToken = () => { diff --git a/src/Components/Operaciones/OpMonitor.tsx b/src/Components/Operaciones/OpMonitor.tsx index e65af30..60a2063 100644 --- a/src/Components/Operaciones/OpMonitor.tsx +++ b/src/Components/Operaciones/OpMonitor.tsx @@ -1,7 +1,8 @@ import React, { FC, useEffect, useState } from 'react' -import { Alert, Button, Card, Col, Form, Modal, Row, Table } from 'react-bootstrap' +import { Alert, Button, Card, Col, Form, Modal, OverlayTrigger, Row, Table, Tooltip } from 'react-bootstrap' import { IconContext } from 'react-icons' -import { BsChevronDown, BsChevronRight, BsChevronUp, BsFillPencilFill, BsPlusSquareFill } from 'react-icons/bs' +import { BsChevronDown, BsChevronRight, BsChevronUp, BsFillPencilFill, BsPlusSquareFill, BsTruck } from 'react-icons/bs' +import { FcShipped, FcInTransit } from 'react-icons/fc' import { useDispatch, useSelector } from 'react-redux' import { RootState } from '../../store/store' import DTOOpViajes from '../../DTOs/Operaciones/DTOViajes' @@ -15,6 +16,7 @@ import { populateOpViajesServicios, updateOpViajesServicios, } from '../../store/features/Operaciones/OpViajesServiciosSlice' +import { ViajeEstatus } from './Viaje/ViajeEstatus' interface IProps {} @@ -118,21 +120,27 @@ export const OpMonitor: FC = (props) => { - + Monitor de Viajes - +
{ newTrip() }} - title='De un click aqui para crear un nuevo viaje' + style={{ cursor: 'pointer' }} > - - - + De un click aqui para iniciar un viaje} + > + + + + + +
@@ -166,6 +174,7 @@ export const OpMonitor: FC = (props) => { Destino Tipo Unidad No caja + Estatus Hazmat Ref AA PickUp No @@ -235,6 +244,12 @@ export const OpMonitor: FC = (props) => { > {MasterData.noCaja} + + + = (props) => { ) : ( '' )} - Servicio + Servicio Caja Aduana - Proveedor - Comentarios + Cita + Proveedor + Comentarios {props.actionButtons ? ( <> @@ -107,6 +108,7 @@ export const Servicios: FC = (props) => { {service.sServicio} {service.noCaja} {getAduana(service.aduana)} + {service.cita} {service.sProveedor} {service.comentarios} {props.actionButtons ? ( diff --git a/src/Components/Operaciones/Viaje/Viaje.tsx b/src/Components/Operaciones/Viaje/Viaje.tsx index 79d8424..6296b03 100644 --- a/src/Components/Operaciones/Viaje/Viaje.tsx +++ b/src/Components/Operaciones/Viaje/Viaje.tsx @@ -11,6 +11,8 @@ import { } from '../../../store/features/Operaciones/OpViajesServiciosSlice' import DTOViajesServicios from '../../../DTOs/Operaciones/DTOViajesServicios' import { Servicios } from '../Viaje/Servicios/Servicios' +import DatePicker from 'react-datepicker' +import 'react-datepicker/dist/react-datepicker.css' interface IProps { IDViaje: number @@ -50,8 +52,11 @@ export const Viaje: FC = (props) => { const [Comentarios, setComentarios] = useState('') const [Aduana, setAduana] = useState(0) const [DisableAduana, setDisableAduana] = useState(true) + const [TotalServicios, setTotalServicios] = useState(0) + const [Cita, setCita] = useState() useEffect(() => { + if (IDServicio > 0 && TotalServicios === 0) saveDetail() let selectedRow = mAllTrips.filter((row) => { if (row.id === props.IDViaje) { setIDViaje(row.id) @@ -70,7 +75,13 @@ export const Viaje: FC = (props) => { }) //setRefAA(selectedRow[0].refAgenciaAduanal) // console.log(JSON.stringify(selectedRow) + ' ' + props.IDViaje) - }, [props.IDViaje]) + let totalServicios = mAllTripServices.filter((a) => { + if (a.idViaje === IDViaje) { + return a + } + }) + setTotalServicios(totalServicios.length) + }, [IDViaje]) useEffect(() => { if (IDServicio === 1 || IDServicio === 2 || IDServicio === 22) setDisableAduana(false) @@ -110,6 +121,7 @@ export const Viaje: FC = (props) => { idViaje: IDViaje, idServicio: IDServicio, sServicio: '', + cita: Cita ? adjustTimeZone(Cita.toISOString()) : '', aduana: Aduana, comentarios: Comentarios, idProveedor: IDProveedor, @@ -130,6 +142,14 @@ export const Viaje: FC = (props) => { .catch((e: Error) => {}) } + const adjustTimeZone = (str: string): string => { + if (str) { + const original: any = new Date(str) + const real = new Date(original - original.getTimezoneOffset() * 60 * 1000) + return real.toISOString() + } else return '' + } + const loadService = (id: number) => { let found = mAllTripServices.filter((a) => { if (a.id === id) { @@ -146,14 +166,9 @@ export const Viaje: FC = (props) => { } const saveMaster = () => { - let totalServicios = mAllTripServices.filter((a) => { - if (a.idViaje === IDViaje) { - return a - } - }) - if (totalServicios.length === 0) { + if (TotalServicios === 0) { if (IDServicio === 0) { - alert('Para continuar, primero seleccione un servicio') + alert('Para continuar, primero seleccione un servicio ') return false } if (IDProveedor === 0) { @@ -188,7 +203,6 @@ export const Viaje: FC = (props) => { data['max'] = false dispatch(updateOpViajes(data)) setIDViaje(data.id) - saveDetail() }) .catch((e: Error) => {}) } @@ -199,6 +213,7 @@ export const Viaje: FC = (props) => { setIDServicio(0) setComentarios('') setIDProveedor(0) + setUltimaCaja('') setDisableAduana(true) } @@ -438,7 +453,7 @@ export const Viaje: FC = (props) => { Servicio - + { @@ -459,9 +474,19 @@ export const Viaje: FC = (props) => { : null} - - Aduana + + setCita(date)} + showTimeSelect + dateFormat='MM/dd/yyyy HH:mm:ss' + placeholderText='Cita no definida' + isClearable + /> + {/* + Aduana + */} = (props) => { + const mTripStatus = useSelector((state: RootState) => state.OpViajesEstatusSecuencia.OpViajesEstatusSecuencia) + const [IDStatus, setIDStatus] = useState(0) + return ( +
+ { + setIDStatus(parseInt(e.target.value)) + }} + value={IDStatus} + className='form-select form-select-sm dialogLabel' + > + + {mTripStatus + ? mTripStatus + .filter((row) => row.tipoOperacion === props.TipoOperacion) + .sort((a, b) => a.secuencia - b.secuencia) + .map((row) => { + return ( + + ) + }) + : null} + +
+ ) +} diff --git a/src/DTOs/Operaciones/DTOViajeEstatusSecuencia.ts b/src/DTOs/Operaciones/DTOViajeEstatusSecuencia.ts new file mode 100644 index 0000000..4b1387b --- /dev/null +++ b/src/DTOs/Operaciones/DTOViajeEstatusSecuencia.ts @@ -0,0 +1,9 @@ +export default interface DTOViajeEstatusSecuencia { + id: number, + tipoOperacion: number, + sTipoOperacion: string, + estatus: number, + sEstatus: string, + secuencia: number, + activo: number +} \ No newline at end of file diff --git a/src/DTOs/Operaciones/DTOViajesServicios.ts b/src/DTOs/Operaciones/DTOViajesServicios.ts index 705271d..b4f84f0 100644 --- a/src/DTOs/Operaciones/DTOViajesServicios.ts +++ b/src/DTOs/Operaciones/DTOViajesServicios.ts @@ -3,6 +3,7 @@ export default interface DTOViajesServicios { idViaje: number, idServicio: number, sServicio: string, + cita?: string, aduana: number, comentarios: string, idProveedor: number, diff --git a/src/Services/Operaciones/OpViajes.Services.ts b/src/Services/Operaciones/OpViajes.Services.ts index 62fdd02..5646bf5 100644 --- a/src/Services/Operaciones/OpViajes.Services.ts +++ b/src/Services/Operaciones/OpViajes.Services.ts @@ -3,6 +3,7 @@ import DTOViajes from "../../DTOs/Operaciones/DTOViajes"; import IRespuesta from "../../Interfaces/Respuestas/IRespuesta"; import DTOViajesServicios from "../../DTOs/Operaciones/DTOViajesServicios"; import DTOUltimaCaja from "../../DTOs/Operaciones/DTOUltimaCaja"; +import DTOViajeEstatusSecuencia from "../../DTOs/Operaciones/DTOViajeEstatusSecuencia"; class OpViajesDataService { Get() { @@ -14,6 +15,9 @@ class OpViajesDataService { GetLastTrailerBox(idViaje: number) { return http.get(`Operaciones/OpViajes/GetLastTrailerBox?idViaje=${idViaje}`); } + GetStatusSecuence() { + return http.get(`Operaciones/OpViajes/GetStatusSecuence`); + } Append(data: DTOViajes) { return http.post(`Operaciones/OpViajes/Append`,data); } diff --git a/src/store/features/Operaciones/OpViajes.Estatus.SecuenciaSlice.ts b/src/store/features/Operaciones/OpViajes.Estatus.SecuenciaSlice.ts new file mode 100644 index 0000000..c65e152 --- /dev/null +++ b/src/store/features/Operaciones/OpViajes.Estatus.SecuenciaSlice.ts @@ -0,0 +1,34 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit' +import DTOViajeEstatusSecuencia from '../../../DTOs/Operaciones/DTOViajeEstatusSecuencia' +const OpViajesEstatusSecuencia: DTOViajeEstatusSecuencia[] = [] +const initialState = { OpViajesEstatusSecuencia } + +export const OpViajesEstatusSecuenciaSlice = createSlice({ + name: 'OpViajesEstatusSecuencia', + initialState: initialState, + reducers: { + resetOpViajesEstatusSecuencia : (state, action: PayloadAction) => { + state.OpViajesEstatusSecuencia = [] + }, + populateOpViajesEstatusSecuencia : (state, action: PayloadAction) => { + action.payload.forEach(element => { + const index = state.OpViajesEstatusSecuencia.findIndex(object => object.id === element.id) + if (index<0) state.OpViajesEstatusSecuencia.push(element) + }) + }, + updateOpViajesEstatusSecuencia : (state, action: PayloadAction) => { + action.payload.forEach(row => { + const i = state.OpViajesEstatusSecuencia.findIndex(_element => _element.id === row.id); + if (i > -1) state.OpViajesEstatusSecuencia[i] = row; + else state.OpViajesEstatusSecuencia.push(row); + }) + }, + deleteOpViajesEstatusSecuencia : (state, action: PayloadAction) => { + const newArr = state.OpViajesEstatusSecuencia.filter(data => data.id != action.payload); + state.OpViajesEstatusSecuencia=newArr + }, + }, +}) + +export const { resetOpViajesEstatusSecuencia, populateOpViajesEstatusSecuencia, updateOpViajesEstatusSecuencia, deleteOpViajesEstatusSecuencia } = OpViajesEstatusSecuenciaSlice.actions; +export default OpViajesEstatusSecuenciaSlice.reducer; \ No newline at end of file diff --git a/src/store/store.ts b/src/store/store.ts index c75e60c..15b5f75 100644 --- a/src/store/store.ts +++ b/src/store/store.ts @@ -10,6 +10,7 @@ import { CatUbicacionesSlice } from './features/Catalogos/CatUbicacionesSlice' import { CatAduanasSlice } from './features/Catalogos/CatAduanasSlice' import { OpViajesSlice } from './features/Operaciones/OpViajesSlice' import { OpViajesServiciosSlice } from './features/Operaciones/OpViajesServiciosSlice' +import { OpViajesEstatusSecuenciaSlice } from './features/Operaciones/OpViajes.Estatus.SecuenciaSlice' export const store = configureStore({ reducer: { @@ -22,7 +23,8 @@ export const store = configureStore({ CatServicios: CatServiciosSlice.reducer, CatAduanas : CatAduanasSlice.reducer, OpViajes: OpViajesSlice.reducer, - OpViajesServicios: OpViajesServiciosSlice.reducer + OpViajesServicios: OpViajesServiciosSlice.reducer, + OpViajesEstatusSecuencia: OpViajesEstatusSecuenciaSlice.reducer } }) diff --git a/yarn.lock b/yarn.lock index d034db4..008c29f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1570,7 +1570,7 @@ schema-utils "^3.0.0" source-map "^0.7.3" -"@popperjs/core@^2.11.5": +"@popperjs/core@^2.11.5", "@popperjs/core@^2.9.2": version "2.11.6" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== @@ -3153,6 +3153,11 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== +classnames@^2.2.6: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + classnames@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" @@ -3610,6 +3615,11 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +date-fns@^2.24.0: + version "2.29.3" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" + integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== + debug@2.6.9, debug@^2.6.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -7313,7 +7323,7 @@ prop-types-extra@^1.1.0: react-is "^16.3.2" warning "^4.0.0" -prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -7440,6 +7450,18 @@ react-data-table-component@^7.5.3: dependencies: deepmerge "^4.2.2" +react-datepicker@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-4.8.0.tgz#11b8918d085a1ce4781eee4c8e4641b3cd592010" + integrity sha512-u69zXGHMpxAa4LeYR83vucQoUCJQ6m/WBsSxmUMu/M8ahTSVMMyiyQzauHgZA2NUr9y0FUgOAix71hGYUb6tvg== + dependencies: + "@popperjs/core" "^2.9.2" + classnames "^2.2.6" + date-fns "^2.24.0" + prop-types "^15.7.2" + react-onclickoutside "^6.12.0" + react-popper "^2.2.5" + react-dev-utils@^12.0.1: version "12.0.1" resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" @@ -7483,6 +7505,11 @@ react-error-overlay@^6.0.11: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== +react-fast-compare@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" + integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + react-icons@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.4.0.tgz#a13a8a20c254854e1ec9aecef28a95cdf24ef703" @@ -7508,6 +7535,19 @@ react-lifecycles-compat@^3.0.4: resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== +react-onclickoutside@^6.12.0: + version "6.12.2" + resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.12.2.tgz#8e6cf80c7d17a79f2c908399918158a7b02dda01" + integrity sha512-NMXGa223OnsrGVp5dJHkuKxQ4czdLmXSp5jSV9OqiCky9LOpPATn3vLldc+q5fK3gKbEHvr7J1u0yhBh/xYkpA== + +react-popper@^2.2.5: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba" + integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q== + dependencies: + react-fast-compare "^3.0.1" + warning "^4.0.2" + react-redux@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.2.tgz#bc2a304bb21e79c6808e3e47c50fe1caf62f7aad" @@ -8860,7 +8900,7 @@ walker@^1.0.7: dependencies: makeerror "1.0.12" -warning@^4.0.0, warning@^4.0.3: +warning@^4.0.0, warning@^4.0.2, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==