pullback<PS, PE, PA extends ReducerAction> method

Reducer<PS, PE, PA> pullback<PS, PE, PA extends ReducerAction>({
  1. required S toChildState(
    1. PS
    ),
  2. required PS fromChildState(
    1. S
    ),
  3. required A? toChildAction(
    1. PA
    ),
  4. required PA fromChildAction(
    1. A
    ),
  5. required E toChildEnvironment(
    1. PE
    ),
})

Implementation

Reducer<PS, PE, PA> pullback<PS, PE, PA extends ReducerAction>(
    {required S Function(PS) toChildState,
    required PS Function(S) fromChildState,
    required A? Function(PA) toChildAction,
    required PA Function(A) fromChildAction,
    required E Function(PE) toChildEnvironment}) {
  return Reducer<PS, PE, PA>((PS state, PA action) {
    final childState = toChildState(state);
    final optionalChildAction = toChildAction(action);
    if (optionalChildAction == null) {
      return ReducerTuple(state, []);
    } else {
      final childReducerTuple = run(childState, optionalChildAction);

      final newState = fromChildState(childReducerTuple.state);

      final effectTasks = childReducerTuple.effectTasks.map((effectTask) =>
          effectTask.pullback(
              toChildState: toChildState,
              toChildEnvironment: toChildEnvironment,
              fromChildAction: fromChildAction,
              toChildContext: (cx) => cx));

      return ReducerTuple(newState, effectTasks);
    }
  });
}