mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
37 lines
1.4 KiB
TypeScript
37 lines
1.4 KiB
TypeScript
import type {ReplayClickElement} from 'sentry/views/replays/types';
|
|
|
|
function trimAttribute(elementAttribute, fullAlltribute) {
|
|
return elementAttribute === '' ? '' : fullAlltribute;
|
|
}
|
|
|
|
export default function constructSelector(element: ReplayClickElement) {
|
|
const fullAlt = '[alt="' + element.alt + '"]';
|
|
const alt = trimAttribute(element.alt, fullAlt);
|
|
|
|
const fullAriaLabel = '[aria="' + element.aria_label + '"]';
|
|
const ariaLabel = trimAttribute(element.aria_label, fullAriaLabel);
|
|
|
|
const trimClass = element.class.filter(e => e !== '');
|
|
const classWithPeriod = trimClass.join('.');
|
|
const classNoPeriod = classWithPeriod.replace('.', '');
|
|
const classes = trimAttribute(classNoPeriod, '.' + classWithPeriod);
|
|
|
|
const id = trimAttribute(element.id, '#' + element.id);
|
|
|
|
const fullRole = '[role="' + element.role + '"]';
|
|
const role = trimAttribute(element.role, fullRole);
|
|
|
|
const tag = element.tag;
|
|
|
|
const fullTestId = '[data-test-id="' + element.testid + '"]';
|
|
const testId = trimAttribute(element.testid, fullTestId);
|
|
|
|
const fullTitle = '[title="' + element.title + '"]';
|
|
const title = trimAttribute(element.title, fullTitle);
|
|
|
|
const fullSelector =
|
|
tag + id + classes + fullRole + fullAriaLabel + fullTestId + fullAlt + fullTitle;
|
|
const selector = tag + id + classes + role + ariaLabel + testId + alt + title;
|
|
return {fullSelector, selector};
|
|
}
|