evaluateSeoApprovalChecklistAction function

SeoApprovalChecklistEvaluation? evaluateSeoApprovalChecklistAction({
  1. required SeoApprovalChecklistTransition transition,
  2. required SeoApprovalChecklistViewProjection project,
  3. required SeoApprovalChecklistEvaluation current,
  4. required SeoApprovalChecklistAction action,
  5. required int itemCount,
})

Implementation

SeoApprovalChecklistEvaluation? evaluateSeoApprovalChecklistAction({
  required SeoApprovalChecklistTransition transition,
  required SeoApprovalChecklistViewProjection project,
  required SeoApprovalChecklistEvaluation current,
  required SeoApprovalChecklistAction action,
  required int itemCount,
}) {
  final result = evaluateSeoApplicationAction(
    currentState: current.state,
    currentView: current.view,
    action: action,
    canonicalizeState: (candidate) =>
        _canonicalSeoApprovalChecklistState(candidate, itemCount),
    validateView: _validateSeoApprovalChecklistView,
    isActionAdmitted: (state, candidateAction) =>
        isSeoApprovalChecklistActionEnabled(
      state,
      candidateAction,
      itemCount,
    ),
    transition: transition,
    validateCandidate: (state, candidateAction, candidate) {
      final change = candidateAction as SeoApprovalChecklistSetItem;
      final flags = [...state.checked]..[change.index] = change.checked;
      final expected = SeoApprovalChecklistState(
        checked: List.unmodifiable(flags),
      );
      return candidate == expected ? expected : null;
    },
    project: project,
  );
  if (result == null) return null;
  return SeoApprovalChecklistEvaluation(
    state: result.state,
    view: result.view,
    accepted: result.accepted,
  );
}