|
@@ -19,56 +19,14 @@ import {useLocation} from 'sentry/utils/useLocation';
|
|
|
import useOrganization from 'sentry/utils/useOrganization';
|
|
|
import useProjects from 'sentry/utils/useProjects';
|
|
|
import {normalizeUrl} from 'sentry/utils/withDomainRequired';
|
|
|
-import {DeadRageSelectorItem, ReplayClickElement} from 'sentry/views/replays/types';
|
|
|
+import {constructSelector, getAriaLabel} from 'sentry/views/replays/detail/utils';
|
|
|
+import {DeadRageSelectorItem} from 'sentry/views/replays/types';
|
|
|
import {WiderHovercard} from 'sentry/views/starfish/components/tableCells/spanDescriptionCell';
|
|
|
|
|
|
export interface UrlState {
|
|
|
widths: string[];
|
|
|
}
|
|
|
|
|
|
-export function getAriaLabel(str: string) {
|
|
|
- const pre = str.split('aria="')[1];
|
|
|
- if (!pre) {
|
|
|
- return '';
|
|
|
- }
|
|
|
- return pre.substring(0, pre.lastIndexOf('"]'));
|
|
|
-}
|
|
|
-
|
|
|
-function trimAttribute(elementAttribute, fullAlltribute) {
|
|
|
- return elementAttribute === '' ? '' : fullAlltribute;
|
|
|
-}
|
|
|
-
|
|
|
-export 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};
|
|
|
-}
|
|
|
-
|
|
|
export function hydratedSelectorData(data, clickType?): DeadRageSelectorItem[] {
|
|
|
return data.map(d => ({
|
|
|
...(clickType
|