@applitools/eyes-playwright
Version:
Applitools Eyes SDK for Playwright
100 lines (99 loc) • 4.04 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NavigationUI = void 0;
const statusUtils_js_1 = require("../management/statusUtils.js");
const log_1 = __importDefault(require("../core/log"));
const logger = (0, log_1.default)();
class NavigationUI {
constructor(filterManager) {
this._filtersCreated = false;
this.filterManager = filterManager;
}
createFilters(testResults) {
if (this._filtersCreated) {
return;
}
if (document.getElementById('eyes-filter') && document.getElementById('unresolved-filter')) {
this._filtersCreated = true;
return;
}
const allFilters = document.getElementsByClassName('subnav-item');
const navTextButtons = Array.from(allFilters).filter(filter => filter.tagName === 'A' &&
(filter.querySelector('.subnav-item-label') !== null || filter.querySelector('.d-inline') !== null));
const lastFilter = navTextButtons[navTextButtons.length - 1];
if (!lastFilter) {
logger.warn('[Eyes Navigation] No subnav items found, cannot create filters');
return;
}
const counts = (0, statusUtils_js_1.countTestsByStatus)(testResults.eyesTestResult);
const eyesFilter = lastFilter.cloneNode(true);
eyesFilter.id = 'eyes-filter';
eyesFilter.firstChild.textContent = 'Eyes ';
eyesFilter.lastChild.textContent = String(counts.total);
eyesFilter.href = '#eyes=true';
this._placeElementAfter(eyesFilter, lastFilter);
const unresolvedFilter = lastFilter.cloneNode(true);
unresolvedFilter.id = 'unresolved-filter';
unresolvedFilter.firstChild.textContent = 'Unresolved ';
unresolvedFilter.lastChild.textContent = String(counts.unresolved);
unresolvedFilter.href = '#unresolved=true';
this._placeElementAfter(unresolvedFilter, eyesFilter);
this._filtersCreated = true;
}
updateFilterCounts(testResults) {
if (!this._filtersCreated) {
return;
}
const counts = (0, statusUtils_js_1.countTestsByStatus)(testResults.eyesTestResult);
const eyesFilter = document.getElementById('eyes-filter');
if (eyesFilter && eyesFilter.lastChild) {
eyesFilter.lastChild.textContent = String(counts.total);
}
const unresolvedFilter = document.getElementById('unresolved-filter');
if (unresolvedFilter && unresolvedFilter.lastChild) {
unresolvedFilter.lastChild.textContent = String(counts.unresolved);
}
}
areFiltersCreated() {
return this._filtersCreated;
}
resetFilters() {
this._filtersCreated = false;
}
updateActiveStates() {
if (!this._filtersCreated) {
return;
}
const eyesFilter = document.getElementById('eyes-filter');
const unresolvedFilter = document.getElementById('unresolved-filter');
if (eyesFilter) {
if (this.filterManager.isEyesFilterActive()) {
eyesFilter.classList.add('selected');
}
else {
eyesFilter.classList.remove('selected');
}
}
if (unresolvedFilter) {
if (this.filterManager.isUnresolvedFilterActive()) {
unresolvedFilter.classList.add('selected');
}
else {
unresolvedFilter.classList.remove('selected');
}
}
}
_placeElementAfter(newElement, referenceElement) {
const nextSibling = referenceElement.nextSibling;
if (nextSibling) {
referenceElement.parentNode.insertBefore(newElement, nextSibling);
}
else {
referenceElement.parentNode.appendChild(newElement);
}
}
}
exports.NavigationUI = NavigationUI;