[go: nahoru, domu]

blob: 1a645bc9ee6dc23309cf477f5f5c9cc821e9d99b [file] [log] [blame]
// Copyright 2023 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {type Step} from './Schema.js';
import {type Screenshot} from './ScreenshotStorage.js';
export interface Section {
title: string;
steps: Step[];
url: string;
screenshot?: Screenshot;
causingStep?: Step;
}
function startNewSection(step: Step): Section|null {
const navigationEvent = step.assertedEvents?.find(
event => event.type === 'navigation',
);
if (step.type === 'navigate') {
return {
title: navigationEvent?.title || '',
url: step.url,
steps: [],
causingStep: step,
};
}
if (navigationEvent) {
return {
title: navigationEvent.title || '',
url: navigationEvent.url || '',
steps: [],
};
}
return null;
}
export function buildSections(steps: Step[]): Section[] {
let currentSection: Section|null = null;
const sections: Section[] = [];
for (const step of steps) {
if (currentSection) {
currentSection.steps.push(step);
} else if (step.type === 'navigate') {
currentSection = startNewSection(step);
continue;
} else {
currentSection = {title: 'Current page', url: '', steps: [step]};
}
const nextSection = startNewSection(step);
if (nextSection) {
if (currentSection) {
sections.push(currentSection);
}
currentSection = nextSection;
}
}
if (currentSection && (!sections.length || currentSection.steps.length)) {
sections.push(currentSection);
}
return sections;
}