Skip to content

Commit 47709df

Browse files
yordan-stgjulivan
authored andcommitted
feat(events-web): implement useDelayAndInterval hook for managing delay and interval values
1 parent fe5dc3a commit 47709df

File tree

3 files changed

+70
-31
lines changed

3 files changed

+70
-31
lines changed

packages/pluggableWidgets/events-web/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ All notable changes to this widget will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7-
## [1.1.0] - 2025-07-14
7+
## [Unreleased]
88

99
### Added
1010

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

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +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";
67
import "./ui/Events.scss";
78

89
export default function Events(props: EventsContainerProps): ReactElement {
@@ -23,38 +24,24 @@ export default function Events(props: EventsContainerProps): ReactElement {
2324
onEventChangeDelayExpression
2425
} = props;
2526
const prevOnChangeAttributeValue = useRef<EditableValue<any> | undefined>();
26-
let loadDelay;
27-
let repeatInterval;
28-
let onEventChangeDelay;
29-
if (componentLoadDelayParameterType === "number") {
30-
loadDelay = componentLoadDelayInteger;
31-
} else {
32-
loadDelay =
33-
componentLoadDelayExpression.status === "available"
34-
? componentLoadDelayExpression.value.toNumber()
35-
: undefined;
36-
}
37-
if (componentLoadRepeatParameterType === "number") {
38-
repeatInterval = componentLoadRepeatInterval;
39-
} else {
40-
repeatInterval =
41-
componentLoadRepeatExpression?.status === "available"
42-
? componentLoadRepeatExpression.value.toNumber()
43-
: undefined;
44-
}
45-
if (onEventChangeDelayParameterType === "number") {
46-
onEventChangeDelay = onEventChangeDelayInteger;
47-
} else {
48-
onEventChangeDelay =
49-
onEventChangeDelayExpression?.status === "available"
50-
? onEventChangeDelayExpression.value.toNumber()
51-
: undefined;
52-
}
27+
28+
const [delayValue, intervalValue] = useDelayAndInterval({
29+
componentLoadDelayParameterType,
30+
componentLoadRepeatParameterType,
31+
onEventChangeDelayParameterType,
32+
componentLoadDelayInteger,
33+
componentLoadRepeatInterval,
34+
onEventChangeDelayInteger,
35+
componentLoadRepeatExpression,
36+
componentLoadDelayExpression,
37+
onEventChangeDelayExpression
38+
});
39+
5340
useActionTimer({
5441
canExecute: onComponentLoad?.canExecute,
5542
execute: onComponentLoad?.execute,
56-
delay: loadDelay,
57-
interval: repeatInterval,
43+
delay: delayValue,
44+
interval: intervalValue,
5845
repeat: componentLoadRepeat,
5946
attribute: undefined
6047
});
@@ -73,7 +60,7 @@ export default function Events(props: EventsContainerProps): ReactElement {
7360
}
7461
}
7562
},
76-
delay: onEventChangeDelay,
63+
delay: delayValue,
7764
interval: 0,
7865
repeat: false,
7966
attribute: onEventChangeAttribute
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
interface ParameterTypeProps {
2+
componentLoadDelayParameterType: string;
3+
componentLoadRepeatParameterType: string;
4+
onEventChangeDelayParameterType: string;
5+
componentLoadDelayInteger?: number;
6+
componentLoadRepeatInterval?: number;
7+
onEventChangeDelayInteger?: number;
8+
componentLoadRepeatExpression?: { status: string; value: { toNumber: () => number } | undefined };
9+
componentLoadDelayExpression?: { status: string; value: { toNumber: () => number } | undefined };
10+
onEventChangeDelayExpression?: { status: string; value: { toNumber: () => number } | undefined };
11+
}
12+
13+
export function useDelayAndInterval(props: ParameterTypeProps): [number | undefined, number | undefined] {
14+
let delayValue: number | undefined;
15+
let intervalValue: number | undefined;
16+
const {
17+
componentLoadDelayParameterType,
18+
componentLoadRepeatParameterType,
19+
onEventChangeDelayParameterType,
20+
componentLoadDelayInteger,
21+
componentLoadRepeatInterval,
22+
onEventChangeDelayInteger,
23+
componentLoadRepeatExpression,
24+
componentLoadDelayExpression,
25+
onEventChangeDelayExpression
26+
} = props;
27+
if (componentLoadDelayParameterType === "number") {
28+
delayValue = componentLoadDelayInteger;
29+
} else {
30+
delayValue =
31+
componentLoadDelayExpression?.status === "available" && componentLoadDelayExpression.value !== undefined
32+
? componentLoadDelayExpression.value.toNumber()
33+
: undefined;
34+
}
35+
if (componentLoadRepeatParameterType === "number") {
36+
intervalValue = componentLoadRepeatInterval;
37+
} else {
38+
intervalValue =
39+
componentLoadRepeatExpression?.status === "available" && componentLoadRepeatExpression.value !== undefined
40+
? componentLoadRepeatExpression.value.toNumber()
41+
: undefined;
42+
}
43+
if (onEventChangeDelayParameterType === "number") {
44+
delayValue = onEventChangeDelayInteger;
45+
} else {
46+
delayValue =
47+
onEventChangeDelayExpression?.status === "available" && onEventChangeDelayExpression.value !== undefined
48+
? onEventChangeDelayExpression.value.toNumber()
49+
: undefined;
50+
}
51+
return [delayValue, intervalValue];
52+
}

0 commit comments

Comments
 (0)