function vegaDataViewer(
chart,
options = {
dataset: undefined,
tableOptions: undefined
}
) {
const datasets = Object.keys(
getDatasets(chart).data
);
let dataset =
options.dataset ||
(datasets.includes("source_0") ? "source_0" : datasets[0]);
let data = chart.data(dataset);
const renderTable = data =>
html`${
!data || data.length ? table(data, options.tableOptions) : "Empty data"
} `;
const select = html`<select>
${datasets.map(
ds =>
html`<option value="${ds}" ${
ds === dataset ? "selected" : ""
}>${ds}</option>`
)}
</select>
`;
const div = html`<form>
<label> <strong>Dataset: </strong> ${select}</label>
<label><div><strong>Data: </strong></label>
<div id="table">
${renderTable(data)}
</div>
</label>
</form>
`;
const signaled = (name, value) => {
data = div.value = chart.data(select.value);
const tableEle = div.querySelector("#table");
tableEle.textContent = "";
tableEle.appendChild(renderTable(data));
div.dispatchEvent(new CustomEvent("input", { bubbles: true }));
};
invalidation.then(() => {
chart.removeDataListener(select.value, signaled);
select.removeEventListener("input", signaled);
});
chart.addDataListener(select.value, signaled);
select.addEventListener("input", signaled);
div.value = data;
return div;
}