diff --git a/index.html b/index.html index 8986b61..4f3e5bc 100755 --- a/index.html +++ b/index.html @@ -196,10 +196,11 @@ var Pivot = // - optional traversal depth, defaults to 0 let depth = inDepth||0; let uniques = {}; + let indexPivot = inPivotIndicies[depth] inParent.Meta.Leaves.forEach((inLeaf)=> { let row = inLeaf.Meta.Row; // shorthand for the raw "CSV" row in the leaf Node's Meta - let value = row[inPivotIndicies[depth]]; // get the pivot column + let value = row[indexPivot]; // get the pivot column let match = uniques[value]; // check in the uniques list if this pivot column exists if(!match) { @@ -213,6 +214,8 @@ var Pivot = match = uniques[value] = { Label:value, Row:clone, + IndexPivot:indexPivot, + IndexSum:inSumIndicies, Leaves:[] }; // grow a child off of the parent using the meta object @@ -370,8 +373,8 @@ import { useReducer } from 'https://cdn.skypack.dev/preact/hooks'; import { css, cx } from 'https://cdn.skypack.dev/@emotion/css'; Pivot.Init( - ["number", "type-a", "type-b", "count"], - ["label", "label", "label", "sum"], + ["number", "type-a", "type-b", "count", "extra"], + ["label", "label", "label", "sum", "sum"], [ ["#1", "a", "long", 1, 4], ["#2", "b", "long", 2, 4], @@ -385,21 +388,24 @@ Pivot.Init( let ElForm = props => { - let labelColumns = N.Step(Pivot.Schema, "label")||[]; + let pivotColumns = N.Step(Pivot.Schema, "label")||[]; + let pivotColumnsUsed = N.Step(Pivot.Proto, "used-pivot")||[]; - let used = N.Step(Pivot.Proto, "used")||[]; - let unused = N.Step(Pivot.Schema, "label").filter( columnLabel => !N.Step(columnLabel, "used", false) ); - let indiciesPivot = used.map(node=>node.Meta.Index); - let indiciesSum = (N.Step(Pivot.Schema, "sum")||[]).map(n=>n.Meta.Index); + let sumColumns = N.Step(Pivot.Schema, "sum")||[]; + let sumColumnsUsed = N.Step(Pivot.Proto, "used-sum")||[]; + + let indiciesPivot = pivotColumnsUsed.map(node=>node.Meta.Index); + let indiciesSum = sumColumnsUsed.map(node=>node.Meta.Index); var action; if(indiciesPivot.length) { - action = h("div", null, [ + action = h("p", null, [ h("span", null, "Build"), h("button", {onClick:e=> { - N.Disconnect(Pivot.Proto, null, "used"); + N.Disconnect(Pivot.Proto, null, "used-pivot"); + N.Disconnect(Pivot.Proto, null, "used-sum"); Pivot.Create(indiciesPivot, indiciesSum); Render(); } @@ -408,35 +414,71 @@ let ElForm = props => } else { - action = h("div", null, "(select columns)") + action = h("p", null, "(select columns)") } return h("div", {}, [ - h("div", null, [ - h("span", null, "available"), - ...unused.map( node=> + h("p", null, [ + + h("span", null, "Pivot Columns"), + ...pivotColumns.map( columnLabel => { - return h("button", {onClick:e=> + let attributes = {}; + if(N.Step(columnLabel, "used-pivot", false)) { - N.Connect(Pivot.Proto, node, "used"); - Render(); + attributes.disabled = true; } - }, node.Meta.Label); - } - ) + else + { + attributes.onClick = e=> + { + N.Connect(Pivot.Proto, columnLabel, "used-pivot"); + Render(); + } + } + return h("button", attributes, columnLabel.Meta.Label); + }), + + h("span", null, "Summation Columns"), + ...sumColumns.map( columnSum => + { + let attributes = {}; + if(N.Step(columnSum, "used-sum", false)) + { + attributes.disabled = true; + } + else + { + attributes.onClick = e=> + { + N.Connect(Pivot.Proto, columnSum, "used-sum"); + Render(); + } + } + return h("button", attributes, columnSum.Meta.Label); + }) ]), - h("div", null, [ - h("span", null, "taken"), - ...used.map( node=> + h("p", null, [ + h("span", null, "Current Pivot"), + ...pivotColumnsUsed.map( columnLabel => { return h("button", {onClick:e=> { - N.Disconnect(Pivot.Proto, node, "used"); + N.Disconnect(Pivot.Proto, columnLabel, "used-pivot"); Render(); } - }, node.Meta.Label); - } - ) + }, columnLabel.Meta.Label); + }), + h("span", null, "Current Summation"), + ...sumColumnsUsed.map( columnSum => + { + return h("button", {onClick:e=> + { + N.Disconnect(Pivot.Proto, columnSum, "used-sum"); + Render(); + } + }, columnSum.Meta.Label); + }), ]), action ])