Skip to content

Commit e0dc3c0

Browse files
authored
Merge pull request #1022
* fix(30991): fix a bug with the reference to the object to validate * fix(30991): fix status update of visited node * fix(30991): fix status * fix(30991): fix schema for the topic filter node * fix(30991): fix loading of panel * fix(30991): add a debug message
1 parent 942fd34 commit e0dc3c0

File tree

5 files changed

+48
-23
lines changed

5 files changed

+48
-23
lines changed

hivemq-edge-frontend/src/extensions/datahub/api/__generated__/schemas/TopicFilterData.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

hivemq-edge-frontend/src/extensions/datahub/components/toolbar/ToolbarDryRun.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,37 @@ import type { FC } from 'react'
22
import { useMemo } from 'react'
33
import { useTranslation } from 'react-i18next'
44
import { Button, Icon } from '@chakra-ui/react'
5+
import type { Node } from '@xyflow/react'
56

67
import { usePolicyDryRun } from '@datahub/hooks/usePolicyDryRun.ts'
78
import { usePolicyChecksStore } from '@datahub/hooks/usePolicyChecksStore.ts'
9+
import useDataHubDraftStore from '@datahub/hooks/useDataHubDraftStore.ts'
810
import { getDryRunStatusIcon } from '@datahub/utils/node.utils.ts'
9-
import { PolicyDryRunStatus } from '@datahub/types.ts'
11+
import type { DataPolicyData } from '@datahub/types.ts'
12+
import { type BehaviorPolicyData, DataHubNodeType, PolicyDryRunStatus } from '@datahub/types.ts'
1013
import { usePolicyGuards } from '@datahub/hooks/usePolicyGuards.ts'
1114

1215
export const ToolbarDryRun: FC = () => {
1316
const { t } = useTranslation('datahub')
1417
const { checkPolicyAsync } = usePolicyDryRun()
1518
const { isPolicyEditable } = usePolicyGuards()
1619
const { status, node: selectedNode, initReport, setReport } = usePolicyChecksStore()
20+
const { nodes: allNodes } = useDataHubDraftStore()
1721

1822
const CheckIcon = useMemo(() => getDryRunStatusIcon(status), [status])
1923

2024
const handleCheckPolicy = () => {
2125
if (!selectedNode) return
2226

27+
const target = allNodes.find(
28+
(node: Node): node is Node<BehaviorPolicyData> | Node<DataPolicyData> =>
29+
node.id === selectedNode.id &&
30+
(node.type === DataHubNodeType.DATA_POLICY || node.type === DataHubNodeType.BEHAVIOR_POLICY)
31+
)
32+
if (!target) return
33+
2334
initReport()
24-
checkPolicyAsync(selectedNode).then((results): void => {
35+
checkPolicyAsync(target).then((results): void => {
2536
setReport(results)
2637
})
2738
}
Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
import type { FC } from 'react'
22
import { useMemo } from 'react'
3+
import type { CustomValidator } from '@rjsf/utils'
34
import type { Node } from '@xyflow/react'
45
import { useTranslation } from 'react-i18next'
56
import { Card, CardBody } from '@chakra-ui/react'
67

7-
import type { DataPolicyData, PanelProps } from '@datahub/types.ts'
8-
import useDataHubDraftStore from '@datahub/hooks/useDataHubDraftStore.ts'
8+
import LoaderSpinner from '@/components/Chakra/LoaderSpinner.tsx'
9+
import ErrorMessage from '@/components/ErrorMessage.tsx'
10+
11+
import { useGetAllDataPolicies } from '@datahub/api/hooks/DataHubDataPoliciesService/useGetAllDataPolicies.ts'
912
import { ReactFlowSchemaForm } from '@datahub/components/forms/ReactFlowSchemaForm.tsx'
1013
import { MOCK_DATA_POLICY_SCHEMA } from '@datahub/designer/data_policy/DataPolicySchema.ts'
11-
import type { CustomValidator } from '@rjsf/utils'
12-
import { useGetAllDataPolicies } from '@datahub/api/hooks/DataHubDataPoliciesService/useGetAllDataPolicies.ts'
14+
import useDataHubDraftStore from '@datahub/hooks/useDataHubDraftStore.ts'
1315
import { usePolicyGuards } from '@datahub/hooks/usePolicyGuards.ts'
14-
import ErrorMessage from '@/components/ErrorMessage.tsx'
16+
import type { DataPolicyData, PanelProps } from '@datahub/types.ts'
1517

1618
export const DataPolicyPanel: FC<PanelProps> = ({ selectedNode, onFormSubmit }) => {
1719
const { t } = useTranslation('datahub')
1820
const { nodes } = useDataHubDraftStore()
19-
const { data: allPolicies } = useGetAllDataPolicies()
21+
const { data: allPolicies, isLoading, isError } = useGetAllDataPolicies()
2022
const { guardAlert, isNodeEditable } = usePolicyGuards(selectedNode)
2123

2224
const data = useMemo(() => {
@@ -25,8 +27,8 @@ export const DataPolicyPanel: FC<PanelProps> = ({ selectedNode, onFormSubmit })
2527
}, [selectedNode, nodes])
2628

2729
const customValidate: CustomValidator<DataPolicyData> = (formData, errors) => {
28-
if (!allPolicies) errors['id']?.addError(t('error.validation.dataPolicy.notLoading'))
29-
else {
30+
if (isError) errors['id']?.addError(t('error.validation.dataPolicy.notLoading'))
31+
else if (allPolicies) {
3032
const isIdNotUnique = Boolean(allPolicies.items?.find((e) => e.id === formData?.id))
3133
if (isIdNotUnique) errors['id']?.addError(t('error.validation.dataPolicy.notUnique'))
3234
}
@@ -35,17 +37,20 @@ export const DataPolicyPanel: FC<PanelProps> = ({ selectedNode, onFormSubmit })
3537

3638
return (
3739
<Card>
40+
{isLoading && <LoaderSpinner />}
3841
{guardAlert && <ErrorMessage status="info" type={guardAlert.title} message={guardAlert.description} />}
39-
<CardBody>
40-
<ReactFlowSchemaForm
41-
isNodeEditable={isNodeEditable}
42-
schema={MOCK_DATA_POLICY_SCHEMA.schema}
43-
uiSchema={MOCK_DATA_POLICY_SCHEMA.uiSchema}
44-
formData={data}
45-
onSubmit={onFormSubmit}
46-
customValidate={customValidate}
47-
/>
48-
</CardBody>
42+
{!isLoading && (
43+
<CardBody>
44+
<ReactFlowSchemaForm
45+
isNodeEditable={isNodeEditable}
46+
schema={MOCK_DATA_POLICY_SCHEMA.schema}
47+
uiSchema={MOCK_DATA_POLICY_SCHEMA.uiSchema}
48+
formData={data}
49+
onSubmit={onFormSubmit}
50+
customValidate={customValidate}
51+
/>
52+
</CardBody>
53+
)}
4954
</Card>
5055
)
5156
}

hivemq-edge-frontend/src/extensions/datahub/hooks/usePolicyDryRun.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { Node } from '@xyflow/react'
22
import { getIncomers } from '@xyflow/react'
3+
import debug from 'debug'
34

45
import type { PolicySchema, Script } from '@/api/__generated__'
56

@@ -27,6 +28,8 @@ import { checkValidityTransitions } from '@datahub/designer/transition/Transitio
2728
import { checkValidityPipeline } from '@datahub/designer/operation/OperationNode.utils.ts'
2829
import { useFilteredFunctionsFetcher } from '@datahub/hooks/useFilteredFunctionsFetcher.tsx'
2930

31+
const datahubLog = debug('DataHub:usePolicyDryRun')
32+
3033
/* istanbul ignore next -- @preserve */
3134
const mockDelay = (ms = 100) => new Promise((resolve) => setTimeout(resolve, ms))
3235

@@ -52,14 +55,19 @@ export const usePolicyDryRun = () => {
5255

5356
const updateNodeStatus = async (results: DryRunResults<unknown>) => {
5457
const currentNode = nodes.find((node) => node.id === results.node.id)
58+
if (!currentNode) {
59+
datahubLog(`Node with ID ${results.node.id} not found in the current nodes list`)
60+
return
61+
}
5562

5663
const getStatus = (): PolicyDryRunStatus => {
5764
if (results.error) return PolicyDryRunStatus.FAILURE
65+
// If current node was already marked as failure, keep it
5866
if (currentNode?.data.dryRunStatus === PolicyDryRunStatus.FAILURE) return PolicyDryRunStatus.FAILURE
5967
return PolicyDryRunStatus.SUCCESS
6068
}
61-
onUpdateNodes<DataHubNodeData>(results.node.id, {
62-
...results.node.data,
69+
onUpdateNodes<DataHubNodeData>(currentNode.id, {
70+
...currentNode.data,
6371
dryRunStatus: getStatus(),
6472
})
6573
await mockDelay(DRYRUN_VALIDATION_DELAY)
@@ -98,7 +106,6 @@ export const usePolicyDryRun = () => {
98106
const schemaResources = validators.reduce(onlyNonNullResources, [] as DryRunResults<PolicySchema>[])
99107
const allResources = [...successResources, ...errorResources, ...schemaResources].reduce(onlyUniqueResources, [])
100108

101-
// TODO[29953] This is not enough, potential BehaviorPolicyTransitionEvent needs to be passed
102109
const allConfigurations = checkValidityConfigurations(allNodes, getFilteredFunctions(DataHubNodeType.DATA_POLICY))
103110

104111
const processedNodes = [

hivemq-edge-frontend/src/extensions/datahub/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export interface WorkspaceAction {
6969
}
7070

7171
export interface PolicyCheckState {
72+
// TODO[30991] The bug is fixed but replace with a reference to the id, NOT the node itself!
7273
node?: Node
7374
status?: PolicyDryRunStatus
7475
report?: DryRunResults<unknown, never>[]

0 commit comments

Comments
 (0)