Skip to content

Commit 8f741af

Browse files
committed
refactor(events-web): improve useParameterValue hook for improved parameter handling
1 parent 61b5e09 commit 8f741af

File tree

3 files changed

+47
-20
lines changed

3 files changed

+47
-20
lines changed

packages/pluggableWidgets/events-web/src/Events.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { EditableValue } from "mendix";
33
import { ReactElement, createElement, useRef } from "react";
44
import { EventsContainerProps } from "../typings/EventsProps";
55
import { useActionTimer } from "./hooks/timer";
6-
import { useDelayAndInterval } from "./hooks/delayAndInterval";
6+
import { useParameterValue } from "./hooks/parameterValue";
77
import "./ui/Events.scss";
88

99
export default function Events(props: EventsContainerProps): ReactElement {
@@ -25,16 +25,20 @@ export default function Events(props: EventsContainerProps): ReactElement {
2525
} = props;
2626
const prevOnChangeAttributeValue = useRef<EditableValue<any> | undefined>();
2727

28-
const [delayValue, intervalValue] = useDelayAndInterval({
29-
componentLoadDelayParameterType,
30-
componentLoadRepeatIntervalParameterType,
31-
onEventChangeDelayParameterType,
32-
componentLoadDelay,
33-
componentLoadRepeatInterval,
34-
onEventChangeDelay,
35-
componentLoadRepeatIntervalExpression,
36-
componentLoadDelayExpression,
37-
onEventChangeDelayExpression
28+
const delayValue = useParameterValue({
29+
parameterType: componentLoadDelayParameterType,
30+
parameterValue: componentLoadDelay,
31+
parameterExpression: componentLoadDelayExpression
32+
});
33+
const intervalValue = useParameterValue({
34+
parameterType: componentLoadRepeatIntervalParameterType,
35+
parameterValue: componentLoadRepeatInterval,
36+
parameterExpression: componentLoadRepeatIntervalExpression
37+
});
38+
const onEventChangeDelayValue = useParameterValue({
39+
parameterType: onEventChangeDelayParameterType,
40+
parameterValue: onEventChangeDelay,
41+
parameterExpression: onEventChangeDelayExpression
3842
});
3943

4044
useActionTimer({
@@ -60,7 +64,7 @@ export default function Events(props: EventsContainerProps): ReactElement {
6064
}
6165
}
6266
},
63-
delay: delayValue,
67+
delay: onEventChangeDelayValue,
6468
interval: 0,
6569
repeat: false,
6670
attribute: onEventChangeAttribute

packages/pluggableWidgets/events-web/src/hooks/delayAndInterval.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ export function useDelayAndInterval(props: ParameterTypeProps): [number | undefi
3232
? componentLoadDelayExpression.value.toNumber()
3333
: undefined;
3434
}
35+
if (onEventChangeDelayParameterType === "number") {
36+
delayValue = onEventChangeDelay;
37+
} else {
38+
delayValue =
39+
onEventChangeDelayExpression?.status === "available" && onEventChangeDelayExpression.value !== undefined
40+
? onEventChangeDelayExpression.value.toNumber()
41+
: undefined;
42+
}
3543
if (componentLoadRepeatIntervalParameterType === "number") {
3644
intervalValue = componentLoadRepeatInterval;
3745
} else {
@@ -41,13 +49,5 @@ export function useDelayAndInterval(props: ParameterTypeProps): [number | undefi
4149
? componentLoadRepeatIntervalExpression.value.toNumber()
4250
: undefined;
4351
}
44-
if (onEventChangeDelayParameterType === "number") {
45-
delayValue = onEventChangeDelay;
46-
} else {
47-
delayValue =
48-
onEventChangeDelayExpression?.status === "available" && onEventChangeDelayExpression.value !== undefined
49-
? onEventChangeDelayExpression.value.toNumber()
50-
: undefined;
51-
}
5252
return [delayValue, intervalValue];
5353
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { useMemo } from "react";
2+
3+
interface parameterValueProps {
4+
parameterType: "number" | "expression";
5+
parameterValue: number | undefined;
6+
parameterExpression: { status: string; value: { toNumber: () => number } | undefined } | undefined;
7+
}
8+
9+
export function useParameterValue({
10+
parameterType,
11+
parameterValue,
12+
parameterExpression
13+
}: parameterValueProps): number | undefined {
14+
return useMemo(() => {
15+
if (parameterType === "number") {
16+
return parameterValue;
17+
}
18+
19+
return parameterExpression?.status === "available" && parameterExpression.value !== undefined
20+
? parameterExpression.value.toNumber()
21+
: undefined;
22+
}, [parameterType, parameterValue, parameterExpression]);
23+
}

0 commit comments

Comments
 (0)