From d63ff560d65bea670461a8ade2dd800513f744ca Mon Sep 17 00:00:00 2001
From: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
Date: Mon, 13 Jan 2025 17:12:17 +1100
Subject: [PATCH] feat(ui): number collection generator supports floats
---
.../NumberFieldCollectionInputComponent.tsx | 122 ++++++++++++------
1 file changed, 80 insertions(+), 42 deletions(-)
diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/fields/inputs/NumberFieldCollectionInputComponent.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/fields/inputs/NumberFieldCollectionInputComponent.tsx
index 5d07ee97c3..12f617084c 100644
--- a/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/fields/inputs/NumberFieldCollectionInputComponent.tsx
+++ b/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/fields/inputs/NumberFieldCollectionInputComponent.tsx
@@ -85,6 +85,42 @@ export const NumberFieldCollectionInputComponent = memo(
store.dispatch(fieldNumberCollectionValueChanged({ nodeId, fieldName: field.name, value: newValue }));
}, [field.value, field.name, store, nodeId]);
+ const min = useMemo(() => {
+ let min = -NUMPY_RAND_MAX;
+ if (!isNil(fieldTemplate.minimum)) {
+ min = fieldTemplate.minimum;
+ }
+ if (!isNil(fieldTemplate.exclusiveMinimum)) {
+ min = fieldTemplate.exclusiveMinimum + 0.01;
+ }
+ return min;
+ }, [fieldTemplate.exclusiveMinimum, fieldTemplate.minimum]);
+
+ const max = useMemo(() => {
+ let max = NUMPY_RAND_MAX;
+ if (!isNil(fieldTemplate.maximum)) {
+ max = fieldTemplate.maximum;
+ }
+ if (!isNil(fieldTemplate.exclusiveMaximum)) {
+ max = fieldTemplate.exclusiveMaximum - 0.01;
+ }
+ return max;
+ }, [fieldTemplate.exclusiveMaximum, fieldTemplate.maximum]);
+
+ const step = useMemo(() => {
+ if (isNil(fieldTemplate.multipleOf)) {
+ return isIntegerField ? 1 : 0.1;
+ }
+ return fieldTemplate.multipleOf;
+ }, [fieldTemplate.multipleOf, isIntegerField]);
+
+ const fineStep = useMemo(() => {
+ if (isNil(fieldTemplate.multipleOf)) {
+ return isIntegerField ? 1 : 0.01;
+ }
+ return fieldTemplate.multipleOf;
+ }, [fieldTemplate.multipleOf, isIntegerField]);
+
return (
{field.value && !Array.isArray(field.value) && (
-
+
)}
{field.value && Array.isArray(field.value) && field.value.length > 0 && (
-
+
)}
);
@@ -145,18 +199,22 @@ export const NumberFieldCollectionInputComponent = memo(
NumberFieldCollectionInputComponent.displayName = 'NumberFieldCollectionInputComponent';
const GeneratorEntry = ({
+ step,
+ fineStep,
nodeId,
fieldName,
value,
- fieldTemplate,
}: {
+ min: number;
+ max: number;
+ step: number;
+ fineStep: number;
nodeId: string;
fieldName: string;
value: IntegerStartStepCountGenerator | FloatStartStepCountGenerator;
fieldTemplate: IntegerFieldCollectionInputTemplate | FloatFieldCollectionInputTemplate;
}) => {
const dispatch = useAppDispatch();
- const isIntegerField = useMemo(() => fieldTemplate.type.name === 'IntegerField', [fieldTemplate.type]);
const onChangeStart = useCallback(
(v: number) => {
const newValue = { ...value, start: v };
@@ -183,7 +241,14 @@ const GeneratorEntry = ({
Start
-
+
Count
@@ -196,7 +261,8 @@ const GeneratorEntry = ({
onChange={onChangeStep}
min={-Infinity}
max={Infinity}
- step={isIntegerField ? 1 : 0.1}
+ step={step}
+ fineStep={fineStep}
/>
@@ -204,11 +270,19 @@ const GeneratorEntry = ({
};
const ManualEntry = ({
+ min,
+ max,
+ step,
+ fineStep,
nodeId,
fieldName,
value,
fieldTemplate,
}: {
+ min: number;
+ max: number;
+ step: number;
+ fineStep: number;
nodeId: string;
fieldName: string;
value: number[];
@@ -235,42 +309,6 @@ const ManualEntry = ({
[value, dispatch, nodeId, fieldName]
);
- const min = useMemo(() => {
- let min = -NUMPY_RAND_MAX;
- if (!isNil(fieldTemplate.minimum)) {
- min = fieldTemplate.minimum;
- }
- if (!isNil(fieldTemplate.exclusiveMinimum)) {
- min = fieldTemplate.exclusiveMinimum + 0.01;
- }
- return min;
- }, [fieldTemplate.exclusiveMinimum, fieldTemplate.minimum]);
-
- const max = useMemo(() => {
- let max = NUMPY_RAND_MAX;
- if (!isNil(fieldTemplate.maximum)) {
- max = fieldTemplate.maximum;
- }
- if (!isNil(fieldTemplate.exclusiveMaximum)) {
- max = fieldTemplate.exclusiveMaximum - 0.01;
- }
- return max;
- }, [fieldTemplate.exclusiveMaximum, fieldTemplate.maximum]);
-
- const step = useMemo(() => {
- if (isNil(fieldTemplate.multipleOf)) {
- return isIntegerField ? 1 : 0.1;
- }
- return fieldTemplate.multipleOf;
- }, [fieldTemplate.multipleOf, isIntegerField]);
-
- const fineStep = useMemo(() => {
- if (isNil(fieldTemplate.multipleOf)) {
- return isIntegerField ? 1 : 0.01;
- }
- return fieldTemplate.multipleOf;
- }, [fieldTemplate.multipleOf, isIntegerField]);
-
return (