function Player()

in example/src/screens/TestPlan.tsx [153:256]


function Player({ playerRef, ...props }: PlayerProps) {
  const snapshot = useSnapshot(planState);
  const [logs, setLogs] = React.useState<[string, string?][]>([]);

  function log(name: string, message?: any) {
    if (!snapshot.events.has(name)) {
      return;
    }
    if (typeof message === 'object') {
      const messages: [string, string?][] = [];

      const mainlog = logstring(name, '');
      console.log(mainlog);
      messages.push([name, mainlog]);

      Object.entries(message).forEach(([key, value]) => {
        if (key) {
          const keyname = `${name} ::: ${key}`;

          const keylog = logstring(keyname, `${value}`);
          console.log(keylog);
          messages.push([keyname, keylog]);
        }
      });

      setLogs((logs) => [...messages, ...logs.slice(0, 128)]);
    } else {
      const logmessage = logstring(name, `${message}`);
      console.log(logmessage);
      setLogs((logs) => [[name, logmessage], ...logs.slice(0, 128)]);
    }
  }

  return (
    <>
      <IVSPlayer
        {...props}
        ref={playerRef}
        onSeek={(position) => {
          log('onSeek', `${position}`);
        }}
        onData={(data) => {
          planState.qualities = data.qualities;
        }}
        onVideoStatistics={(data) => {
          log('onVideoStatistics', data);
        }}
        onPlayerStateChange={(state) => {
          log('onPlayerStateChange', state);
        }}
        onDurationChange={(duration) => {
          log('onDurationChange', duration);
        }}
        onQualityChange={(quality) => {
          log('onQualityChange', quality);
        }}
        onPipChange={(isActive) => {
          log('onPipChange', isActive);
        }}
        onRebuffering={() => {
          log('onRebuffering');
        }}
        onLoadStart={() => {
          log('onLoadStart');
        }}
        onLoad={(duration) => {
          log('onLoad', duration);
        }}
        onLiveLatencyChange={(liveLatency) => {
          log('onLiveLatencyChange', liveLatency);
        }}
        onTextCue={(textCue) => {
          log('onTextCue', textCue);
        }}
        onTextMetadataCue={(textMetadataCue) => {
          log('onTextMetadataCue', textMetadataCue);
        }}
        onProgress={(progress) => {
          log('onProgress', progress);
        }}
        onError={(error: string) => {
          log('onError', error);
        }}
        onTimePoint={(position) => {
          log('onTimePoint', position);
        }}
      >
        {logs.length === 0 && (
          <Text style={styles.log} testID="onClearLogs">
            onClearLogs :::
          </Text>
        )}
        {logs.map((log, index) => (
          <Text
            key={`${index}${log[1]}`}
            style={styles.log}
            testID={log[0]}
            accessibilityLabel={log[1]}
          >
            {log[1]}
          </Text>
        ))}
      </IVSPlayer>
      <Button testID="clearLogs" onPress={() => setLogs([])}>