ibms-dome/ibms_react/src/stores/forgeSlice.js

61 lines
1.7 KiB
JavaScript
Raw Normal View History

2023-01-31 23:15:50 +08:00
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import { forgeInit, modelLoad } from "@UTIL";
export const fetchForge = createAsyncThunk(
"forge/fetchForge",
async ({ viewerEl, urn }, { dispatch, fulfillWithValue, rejectWithValue }) => {
const res = await forgeInit(viewerEl);
if (res.ok) {
2023-02-06 00:06:41 +08:00
await modelLoad(res.viewer, urn, dispatch);
2023-01-31 23:15:50 +08:00
return fulfillWithValue(res.viewer);
} else {
return rejectWithValue(res.errCode);
}
},
);
const forgeSlice = createSlice({
name: "forge",
initialState: {
viewer: null,
2023-02-06 00:06:41 +08:00
model: null,
2023-01-31 23:15:50 +08:00
dataVizExtn: null,
DataVizCore: null,
2023-02-06 00:06:41 +08:00
structureInfo: null,
2023-01-31 23:15:50 +08:00
errCode: 0,
urn_3D: "",
},
reducers: {
loadDataVizExtn: (state, { payload }) => {
state.dataVizExtn = payload;
state.DataVizCore = window.Autodesk.DataVisualization.Core;
2023-02-06 00:06:41 +08:00
// heatmap
state.structureInfo = new window.Autodesk.DataVisualization.Core.ModelStructureInfo(state.model);
},
loadStructureInfo: (state, { payload }) => {
state.structureInfo = payload
},
loadModel: (state, { payload }) => {
state.model = payload
2023-01-31 23:15:50 +08:00
},
shutdownForge: (state, action) => {
state.viewer?.finish();
state.viewer = null;
window.Autodesk?.Viewing.shutdown();
},
},
extraReducers: (builder) => {
builder
.addCase(fetchForge.fulfilled, (state, action) => {
state.viewer = action.payload;
})
.addCase(fetchForge.rejected, (state, action) => {
state.errCode = action.payload;
});
},
});
const { reducer, actions } = forgeSlice;
2023-02-06 00:06:41 +08:00
export const { shutdownForge, loadDataVizExtn, loadModel } = actions;
2023-01-31 23:15:50 +08:00
export default reducer;