global: opreturn part 3

This commit is contained in:
nym21
2026-07-18 21:34:21 +02:00
parent 10c16335ed
commit 5161ae2012
16 changed files with 912 additions and 412 deletions
+8 -32
View File
@@ -1,7 +1,5 @@
import {
loadBlockPreview,
loadBlockPreviewFilters,
} from "./data.js";
import { loadBlockPreview } from "./data.js";
import { createBlockPreviewFilterData } from "./filters/data.js";
import {
createPendingPreviewFilters,
createPreviewFilters,
@@ -29,35 +27,18 @@ function createFigure(body, filters, inspector) {
return figure;
}
/**
* @template T
* @param {() => Promise<T>} load
*/
function memoize(load) {
let promise = /** @type {Promise<T> | null} */ (null);
return () => {
promise ??= load().catch((error) => {
promise = null;
throw error;
});
return promise;
};
}
/**
* @param {BlockPreviewData} data
* @param {() => Promise<BlockPreviewFilterState>} loadFilters
* @param {number} height
* @param {AbortSignal} signal
*/
function createPreview(data, loadFilters, signal) {
const loadFilterState = memoize(loadFilters);
const inspector = createBlockPreviewInspector(signal, loadFilterState);
function createPreview(data, height, signal) {
const filterData = createBlockPreviewFilterData(height, data.range, signal);
const inspector = createBlockPreviewInspector(signal, filterData);
const heatmap = createBlockPreviewHeatmap(data, {
onInspect: inspector.inspect,
});
const filters = createPreviewFilters(loadFilterState, heatmap);
const filters = createPreviewFilters(filterData, heatmap);
return {
destroy() {
@@ -96,11 +77,7 @@ export function createBlockPreviewPane(block) {
void loadBlockPreview(block, controller.signal)
.then((data) => {
if (!live) return;
const preview = createPreview(
data,
() => loadBlockPreviewFilters(data.range, controller.signal),
controller.signal,
);
const preview = createPreview(data, block.height, controller.signal);
destroyHeatmap = preview.destroy;
content.replaceChildren(preview.element);
@@ -123,7 +100,6 @@ export function createBlockPreviewPane(block) {
}
/** @typedef {import("./data.js").BlockPreviewData} BlockPreviewData */
/** @typedef {import("./data.js").BlockPreviewFilterState} BlockPreviewFilterState */
/**
* @typedef {Object} BlockPreview