mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-04-23 03:00:31 -04:00
feat(ui): add "unsafe" version of field instance selector
This commit is contained in:
@@ -20,7 +20,7 @@ import {
|
||||
setUpscaleInitialImage,
|
||||
} from 'features/imageActions/actions';
|
||||
import { fieldImageCollectionValueChanged } from 'features/nodes/store/nodesSlice';
|
||||
import { selectFieldInputInstance, selectNodesSlice } from 'features/nodes/store/selectors';
|
||||
import { selectFieldInputInstanceSafe, selectNodesSlice } from 'features/nodes/store/selectors';
|
||||
import { type FieldIdentifier, isImageFieldCollectionInputInstance } from 'features/nodes/types/field';
|
||||
import type { ImageDTO } from 'services/api/types';
|
||||
import type { JsonObject } from 'type-fest';
|
||||
@@ -261,7 +261,7 @@ export const addImagesToNodeImageFieldCollectionDndTarget: DndTarget<
|
||||
|
||||
const { fieldIdentifier } = targetData.payload;
|
||||
|
||||
const fieldInputInstance = selectFieldInputInstance(
|
||||
const fieldInputInstance = selectFieldInputInstanceSafe(
|
||||
selectNodesSlice(getState()),
|
||||
fieldIdentifier.nodeId,
|
||||
fieldIdentifier.fieldName
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { createSelector } from '@reduxjs/toolkit';
|
||||
import { useAppSelector } from 'app/store/storeHooks';
|
||||
import { selectFieldInputInstance, selectNodesSlice } from 'features/nodes/store/selectors';
|
||||
import { selectFieldInputInstanceSafe, selectNodesSlice } from 'features/nodes/store/selectors';
|
||||
import type { FieldInputInstance } from 'features/nodes/types/field';
|
||||
import { useMemo } from 'react';
|
||||
import { assert } from 'tsafe';
|
||||
@@ -9,7 +9,7 @@ export const useInputFieldInstance = (nodeId: string, fieldName: string): FieldI
|
||||
const selector = useMemo(
|
||||
() =>
|
||||
createSelector(selectNodesSlice, (nodes) => {
|
||||
const instance = selectFieldInputInstance(nodes, nodeId, fieldName);
|
||||
const instance = selectFieldInputInstanceSafe(nodes, nodeId, fieldName);
|
||||
assert(instance, `Instance for input field ${fieldName} not found`);
|
||||
return instance;
|
||||
}),
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { createSelector } from '@reduxjs/toolkit';
|
||||
import { useAppSelector } from 'app/store/storeHooks';
|
||||
import { selectFieldInputInstance, selectNodesSlice } from 'features/nodes/store/selectors';
|
||||
import { selectFieldInputInstanceSafe, selectNodesSlice } from 'features/nodes/store/selectors';
|
||||
import { useMemo } from 'react';
|
||||
|
||||
export const useInputFieldLabel = (nodeId: string, fieldName: string): string => {
|
||||
const selector = useMemo(
|
||||
() =>
|
||||
createSelector(selectNodesSlice, (nodes) => {
|
||||
return selectFieldInputInstance(nodes, nodeId, fieldName)?.label ?? '';
|
||||
return selectFieldInputInstanceSafe(nodes, nodeId, fieldName)?.label ?? '';
|
||||
}),
|
||||
[fieldName, nodeId]
|
||||
);
|
||||
|
||||
@@ -36,9 +36,20 @@ export const selectFieldInputInstance = (
|
||||
nodesSlice: NodesState,
|
||||
nodeId: string,
|
||||
fieldName: string
|
||||
): FieldInputInstance => {
|
||||
const data = selectNodeData(nodesSlice, nodeId);
|
||||
const field = data.inputs[fieldName];
|
||||
assert(field !== undefined, `Field ${fieldName} not found in node ${nodeId}`);
|
||||
return field;
|
||||
};
|
||||
|
||||
export const selectFieldInputInstanceSafe = (
|
||||
nodesSlice: NodesState,
|
||||
nodeId: string,
|
||||
fieldName: string
|
||||
): FieldInputInstance | null => {
|
||||
const data = selectNodeData(nodesSlice, nodeId);
|
||||
return data?.inputs[fieldName] ?? null;
|
||||
return data.inputs[fieldName] ?? null;
|
||||
};
|
||||
|
||||
export const selectLastSelectedNode = (nodesSlice: NodesState) => {
|
||||
|
||||
Reference in New Issue
Block a user