* fix(ui): fix up mobile recordings display * fix(ui): some messages * fix(ui): some messages * fix(player): fix msg generation for ios messages * feat(player): add generic mmanager interface for ios player impl * feat(player): mobile player and message manager; touch manager; videoplayer * feat(player): add iphone shells, add log panel, * feat(player): detect ios sessions and inject correct player * feat(player): move screen mapper to utils * feat(player): events panel for mobile, map shell sizes to device type data, * feat(player): added network tab to mobile player; unify network message (ios and web) * feat(player): resize canvas up to phone screen size, fix capitalize util * feat(player): some general changes to support mobile events and network entries * feat(player): remove swipes from timeline * feat(player): more stuff for list walker * fix(ui): performance tab, mobile project typings and form * fix(ui):some ui touches for ios replayer shell * fix(ui): more fixes for ui, new onboarding screen for mobile projects * feat(ui): mobile overview panel (xray) * feat(ui): fixes for phone shell and tap events * fix(tracker): change phone shells and sizes * fix(tracker): fix border on replay screen * feat(ui): use crashes from db to show in session * feat(ui): use event name for xray * feat(ui): some overall ui fixes * feat(ui): IOS -> iOS * feat(ui): change tags to ant d * fix(ui): fast fix * fix(ui): fix for capitalizer * fix(ui): fix for browser display * fix(ui): fix for note popup * fix(ui): change exceptions display * fix(ui): add click rage to ios xray * fix(ui): some icons and resizing * fix(ui): fix ios context menu overlay, fix console logs creation for ios * feat(ui): added icons * feat(ui): performance warnings * feat(ui): performance warnings * feat(ui): different styles * feat(ui): rm debug true * feat(ui): fix warnings display * feat(ui): some styles for animation * feat(ui): add some animations to warnings * feat(ui): move perf warnings to performance graph * feat(ui): hide/show warns dynamically * feat(ui): new mobile touch animation * fix(tracker): update msg for ios * fix(ui): taprage fixes * fix(ui): regenerate icons and messages * fix(ui): fix msgs * fix(backend): fix events gen * fix(backend): fix userid msg
131 lines
3.6 KiB
TypeScript
131 lines
3.6 KiB
TypeScript
import { Log, LogLevel, SessionFilesInfo } from 'Player'
|
|
|
|
import type { Store } from 'Player'
|
|
import MessageLoader from "Player/web/MessageLoader";
|
|
import Player from '../player/Player'
|
|
import Screen, { ScaleMode } from '../web/Screen/Screen'
|
|
import IOSMessageManager from "Player/mobile/IOSMessageManager";
|
|
|
|
export default class IOSPlayer extends Player {
|
|
static readonly INITIAL_STATE = {
|
|
...Player.INITIAL_STATE,
|
|
...MessageLoader.INITIAL_STATE,
|
|
...IOSMessageManager.INITIAL_STATE,
|
|
scale: 1,
|
|
}
|
|
public screen: Screen
|
|
protected messageManager: IOSMessageManager
|
|
protected readonly messageLoader: MessageLoader
|
|
constructor(
|
|
protected wpState: Store<any>,
|
|
session: SessionFilesInfo,
|
|
public readonly uiErrorHandler?: { error: (msg: string) => void }
|
|
) {
|
|
const screen = new Screen(true, ScaleMode.Embed)
|
|
const messageManager = new IOSMessageManager(session, wpState, screen, uiErrorHandler)
|
|
const messageLoader = new MessageLoader(
|
|
session,
|
|
wpState,
|
|
messageManager,
|
|
false,
|
|
uiErrorHandler
|
|
)
|
|
super(wpState, messageManager);
|
|
this.screen = screen
|
|
this.messageManager = messageManager
|
|
this.messageLoader = messageLoader
|
|
|
|
void messageLoader.loadFiles()
|
|
const endTime = session.duration?.valueOf() || 0
|
|
|
|
wpState.update({
|
|
session,
|
|
endTime,
|
|
})
|
|
}
|
|
|
|
attach = (parent: HTMLElement) => {
|
|
this.screen.attach(parent)
|
|
}
|
|
|
|
public updateDimensions(dimensions: { width: number; height: number }) {
|
|
return this.messageManager.updateDimensions(dimensions)
|
|
}
|
|
|
|
public updateLists(session: any) {
|
|
const exceptions = session.crashes.concat(session.errors || [])
|
|
const lists = {
|
|
event: session.events.map((e: Record<string, any>) => {
|
|
if (e.name === 'Click') e.name = 'Touch'
|
|
return e
|
|
}) || [],
|
|
frustrations: session.frustrations || [],
|
|
stack: session.stackEvents || [],
|
|
exceptions: exceptions.map(({ name, ...rest }: any) =>
|
|
Log({
|
|
level: LogLevel.ERROR,
|
|
value: name,
|
|
name,
|
|
message: rest.reason,
|
|
errorId: rest.crashId || rest.errorId,
|
|
...rest,
|
|
})
|
|
) || [],
|
|
}
|
|
|
|
return this.messageManager.updateLists(lists)
|
|
}
|
|
|
|
public updateOverlayStyle(style: Partial<CSSStyleDeclaration>) {
|
|
this.screen.updateOverlayStyle(style)
|
|
}
|
|
|
|
injectPlayer = (player: HTMLElement) => {
|
|
this.screen.addToBody(player)
|
|
this.screen.addMobileStyles()
|
|
window.addEventListener('resize', () =>
|
|
this.customScale(this.customConstrains.width, this.customConstrains.height)
|
|
)
|
|
}
|
|
|
|
scale = () => {
|
|
// const { width, height } = this.wpState.get()
|
|
if (!this.screen) return;
|
|
console.debug("using customConstrains to scale player")
|
|
// sometimes happens in live assist sessions for some reason
|
|
this.screen?.scale?.(this.customConstrains)
|
|
}
|
|
|
|
customConstrains = {
|
|
width: 0,
|
|
height: 0,
|
|
}
|
|
customScale = (width: number, height: number) => {
|
|
if (!this.screen) return;
|
|
this.screen?.scale?.({ width, height })
|
|
this.customConstrains = { width, height }
|
|
this.wpState.update({ scale: this.screen.getScale() })
|
|
}
|
|
|
|
addFullscreenBoundary = (isFullscreen?: boolean) => {
|
|
if (isFullscreen) {
|
|
this.screen?.addFullscreenBoundary()
|
|
} else {
|
|
this.screen?.addMobileStyles()
|
|
}
|
|
}
|
|
|
|
|
|
clean = () => {
|
|
super.clean()
|
|
this.screen.clean()
|
|
// @ts-ignore
|
|
this.screen = undefined;
|
|
this.messageLoader.clean()
|
|
// @ts-ignore
|
|
this.messageManager = undefined;
|
|
window.removeEventListener('resize', this.scale)
|
|
}
|
|
|
|
|
|
}
|