Skip to content

Commit

Permalink
Adjusted classname search algorithm
Browse files Browse the repository at this point in the history
  • Loading branch information
bsekachev committed May 28, 2024
1 parent 8e2d7a2 commit a2787ca
Showing 1 changed file with 18 additions and 29 deletions.
47 changes: 18 additions & 29 deletions cvat-ui/src/utils/event-recorder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@ import { platformInfo } from 'utils/platform-checker';
const core = getCore();
const { CONTROLS_LOGS_INTERVAL } = config;

const classFilter = ['ant-btn'];
const parentClassFilter = ['ant-btn'];

interface Logger {
log(...parameters: Parameters<typeof core.logger.log>): ReturnType<typeof core.logger['log']>;
}
Expand All @@ -35,30 +32,13 @@ class EventRecorder {
}

public recordMouseEvent(event: MouseEvent): void {
const { target } = event;
if (!target) {
return;
}

const element = (target as HTMLElement);
let toRecord = this.isEventToBeRecorded(element, classFilter);

const logData = {
obj_val: element.innerText,
obj_name: this.filterClassName(element.className),
location: window.location.pathname,
};

if (!toRecord) {
const parentElement = element?.parentElement;
if (parentElement) {
toRecord = this.isEventToBeRecorded(parentElement, parentClassFilter);
logData.obj_name = this.filterClassName(parentElement.className);
}
}

if (toRecord) {
(this.#logger || defaultLogger).log(EventScope.clickElement, logData, false);
const elementToRecord = this.isEventToBeRecorded(event.target as HTMLElement | null, ['ant-btn']);
if (elementToRecord) {
(this.#logger || defaultLogger).log(EventScope.clickElement, {
obj_val: elementToRecord.innerText,
obj_name: this.filterClassName(elementToRecord.className),
location: window.location.pathname,
}, false);
}
}

Expand Down Expand Up @@ -101,8 +81,17 @@ class EventRecorder {
return '';
}

private isEventToBeRecorded(node: HTMLElement, filter: string[]): boolean {
return filter.some((cssClass: string) => node.classList.contains(cssClass));
private isEventToBeRecorded(element: HTMLElement | null, cssFilter: string[], maxDepth = 5): HTMLElement | null {
if (!element) {
return null;
}

const { classList } = element;
if (cssFilter.some((cssClass: string) => classList.contains(cssClass))) {
return element;
}

return this.isEventToBeRecorded(element.parentElement, cssFilter, maxDepth - 1);
}
}

Expand Down

0 comments on commit a2787ca

Please sign in to comment.