import { ConditionNode, ConditionClause, ConditionOp } from '../../../types/dialogue'; import { useDialogueStore } from '../../../store/dialogueStore'; import { useValidation } from '../../../hooks/useValidation'; import styles from '../RightPanel.module.css'; const OPS: ConditionOp[] = ['Equals', 'NotEquals', 'GreaterThan', 'LessThan']; interface Props { node: ConditionNode; dialogueId: string; } export function ConditionInspector({ node, dialogueId }: Props) { const { updateNode, deleteNode, file } = useDialogueStore(); const { issuesByNodeId } = useValidation(); const issues = issuesByNodeId[node.id] ?? []; const dialogue = file?.dialogues.find(d => d.id === dialogueId); const nodeIds = dialogue?.nodes.map(n => n.id) ?? []; function updateClause(idx: number, patch: Partial) { const conditions = node.conditions.map((c, i) => i === idx ? { ...c, ...patch } : c); updateNode(dialogueId, node.id, { conditions }); } function addClause() { const conditions: ConditionClause[] = [...node.conditions, { flag: '', op: 'Equals', value: 1 }]; updateNode(dialogueId, node.id, { conditions }); } function removeClause(idx: number) { const conditions = node.conditions.filter((_, i) => i !== idx); updateNode(dialogueId, node.id, { conditions }); } return (
Condition {node.id}
{issues.length > 0 && (
{issues.map((issue, i) => (
{issue.severity === 'error' ? 'âš ' : '!'} {issue.message}
))}
)}
Conditions (ALL must pass)
{node.conditions.map((c, idx) => (
updateClause(idx, { flag: e.target.value })} /> updateClause(idx, { value: isNaN(Number(e.target.value)) ? e.target.value : Number(e.target.value) })} />
))} {node.conditions.length === 0 &&
No conditions. Always true.
}
updateNode(dialogueId, node.id, { trueNext: e.target.value })} list={`nodelist-true-${node.id}`} /> {nodeIds.map(id =>
updateNode(dialogueId, node.id, { falseNext: e.target.value })} list={`nodelist-false-${node.id}`} /> {nodeIds.map(id =>
); }