import React, { useContext, useState } from 'react'; import ls from './ContextualControls.less'; import Fa from 'ui/components/Fa'; import { matchAvailableActions } from "../actions"; import { useStream } from "ui/effects"; import { MatchIndex, matchSelection } from "../selectionMatcher"; import { ConstraintButton, GeneratorButton } from "./ConstraintExplorer"; import { Columnizer } from "ui/components/Columnizer"; import { NoIcon } from "../icons/NoIcon"; import { SketcherAppContext } from "./SketcherAppContext"; import cx from 'classnames'; export function ContextualControls() { const selection = useStream(ctx => ctx.viewer.streams.selection); const ___ = useStream(ctx => ctx.viewer.parametricManager.$update); const ctx = useContext(SketcherAppContext); const [modification, setModification] = useState(0); if (selection.length === 0) { return null; } const obj = selection.length === 1 ? selection[0] : null; const availableActions = matchAvailableActions(selection); const nonInternalConstraints = obj && Array.from(obj.constraints).filter(c => !c.internal); const setRole = (obj, role) => { let viewer = ctx.viewer; if (obj.aux) { return; } obj.role = role; viewer.refresh(); }; const tweakRole = (obj) => { let viewer = ctx.viewer; if (obj.role === 'construction') { setRole(obj, null); } else if (obj.role === null) { setRole(obj, 'construction'); } viewer.refresh(); //don't know what the side effects of not having this are. // code taken from jsketcher/web/app/sketcher/components/SketchObjectExplorer.jsx setModification(count => count + 1); }; const getObjectRole = (o) => { if (o.aux) { return B } else if (o.role === 'construction') { return tweakRole(o)} title="construction object not used for 3D operations" className={cx(ls.objectRole, ls.construction)}>C } else { return tweakRole(o)} title="sketch object participates in 3D operations" className={cx(ls.objectRole, ls.sketch)}>S } }; function ObjectIcon({ object }) { const Icon = object.icon; return ; } function getClassName() { return null; } return
{ selection.map(s =>
{getObjectRole(s)} tweakSelection(s, e.shiftKey)} className={cx(ls.objectTag, s.marked && ls.selected)}>{s.simpleClassName} {s.id}
) }
AVAILABLE ACTIONS:
{ availableActions.map(a => { const Icon = a.icon || NoIcon; return }) }
{ nonInternalConstraints && nonInternalConstraints.length !== 0 && <>
PARTICIPATES IN CONSTRAINTS:
{nonInternalConstraints.map(c => )} } { obj && obj.generators.size !== 0 && <>
PARTICIPATES IN GENERATORS:
{Array.from(obj.generators).map(c => )} } { obj && obj.generator && <>
GENERATED BY:
}
; } function debugEgg(obj) { return e => { obj.visitParams(p => console.log(p.toString())); } }