diff options
-rw-r--r-- | modern/src/CachingController.js | 65 | ||||
-rw-r--r-- | modern/src/store/calendars.js | 16 | ||||
-rw-r--r-- | modern/src/store/commands.js | 16 | ||||
-rw-r--r-- | modern/src/store/computedAttributes.js | 16 | ||||
-rw-r--r-- | modern/src/store/drivers.js | 16 | ||||
-rw-r--r-- | modern/src/store/groups.js | 16 | ||||
-rw-r--r-- | modern/src/store/index.js | 22 | ||||
-rw-r--r-- | modern/src/store/maintenances.js | 16 | ||||
-rw-r--r-- | modern/src/store/notifications.js | 16 |
9 files changed, 198 insertions, 1 deletions
diff --git a/modern/src/CachingController.js b/modern/src/CachingController.js index fa3b9f6..faeec48 100644 --- a/modern/src/CachingController.js +++ b/modern/src/CachingController.js @@ -1,6 +1,6 @@ import { useDispatch, useSelector } from 'react-redux'; import { connect } from 'react-redux'; -import { geofencesActions } from './store'; +import { geofencesActions, groupsActions, driversActions, calendarsActions, commandsActions, computedAttributesActions, maintenancesActions, notificationsActions } from './store'; import { useEffectAsync } from './reactHelper'; const CachingController = () => { @@ -15,6 +15,69 @@ const CachingController = () => { } } }, [authenticated]); + + useEffectAsync(async () => { + if (authenticated) { + const response = await fetch('/api/groups'); + if (response.ok) { + dispatch(groupsActions.update(await response.json())); + } + } + }, [authenticated]); + + useEffectAsync(async () => { + if (authenticated) { + const response = await fetch('/api/drivers'); + if (response.ok) { + dispatch(driversActions.update(await response.json())); + } + } + }, [authenticated]); + + useEffectAsync(async () => { + if (authenticated) { + const response = await fetch('/api/calendars'); + if (response.ok) { + dispatch(calendarsActions.update(await response.json())); + } + } + }, [authenticated]); + + useEffectAsync(async () => { + if (authenticated) { + const response = await fetch('/api/commands'); + if (response.ok) { + dispatch(commandsActions.update(await response.json())); + } + } + }, [authenticated]); + + useEffectAsync(async () => { + if (authenticated) { + const response = await fetch('/api/attributes/computed'); + if (response.ok) { + dispatch(computedAttributesActions.update(await response.json())); + } + } + }, [authenticated]); + + useEffectAsync(async () => { + if (authenticated) { + const response = await fetch('/api/maintenance'); + if (response.ok) { + dispatch(maintenancesActions.update(await response.json())); + } + } + }, [authenticated]); + + useEffectAsync(async () => { + if (authenticated) { + const response = await fetch('/api/notifications'); + if (response.ok) { + dispatch(notificationsActions.update(await response.json())); + } + } + }, [authenticated]); return null; } diff --git a/modern/src/store/calendars.js b/modern/src/store/calendars.js new file mode 100644 index 0000000..3aa4d89 --- /dev/null +++ b/modern/src/store/calendars.js @@ -0,0 +1,16 @@ +import { createSlice } from '@reduxjs/toolkit'; + +const { reducer, actions } = createSlice({ + name: 'calendars', + initialState: { + items: {}, + }, + reducers: { + update(state, action) { + action.payload.forEach(item => state.items[item['id']] = item); + }, + } +}); + +export { actions as calendarsActions }; +export { reducer as calendarsReducer }; diff --git a/modern/src/store/commands.js b/modern/src/store/commands.js new file mode 100644 index 0000000..d18d609 --- /dev/null +++ b/modern/src/store/commands.js @@ -0,0 +1,16 @@ +import { createSlice } from '@reduxjs/toolkit'; + +const { reducer, actions } = createSlice({ + name: 'commands', + initialState: { + items: {}, + }, + reducers: { + update(state, action) { + action.payload.forEach(item => state.items[item['id']] = item); + }, + } +}); + +export { actions as commandsActions }; +export { reducer as commandsReducer }; diff --git a/modern/src/store/computedAttributes.js b/modern/src/store/computedAttributes.js new file mode 100644 index 0000000..d9e3531 --- /dev/null +++ b/modern/src/store/computedAttributes.js @@ -0,0 +1,16 @@ +import { createSlice } from '@reduxjs/toolkit'; + +const { reducer, actions } = createSlice({ + name: 'computedAttributes', + initialState: { + items: {}, + }, + reducers: { + update(state, action) { + action.payload.forEach(item => state.items[item['id']] = item); + }, + } +}); + +export { actions as computedAttributesActions }; +export { reducer as computedAttributesReducer }; diff --git a/modern/src/store/drivers.js b/modern/src/store/drivers.js new file mode 100644 index 0000000..63522d7 --- /dev/null +++ b/modern/src/store/drivers.js @@ -0,0 +1,16 @@ +import { createSlice } from '@reduxjs/toolkit'; + +const { reducer, actions } = createSlice({ + name: 'drivers', + initialState: { + items: {}, + }, + reducers: { + update(state, action) { + action.payload.forEach(item => state.items[item['id']] = item); + }, + } +}); + +export { actions as driversActions }; +export { reducer as driversReducer }; diff --git a/modern/src/store/groups.js b/modern/src/store/groups.js new file mode 100644 index 0000000..483323f --- /dev/null +++ b/modern/src/store/groups.js @@ -0,0 +1,16 @@ +import { createSlice } from '@reduxjs/toolkit'; + +const { reducer, actions } = createSlice({ + name: 'groups', + initialState: { + items: {}, + }, + reducers: { + update(state, action) { + action.payload.forEach(item => state.items[item['id']] = item); + }, + } +}); + +export { actions as groupsActions }; +export { reducer as groupsReducer }; diff --git a/modern/src/store/index.js b/modern/src/store/index.js index 1fddae9..9163e44 100644 --- a/modern/src/store/index.js +++ b/modern/src/store/index.js @@ -4,17 +4,39 @@ import { sessionReducer as session } from './session'; import { devicesReducer as devices } from './devices'; import { positionsReducer as positions } from './positions'; import { geofencesReducer as geofences } from './geofences'; +import { groupsReducer as groups } from './groups'; +import { driversReducer as drivers } from './drivers'; +import { maintenancesReducer as maintenances } from './maintenances'; +import { calendarsReducer as calendars } from './calendars'; +import { computedAttributesReducer as computedAttributes } from './computedAttributes'; +import { commandsReducer as commands } from './commands'; +import { notificationsReducer as notifications } from './notifications'; const reducer = combineReducers({ session, devices, positions, geofences, + groups, + drivers, + maintenances, + calendars, + computedAttributes, + commands, + notifications, + }); export { sessionActions } from './session'; export { devicesActions } from './devices'; export { positionsActions } from './positions'; export { geofencesActions } from './geofences'; +export { groupsActions } from './groups'; +export { driversActions } from './drivers'; +export { maintenancesActions } from './maintenances'; +export { calendarsActions } from './calendars'; +export { computedAttributesActions } from './computedAttributes'; +export { commandsActions } from './commands'; +export { notificationsActions } from './notifications'; export default configureStore({ reducer }); diff --git a/modern/src/store/maintenances.js b/modern/src/store/maintenances.js new file mode 100644 index 0000000..0813f6b --- /dev/null +++ b/modern/src/store/maintenances.js @@ -0,0 +1,16 @@ +import { createSlice } from '@reduxjs/toolkit'; + +const { reducer, actions } = createSlice({ + name: 'maintenances', + initialState: { + items: {}, + }, + reducers: { + update(state, action) { + action.payload.forEach(item => state.items[item['id']] = item); + }, + } +}); + +export { actions as maintenancesActions }; +export { reducer as maintenancesReducer }; diff --git a/modern/src/store/notifications.js b/modern/src/store/notifications.js new file mode 100644 index 0000000..be8a989 --- /dev/null +++ b/modern/src/store/notifications.js @@ -0,0 +1,16 @@ +import { createSlice } from '@reduxjs/toolkit'; + +const { reducer, actions } = createSlice({ + name: 'notifications', + initialState: { + items: {}, + }, + reducers: { + update(state, action) { + action.payload.forEach(item => state.items[item['id']] = item); + }, + } +}); + +export { actions as notificationsActions }; +export { reducer as notificationsReducer }; |