Skip to content
Snippets Groups Projects
device.reducer.ts 2.38 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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';
    
    import '../routines/index';
    
    
    export type Device = NetworkelementFlattenedManagedNetworkElement;
    
    interface SelectedDeviceInterface {
        device: Device,
        mne: NetworkelementManagedNetworkElement | null
    }
    
    type SelectedDeviceType = SelectedDeviceInterface | undefined;
    
    
    export interface DeviceSliceState {
        devices: Device[],
    
        pnds: PndPrincipalNetworkDomain[],
    
        activeTab: DeviceViewTabValues
    
        selectedDevice: SelectedDeviceType
    
    }
    
    const initialState: DeviceSliceState = {
        devices: [],
    
        pnds: [],
    
        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
    
    const { setPnds } = 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));
        });
    });