prepareSeoChecklistWorkflowComponent function
SeoChecklistWorkflowComponentPlan?
prepareSeoChecklistWorkflowComponent({
- required List<
SeoApprovalChecklistItemEntry> items, - required List<
SeoApprovalChecklistItemEntry> 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',
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)),
);
}