diff --git a/src/dataset.js b/src/dataset.js index 6bddb44..ea145cf 100644 --- a/src/dataset.js +++ b/src/dataset.js @@ -26,21 +26,20 @@ async function buildDataCube (originCubeDefinition, hasTwoDimensions, app) { } export async function initializeDataCube (component, layout) { - const app = qlik.currApp(component); - - let properties; if (component.backendApi.isSnapshot) { - // Fetch properties of source - properties = (await app.getObjectProperties(layout.sourceObjectId)).properties; - } else { - properties = await component.backendApi.getProperties(); + return layout.snapshotData.dataCube; } - return buildDataCube( - properties.qHyperCubeDef, layout.qHyperCube.qDimensionInfo.length === 2, app); + const app = qlik.currApp(component); + const hyperCubeDef = (await component.backendApi.getProperties()).qHyperCubeDef; + return buildDataCube(hyperCubeDef, layout.qHyperCube.qDimensionInfo.length === 2, app); } export function initializeDesignList (component, layout) { + if (component.backendApi.isSnapshot) { + return layout.snapshotData.designList; + } + if (!layout.stylingfield) { return null; } diff --git a/src/excel-export.js b/src/excel-export.js index 413f391..7b01e18 100644 --- a/src/excel-export.js +++ b/src/excel-export.js @@ -1,19 +1,32 @@ -function removeAllTooltips (node) { - const tooltips = node.querySelectorAll('.tooltip'); - [].forEach.call(tooltips, tooltip => { - if (tooltip.parentNode) { - tooltip.parentNode.removeChild(tooltip); +function cleanupNodes (node) { + const removables = node.querySelectorAll('.tooltip,input'); + [].forEach.call(removables, removeable => { + if (removeable.parentNode) { + removeable.parentNode.removeChild(removeable); } }); } -function buildTableHTML (title, subtitle, footnote) { +function buildTableHTML (id, title, subtitle, footnote) { const titleHTML = `
${title}
`; const subtitleHTML = `${subtitle}
`; - const footnoteHTML = `Note:${footnote}
`; - const dataTableClone = document.querySelector('.data-table').cloneNode(true); + const footnoteHTML = `${footnote}
`; + const container = document.querySelector(`[tid="${id}"]`); + const kpiTableClone = container.querySelector('.kpi-table').cloneNode(true); + const dataTableClone = container.querySelector('.data-table').cloneNode(true); + cleanupNodes(kpiTableClone); + cleanupNodes(kpiTableClone); - removeAllTooltips(dataTableClone); + const kpiTableBodies = kpiTableClone.querySelectorAll('tbody'); + const dataTableBodies = dataTableClone.querySelectorAll('tbody'); + const kpiHeader = kpiTableBodies[0].querySelector('tr'); + const dataTableHeaders = dataTableBodies[0].querySelectorAll('tr'); + const kpiRows = kpiTableBodies[1].querySelectorAll('tr'); + const dataRows = dataTableBodies[1].querySelectorAll('tr'); + let combinedRows = ''; + for (let i = 0; i < kpiRows.length; i++) { + combinedRows += `