import React, { useEffect, useState } from "react"; import ReactDOM from "react-dom"; import { getMemory } from "../memory"; import { Classifications, StolenDataEntry } from "../stolen-data-entry"; import { reduceConcat, useEmitter } from "../util"; import EmailTemplate from "./email-template"; import HARConverter from "./har-converter"; function DataPreview({ entries, refresh, }: { entries: StolenDataEntry[]; refresh: () => void; }) { // currently not used, maybe scraped entirely in the future return ( {entries.map((entry) => ( ))}
Adres docelowy Źródło danych Treść danych Klasyfikacja
{entry.request.shorthost} {entry.source}:{entry.name} {entry.getValuePreview()} {/* always gonna have one key, because unwrapEntry is called above */}
); } function Report() { console.time("getOrigin"); const origin = new URL(document.location.toString()).searchParams.get( "origin" ); console.timeEnd("getOrigin"); console.time("useMemory"); const [counter, setCounter] = useEmitter(getMemory()); console.timeEnd("useMemory"); function refresh() { setCounter((c) => c + 1); } console.time("getClustersForOrigin"); const clusters = getMemory().getClustersForOrigin(origin); console.timeEnd("getClustersForOrigin"); const [entries, setEntries] = useState([]); console.time("useEffect report-window"); useEffect(() => { setEntries( Object.values(clusters) .map((cluster) => { cluster.calculatetRepresentativeStolenData(); return cluster.representativeStolenData; }) .reduce(reduceConcat, []) .filter((entry) => entry.isMarked) ); }, []); console.timeEnd("useEffect report-window"); if (entries.length == 0) { return <>Wczytywanie...; } console.time("rendering template"); const result = (
{/*Generuj treść maila dla {origin}
); console.timeEnd("rendering template"); return result; } ReactDOM.render(, document.getElementById("app"));