diff --git a/components.js b/components.js new file mode 100644 index 0000000..d9d1135 --- /dev/null +++ b/components.js @@ -0,0 +1,221 @@ +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 Styles = { + Form:css` + position:realtive; + box-sizing: border-box; + padding: 10px; + color:black; + font-family:sans-serif; + + .Title + { + font-size:24px; + font-weight:100; + } + + .Section + { + padding:10px 0 10px 0; + + .Heading + { + display:inline-block; + color:#666; + font-family:sans-serif; + font-size:12px; + font-weight:900; + text-transform:uppercase; + } + .Group + { + display:inline-block; + padding:5px; + border-radius:5px; + margin:3px; + background:rgba(0, 0, 0, 0.3) + } + } + ` +}; + +let PivotForm = 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 = sumColumns.map(node=>node.Meta.Index); + //let indiciesSum = sumColumnsUsed.map(node=>node.Meta.Index); + + let displayPivotsAll = html` +
+
Available Columns
+
+ ${pivotColumns.map( columnPivot => + { + let attributes = {}; + if(N.Step(columnPivot, "used-pivot", false)) + { + attributes.disabled = true; + } + else + { + attributes.onClick = e=> + { + N.Connect(Pivot.Proto, columnPivot, "used-pivot"); + Render(); + } + } + return html``; + })} +
+
+ `; + + let displayPivotsPending = null; + if(pivotColumnsUsed.length) + { + displayPivotsPending = html` +
+
Pending Pivot
+
+ ${pivotColumnsUsed.map(columnPivot=>html` + + `)} +
+ + +
+ `; + } + + return html` +
+
Create New Pivot
+ ${displayPivotsAll} + ${displayPivotsPending} +
+ `; +} + +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, PivotForm}; \ No newline at end of file diff --git a/index.html b/index.html index 4f3e5bc..4879633 100755 --- a/index.html +++ b/index.html @@ -283,10 +283,10 @@ var Pivot = { N.ID.Walk++; - let names = N.Step(Pivot.Schema, "label"); + let columns = N.Step(Pivot.Schema, "all"); let label = inPivotIndicies.map( inPivotIndex => { - return names[inPivotIndex].Meta.Label; + return columns[inPivotIndex].Meta.Label; }); let pivotRoot = N.Create({Label:label.join("|"), Leaves:Pivot.Leaves}); @@ -366,15 +366,21 @@ var Pivot = }; + +