diff --git a/src/components/CellTree/CellCluster/index.tsx b/src/components/CellTree/CellCluster/index.tsx index 9849843..5cfc19c 100644 --- a/src/components/CellTree/CellCluster/index.tsx +++ b/src/components/CellTree/CellCluster/index.tsx @@ -7,6 +7,7 @@ import styles from './CellCluster.module.css' import Collapsible from '../../common/Collapsible' import CollapsibleCell from '../CollapsibleCell' import { faChevronRight } from '@fortawesome/free-solid-svg-icons' +import SelectPlus from '../../common/SelectPlus' export interface CellClusterProps { node: IMargoNotebookParentNode @@ -51,24 +52,51 @@ export default function CellCluster(props: CellClusterProps) { icon={faChevronRight} collapsedLabel={`Child Cells (${props.node.children.length.toString()})`} > - {props.node.children.map((node, idx) => ( - props.handleToggleCellType(node)} - handleMoveCellUp={() => { - props.handleMoveCellUp(node) - }} - handleMoveCellDown={() => { - props.handleMoveCellDown(node) - }} - label={`${node.relationshipToParent}: ${node.parentNode.id}`} - handleAddCell={() => { - props.handleAddChildCell(props.node) - }} - node={node} - key={idx} - handleDeleteCell={() => props.handleDeleteCell(node)} - /> - ))} + {props.node.children.map((node, idx) => { + const relTypes: Array = Array.from( + new Set([node.relationshipToParent, 'tests', 'documents']) + ) + + return ( + { + // TODO - sanitize input and set value + console.log( + "You've changed the parent relationship to", + (node.relationshipToParent = rel) + ) + // TODO - This is a pretty quick hack. Should add a + // proper callback on Editor to handle this or + // add a general force refresh/update model kind of thing + // that allows these kind of arbitrary model hacks to + // force a re-render + props.handleToggleCellType(node) + props.handleToggleCellType(node) + }} + items={relTypes} + /> + } + handleToggleCellType={() => props.handleToggleCellType(node)} + handleMoveCellUp={() => { + props.handleMoveCellUp(node) + }} + handleMoveCellDown={() => { + props.handleMoveCellDown(node) + }} + label={`${node.relationshipToParent}: ${node.parentNode.id}`} + handleAddCell={() => { + props.handleAddChildCell(props.node) + }} + node={node} + key={idx} + handleDeleteCell={() => props.handleDeleteCell(node)} + /> + ) + })} ) : null} diff --git a/src/components/CellTree/CellWrapper/CellWrapper.module.css b/src/components/CellTree/CellWrapper/CellWrapper.module.css index 4baddde..903ca2b 100644 --- a/src/components/CellTree/CellWrapper/CellWrapper.module.css +++ b/src/components/CellTree/CellWrapper/CellWrapper.module.css @@ -31,4 +31,5 @@ padding-bottom: 3px; border-bottom: 5px solid #ddd; margin-bottom: 5px; + font-size: 9px; } \ No newline at end of file diff --git a/src/components/CellTree/CellWrapper/index.tsx b/src/components/CellTree/CellWrapper/index.tsx index 926c631..2567b01 100644 --- a/src/components/CellTree/CellWrapper/index.tsx +++ b/src/components/CellTree/CellWrapper/index.tsx @@ -11,6 +11,7 @@ export interface CellWrapperProps { node: IMargoNotebookNode handleDelete: () => void handleToggleCellType: () => void + controls?: JSX.Element } /** @@ -22,6 +23,7 @@ const CellWrapper: React.FunctionComponent = (props) => { return (
+ {props.controls}
void +} + +const SelectPlusItem: React.FunctionComponent = ( + props +) => { + const { onClick } = props + return ( +
+ {props.children} +
+ ) +} + +export interface SelectPlusProps { + title?: string + items: Array + selectedIndex: number + addItem: (newItem: string) => void +} + +export default function SelectPlus(props: SelectPlusProps) { + const { items, addItem, selectedIndex, title } = props + + const promptForNewValue = () => { + const newRel = prompt(title, items[selectedIndex]) + if (newRel === null) { + return + } + + addItem(newRel) + } + return ( +
+
{title ? title + ':' : null}
+
+
+ {items.map((item: string, idx: number) => { + return ( + addItem(item)} key={idx}> + {item} + + ) + })} + + new + +
+
+
+ ) +}