From f27bfd2afa6dd401cbffbb5f90701ed0805c1406 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com>
Date: Thu, 18 Aug 2022 00:16:52 +0100
Subject: [PATCH] feat: more button increment features

---
 examples/web/react/app.tsx                         |  7 ++++++-
 .../button-increment/button-increment.tsx          | 14 ++++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/examples/web/react/app.tsx b/examples/web/react/app.tsx
index 9bf41756..0307e7f9 100644
--- a/examples/web/react/app.tsx
+++ b/examples/web/react/app.tsx
@@ -22,7 +22,12 @@ export const App = () => {
             key="button-tobias"
             name={"Button Increment"}
             valueNode={
-                <ButtonIncrement value={200} delta={100} suffix={"Hz"} />
+                <ButtonIncrement
+                    value={200}
+                    delta={100}
+                    min={0}
+                    suffix={"Hz"}
+                />
             }
         />,
         <Pair
diff --git a/examples/web/react/components/button-increment/button-increment.tsx b/examples/web/react/components/button-increment/button-increment.tsx
index 19b49416..a4395b77 100644
--- a/examples/web/react/components/button-increment/button-increment.tsx
+++ b/examples/web/react/components/button-increment/button-increment.tsx
@@ -6,22 +6,28 @@ import "./button-increment.css";
 type ButtonIncrementProps = {
     value: number;
     delta?: number;
+    min?: number;
+    max?: number;
     prefix?: string;
     suffix?: string;
     size?: string;
     style?: string[];
     onClick?: () => void;
+    onBeforeChange?: (value: number) => boolean;
     onChange?: (value: number) => void;
 };
 
 export const ButtonIncrement: FC<ButtonIncrementProps> = ({
     value,
     delta = 1,
+    min,
+    max,
     prefix,
     suffix,
     size = "medium",
     style = ["simple", "border"],
     onClick,
+    onBeforeChange,
     onChange
 }) => {
     const [valueState, setValue] = useState(value);
@@ -31,11 +37,19 @@ export const ButtonIncrement: FC<ButtonIncrementProps> = ({
     };
     const _onMinusClick = () => {
         const valueNew = valueState - delta;
+        if (onBeforeChange) {
+            if (!onBeforeChange(valueNew)) return;
+        }
+        if (min !== undefined && valueNew < min) return;
         setValue(valueNew);
         if (onChange) onChange(valueNew);
     };
     const _onPlusClick = () => {
         const valueNew = valueState + delta;
+        if (onBeforeChange) {
+            if (!onBeforeChange(valueNew)) return;
+        }
+        if (max !== undefined && valueNew > max) return;
         setValue(valueNew);
         if (onChange) onChange(valueNew);
     };
-- 
GitLab