diff --git a/GUI/src/components/FlowElementsPopup/ConditionBuilderContent.tsx b/GUI/src/components/FlowElementsPopup/ConditionBuilderContent.tsx index 59a2fffe8..7229640ef 100644 --- a/GUI/src/components/FlowElementsPopup/ConditionBuilderContent.tsx +++ b/GUI/src/components/FlowElementsPopup/ConditionBuilderContent.tsx @@ -15,7 +15,7 @@ const ConditionBuilderContent: React.FC = () => { const isYesNoQuestion = useServiceStore((state) => state.isYesNoQuestion); const rules = useServiceStore((state) => state.rules); const node = useServiceStore((state) => state.selectedNode); - const seedGroup = node?.data?.rules || (Array.isArray(rules) && rules.length > 0 ? rules : undefined); + const seedGroup = node?.data?.rules || (rules && rules.children.length > 0 ? rules : undefined); return ( @@ -34,7 +34,7 @@ const ConditionBuilderContent: React.FC = () => { {isYesNoQuestion && } {!isYesNoQuestion && ( useServiceStore.getState().changeRulesNode(group.children)} + onChange={(group: Group) => useServiceStore.getState().changeRulesNode(group)} seedGroup={seedGroup} /> )} diff --git a/GUI/src/components/FlowElementsPopup/ConditionContent.tsx b/GUI/src/components/FlowElementsPopup/ConditionContent.tsx index 2fdb6fac0..e18c33451 100644 --- a/GUI/src/components/FlowElementsPopup/ConditionContent.tsx +++ b/GUI/src/components/FlowElementsPopup/ConditionContent.tsx @@ -14,12 +14,12 @@ type ConditionContentProps = { const ConditionContent: FC = ({ node }) => { const rules = useServiceStore((state) => state.rules); - const seedGroup = node.data?.rules || (Array.isArray(rules) && rules.length > 0 ? rules : undefined); + const seedGroup = node.data?.rules || (rules && rules.children.length > 0 ? rules : undefined); return ( useServiceStore.getState().changeRulesNode(group.children)} + onChange={(group: Group) => useServiceStore.getState().changeRulesNode(group)} seedGroup={seedGroup} /> diff --git a/GUI/src/components/FlowElementsPopup/RuleBuilder/ConnectorToggle.tsx b/GUI/src/components/FlowElementsPopup/RuleBuilder/ConnectorToggle.tsx new file mode 100644 index 000000000..222fb2381 --- /dev/null +++ b/GUI/src/components/FlowElementsPopup/RuleBuilder/ConnectorToggle.tsx @@ -0,0 +1,41 @@ +import { Track } from 'components'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { GroupType } from './types'; + +interface ConnectorToggleProps { + readonly connector: GroupType; + readonly connectorNot: boolean; + readonly onChangeConnector: (connector: GroupType) => void; + readonly onToggleNot: () => void; +} + +const ConnectorToggle: React.FC = ({ + connector, + connectorNot, + onChangeConnector, + onToggleNot, +}) => { + const { t } = useTranslation(); + + const notButtonClassName = connectorNot ? 'rule-red' : 'rule-gray'; + const andButtonClassName = connector === 'and' ? 'rule-green' : 'rule-gray'; + const orButtonClassName = connector === 'or' ? 'rule-green' : 'rule-gray'; + + return ( + + + + + + ); +}; + +export default ConnectorToggle; diff --git a/GUI/src/components/FlowElementsPopup/RuleBuilder/index.tsx b/GUI/src/components/FlowElementsPopup/RuleBuilder/index.tsx index 5e3314247..9fbc2eaaf 100644 --- a/GUI/src/components/FlowElementsPopup/RuleBuilder/index.tsx +++ b/GUI/src/components/FlowElementsPopup/RuleBuilder/index.tsx @@ -3,8 +3,9 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { MdDeleteOutline } from 'react-icons/md'; +import ConnectorToggle from './ConnectorToggle'; import RuleElement from './ruleElement'; -import { Group, isInstanceOfRule, Rule, RuleGroupBuilderProps } from './types'; +import { Group, GroupOrRule, isInstanceOfRule, Rule, RuleGroupBuilderProps } from './types'; import { useRuleBuilder } from './useRuleBuilder'; import '../styles.scss'; @@ -17,8 +18,8 @@ const RuleBuilder: React.FC = ({ group, onRemove, onChang addGroup, remove, toggleNot, - changeToAnd, - changeToOr, + changeConnector, + toggleConnectorNot, changeRule, onSubGroupChange, } = useRuleBuilder({ @@ -28,8 +29,6 @@ const RuleBuilder: React.FC = ({ group, onRemove, onChang seedGroup, }); - const andButtonClassName = groupInfo.type === 'and' ? 'rule-green' : 'rule-gray'; - const orButtonClassName = groupInfo.type === 'or' ? 'rule-green' : 'rule-gray'; const notButtonClassName = groupInfo.not ? 'rule-red' : 'rule-gray'; return ( @@ -39,12 +38,6 @@ const RuleBuilder: React.FC = ({ group, onRemove, onChang - -