import { createSlice } from "@reduxjs/toolkit"; const getIpaddrs = () => { const ipaddrList = []; const interfaces = window.networkInterfaces(); Object.entries(interfaces).forEach((obj) => { Object.values(obj[1]).forEach((i) => { if (i.family === "IPv4" && !i.internal) { ipaddrList.push({ ip: i.address, mac: i.mac, name: obj[0], sortNbr: Number(i.address.split(".")[0]), }); } }); }); ipaddrList.sort((i1, i2) => { if (i1.sortNbr < i2.sortNbr) return -1; if (i1.sortNbr > i2.sortNbr) return 1; return 0; }); return ipaddrList; }; export const infoSlice = createSlice({ name: "info", initialState: { ipaddrs: getIpaddrs(), appVersion: undefined, selectedIpId: 0, }, reducers: { updateIpaddrs: (state) => { state.ipaddrs = getIpaddrs(); if (state.selectedIpId > state.ipaddrs.length - 1) state.selectedIpId = 0; }, setNextIpId: (state) => { let next = state.selectedIpId + 1; if (next >= state.ipaddrs.length) next = 0; state.selectedIpId = next; }, setAppVersion: (state, action) => { state.appVersion = action.payload; }, }, }); export const { updateIpaddrs, setNextIpId, setAppVersion } = infoSlice.actions; export default infoSlice.reducer;