Skip to content

Commit daaa933

Browse files
authored
fix(21115): re-enable behaviour policy (#369)
* feat(21115): enable behaviour policies * fix(21115): fix location of transition nodes * fix(21115): fix extraction of transition terminal status
1 parent e3c37ae commit daaa933

File tree

6 files changed

+36
-38
lines changed

6 files changed

+36
-38
lines changed

hivemq-edge/src/frontend/src/extensions/datahub/components/controls/ToolboxNodes.spec.cy.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ describe('Toolbox', () => {
1212

1313
cy.getByAriaLabel('Policy controls').find('[role="group"]').as('policyControlsGroups')
1414

15-
// Behavior policy disabled, see VITE_FLAG_DATAHUB_BEHAVIOR_ENABLED
16-
cy.get('@policyControlsGroups').should('have.length', 3)
15+
cy.get('@policyControlsGroups').should('have.length', 4)
1716
cy.get('@policyControlsGroups').eq(0).should('contain.text', 'Pipeline')
1817
cy.get('@policyControlsGroups').eq(1).should('contain.text', 'Data Policy')
19-
// cy.get('@policyControlsGroups').eq(2).should('contain.text', 'Behavior Policy')
20-
cy.get('@policyControlsGroups').eq(2).should('contain.text', 'Operation')
18+
cy.get('@policyControlsGroups').eq(2).should('contain.text', 'Behavior Policy')
19+
cy.get('@policyControlsGroups').eq(3).should('contain.text', 'Operation')
2120
})
2221
})

hivemq-edge/src/frontend/src/extensions/datahub/components/controls/ToolboxNodes.tsx

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ export const ToolboxNodes = () => {
88
const { t } = useTranslation('datahub')
99
const { nodes, status } = useDataHubDraftStore()
1010

11-
const isBehaviorPolicyEnabled = import.meta.env.VITE_FLAG_DATAHUB_BEHAVIOR_ENABLED === 'true'
1211
const isEditEnabled =
1312
import.meta.env.VITE_FLAG_DATAHUB_EDIT_POLICY_ENABLED === 'true' || status === DesignerStatus.DRAFT
1413
const isDraftEmpty = nodes.length === 0
@@ -26,9 +25,7 @@ export const ToolboxNodes = () => {
2625
<Text id="group-pipeline">{t('workspace.toolbox.group.pipeline')}</Text>
2726
<HStack>
2827
<Tool nodeType={DataHubNodeType.TOPIC_FILTER} isDisabled={isDraftEmpty || !isEditEnabled} />
29-
{isBehaviorPolicyEnabled && (
30-
<Tool nodeType={DataHubNodeType.CLIENT_FILTER} isDisabled={isDraftEmpty || !isEditEnabled} />
31-
)}
28+
<Tool nodeType={DataHubNodeType.CLIENT_FILTER} isDisabled={isDraftEmpty || !isEditEnabled} />
3229
</HStack>
3330
</VStack>
3431
</ButtonGroup>
@@ -42,17 +39,15 @@ export const ToolboxNodes = () => {
4239
</HStack>
4340
</VStack>
4441
</ButtonGroup>
45-
{isBehaviorPolicyEnabled && (
46-
<ButtonGroup variant="outline" size="sm" aria-labelledby="group-behaviorPolicy">
47-
<VStack alignItems="flex-start">
48-
<Text id="group-behaviorPolicy">{t('workspace.toolbox.group.behaviorPolicy')}</Text>
49-
<HStack>
50-
<Tool nodeType={DataHubNodeType.BEHAVIOR_POLICY} isDisabled={!isEditEnabled} />
51-
<Tool nodeType={DataHubNodeType.TRANSITION} isDisabled={isDraftEmpty || !isEditEnabled} />
52-
</HStack>
53-
</VStack>
54-
</ButtonGroup>
55-
)}
42+
<ButtonGroup variant="outline" size="sm" aria-labelledby="group-behaviorPolicy">
43+
<VStack alignItems="flex-start">
44+
<Text id="group-behaviorPolicy">{t('workspace.toolbox.group.behaviorPolicy')}</Text>
45+
<HStack>
46+
<Tool nodeType={DataHubNodeType.BEHAVIOR_POLICY} isDisabled={!isEditEnabled} />
47+
<Tool nodeType={DataHubNodeType.TRANSITION} isDisabled={isDraftEmpty || !isEditEnabled} />
48+
</HStack>
49+
</VStack>
50+
</ButtonGroup>
5651
<ButtonGroup variant="outline" size="sm" aria-labelledby="group-operation">
5752
<VStack alignItems="flex-start" pr={2}>
5853
<Text id="group-operation">{t('workspace.toolbox.group.operation')}</Text>

hivemq-edge/src/frontend/src/extensions/datahub/components/pages/DataHubListings.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ const DataHubListings: FC = () => {
2525
const { isOpen: isConfirmDeleteOpen, onOpen: onConfirmDeleteOpen, onClose: onConfirmDeleteClose } = useDisclosure()
2626
const [deleteItem, setDeleteItem] = useState<DeleteMutationRequest | undefined>(undefined)
2727
const toast = useToast()
28-
const isBehaviorPolicyEnabled = import.meta.env.VITE_FLAG_DATAHUB_BEHAVIOR_ENABLED === 'true'
2928

3029
const handleConfirmOnClose = () => {
3130
onConfirmDeleteClose()
@@ -77,9 +76,7 @@ const DataHubListings: FC = () => {
7776

7877
<TabPanels>
7978
<TabPanel>
80-
<Text mb={3}>
81-
{t('Listings.tabs.policy.description')} {!isBehaviorPolicyEnabled && t('flag.behaviorPolicy.notEnabled')}
82-
</Text>
79+
<Text mb={3}>{t('Listings.tabs.policy.description')}</Text>
8380

8481
<PolicyTable onDeleteItem={handleOnDelete} />
8582
</TabPanel>

hivemq-edge/src/frontend/src/extensions/datahub/components/pages/PolicyTable.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ const PolicyTable: FC<DataHubTableProps> = ({ onDeleteItem }) => {
3535
const navigate = useNavigate()
3636
const deleteDataPolicy = useDeleteDataPolicy()
3737
const deleteBehaviourPolicy = useDeleteBehaviorPolicy()
38-
const isBehaviorPolicyEnabled = import.meta.env.VITE_FLAG_DATAHUB_BEHAVIOR_ENABLED === 'true'
3938

4039
const isError = useMemo(() => {
4140
return isDataError || isBehaviorError
@@ -56,11 +55,11 @@ const PolicyTable: FC<DataHubTableProps> = ({ onDeleteItem }) => {
5655
...(dataPolicies?.items
5756
? dataPolicies.items.map((e) => ({ ...e, type: PolicyType.DATA_POLICY } as CombinedPolicy))
5857
: []),
59-
...(isBehaviorPolicyEnabled && behaviorPolicies?.items
58+
...(behaviorPolicies?.items
6059
? behaviorPolicies.items.map((e) => ({ ...e, type: PolicyType.BEHAVIOR_POLICY } as CombinedPolicy))
6160
: []),
6261
]
63-
}, [isLoading, dataPolicies?.items, isBehaviorPolicyEnabled, behaviorPolicies?.items])
62+
}, [isLoading, dataPolicies?.items, behaviorPolicies?.items])
6463

6564
const columns = useMemo<ColumnDef<CombinedPolicy>[]>(() => {
6665
const onHandleDelete = (info: CellContext<CombinedPolicy, unknown>) => {

hivemq-edge/src/frontend/src/extensions/datahub/designer/checks.utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export const CANVAS_POSITION = {
55
Client: { x: -300, y: 0 } as XYPosition,
66
Topic: { x: -300, y: 0 } as XYPosition,
77
Function: { x: 0, y: -275 } as XYPosition,
8-
Transition: { x: 350, y: -100 } as XYPosition,
8+
Transition: { x: 400, y: 100 } as XYPosition,
99
Schema: { x: 0, y: -150 } as XYPosition,
1010
Validator: { x: 0, y: -150 } as XYPosition,
1111
OperationSuccess: { x: 200, y: 0 } as XYPosition,

hivemq-edge/src/frontend/src/extensions/datahub/designer/transition/TransitionNode.utils.ts

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,25 @@ import {
99
Script,
1010
} from '@/api/__generated__'
1111
import i18n from '@/config/i18n.config.ts'
12+
import { enumFromStringValue } from '@/utils/types.utils.ts'
1213

1314
import {
1415
BehaviorPolicyData,
1516
BehaviorPolicyType,
1617
DataHubNodeType,
1718
DryRunResults,
19+
FiniteStateMachineSchema,
1820
StateType,
1921
TransitionData,
2022
TransitionType,
2123
WorkspaceAction,
2224
WorkspaceState,
2325
} from '@datahub/types.ts'
2426
import { PolicyCheckErrors } from '@datahub/designer/validation.errors.ts'
25-
2627
import { checkValidityPipeline, loadBehaviorPolicyPipelines } from '@datahub/designer/operation/OperationNode.utils.ts'
27-
import { getNodeId, isTransitionNodeType } from '@datahub/utils/node.utils.ts'
28-
import { enumFromStringValue } from '@/utils/types.utils.ts'
2928
import { CANVAS_POSITION } from '@datahub/designer/checks.utils.ts'
29+
import { MOCK_BEHAVIOR_POLICY_SCHEMA } from '@datahub/designer/behavior_policy/BehaviorPolicySchema.ts'
30+
import { getNodeId, isTransitionNodeType } from '@datahub/utils/node.utils.ts'
3031

3132
export function checkValidityTransitions(
3233
behaviorPolicyData: Node<BehaviorPolicyData>,
@@ -94,13 +95,22 @@ export const getActiveTransition = (transition: BehaviorPolicyOnTransition) => {
9495
}
9596

9697
const extractEventStates = (
98+
model: BehaviorPolicyType,
9799
behaviorPolicyTransition: BehaviorPolicyOnTransition
98-
): Pick<TransitionData, 'event' | 'from' | 'to'> => {
99-
// return { event: TransitionType.ON_INBOUND_DISCONNECT, from: StateType.Publishing, to: StateType.Violated }
100+
): TransitionData => {
101+
const definition = MOCK_BEHAVIOR_POLICY_SCHEMA.schema.definitions?.[model]
102+
const { metadata } = definition as FiniteStateMachineSchema
103+
const { states } = metadata
104+
105+
const to = enumFromStringValue(StateType, behaviorPolicyTransition.toState)
106+
const endState = states.find((state) => state.name === to)
107+
100108
return {
109+
model: model,
101110
event: enumFromStringValue(TransitionType, getActiveTransition(behaviorPolicyTransition) || ''),
102111
from: enumFromStringValue(StateType, behaviorPolicyTransition.fromState),
103-
to: enumFromStringValue(StateType, behaviorPolicyTransition.toState),
112+
to,
113+
type: endState?.type,
104114
}
105115
}
106116

@@ -119,9 +129,10 @@ export const loadTransitions = (
119129
const model = enumFromStringValue(BehaviorPolicyType, behaviorPolicy.behavior.id)
120130
if (!model) throw new Error(i18n.t('datahub:error.loading.behavior.noModel') as string)
121131

132+
const delta = ((Math.max(behaviorPolicy.onTransitions?.length || 0, 1) - 1) * CANVAS_POSITION.Transition.y) / 2
122133
const position: XYPosition = {
123134
x: BehaviorPolicyNode.position.x + CANVAS_POSITION.Transition.x,
124-
y: BehaviorPolicyNode.position.y + CANVAS_POSITION.Transition.y,
135+
y: BehaviorPolicyNode.position.y - CANVAS_POSITION.Transition.y - delta,
125136
}
126137

127138
const shiftBottom = () => {
@@ -134,10 +145,7 @@ export const loadTransitions = (
134145
id: getNodeId(),
135146
type: DataHubNodeType.TRANSITION,
136147
position: { ...shiftBottom() },
137-
data: {
138-
model: model,
139-
...extractEventStates(behaviorPolicyTransition),
140-
},
148+
data: extractEventStates(model, behaviorPolicyTransition),
141149
}
142150

143151
onNodesChange([{ item: transitionNode, type: 'add' } as NodeAddChange])

0 commit comments

Comments
 (0)