diff --git a/components.js b/components.js new file mode 100644 index 0000000..ec6b4f4 --- /dev/null +++ b/components.js @@ -0,0 +1,209 @@ +import { h, render, createContext, Fragment } from 'https://cdn.skypack.dev/preact'; +import { useReducer, useState } from 'https://cdn.skypack.dev/preact/hooks'; +import { css, cx } from 'https://cdn.skypack.dev/@emotion/css'; +import htm from 'https://unpkg.com/htm?module'; +const html = htm.bind(h); + +let FormPivot = props => +{ + let pivotColumns = N.Step(Pivot.Schema, "label")||[]; + let pivotColumnsUsed = N.Step(Pivot.Proto, "used-pivot")||[]; + + 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("p", null, [ + h("span", null, "Build"), + h("button", {onClick:e=> + { + N.Disconnect(Pivot.Proto, null, "used-pivot"); + N.Disconnect(Pivot.Proto, null, "used-sum"); + Pivot.Create(indiciesPivot, indiciesSum); + Render(); + } + }, "Create Pivot") + ]); + } + else + { + action = h("p", null, "(select columns)") + } + + return h("div", {}, [ + h("p", null, [ + + h("span", null, "Pivot Columns"), + ...pivotColumns.map( columnLabel => + { + let attributes = {}; + if(N.Step(columnLabel, "used-pivot", false)) + { + attributes.disabled = true; + } + 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("p", null, [ + h("span", null, "Current Pivot"), + ...pivotColumnsUsed.map( columnLabel => + { + return h("button", {onClick:e=> + { + N.Disconnect(Pivot.Proto, columnLabel, "used-pivot"); + Render(); + } + }, 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 + ]); +} + +let Section = props => +{ + let styles = css` + border-top:1px solid #aaa; + .Heading + { + padding:6px 0 6px 0; + color:#666; + font-weight:900; + font-size:12px; + text-transform:uppercase; + cursor:pointer; + + span + { + display:inline-block; + width:20px; + height:20px; + margin-right:10px; + border-radius:20px; + background:black; + color:white; + text-align:center; + } + } + .Heading:hover + { + color:black; + } + .Body + { + margin:10px 0 10px 0; + } + `; + + let [openGet, openSet] = useState(false); + return html` +