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`