Newer
Older
import { api, NetworkelementFlattenedManagedNetworkElement, NetworkelementManagedNetworkElement, PndPrincipalNetworkDomain, PndServiceGetPndListApiArg } from '@api/api';
import { DeviceViewTabValues } from '@component/devices/view/device.view.tabs';
import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';
export type Device = NetworkelementFlattenedManagedNetworkElement;
interface SelectedDeviceInterface {
device: Device,
mne: NetworkelementManagedNetworkElement | null
}
type SelectedDeviceType = SelectedDeviceInterface | undefined;
export interface DeviceSliceState {
devices: Device[],
}
const initialState: DeviceSliceState = {
devices: [],
activeTab: DeviceViewTabValues.METADATA,
selectedDevice: null
}
const deviceSlice = createSlice({
name: 'device',
initialState,
reducers: {
setDevices: (state, action: PayloadAction<Device[]>) => { state.devices = action.payload },
setPnds: (state, action: PayloadAction<PndPrincipalNetworkDomain[]>) => { state.pnds = action.payload },
setActiveTab: (state, action: PayloadAction<DeviceViewTabValues>) => { state.activeTab = action.payload },
setSelectedDevice: (state, action: PayloadAction<Device | null>) => {
let selectedDevice: SelectedDeviceType;
if (action.payload) {
selectedDevice = {device: action.payload, mne: null};
}
state.selectedDevice = selectedDevice;
},
setSelectedMne: (state, action: PayloadAction<NetworkelementManagedNetworkElement>) => { state.selectedDevice.mne = action.payload },
},
})
export const { setDevices, setActiveTab, setSelectedDevice, setSelectedMne } = deviceSlice.actions
export default deviceSlice.reducer
export const deviceReducerPath = deviceSlice.reducerPath;
export const fetchPnds = createAsyncThunk('device/fetchPnds', (_, thunkApi) => {
const payload: PndServiceGetPndListApiArg = {
timestamp: new Date().getTime().toString(),
}
const subscription = thunkApi.dispatch(api.endpoints.pndServiceGetPndList.initiate(payload));
subscription.unwrap().then((response) => {
thunkApi.dispatch(setPnds(response.pnd));
});
});