You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.3 KiB
44 lines
1.3 KiB
import React from 'react'; |
|
import QBOrBlock from './QBOrBlock'; |
|
import QBAndBlock from './QBAndBlock'; |
|
import { QueryNodeElem, QueryNodeOp, QueryElem, isNodeElem, simplify } from '../../lib/query/Query'; |
|
import { QBQueryLeafElem } from './QBQueryLeafElem'; |
|
import { QBQueryElem } from './QBQueryElem'; |
|
import { O_APPEND } from 'constants'; |
|
|
|
export interface NodeProps { |
|
elem: QueryNodeElem, |
|
onReplace: (q: QueryElem | null) => void, |
|
editingQuery: boolean, |
|
} |
|
|
|
export function QBQueryNodeElem(props: NodeProps) { |
|
let e = props.elem; |
|
|
|
const onReplace = (idx: number, q: QueryElem | null) => { |
|
var ops = e.operands; |
|
if (q) { |
|
ops[idx] = q; |
|
} else { |
|
ops.splice(idx, 1); |
|
} |
|
let newNode = simplify({ operands: ops, nodeOp: e.nodeOp }); |
|
props.onReplace(newNode); |
|
} |
|
|
|
const children = e.operands.map((o: any, idx: number) => { |
|
return <QBQueryElem |
|
elem={o} |
|
onReplace={(q: QueryElem | null) => onReplace(idx, q)} |
|
editingQuery={props.editingQuery} |
|
/> |
|
}); |
|
|
|
if (e.nodeOp == QueryNodeOp.And) { |
|
return <QBAndBlock>{children}</QBAndBlock> |
|
} else if (e.nodeOp == QueryNodeOp.Or) { |
|
return <QBOrBlock>{children}</QBOrBlock> |
|
} |
|
|
|
throw "Unsupported node element"; |
|
} |