import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import { TaskState, TrackRecordSig } from '../../services/wsTypes'; export interface MeasureState { taskState?: TaskState['data']; // leftFinished: boolean; leftPoints: TrackRecordSig['data'][]; rightPoints: TrackRecordSig['data'][]; measureData:[], measureStatus: string, measureFinishData: [] } const initialState: MeasureState = { taskState: undefined, // leftFinished: false, leftPoints: [], rightPoints: [], measureData: [], measureStatus: '', measureFinishData: [], }; function isLeftFinished(state: MeasureState) { if ( state.taskState === 'FINISH_RECORD_LEFT' || state.taskState === 'START_RECORD_RIGHT' || state.taskState === 'FINISH_RECORD_RIGHT' ) return true; return false; } let status: 1| 2 ; export const measureSlice = createSlice({ name: 'measure', initialState, reducers: { clearData: (state) => { state.measureFinishData = []; state.leftPoints = []; state.rightPoints = []; state.measureData = []; state.measureStatus = ''; }, updateMeasureStatus: (state, action: PayloadAction) => { state.measureStatus = action.payload }, updateTaskState: (state, action: PayloadAction) => { console.log('action.payload---', action.payload) if ( action.payload === 'SPEED_DETECTED' || action.payload === 'END_RECORD' ) { return; } state.taskState = action.payload; if (action.payload === 'START_RECORD_SIG' || action.payload === 'WRONG_SIDE') { state.leftPoints = []; state.rightPoints = []; } if(action.payload === 'WAITING_FOR_RECORD_THE_1ST_SIDE') { status = 1 }else if(action.payload === 'WAITING_FOR_RECORD_THE_2ND_SIDE') { status = 2 } state.measureStatus = action.payload if((['START_RECORD_LEFT', 'START_RECORD_RIGHT'].includes(action.payload) && status === 1) || (['FINISH_RECORD_LEFT', 'FINISH_RECORD_RIGHT'].includes(action.payload) && status === 1) || ['FINISH_RECORD'].includes(action.payload)) { const audio = new Audio('/audio/ticking.wav'); audio.play().then(() => {}); } }, addNewPoint: (state, action: PayloadAction) => { if (isLeftFinished(state)) { state.rightPoints.push(action.payload); } else { state.leftPoints.push(action.payload); } }, resetState: (state) => { state.taskState = undefined; state.leftPoints = []; state.rightPoints = []; }, updateMeasureData:(state, { payload })=>{ state.measureData = payload }, updateMeasureFinish: (state, { payload })=>{ console.log('payload--', payload) // if(payload.outline1 && payload.outline1.length){ // state.rightPoints = payload.outline1 // } // if(payload.outline2 && payload.outline2.length){ // state.leftPoints = payload.outline2 // } state.measureFinishData = payload }, }, }); export const { updateTaskState, addNewPoint, resetState, updateMeasureData,updateMeasureStatus, updateMeasureFinish, clearData } = measureSlice.actions; export default measureSlice.reducer;