mirror of
https://github.com/openmhz/trunk-server.git
synced 2026-11-11 00:07:30 -05:00
206 lines
7.1 KiB
JavaScript
206 lines
7.1 KiB
JavaScript
// Import the RTK Query methods from the React-specific entry point
|
|
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
|
|
|
|
/*
|
|
const axiosBaseQuery =
|
|
({ baseUrl } = { baseUrl: '' }) =>
|
|
async ({ url, method, data, params }) => {
|
|
try {
|
|
const result = await axios({ url: baseUrl + url, method, data, params })
|
|
return { data: result.data }
|
|
} catch (axiosError) {
|
|
let err = axiosError
|
|
return {
|
|
error: {
|
|
status: err.response?.status,
|
|
data: err.response?.data || err.message,
|
|
},
|
|
}
|
|
}
|
|
}*/
|
|
|
|
// Define our single API slice object
|
|
export const apiSlice = createApi({
|
|
// The cache reducer expects to be added at `state.api` (already default - this is optional)
|
|
reducerPath: 'api',
|
|
// All of our requests will have URLs starting with '/fakeApi'
|
|
baseQuery: fetchBaseQuery({ baseUrl: process.env.REACT_APP_ADMIN_SERVER }),
|
|
// The "endpoints" represent operations and requests for this server
|
|
endpoints: builder => ({
|
|
// The `getPosts` endpoint is a "query" operation that returns data
|
|
getTalkgroups: builder.query({
|
|
// The URL for the request is '/fakeApi/posts'
|
|
query: (shortName) => ({ url: `/talkgroups/${shortName}`, credentials: "include" })
|
|
}),
|
|
getGroups: builder.query({
|
|
// The URL for the request is '/fakeApi/posts'
|
|
query: (shortName) => ({ url: `/groups/${shortName}`, credentials: "include" }),
|
|
providesTags: (result) =>
|
|
result
|
|
? [...result.map(({ _id }) => ({ type: 'Group', _id })), 'Group']
|
|
: ['Group'],
|
|
}),
|
|
|
|
getErrors: builder.query({
|
|
// The URL for the request is '/fakeApi/posts'
|
|
query: (shortName) => ({ url: `${process.env.REACT_APP_BACKEND_SERVER}/${shortName}/errors` })
|
|
}),
|
|
updateGroup: builder.mutation({
|
|
query: (group) => ({
|
|
url: `/groups/${group.shortName}/${group._id}`,
|
|
method: 'POST',
|
|
credentials: "include",
|
|
body: group,
|
|
}),
|
|
async onQueryStarted(group, { dispatch, queryFulfilled }) {
|
|
try {
|
|
const { data: updatedGroup } = await queryFulfilled
|
|
dispatch(
|
|
apiSlice.util.updateQueryData('getGroups', updatedGroup.shortName, (groups) => {
|
|
const groupIndex = groups.findIndex((obj => obj.groupId === updatedGroup.groupId));
|
|
groups[groupIndex] = updatedGroup;
|
|
})
|
|
)
|
|
} catch { }
|
|
},
|
|
}),
|
|
createGroup: builder.mutation({
|
|
query: (group) => ({
|
|
url: `/groups/${group.shortName}`,
|
|
method: 'POST',
|
|
credentials: "include",
|
|
body: group,
|
|
}),
|
|
async onQueryStarted(group, { dispatch, queryFulfilled }) {
|
|
try {
|
|
const { data: newGroup } = await queryFulfilled;
|
|
dispatch(
|
|
apiSlice.util.updateQueryData('getGroups', newGroup.shortName, (groups) => {
|
|
groups.push(newGroup);
|
|
})
|
|
)
|
|
} catch { }
|
|
},
|
|
}),
|
|
deleteGroup: builder.mutation({
|
|
query: (group) => ({
|
|
url: `/groups/${group.shortName}/${group._id}`,
|
|
method: 'DELETE',
|
|
credentials: "include"
|
|
}),
|
|
|
|
async onQueryStarted(group, { dispatch, queryFulfilled }) {
|
|
try {
|
|
await queryFulfilled
|
|
dispatch(
|
|
apiSlice.util.updateQueryData('getGroups', group.shortName, (groups) => {
|
|
const groupIndex = groups.findIndex((obj => obj.groupId === group.groupId));
|
|
groups.splice(groupIndex,1);
|
|
})
|
|
)
|
|
} catch { }
|
|
},
|
|
}),
|
|
saveGroupOrder: builder.mutation({
|
|
query: ({shortName, order}) => ({
|
|
url: `/groups/${shortName}/reorder`,
|
|
method: 'POST',
|
|
credentials: "include",
|
|
body: order,
|
|
}),
|
|
|
|
//invalidatesTags: (result, error, group) => ['Group'],
|
|
}),
|
|
importTalkgroups: builder.mutation({
|
|
query: ({shortName,file}) => ({
|
|
url: `${process.env.REACT_APP_ADMIN_SERVER}/talkgroups/${shortName}/import`,
|
|
method: 'POST',
|
|
credentials: "include",
|
|
body: file,
|
|
}),
|
|
|
|
async onQueryStarted({shortName,file}, { dispatch, queryFulfilled }) {
|
|
try {
|
|
const { data: newTalkgroups } = await queryFulfilled;
|
|
dispatch(
|
|
apiSlice.util.updateQueryData('getTalkgroups', shortName, (talkgroups) => {
|
|
talkgroups.length = 0; // Clear your array
|
|
talkgroups.push(...newTalkgroups);
|
|
})
|
|
)
|
|
} catch { }
|
|
},
|
|
//invalidatesTags: (result, error, group) => ['Group'],
|
|
}),
|
|
getSystems: builder.query({
|
|
// The URL for the request is '/fakeApi/posts'
|
|
query: () => ({ url: `/systems`, credentials: "include" })
|
|
}),
|
|
getAllSystems: builder.query({
|
|
// The URL for the request is '/fakeApi/posts'
|
|
query: () => ({ url: `/admin/users`, credentials: "include" })
|
|
}),
|
|
createSystem: builder.mutation({
|
|
query: (system) => ({
|
|
url: `/systems`,
|
|
method: 'POST',
|
|
credentials: "include",
|
|
body: system,
|
|
}),
|
|
async onQueryStarted(system, { dispatch, queryFulfilled }) {
|
|
try {
|
|
const { data: newSystem } = await queryFulfilled
|
|
dispatch(
|
|
apiSlice.util.updateQueryData('getSystems', undefined, (systemsData) => {
|
|
const systems = systemsData.systems;
|
|
systems.push(newSystem);
|
|
})
|
|
)
|
|
} catch {}
|
|
},
|
|
}),
|
|
updateSystem: builder.mutation({
|
|
query: (system) => ({
|
|
url: `/systems/${system.shortName}`,
|
|
method: 'POST',
|
|
credentials: "include",
|
|
body: system,
|
|
}),
|
|
async onQueryStarted(system, { dispatch, queryFulfilled }) {
|
|
try {
|
|
const { data: updatedSystem } = await queryFulfilled
|
|
dispatch(
|
|
apiSlice.util.updateQueryData('getSystems', undefined, (systemsData) => {
|
|
const systems = systemsData.systems;
|
|
const systemIndex = systems.findIndex((obj => obj.shortName === updatedSystem.shortName));
|
|
systems[systemIndex] = updatedSystem;
|
|
})
|
|
)
|
|
} catch {}
|
|
},
|
|
}),
|
|
deleteSystem: builder.mutation({
|
|
query: (shortName) => ({
|
|
url: `/systems/${shortName}`,
|
|
method: 'DELETE',
|
|
credentials: "include"
|
|
}),
|
|
async onQueryStarted(shortName, { dispatch, queryFulfilled }) {
|
|
try {
|
|
await queryFulfilled
|
|
dispatch(
|
|
apiSlice.util.updateQueryData('getSystems', undefined, (systemsData) => {
|
|
const systems = systemsData.systems;
|
|
const systemIndex = systems.findIndex((obj => obj.shortName === shortName));
|
|
systems.splice(systemIndex, 1);
|
|
})
|
|
)
|
|
} catch {}
|
|
},
|
|
}),
|
|
})
|
|
})
|
|
|
|
// Export the auto-generated hook for the `getPosts` query endpoint
|
|
export const { useGetGroupsQuery, useGetSystemsQuery, useGetAllSystemsQuery, useGetTalkgroupsQuery, useGetErrorsQuery, useDeleteGroupMutation, useCreateGroupMutation, useCreateSystemMutation, useUpdateSystemMutation, useDeleteSystemMutation, useSaveGroupOrderMutation, useUpdateGroupMutation, useImportTalkgroupsMutation } = apiSlice
|