openreplay/frontend/app/player/web/Screen/Inspector.ts
Delirium 309a9fd970
feat: tag and watch (UI/Tracker) (#1822)
* feat(ui/tracker): start tag n watch

* fix(tracker): test coverage, fix some watcher api

* fix(tracker): add intersectionobserver, adjust tests

* feat(tracker): relay + apollo plugins

* feat(ui): tags search

* feat(ui): tags name edit

* feat(ui): tags search icon

* feat(ui): icons for tabs in player

* feat(ui): save and find button

* feat(tracker): save tags in session storage (just in case)

* feat(ui): improve loading

* feat(ui): fix icon names gen

* feat(ui): fix typo
2024-01-19 11:11:27 +01:00

46 lines
1.3 KiB
TypeScript

import type Screen from './Screen'
import type Marker from './Marker'
export default class Inspector {
constructor(private screen: Screen, private marker: Marker) {}
private onMouseMove = (e: MouseEvent) => {
e.stopPropagation();
const target = this.screen.getElementFromPoint(e);
if (target === this.marker.target) {
return;
}
this.marker.mark(target);
}
private onOverlayLeave = () => {
return this.marker.unmark();
}
private onMarkClick = () => {
let target = this.marker.target;
if (!target) {
return
}
this.clickCallback && this.clickCallback({ target });
}
addClickListener(callback: (el: { target: Element }) => void) {
this.clickCallback = callback
}
private clickCallback: (e: { target: Element }) => void = () => {}
enable() {
this.screen.overlay.addEventListener('mousemove', this.onMouseMove)
this.screen.overlay.addEventListener('mouseleave', this.onOverlayLeave)
this.screen.overlay.addEventListener('click', this.onMarkClick)
}
clean() {
this.screen.overlay.removeEventListener('mousemove', this.onMouseMove)
this.screen.overlay.removeEventListener('mouseleave', this.onOverlayLeave)
this.screen.overlay.removeEventListener('click', this.onMarkClick)
}
}