|
|
import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit'; import { BleList, PeripheralStatus, SyncItemFinish, SyncProgress, } from '../../services/mobileWsType'; import Bridge from '../../utils/bridge';
interface ContextState { device: PeripheralStatus['data']; currRailTypeId: number; // 当前选择的轨型
currOrgCode: string; // 铁路局
currGWDCode: string; // 工务段
currXMCode: string; // 线名
bleList: BleList['data']; syncProgress: SyncProgress['data']; syncItems: Array<SyncItemFinish['data']>;
setting: { server: string; }; }
const orgGwdXmStr = localStorage.getItem('org_gwd_xm'); let orgGwdXm: string[] | undefined; if (orgGwdXmStr) { orgGwdXm = orgGwdXmStr.split(','); }
const initialState: ContextState = { device: { connected: true, //是否已连接蓝牙
power: 60, //电量
inclinatorX: 0.276, //x轴倾斜
inclinatorY: 3.019, //y轴倾斜
temperature: 32.026, //温度
},
currRailTypeId: 1,
currOrgCode: orgGwdXm ? orgGwdXm[0] : '', currGWDCode: orgGwdXm ? orgGwdXm[1] : '', currXMCode: orgGwdXm ? orgGwdXm[2] : '',
bleList: [], syncProgress: { remaining: 0, fail: 0, total: 0, finish: true, }, syncItems: [],
setting: { server: '', }, };
export const fetchConfig = createAsyncThunk('context/fetchConfig', async () => { const conf = await Bridge.getConfig(); return conf.success ? conf.data : null; });
export const saveConfig = createAsyncThunk( 'context/saveConfig', async (param: { server: string }, thunkAPI) => { const res = await Bridge.saveConfig(param); res.success && thunkAPI.dispatch(fetchConfig()); return res } );
export const contextSlice = createSlice({ name: 'context', initialState, reducers: { updateOrg: (state, action: PayloadAction<string[]>) => { state.currOrgCode = action.payload[0]; state.currGWDCode = action.payload[1]; state.currXMCode = action.payload[2]; localStorage.setItem('org_gwd_xm', action.payload.join(',')); },
updateDevice: (state, action: PayloadAction<PeripheralStatus['data']>) => { state.device = action.payload; },
updateRailTypeId: (state, action: PayloadAction<number>) => { state.currRailTypeId = action.payload; },
updateBleList: (state, action: PayloadAction<BleList['data']>) => { state.bleList = action.payload; },
updateSyncProgress: (state, action: PayloadAction<SyncProgress['data']>) => { state.syncProgress = action.payload; }, }, extraReducers: (builder) => { builder.addCase(fetchConfig.fulfilled, (state, action) => { if (action.payload) { state.setting = action.payload; } }); }, });
export const { updateOrg, updateDevice, updateRailTypeId, updateBleList, updateSyncProgress } = contextSlice.actions; export default contextSlice.reducer;
|