Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | 25x 25x 25x 25x 25x 25x 25x 25x 25x | import { PayloadAction, createSlice } from "@reduxjs/toolkit";
import { ScriptEventDefs } from "shared/lib/scripts/scriptDefHelpers";
import { RootState } from "store/configureStore";
import projectActions from "store/features/project/projectActions";
interface ScriptEventsState {
lookup: ScriptEventDefs;
lookupWithPresets: ScriptEventDefs;
loaded: boolean;
}
export const initialState: ScriptEventsState = {
lookup: {},
lookupWithPresets: {},
loaded: false,
};
// Script Events Defs can optionally include a number of preset values
// this function creates a lookup containing all the script event defs
// and also an entry for every one of their presets. Allowing components like
// AddScriptEventMenu to require very little about the concept of presets
const buildPresets = (lookup: ScriptEventDefs): ScriptEventDefs => {
return Object.values(lookup).reduce(
(memo, def) => {
Iif (def && def.presets) {
def.presets.forEach((p) => {
memo[`${def.id}::${p.id}`] = {
...def,
id: `${def.id}::${p.id}`,
name: p.name,
description: p.description ?? def.description,
groups: p.groups ?? def.groups,
subGroups: p.subGroups ?? def.subGroups,
};
});
}
return memo;
},
{ ...lookup },
);
};
const scriptEventDefsSlice = createSlice({
name: "scriptEventDefs",
initialState,
reducers: {
setScriptEventDefs: (state, action: PayloadAction<ScriptEventDefs>) => {
state.lookup = action.payload;
state.lookupWithPresets = buildPresets(state.lookup);
state.loaded = true;
},
},
extraReducers: (builder) =>
builder
.addCase(projectActions.loadProject.pending, (state, _action) => {
state.loaded = false;
})
.addCase(projectActions.loadProject.fulfilled, (state, action) => {
state.lookup = action.payload.scriptEventDefs;
state.lookupWithPresets = buildPresets(state.lookup);
state.loaded = true;
}),
});
export const selectScriptEventDefs = (state: RootState) =>
state.scriptEventDefs.lookup;
export const selectScriptEventDefsWithPresets = (state: RootState) =>
state.scriptEventDefs.lookupWithPresets;
export const { actions } = scriptEventDefsSlice;
export default scriptEventDefsSlice.reducer;
|