prepareSeoChecklistWorkflowComponent function

SeoChecklistWorkflowComponentPlan? prepareSeoChecklistWorkflowComponent({
  1. required List<SeoApprovalChecklistItemEntry> items,
  2. required List<SeoApprovalChecklistItemEntry> stages,
  3. required SeoChecklistWorkflowState initialState,
  4. required SeoChecklistWorkflowViewProjection project,
  5. String? interactionId,
  6. int headingLevel = 2,
  7. String heading = 'Publication checklist',
  8. String statusLabel = 'Status',
  9. String progressLabel = 'Checks completed',
  10. String historyLabel = 'History',
  11. String submitLabel = 'Submit for review',
  12. String approveLabel = 'Approve',
  13. String rejectLabel = 'Reject',
  14. String publishLabel = 'Publish',
})

Implementation

SeoChecklistWorkflowComponentPlan? prepareSeoChecklistWorkflowComponent({
  required List<SeoApprovalChecklistItemEntry> items,
  required List<SeoEditorialWorkflowStageEntry> stages,
  required SeoChecklistWorkflowState initialState,
  required SeoChecklistWorkflowViewProjection project,
  String? interactionId,
  int headingLevel = 2,
  String heading = 'Publication checklist',
  String statusLabel = 'Status',
  String progressLabel = 'Checks completed',
  String historyLabel = 'History',
  String submitLabel = 'Submit for review',
  String approveLabel = 'Approve',
  String rejectLabel = 'Reject',
  String publishLabel = 'Publish',
}) {
  if (items.isEmpty ||
      items.length > seoApprovalChecklistMaxItems ||
      stages.length != 4) {
    return null;
  }
  final rawLabels = [
    heading,
    statusLabel,
    progressLabel,
    historyLabel,
    submitLabel,
    approveLabel,
    rejectLabel,
    publishLabel,
    ...items.map((e) => e.label),
    ...stages.map((e) => e.label)
  ];
  if (rawLabels.fold<int>(0, (sum, s) => sum + s.length) > 6144) return null;
  final labels = <String>[];
  for (final raw in rawLabels) {
    final label = canonicalizeSeoConfiguratorText(raw, maxLength: 128)?.trim();
    if (label == null) return null;
    labels.add(label);
  }
  final itemLabels = labels.skip(8).take(items.length).toList();
  final stageLabels = labels.skip(8 + items.length).toList();
  if (itemLabels.toSet().length != items.length ||
      stageLabels.toSet().length != 4) {
    return null;
  }
  final initial = evaluateInitialSeoChecklistWorkflowView(project, initialState,
      itemCount: items.length);
  if (initial == null) return null;
  final id = interactionId?.trim();
  return SeoChecklistWorkflowComponentPlan._(
    List.unmodifiable([
      for (var i = 0; i < items.length; i++)
        (
          label: itemLabels[i],
          nodes: List<SeoNode>.unmodifiable(items[i].nodes)
        )
    ]),
    List.unmodifiable([
      for (var i = 0; i < 4; i++)
        (
          label: stageLabels[i],
          nodes: List<SeoNode>.unmodifiable(stages[i].nodes)
        )
    ]),
    initial,
    id != null && isValidSeoInteractionId(id) ? id : null,
    headingLevel.clamp(1, 6),
    List.unmodifiable(labels.take(8)),
  );
}