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` +
+
openSet(!openGet)}> + ${openGet ? `−` : `+`} + ${props.label} +
+ ${ openGet ? html`
${props.children}
` : null } +
+ `; +} + +let Modifier = props => +{ + let refNode = N.Step(props.modifier, "ModifyAt")[0]; + + let handlerClick = () => + { + Pivot.Unmodify(props.modifier); + Render(); + }; + + return html` +
+
${refNode.Meta.Label}
+ +
+ `; +} + +let PivotRoot = ({pivot, children}) => +{ + + let stylesRoot = css` + display:block; + box-sizing:border-box; + padding:15px; + font-family:sans-serif; + `; + let stylesHeading = css` + margin: 0 0 15px 0; + font-weight:0; + font-size:24px; + `; + + let modifiers = N.Step(pivot, "Modifier") || []; + + let handleDelete = ()=> + { + Pivot.Delete(pivot); + Render(); + }; + + return html` +
+
${pivot.Meta.Label}
+ <${Section} key="settings" label=${`Settings`}> + + + <${Section} key="modifiers" label=${`Modifiers (${modifiers.length})`}> + ${ !modifiers.length ? html`No modifiers` : modifiers.map( m => html`<${Modifier} modifier=${m}/>`)} + + <${Section} key="tree" label=${"Tree"}> + ${children} + +
+ `; +}; + +export {Section, PivotRoot}; \ No newline at end of file diff --git a/index.html b/index.html index 4f3e5bc..2c24d3f 100755 --- a/index.html +++ b/index.html @@ -366,12 +366,18 @@ var Pivot = }; + +