Fix Perspective viewer: pass table name in restore, simplify listener
- restore() must include table: tableName so viewer knows which table - Replace cloneNode listener reset with named _pspClickHandler pattern - Always inject table name into saved layouts on restore Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
5171b9770c
commit
4c71049bf0
@ -757,7 +757,7 @@ function buildDefaultLayout() {
|
||||
}
|
||||
|
||||
async function initPerspectiveViewer(data) {
|
||||
const viewer = document.getElementById('pivot-viewer');
|
||||
const tableName = `pf_${state.version.id}`;
|
||||
|
||||
// terminate old worker if reloading
|
||||
if (state.pspWorker) {
|
||||
@ -770,28 +770,28 @@ async function initPerspectiveViewer(data) {
|
||||
const worker = await perspective.worker();
|
||||
state.pspWorker = worker;
|
||||
|
||||
const table = await worker.table(data, { name: `pf_${state.version.id}` });
|
||||
state.pspTable = table;
|
||||
const table = await worker.table(data, { name: tableName });
|
||||
state.pspTable = table;
|
||||
|
||||
// remove old listener to avoid stacking on refresh
|
||||
const fresh = viewer.cloneNode(false);
|
||||
viewer.parentNode.replaceChild(fresh, viewer);
|
||||
const v = document.getElementById('pivot-viewer');
|
||||
|
||||
v.addEventListener('perspective-click', async (e) => {
|
||||
// re-attach click listener (use named handler so it can be replaced on refresh)
|
||||
v._pspClickHandler = async (e) => {
|
||||
const detail = e.detail || {};
|
||||
const eventFilters = (detail.config || {}).filter || [];
|
||||
const config = await v.save();
|
||||
extractSliceFromPerspective(eventFilters, config);
|
||||
});
|
||||
extractSliceFromPerspective(eventFilters);
|
||||
};
|
||||
v.removeEventListener('perspective-click', v._pspClickHandler);
|
||||
v.addEventListener('perspective-click', v._pspClickHandler);
|
||||
|
||||
await v.load(worker);
|
||||
|
||||
const saved = localStorage.getItem(pspLayoutKey());
|
||||
if (saved) {
|
||||
await v.restore(JSON.parse(saved));
|
||||
const layout = JSON.parse(saved);
|
||||
await v.restore({ ...layout, table: tableName });
|
||||
} else {
|
||||
await v.restore(buildDefaultLayout());
|
||||
await v.restore({ ...buildDefaultLayout(), table: tableName });
|
||||
}
|
||||
|
||||
// update reset button visibility
|
||||
|
||||
Loading…
Reference in New Issue
Block a user