Я бы хотел добавить усилитель редуктора или метаредуктор для определенного фрагмента магазина.Я реализовал функцию, которая принимает редуктор и позволяет отменить / повторить функциональность.В настоящее время это выглядит следующим образом:
export const adminReducers: ActionReducerMap<AdminFeatureState> = {
admin: admin.reducer,
dynamicForm: undoable(dynamicForm.reducer, DynamicFormActionTypes.UNDO, DynamicFormActionTypes.REDO, [
DynamicFormActionTypes.SELECTED_DYNAMIC_CONTROLS_CHANGED,
DynamicFormActionTypes.CHANGE_GROUP,
DynamicFormActionTypes.RESET,
DynamicFormActionTypes.ADD_PAGE,
DynamicFormActionTypes.REMOVE_PAGE,
DynamicFormActionTypes.REORDER_GROUPS,
DynamicFormActionTypes.SAVE_EDIT_CONTROL
])
};
export function undoable<T>(reducer: ActionReducer<any>, undoActionType: string, redoActionType: string, recordedActions: string[]): ActionReducer<any> {
// Call the reducer with empty action to populate the initial state
const initialState: UndoableState<T> = {
past: [],
present: reducer(undefined, { type: 'INIT' }),
future: []
};
// Return a reducer that handles undo and redo
return function (state = initialState, action) {
...
};
}
Все прекрасно работает, за исключением случаев, когда я собираюсь для производства, я получаю следующую ошибку:
Error during template compile of 'AdminModule'
Function calls are not supported in decorators but 'undoable' was called in 'adminReducers'
'adminReducers' calls 'undoable' at src\app\core\containers\admin\admin-feature.reducers.ts(11,29).
Единственный другой способ, которым я видел, вы можете улучшитьв существующем редукторе используются метаредукторы, но их вызывают для каждой функции редуктора, в данном случае не только для конкретной, такой как dynamicForm.