diff --git a/frontend/src/Call/GroupModal.js b/frontend/src/Call/GroupModal.js index 95e6eee..59ebcbe 100644 --- a/frontend/src/Call/GroupModal.js +++ b/frontend/src/Call/GroupModal.js @@ -10,7 +10,6 @@ import { Dropdown } from "semantic-ui-react"; import "./FilterModal.css"; -import * as types from "./call-constants"; function GroupModal (props) { const shortName = useSelector((state) => state.callPlayer.shortName); diff --git a/frontend/src/Call/call-actions.js b/frontend/src/Call/call-actions.js deleted file mode 100644 index ac225d8..0000000 --- a/frontend/src/Call/call-actions.js +++ /dev/null @@ -1,358 +0,0 @@ -import axios from "axios"; - -import * as types from "./call-constants"; -import { push } from 'connected-react-router'; - -function beginFetchCallInfo() { - return { type: types.FETCH_CALL_INFO }; -} - -function fetchCallInfoSuccess(data) { - return { type: types.FETCH_SUCCESS_CALL_INFO, - data }; -} - -function fetchCallInfoError(data) { - return { type: types.FETCH_ERROR_CALL_INFO, - data }; -} - -function prependCall() { - return { type: types.PREPEND_CALL }; -} - -function beginAddStar() { - return { type: types.ADD_STAR }; -} - -function addStarSuccess(data) { - return { type: types.ADD_STAR_SUCCESS, data }; -} - -function addStarError(data) { - return { type: types.ADD_STAR_ERROR, data }; -} - -function beginFetchCall() { - return { type: types.FETCH_CALL }; -} - -function fetchCallSuccess(data) { - return { type: types.FETCH_SUCCESS_CALL, - data }; -} - - - -function fetchOlderCallSuccess(data) { - return { type: types.FETCH_SUCCESS_OLDER_CALL, - data }; -} - -function fetchNewerCallSuccess(data) { - return { type: types.FETCH_SUCCESS_NEWER_CALL, - data }; -} - -function fetchCallError(data) { - return { type: types.FETCH_ERROR_CALL, - data }; -} - -// The data field should be a JS date object -export function setCallTime(data) { - return {type: types.SET_CALL_TIME, data}; -} - -export function changeUrl(url) { - return dispatch => { - dispatch(push(url)); - }; -} - -// Example of an Async Action Creator -// http://redux.js.org/docs/advanced/AsyncActions.html - -function shouldFetchCalls(state, subreddit) { - return true; - if ((!state.call.items) || (state.call.items.length <1)) { - return true - } else if (state.call.isWaiting) { - return false - } else { - return false - } -} - - - - -function buildUrlParams(a) { - return Object.keys(a).map(function(k) { - return encodeURIComponent(k) + '=' + encodeURIComponent(a[k]) - }).join('&') -} - -function buildCallUrl(state, date, direction) { - var params = {}; - var url = ""; - - - if ((typeof direction === 'string') && (typeof date === 'number')) { - url = url + '/' + direction; - params["time"] = date; - } else { - if (state.call.filterDate){ - url = url + '/older' - params["time"] = state.call.filterDate; - } - } - if (state.call.filterStarred) { - params["filter-starred"] = true; - } - switch(state.call.filterType) { - case 1: - params["filter-type"] = "group"; - params["filter-code"] = state.call.filterGroupId; - break; - case 2: - params["filter-type"] = "talkgroup"; - params["filter-code"] = state.call.filterTalkgroups; - break; - default: - case 0: - } -/* - - if (this.filterCode != "") { - params["filter-code"] = this.filterCode; - } - - if (this.filterType == this.FilterType.Group) { - params["filter-type"] = "group"; - params["filter-name"] = this.filterName; - } - - if (this.filterType == this.FilterType.Talkgroup) { - params["filter-type"] = "talkgroup"; - } - - if (this.filterType == this.FilterType.Unit) { - params["filter-type"] = "unit"; - } - -*/ - // url = startUp.backend_server + "/" + startUp.shortName.toLowerCase() + "/calls" + url + '?' + buildUrlParams(params); - url = process.env.REACT_APP_BACKEND_SERVER + "/" + state.call.shortName + "/calls" + url + '?' + buildUrlParams(params); - console.log("Trying to fetch data from this url: " + url); - return url; -} - -export function fetchNewerCalls(timestamp) { - return (dispatch, getState) => { - const state = getState(); - if (shouldFetchCalls(state)) { - dispatch(beginFetchCall()); - const url = buildCallUrl(state, timestamp, "newer") - return axios - .get(url) - .then(response => { - if ((response.data) && (response.data.calls.length >0)) { - var data = {shortName: state.call.shortName, calls: response.data.calls} - dispatch(fetchNewerCallSuccess(data)); - } else { - dispatch(fetchCallError()); - let registerMessage = response.data.message; - return registerMessage; - } - }) - .catch(response => { - if (response instanceof Error) { - // Something happened in setting up the request that triggered an Error - console.log("Error", response.message); - } - }); - }; -}; -} - - -export function fetchOlderCalls( timestamp) { - return (dispatch, getState) => { - const state = getState(); - if (shouldFetchCalls(state)) { - dispatch(beginFetchCall()); - const url = buildCallUrl(state, timestamp, "older") - return axios - .get(url) - .then(response => { - if (response.data) { - var data = {shortName: state.call.shortName, calls: response.data.calls} - dispatch(fetchOlderCallSuccess(data)); - } else { - dispatch(fetchCallError()); - let registerMessage = response.data.message; - return registerMessage; - } - }) - .catch(response => { - if (response instanceof Error) { - // Something happened in setting up the request that triggered an Error - console.log("Error", response.message); - } - }); - }; -}; -} - - -export function addStar( callId) { - return (dispatch, getState) => { - const state = getState(); - dispatch(beginAddStar()); - - const url = process.env.REACT_APP_BACKEND_SERVER + "/" + state.call.shortName.toLowerCase() + "/star/" + callId - return axios - .post(url,{}, { - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - } - }).then(response => { - if (response.data.success) { - dispatch(addStarSuccess(response.data.call)); - } else { - dispatch(addStarError()); - let registerMessage = response.data.message; - return registerMessage; - } - }) - .catch(response => { - if (response instanceof Error) { - // Something happened in setting up the request that triggered an Error - console.log("Error", response.message); - } - }); - }; -}; - - - -export function fetchCallInfo( callId) { - return (dispatch, getState) => { - const state = getState(); - dispatch(beginFetchCallInfo()); - - const url = process.env.REACT_APP_BACKEND_SERVER + "/" + state.call.shortName.toLowerCase() + "/call/" + callId - return axios - .get(url) - .then(response => { - if (response.data.success) { - dispatch(fetchCallInfoSuccess(response.data.call)); - } else { - dispatch(fetchCallInfoError()); - let registerMessage = response.data.message; - return registerMessage; - } - }) - .catch(response => { - if (response instanceof Error) { - // Something happened in setting up the request that triggered an Error - console.log("Error", response.message); - } - }); - }; -}; - -export function fetchCalls() { - return (dispatch, getState) => { - const state = getState(); - if (shouldFetchCalls(state)) { - dispatch(beginFetchCall()); - const url=buildCallUrl(state); - return axios - .get(url) - .then(response => { - if (response.data) { - // check to make sure you actually got some calls back. - if (response.data.calls.length > 0) { - var data = {shortName: state.call.shortName, calls: response.data.calls} - dispatch(fetchCallSuccess(data)); - } else { - dispatch(fetchCallError()); - } - } else { - dispatch(fetchCallError()); - let registerMessage = response.data.message; - return registerMessage; - } - }) - .catch(response => { - if (response instanceof Error) { - // Something happened in setting up the request that triggered an Error - console.log("Error", response.message); - } - }); - }; -}; -} - -export function addCall(call) { - return (dispatch, getState) => { - dispatch({ type: types.UPSERT_CALL, data: call}); - }; -} - -export function setStarred(starred) { - return (dispatch, getState) => { - dispatch({ type: types.SET_STARRED_FILTER, data: starred}); - }; -} - -export function setLive(live) { - return (dispatch, getState) => { - dispatch({ type: types.SET_LIVE, data: live}); - }; -} - -export function setCurrentCallId(callId) { - return (dispatch, getState) => { - dispatch({ type: types.SET_CURRENT_CALL_ID, data: callId}); - }; -} - -// should be as a unix timestamp -export function setDateFilter(date) { - return (dispatch, getState) => { - dispatch({ type: types.SET_DATE_FILTER, date: date}); - }; -} - -export function setAllFilter() { - return (dispatch, getState) => { - dispatch({ type: types.SET_ALL_FILTER}); - }; -} - -export function setTalkgroupFilter(tgs) { - return (dispatch, getState) => { - dispatch({ type: types.SET_TALKGROUP_FILTER, talkgroups: tgs}); - }; -} - -export function setGroupFilter(groupId) { - return (dispatch, getState) => { - dispatch({ type: types.SET_GROUP_FILTER, groupId: groupId}); - }; -} - -export function setShortName(shortName) { - return (dispatch, getState) => { - dispatch({ type: types.SET_SHORT_NAME, data: shortName}); - }; -} - -export function setFilter(filter) { - return (dispatch, getState) => { - dispatch({ type: types.SET_FILTER, data: filter}); - }; -} diff --git a/frontend/src/Call/call-constants.js b/frontend/src/Call/call-constants.js deleted file mode 100644 index d6ac331..0000000 --- a/frontend/src/Call/call-constants.js +++ /dev/null @@ -1,23 +0,0 @@ -export const PREPEND_CALL = "PREPEND_CALL" -export const ADD_STAR = "ADD_STAR" -export const ADD_STAR_SUCCESS = "ADD_STAR_SUCCESS" -export const ADD_STAR_ERROR = "ADD_STAR_ERROR" -export const UPSERT_CALL = "UPSERT_CALL" -export const FETCH_CALL = "FETCH_CALL" -export const FETCH_SUCCESS_CALL = "FETCH_SUCCESS_CALL" -export const FETCH_SUCCESS_NEWER_CALL = "FETCH_SUCCESS_NEWER_CALL" -export const FETCH_SUCCESS_OLDER_CALL = "FETCH_SUCCESS_OLDER_CALL" -export const FETCH_ERROR_CALL = "FETCH_ERROR_CALL" -export const SET_SHORT_NAME = "SET_SHORT_NAME" -export const FETCH_CALL_INFO = "FETCH_CALL_INFO" -export const FETCH_SUCCESS_CALL_INFO = "FETCH_SUCCESS_CALL_INFO" -export const FETCH_ERROR_CALL_INFO = "FETCH_ERROR_CALL_INFO" -export const SET_ALL_FILTER = "SET_ALL_FILTER" -export const SET_GROUP_FILTER = "SET_GROUP_FILTER" -export const SET_TALKGROUP_FILTER = "SET_TALKGROUP_FILTER" -export const SET_DATE_FILTER = "SET_DATE_FILTER" -export const SET_FILTER = "SET_FILTER" -export const SET_STARRED_FILTER = "SET_STARRED_FILTER" -export const SET_LIVE = "SET_LIVE" -export const SET_CALL_TIME = "SET_CALL_TIME" -export const SET_CURRENT_CALL_ID = "SET_CURRENT_CALL_ID" diff --git a/frontend/src/Call/call-data.js b/frontend/src/Call/call-data.js deleted file mode 100644 index ecd7e6d..0000000 --- a/frontend/src/Call/call-data.js +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react' -import { useGetGroupsQuery, useGetCallsQuery } from '../features/api/apiSlice' - -export const Groups = (args) => { - - const { data, isError, isLoading, isSuccess,error } = useGetGroupsQuery(args.shortName); - - let content - - if (isLoading) { - content =
Loading...
- } else if (isSuccess) { - - for (const num in data) { - const group = data[num]; - content =
  • {group.groupName}
  • ; - } - - } else if (isError) { - content =
    {error.toString()}
    - } - - return ( -
    -

    Group

    - {content} -
    - ) - } - - - export const Calls = (args) => { - - const { data, isError, isLoading, isSuccess,error } = useGetCallsQuery({shortName: args.shortName}); - - let content - - if (isLoading) { - content =
    Loading...
    - } else if (isSuccess) { - - for (const num in data) { - const group = data[num]; - content =
  • {group.groupName}
  • ; - } - - } else if (isError) { - content =
    {error.toString()}
    - } - - return ( -
    -

    Group

    - {content} -
    - ) - } \ No newline at end of file diff --git a/frontend/src/Call/call-reducer.js b/frontend/src/Call/call-reducer.js deleted file mode 100644 index 8fe2935..0000000 --- a/frontend/src/Call/call-reducer.js +++ /dev/null @@ -1,230 +0,0 @@ -import { - FETCH_CALL_INFO, - FETCH_SUCCESS_CALL_INFO, - FETCH_ERROR_CALL_INFO, - FETCH_CALL, - PREPEND_CALL, - UPSERT_CALL, - FETCH_SUCCESS_CALL, - FETCH_SUCCESS_OLDER_CALL, - FETCH_SUCCESS_NEWER_CALL, - FETCH_ERROR_CALL, - SET_SHORT_NAME, - SET_ALL_FILTER, - SET_GROUP_FILTER, - SET_TALKGROUP_FILTER, - SET_DATE_FILTER, - SET_STARRED_FILTER, - SET_FILTER, - SET_CURRENT_CALL_ID, - SET_LIVE, - SET_CALL_TIME, - ADD_STAR_SUCCESS -} from "./call-constants"; - -function updateObject(oldObject, newValues) { - // Encapsulate the idea of passing a new object as the first parameter - // to Object.assign to ensure we correctly copy data instead of mutating - return Object.assign({}, oldObject, newValues); -} - -function updateCallInItems(calls, action) { -return calls.map( (item) => { - if (item._id !== action.data._id) { - // This isn't the item we care about - keep it as-is - return item; - } - - // Otherwise, this is the one we want - return an updated value - return { - ...action.data - }; - }); -} -/* -function updateObjectInArray(array, action) { - return array.map((item, index) => { - if (index !== action.index) { - // This isn't the item we care about - keep it as-is - return item - } - - // Otherwise, this is the one we want - return an updated value - return { - ...item, - ...action.item - } - }) -} - -function updateObjectInArray(array, shortName, updatedItem) { - return array.map( item => { - if(item.shortName !== shortName) { - // This isn't the item we care about - keep it as-is - return item; - } - - // Otherwise, this is the one we want - return an updated value - return { - ...item, - ...updatedItem - }; - }); -} -*/ -const now = new Date(); -const call = ( - state = { - isWaiting: false, - shortName: "", - byId: {}, - allIds: [], - oldestCallTime: now, - newestCallTime: now, - filterType: 0, - filterTalkgroups: [], - filterGroupId: false, - filterDate: false, - filterStarred: false, - currentCallId: false, - live: false - }, - action -) => { - switch (action.type) { - - case SET_CURRENT_CALL_ID: - return Object.assign({}, state, {currentCallId: action.data}); - - case SET_CALL_TIME: - return Object.assign({}, state, {newestCallTime: action.data, oldestCallTime: action.data }); - case SET_FILTER: - { - var filter={}; - filter.live = !action.data.live ? state.live : action.data.live; - filter.filterStarred = !action.data.filterStarred ? false : action.data.filterStarred; - filter.filterType = !action.data.filterType ? 0 : action.data.filterType; - filter.filterTalkgroups = !action.data.filterTalkgroups ? [] : action.data.filterTalkgroups; - filter.filterGroupId = !action.data.filterGroupId ? false : action.data.filterGroupId; - filter.filterDate = !action.data.filterDate ? 0 : action.data.filterDate; - return Object.assign({}, state, { - live: action.data.live, - filterType: action.data.filterType, - filterTalkgroups: action.data.filterTalkgroups, - filterGroupId: action.data.filterGroupId, - filterDate: action.data.filterDate, - filterStarred: action.data.filterStarred - }); - } - - case SET_LIVE: - return Object.assign({}, state, {live: action.data}); - - case SET_SHORT_NAME: - return Object.assign({}, state, {shortName: action.data}); - - case SET_DATE_FILTER: - return Object.assign({}, state, {filterDate: action.date}); - - case SET_STARRED_FILTER: - return Object.assign({}, state, {filterStarred: action.data}); - - case SET_ALL_FILTER: - return Object.assign({}, state, {filterType: 0, filterTalkgroups:[], filterGroupId: false}); - - case SET_GROUP_FILTER: - return Object.assign({}, state, {filterType: 1, filterTalkgroups:[], filterGroupId: action.groupId}); - - case SET_TALKGROUP_FILTER: - return Object.assign({}, state, {filterType: 2, filterTalkgroups: action.talkgroups, filterGroupId: false}); - - case FETCH_CALL_INFO: - case FETCH_CALL: - return Object.assign({}, state, { isWaiting: true}); - - case FETCH_SUCCESS_CALL_INFO: - return Object.assign({}, state, { - byId: {...state.byId, [action.data._id]: action.data }, - isWaiting: false - - }); - - case ADD_STAR_SUCCESS: - return Object.assign({}, state,{ - byId: {...state.byId, [action.data._id]: action.data }, - isWaiting: false - - }); - // This will set the items to the rx data - case FETCH_SUCCESS_CALL: - { - const byId = action.data.calls.reduce((acc, call) => ({ ...acc, [call._id]: call }), {}); - const allIds = action.data.calls.map(call => call._id); - return Object.assign({}, state, { - isWaiting: false, - shortName: action.data.shortName, - newestCallTime: new Date(action.data.calls[0].time), - oldestCallTime: new Date(action.data.calls[action.data.calls.length-1].time), - byId: { ...byId}, - allIds: [...allIds] - }); - } - - case UPSERT_CALL: - if (typeof state.byId[action.data._id] !== "undefined") { - return Object.assign({}, state, { - byId: {...state.byId, [action.data._id]: action.data }, - }); - } else { - return Object.assign({}, state, { - newestCallTime: new Date(action.data.time), - byId: {[action.data._id]: action.data, ...state.byId}, - allIds: [action.data._id, ...state.allIds] - }); - } - - case PREPEND_CALL: - return Object.assign({}, state, { - isWaiting: false, - newestCallTime: new Date(action.data.time), - byId: {[action.data._id]: action.data, ...state.byId}, - allIds: [action.data._id, ...state.allIds] - }); - -// This will add the array of Calls in the data to the beginning of the existing array of Calls - case FETCH_SUCCESS_NEWER_CALL: - const byId = action.data.calls.reduce((acc, call) => ({ ...acc, [call._id]: call }), {}); - const allIds = action.data.calls.map(call => call._id).reverse(); - return Object.assign({}, state, { - isWaiting: false, - shortName: action.data.shortName, - newestCallTime: new Date(action.data.calls[action.data.calls.length-1].time), - byId: {...state.byId, ...byId}, - allIds: [...allIds, ...state.allIds] - }); - -// This will add the array of Calls in the data to the end of the existing array of Calls - case FETCH_SUCCESS_OLDER_CALL: - { - const byId = action.data.calls.reduce((acc, call) => ({ ...acc, [call._id]: call }), {}); - const allIds = action.data.calls.map(call => call._id); - return Object.assign({}, state, { - isWaiting: false, - shortName: action.data.shortName, - oldestCallTime: new Date(action.data.calls[action.data.calls.length-1].time), - byId: {...state.byId, ...byId}, - allIds: [ ...state.allIds, ...allIds] - }); - } - case FETCH_ERROR_CALL_INFO: - case FETCH_ERROR_CALL: - return Object.assign({}, state, { - isWaiting: false - }); - - default: - return state; - } -}; - -export default call; diff --git a/frontend/src/Group/group-actions.js b/frontend/src/Group/group-actions.js deleted file mode 100644 index 7d1c2d3..0000000 --- a/frontend/src/Group/group-actions.js +++ /dev/null @@ -1,73 +0,0 @@ -import axios from "axios"; -//import { browserHistory } from "react-router" -import * as types from "./group-constants"; -import { push } from 'connected-react-router'; - -// "Log In" action creators - - -function beginFetchGroup() { - return { type: types.FETCH_GROUP }; -} - -function fetchGroupSuccess(data) { - return { - type: types.FETCH_SUCCESS_GROUP, - data - }; -} - -function fetchGroupError(data) { - return { - type: types.FETCH_ERROR_GROUP, - data - }; -} - - -export function changeUrl(url) { - return dispatch => { - dispatch(push(url)); - }; -} - -// Example of an Async Action Creator -// http://redux.js.org/docs/advanced/AsyncActions.html - - -function shouldFetchGroups(state,shortName) { - if (!state.group.items || !state.group.items[shortName]) { - return true; - } else if (state.group.isWaiting) { - return false; - } else { - return false; - } -} - - -export function fetchGroups(shortName) { - return (dispatch, getState) => { - if (shouldFetchGroups(getState(), shortName)) { - dispatch(beginFetchGroup()); - return axios - .get(process.env.REACT_APP_BACKEND_SERVER + "/" + shortName + "/groups") - .then(response => { - if (true) { //response.data.success) { - const data = { shortName: shortName, groups: response.data }; - dispatch(fetchGroupSuccess(data)); - } else { - dispatch(fetchGroupError()); - let registerMessage = response.data.message; - return registerMessage; - } - }) - .catch(response => { - if (response instanceof Error) { - // Something happened in setting up the request that triggered an Error - console.log("Error", response.message); - } - }); - } - }; -} diff --git a/frontend/src/Group/group-constants.js b/frontend/src/Group/group-constants.js deleted file mode 100644 index 914364f..0000000 --- a/frontend/src/Group/group-constants.js +++ /dev/null @@ -1,3 +0,0 @@ -export const FETCH_GROUP = "FETCH_GROUP" -export const FETCH_SUCCESS_GROUP = "FETCH_SUCCESS_GROUP" -export const FETCH_ERROR_GROUP = "FETCH_ERROR_GROUP" diff --git a/frontend/src/Group/group-reducer.js b/frontend/src/Group/group-reducer.js deleted file mode 100644 index fb4993b..0000000 --- a/frontend/src/Group/group-reducer.js +++ /dev/null @@ -1,42 +0,0 @@ -import { - FETCH_GROUP, - FETCH_SUCCESS_GROUP, - FETCH_ERROR_GROUP -} from "./group-constants"; - - -const group = ( - state = { - orderChange: false, - isWaiting: false, - items: {}}, - action -) => { - switch (action.type) { - - - case FETCH_GROUP: - return Object.assign({}, state, { isWaiting: true}); - - - case FETCH_SUCCESS_GROUP: - return Object.assign({}, state, { - isWaiting: false, - items: { - ...state.items, - [action.data.shortName]: action.data.groups - } - }); - - case FETCH_ERROR_GROUP: - return Object.assign({}, state, { - isWaiting: false - }); - - - default: - return state; - } -}; - -export default group; diff --git a/frontend/src/Main/Main.js b/frontend/src/Main/Main.js index dc1aa96..372d169 100644 --- a/frontend/src/Main/Main.js +++ b/frontend/src/Main/Main.js @@ -1,5 +1,5 @@ import React, { Component, useState, useEffect, useRef } from "react"; -import { Link } from 'react-router-dom' +import { Link, useNavigate } from 'react-router-dom' import SystemCard from "../System/SystemCard"; import "./Main.css"; import { createMedia } from "@artsy/fresnel"; @@ -214,6 +214,7 @@ const Main = (props) => { const [visible, setVisible] = useState(true); const [duration, setDuration] = useState(500); const [currentSystem, setCurrentSystem] = useState(0); + const navigate = useNavigate(); const dispatch = useDispatch(); const {data:systems, isSuccess} = useGetSystemsQuery(); //= selectAllSystems(); @@ -276,13 +277,13 @@ const Main = (props) => { { system && ( - props.changeUrl("/system/" + system.shortName)}/> + navigate("/system/" + system.shortName)}/> )} -