ibms-MCUT/ibms_react/src/stores/forgeSlice.js
2023-01-31 23:15:50 +08:00

51 lines
1.3 KiB
JavaScript

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) {
modelLoad(res.viewer, urn, dispatch);
return fulfillWithValue(res.viewer);
} else {
return rejectWithValue(res.errCode);
}
},
);
const forgeSlice = createSlice({
name: "forge",
initialState: {
viewer: null,
dataVizExtn: null,
DataVizCore: null,
errCode: 0,
urn_3D: "",
},
reducers: {
loadDataVizExtn: (state, { payload }) => {
state.dataVizExtn = payload;
state.DataVizCore = window.Autodesk.DataVisualization.Core;
},
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;
export const { shutdownForge, loadDataVizExtn } = actions;
export default reducer;